This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: New classes from Classpath


And here is the actual patch.

> 2001-10-01  Mark Wielaard  <mark@klomp.org>
> 
>     * Makefile.am: Add new classes
>     (core_java_source_files): CharSequence, InheritableThreadLocal
>     (ordinary_java_source_files): Authenticator, PasswordAuthentication
>     * Makefile.in: regenerate
>     * gcj/javaprims.h: ditto
>     * java/lang/CharSequence: new class from Classpath
>     * java/lang/InheritableThreadLocal.java: ditto
>     * java/lang/String.java: implements CharSequence
>     (subSequence (int,int)): new method
>     * java/lang/SubString.java: implements CharSequence
>     (subSequence (int,int)): new method
>     remerge comments with Classpath
>     * java/lang/Thread.java Thread (Thread, ThreadGroup, Runnable, String):
>     call InheritableThreadLocal.newChildThread()
>     * java/net/Authenticator.java: new class from Classpath
>     * java/net/PasswordAuthentication.java: ditto
> 
> OK to commit?

-- 
Stuff to read:
    <http://www.toad.com/gnu/whatswrong.html>
  What's Wrong with Copy Protection, by John Gilmore
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.171
diff -u -r1.171 Makefile.am
--- Makefile.am	2001/09/29 19:16:26	1.171
+++ Makefile.am	2001/10/01 20:50:42
@@ -914,6 +914,7 @@
 java/lang/Boolean.java \
 java/lang/Byte.java \
 java/lang/Character.java \
+java/lang/CharSequence.java \
 java/lang/ClassCastException.java \
 java/lang/ClassCircularityError.java \
 java/lang/ClassFormatError.java	\
@@ -936,6 +937,7 @@
 java/lang/IllegalThreadStateException.java \
 java/lang/IncompatibleClassChangeError.java \
 java/lang/IndexOutOfBoundsException.java \
+java/lang/InheritableThreadLocal.java \
 java/lang/InstantiationError.java \
 java/lang/InstantiationException.java \
 java/lang/Integer.java \
@@ -1179,6 +1181,7 @@
 java/lang/reflect/ReflectPermission.java \
 java/math/BigDecimal.java \
 java/math/BigInteger.java \
+java/net/Authenticator.java \
 java/net/BindException.java \
 java/net/ConnectException.java \
 java/net/ContentHandler.java \
@@ -1194,6 +1197,7 @@
 java/net/MulticastSocket.java \
 java/net/NetPermission.java \
 java/net/NoRouteToHostException.java \
+java/net/PasswordAuthentication.java \
 java/net/PlainDatagramSocketImpl.java \
 java/net/PlainSocketImpl.java \
 java/net/ProtocolException.java	\
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v
retrieving revision 1.182
diff -u -r1.182 Makefile.in
--- Makefile.in	2001/09/29 19:16:26	1.182
+++ Makefile.in	2001/10/01 20:50:43
@@ -63,16 +63,13 @@
 host_triplet = @host@
 target_alias = @target_alias@
 target_triplet = @target@
-AMTAR = @AMTAR@
 AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
 AR = @AR@
 AS = @AS@
-AWK = @AWK@
 CC = @CC@
 COMPPATH = @COMPPATH@
 CXX = @CXX@
 CXXCPP = @CXXCPP@
-DEPDIR = @DEPDIR@
 DIRLTDL = @DIRLTDL@
 DIVIDESPEC = @DIVIDESPEC@
 DLLTOOL = @DLLTOOL@
@@ -89,7 +86,6 @@
 GCTESTSPEC = @GCTESTSPEC@
 HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
 INCLTDL = @INCLTDL@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 JC1GCSPEC = @JC1GCSPEC@
 LIBFFI = @LIBFFI@
 LIBGCJDEBUG = @LIBGCJDEBUG@
@@ -122,10 +118,7 @@
 ZLIBS = @ZLIBS@
 ZLIBSPEC = @ZLIBSPEC@
 ZLIBTESTSPEC = @ZLIBTESTSPEC@
-am__include = @am__include@
-am__quote = @am__quote@
 here = @here@
-install_sh = @install_sh@
 libgcj_basedir = @libgcj_basedir@
 mkinstalldirs = @mkinstalldirs@
 
@@ -652,6 +645,7 @@
 java/lang/Boolean.java \
 java/lang/Byte.java \
 java/lang/Character.java \
+java/lang/CharSequence.java \
 java/lang/ClassCastException.java \
 java/lang/ClassCircularityError.java \
 java/lang/ClassFormatError.java	\
@@ -674,6 +668,7 @@
 java/lang/IllegalThreadStateException.java \
 java/lang/IncompatibleClassChangeError.java \
 java/lang/IndexOutOfBoundsException.java \
+java/lang/InheritableThreadLocal.java \
 java/lang/InstantiationError.java \
 java/lang/InstantiationException.java \
 java/lang/Integer.java \
@@ -912,6 +907,7 @@
 java/lang/reflect/ReflectPermission.java \
 java/math/BigDecimal.java \
 java/math/BigInteger.java \
+java/net/Authenticator.java \
 java/net/BindException.java \
 java/net/ConnectException.java \
 java/net/ContentHandler.java \
@@ -927,6 +923,7 @@
 java/net/MulticastSocket.java \
 java/net/NetPermission.java \
 java/net/NoRouteToHostException.java \
+java/net/PasswordAuthentication.java \
 java/net/PlainDatagramSocketImpl.java \
 java/net/PlainSocketImpl.java \
 java/net/ProtocolException.java	\
@@ -1445,7 +1442,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 \
@@ -1776,8 +1773,9 @@
 .deps/java/lang/ArithmeticException.P \
 .deps/java/lang/ArrayIndexOutOfBoundsException.P \
 .deps/java/lang/ArrayStoreException.P .deps/java/lang/Boolean.P \
-.deps/java/lang/Byte.P .deps/java/lang/Character.P \
-.deps/java/lang/Class.P .deps/java/lang/ClassCastException.P \
+.deps/java/lang/Byte.P .deps/java/lang/CharSequence.P \
+.deps/java/lang/Character.P .deps/java/lang/Class.P \
+.deps/java/lang/ClassCastException.P \
 .deps/java/lang/ClassCircularityError.P \
 .deps/java/lang/ClassFormatError.P .deps/java/lang/ClassLoader.P \
 .deps/java/lang/ClassNotFoundException.P \
@@ -1795,6 +1793,7 @@
 .deps/java/lang/IllegalThreadStateException.P \
 .deps/java/lang/IncompatibleClassChangeError.P \
 .deps/java/lang/IndexOutOfBoundsException.P \
+.deps/java/lang/InheritableThreadLocal.P \
 .deps/java/lang/InstantiationError.P \
 .deps/java/lang/InstantiationException.P .deps/java/lang/Integer.P \
 .deps/java/lang/InternalError.P .deps/java/lang/InterruptedException.P \
@@ -1863,14 +1862,15 @@
 .deps/java/lang/w_log.P .deps/java/lang/w_pow.P \
 .deps/java/lang/w_remainder.P .deps/java/lang/w_sqrt.P \
 .deps/java/math/BigDecimal.P .deps/java/math/BigInteger.P \
-.deps/java/net/BindException.P .deps/java/net/ConnectException.P \
-.deps/java/net/ContentHandler.P .deps/java/net/ContentHandlerFactory.P \
-.deps/java/net/DatagramPacket.P .deps/java/net/DatagramSocket.P \
-.deps/java/net/DatagramSocketImpl.P .deps/java/net/FileNameMap.P \
-.deps/java/net/HttpURLConnection.P .deps/java/net/InetAddress.P \
-.deps/java/net/JarURLConnection.P \
+.deps/java/net/Authenticator.P .deps/java/net/BindException.P \
+.deps/java/net/ConnectException.P .deps/java/net/ContentHandler.P \
+.deps/java/net/ContentHandlerFactory.P .deps/java/net/DatagramPacket.P \
+.deps/java/net/DatagramSocket.P .deps/java/net/DatagramSocketImpl.P \
+.deps/java/net/FileNameMap.P .deps/java/net/HttpURLConnection.P \
+.deps/java/net/InetAddress.P .deps/java/net/JarURLConnection.P \
 .deps/java/net/MalformedURLException.P .deps/java/net/MulticastSocket.P \
 .deps/java/net/NetPermission.P .deps/java/net/NoRouteToHostException.P \
+.deps/java/net/PasswordAuthentication.P \
 .deps/java/net/PlainDatagramSocketImpl.P \
 .deps/java/net/PlainSocketImpl.P .deps/java/net/ProtocolException.P \
 .deps/java/net/ServerSocket.P .deps/java/net/Socket.P \
Index: gcj/javaprims.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gcj/javaprims.h,v
retrieving revision 1.27
diff -u -r1.27 javaprims.h
--- javaprims.h	2001/09/02 06:26:09	1.27
+++ javaprims.h	2001/10/01 20:50:43
@@ -134,6 +134,7 @@
       class Boolean;
       class Byte;
       class CPlusPlusDemangler;
+      class CharSequence;
       class Character;
       class Character$Subset;
       class Character$UnicodeBlock;
@@ -161,6 +162,7 @@
       class IllegalThreadStateException;
       class IncompatibleClassChangeError;
       class IndexOutOfBoundsException;
+      class InheritableThreadLocal;
       class InstantiationError;
       class InstantiationException;
       class Integer;
@@ -192,6 +194,7 @@
       class Short;
       class StackOverflowError;
       class String;
+      class String$CaseInsensitiveComparator;
       class StringBuffer;
       class StringIndexOutOfBoundsException;
       class System;
Index: java/lang/CharSequence.java
===================================================================
RCS file: CharSequence.java
diff -N CharSequence.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ CharSequence.java	Mon Oct  1 13:50:43 2001
@@ -0,0 +1,80 @@
+/* java.lang.CharSequence -- Anything that has an indexed sequence of chars
+   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.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.lang;
+
+/**
+ * General functions on a sequence of chars. This interface is implemented
+ * by <code>String</code>, <code>StringBuffer</code> and
+ * <code>CharBuffer</code> to give a uniform way to get chars at a certain
+ * index, the number of characters in the sequence and a subrange of the
+ * chars. Indexes start at 0 and the last index is <code>length()-1</code>.
+ * <p>
+ * Even when classes implement this interface they are not always
+ * exchangeble because they might implement their compare, equals or hash
+ * function differently. This means that in general one should not use a
+ * <code>CharSequence</code> as keys in collections since two sequences
+ * with the same chars at the same indexes with the same length might not
+ * have the same hash code, be equal or be comparable since the are
+ * represented by different classes.
+ *
+ * @author Mark Wielaard (mark@klomp.org)
+ *
+ * @since 1.4
+ */
+
+public interface CharSequence {
+
+    /**
+     * Returns the character at the given index.
+     *
+     * @exception IndexOutOfBoundsException when <code>i &lt; 0</code> or
+     * <code>i &gt; length()-1</code>.
+     */
+    char charAt(int i);
+
+    /**
+     * Returns the length of the sequence.
+     */
+    int length();
+
+    /**
+     * Returns a new <code>CharSequence</char> of the indicated range.
+     *
+     * @exception IndexOutOfBoundsException when <code>begin &lt; 0</code>,
+     *         <code>end &lt; 0</code>, <code>end &gt; length()</code> or
+     *         <code>begin &gt; end</code>
+     */
+    CharSequence subSequence(int begin, int end);
+
+    /**
+     * Returns the complete <code>CharSequence</code> as a <code>String</code>.
+     * Classes that implement this interface should return a <code>String</code>
+     * which contains only the characters in the sequence in the correct order.
+     */
+    String toString();
+}
Index: java/lang/InheritableThreadLocal.java
===================================================================
RCS file: InheritableThreadLocal.java
diff -N InheritableThreadLocal.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ InheritableThreadLocal.java	Mon Oct  1 13:50:43 2001
@@ -0,0 +1,165 @@
+/* java.lang.InheritableThreadLocal
+   Copyright (C) 2000 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.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+package java.lang;
+
+import java.util.Iterator;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+
+/**
+ * ThreadLocal whose value is inherited by child Threads.
+ * The value of the InheritableThreadLocal associated with the (parent) Thread
+ * on the moment that it creates a new (child) Thread is set as the value that
+ * is associated with the new (child) Thread.
+ * <p>
+ * It is possible to make the value associated with the child Thread a function
+ * of the value that is associated with the parent Thread by overriding the
+ * <code>childValue()</code> method.
+ *
+ * @since 1.2
+ * @author Mark Wielaard (mark@klomp.org)
+ */
+public class InheritableThreadLocal extends ThreadLocal {
+	
+	/**
+	 * Maps Threads to a Set of InheritableThreadLocals
+	 * (the heritage of that Thread).
+	 * Uses a WeakHashMap so if the Thread is garbage collected the reference
+	 * to that Set disappears.
+	 * Both <code>AddToHeritage</code> access and modify it so they have to
+	 * synchronize on the threadMap when they do.
+	 */
+	private static Map threadMap = new WeakHashMap();
+	
+	/**
+	 * Creates a new InheritableThreadLocal that has no values associated
+	 * with it yet.
+	 */
+	public InheritableThreadLocal() {
+		super();
+	}
+	
+	/**
+	 * Determines the value associated with a newly created child Thread
+	 * as a function of the value associated with the currently executing
+	 * (parent) Thread.
+	 * <p>
+	 * The default implementation just returns the parentValue.
+	 */
+	protected Object childValue(Object parentValue) {
+		return parentValue;
+	}
+	
+	/**
+	 * Adds this <code>InheritableThreadLocal</code> to the heritage of the
+	 * current Thread and returns the value of the <code>ThreadLocal</code>
+	 * for the Thread. The value will be either the last value that the
+	 * current Thread has set, or the childValue of the last value that the
+	 * parent Thread set before the current Thread was created, or the
+	 * initialValue of the <code>ThreadLocal</code>.
+	 *
+	 * @see ThreadLocal#get()
+	 */
+	public Object get() {
+		addToHeritage(); 
+		return super.get();
+	}
+	
+	/**
+	 * Adds this <code>InheritableThreadLocal</code> to the heritage of the
+	 * current Thread and sets the value of the <code>ThreadLocal</code>
+	 * for the Thread.
+	 *
+	 * @see ThreadLocal#set(Object)
+	 */
+	public void set(Object value) {
+		addToHeritage();
+		super.set(value);
+	}
+	
+	/**
+	 * Adds this <code>InheritableThreadLocal</code> to the heritage
+	 * of the current Thread.
+	 */
+	private void addToHeritage() {
+		Thread currentThread = Thread.currentThread();
+		Set heritage;
+		synchronized(threadMap) {
+			heritage = (Set)threadMap.get(currentThread);
+		}
+		// Note that we don't have to synchronize on the heritage Set
+		// since only this Thread (or the parent Thread when creating
+		// the heritage) ever modifies it.
+		if (heritage == null) {
+			heritage = new HashSet();
+			synchronized(threadMap) {
+				threadMap.put(currentThread, heritage);
+			}
+		}
+		heritage.add(this);
+	}
+	
+	/**
+	 * Generates the childValues of all <code>InheritableThreadLocal</code>s
+	 * that are in the heritage of the current Thread for the newly created
+	 * childThread.
+	 * Should be called from the contructor of java.lang.Thread.
+	 */
+	static void newChildThread(Thread childThread) {
+		// The currentThread is the parent of the new thread
+		Thread parentThread = Thread.currentThread();
+		
+		// Inherit all the InheritableThreadLocals of the parent thread
+		Set heritage;
+		synchronized(threadMap) {
+			heritage = (Set)threadMap.get(parentThread);
+		}
+		// Note that we don't have to synchronize on the heritage Set
+		// since only this Thread (or the parent Thread when creating
+		// the heritage) ever modifies it.
+		if (heritage != null) {
+			synchronized(threadMap) {
+				threadMap.put(childThread, new HashSet(heritage));
+			}
+			// And constructs all the new child values
+			// (has to be done now that we are executing in the parentThread)
+			Iterator it = heritage.iterator();
+			while (it.hasNext()) {
+				InheritableThreadLocal local =
+					(InheritableThreadLocal) it.next();
+				// Note that the parentValue cannot be null
+				// If it was it would not be in the heritage
+				Object parentValue = local.get(parentThread).getValue();
+				Object childValue = local.childValue(parentValue);
+				ThreadLocal.Value v = new ThreadLocal.Value(childValue);
+				local.set(childThread, v);
+			}
+		}
+	}
+}
Index: java/lang/String.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v
retrieving revision 1.15
diff -u -r1.15 String.java
--- String.java	2001/09/05 19:32:57	1.15
+++ String.java	2001/10/01 20:50:43
@@ -22,7 +22,7 @@
  * Status:  Complete to 1.3.
  */
 
-public final class String implements Serializable, Comparable
+public final class String implements Serializable, Comparable, CharSequence
 {
   private Object data;
   private int boffset; // Note this is a byte offset - don't use in Java code!
@@ -295,6 +295,28 @@
 	if (startsWith(str, fromIndex))
 	  return fromIndex;
       }
+  }
+
+  /**
+   * Creates a substring of this String, starting at a specified index
+   * and ending at one character before a specified index.
+   * <p>
+   * To implement <code>CharSequence</code>.
+   * Calls <code>substring(beginIndex, endIndex)</code>.
+   *
+   * @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 String
+   *
+   * @exception StringIndexOutOfBoundsException 
+   *   if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+   */
+  public CharSequence subSequence(int beginIndex, int endIndex)
+    throws IndexOutOfBoundsException
+  {
+    return substring(beginIndex, endIndex);
   }
 
   public String substring (int beginIndex)
Index: java/lang/StringBuffer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/StringBuffer.java,v
retrieving revision 1.11
diff -u -r1.11 StringBuffer.java
--- StringBuffer.java	2001/05/22 04:38:35	1.11
+++ StringBuffer.java	2001/10/01 20:50:43
@@ -1,21 +1,32 @@
-// StringBuffer.java - Growable strings.
+/* StringBuffer.java -- Growable strings
+   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
-/* Copyright (C) 1998, 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.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
 
-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.Serializable;
 
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date October 23, 1998.  
- */
-
 /* 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.
@@ -57,7 +68,7 @@
  * @author Tom Tromey
  * @see java.lang.String
  */
-public final class StringBuffer implements Serializable
+public final class StringBuffer implements Serializable, CharSequence
 {
   /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>.
    *  Uses <code>String.valueOf()</code> to convert to
@@ -198,7 +209,7 @@
    *  @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 not between 0 and length() - 1 (inclusive).
+   *             is negative or greater then length() - 1.
    */
   public synchronized char charAt (int index)
   {
@@ -652,6 +663,28 @@
     // enable sharing here.
     return new String (value, beginIndex, endIndex - beginIndex);
   }
+
+  /**
+   * Creates a substring of this StringBuffer, starting at a specified index
+   * and ending at one character before a specified index.
+   * <p>
+   * To implement <code>CharSequence</code>.
+   * Calls <code>substring(beginIndex, endIndex)</code>.
+   *
+   * @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
+   *
+   * @exception StringIndexOutOfBoundsException 
+   *   if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+   */
+  public CharSequence subSequence (int beginIndex, int endIndex) 
+  {
+    return substring(beginIndex, endIndex);
+  }
+
 
   /** Convert this <code>StringBuffer</code> to a <code>String</code>.
    *  @return the characters in this StringBuffer
Index: java/lang/Thread.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/Thread.java,v
retrieving revision 1.19
diff -u -r1.19 Thread.java
--- Thread.java	2001/08/26 11:30:09	1.19
+++ Thread.java	2001/10/01 20:50:45
@@ -258,6 +258,8 @@
     group.addThread(this);
     runnable = r;
 
+    InheritableThreadLocal.newChildThread(this);
+
     initialize_native ();
   }
 
Index: java/net/Authenticator.java
===================================================================
RCS file: Authenticator.java
diff -N Authenticator.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ Authenticator.java	Mon Oct  1 13:50:45 2001
@@ -0,0 +1,269 @@
+/* Authenticator.java -- Abstract class for obtaining authentication info
+   Copyright (C) 1998,2000 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.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+package java.net;
+
+/**
+  * Sometimes a network operation (such as hitting a password protected
+  * web site) will require authentication information in the form of a
+  * username and password.  This abstract class provides a model for 
+  * obtaining that information.
+  * <p>
+  * To make use of this feature, a programmer must create a subclass of
+  * Authenticator that knows how to obtain the necessary info.  An example
+  * would be a class that popped up a dialog box to prompt the user.  
+  * After creating an instance of that subclass, the static setDefault
+  * method of this class is called to set up that instance as the object
+  * to use on subsequent calls to obtain authorization.
+  *
+  * @since 1.2
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public abstract class Authenticator
+{
+
+/*************************************************************************/
+
+/*
+ * Class Variables
+ */
+
+/**
+  * This is the default Authenticator object to use for password requests
+  */
+private static Authenticator default_authenticator;
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * InternetAddress of the site requesting authentication
+  */
+private InetAddress addr;
+
+/**
+  * The port number of the site requesting authentication
+  */
+private int port;
+
+/**
+  * The protocol name of the site requesting authentication
+  */
+private String protocol;
+
+/**
+  * The prompt to display to the user when requesting authentication info
+  */
+private String prompt;
+
+/**
+  * The authentication scheme in use
+  */
+private String scheme;
+
+/*************************************************************************/
+
+/*
+ * Class Methods
+ */
+
+/**
+  * This method sets the default <code>Authenticator</code> object (an 
+  * instance of a
+  * subclass of <code>Authenticator</code>) to use when prompting the user for
+  * information.  Note that this method checks to see if the caller is
+  * allowed to set this value (the "setDefaultAuthenticator" permission)
+  * and throws a <code>SecurityException</code> if it is not.
+  *
+  * @param def_auth The new default <code>Authenticator</code> object to use
+  *
+  * @exception SecurityException If the caller does not have permission 
+  * to perform this operation
+  */ 
+public static void
+setDefault(Authenticator def_auth)
+{
+  SecurityManager sm = System.getSecurityManager();
+  if (sm != null)
+    sm.checkPermission(new NetPermission("setDefaultAuthenticator"));
+
+  default_authenticator = def_auth;
+} 
+
+/*************************************************************************/
+
+/**
+  * This method is called whenever a username and password for a given
+  * network operation is required.  First, a security check is made to see
+  * if the caller has the "requestPasswordAuthentication"
+  * permission.  If not, the method thows an exception.  If there is no
+  * default <code>Authenticator</code> object, the method then returns 
+  * <code>null</code>.  Otherwise, the default authenticators's instance 
+  * variables are initialized and it's <code>getPasswordAuthentication</code>
+  *  method is called to get the actual authentication information to return.
+  *
+  * @param addr The address requesting authentication
+  * @param port The port requesting authentication
+  * @param protocol The protocol requesting authentication
+  * @param prompt The prompt to display to the user when requesting 
+           authentication info
+  * @param scheme The authentication scheme in use
+  * 
+  * @return A <code>PasswordAuthentication</code> object with the user's 
+  *         authentication info.
+  *
+  * @exception SecurityException If the caller does not have permission to 
+  *         perform this operation
+  */ 
+public static PasswordAuthentication
+requestPasswordAuthentication(InetAddress addr, int port, String protocol,
+                              String prompt, String scheme) 
+{
+  SecurityManager sm = System.getSecurityManager();
+  if (sm != null)
+    sm.checkPermission(new NetPermission("requestPasswordAuthentication"));
+
+  if (default_authenticator == null)
+    return(null);
+
+  default_authenticator.addr = addr;
+  default_authenticator.port = port;
+  default_authenticator.protocol = protocol;
+  default_authenticator.prompt = prompt;
+  default_authenticator.scheme = scheme;
+
+  return(default_authenticator.getPasswordAuthentication());
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * Default, no-argument constructor for subclasses to call.
+  */
+public
+Authenticator()
+{
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * This method returns the address of the site that is requesting
+  * authentication.
+  *
+  * @return The requesting site
+  */
+protected final InetAddress
+getRequestingSite()
+{
+  return(addr);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the port of the site that is requesting 
+  * authentication.
+  *
+  * @return The requesting port
+  */
+protected final int
+getRequestingPort()
+{
+  return(port);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the requesting protocol of the operation that is
+  * requesting authentication
+  *
+  * @return The requesting protocol
+  */
+protected final String
+getRequestingProtocol()
+{
+  return(protocol);
+}
+
+/*************************************************************************/
+
+/**
+  * Returns the prompt that should be used when requesting authentication 
+  * information from the user
+  * 
+  * @return The user prompt
+  */
+protected final String
+getRequestingPrompt()
+{
+  return(prompt);
+}
+
+/*************************************************************************/
+
+/**
+  * This method returns the authentication scheme in use
+  *
+  * @return The authentication scheme
+  */
+protected final String
+getRequestingScheme()
+{
+  return(scheme);
+}
+
+/*************************************************************************/
+
+/**
+  * This method is called whenever a request for authentication is made.  It
+  * can call the other getXXX methods to determine the information relevant
+  * to this request.  Subclasses should override this method, which returns
+  * <code>null</code> by default.
+  *
+  * @return The PasswordAuthentication information
+  */
+protected PasswordAuthentication
+getPasswordAuthentication()
+{
+  return(null);
+}
+
+} // class Authenticator
+
Index: java/net/PasswordAuthentication.java
===================================================================
RCS file: PasswordAuthentication.java
diff -N PasswordAuthentication.java
--- /dev/null	Tue May  5 13:32:27 1998
+++ PasswordAuthentication.java	Mon Oct  1 13:50:45 2001
@@ -0,0 +1,104 @@
+/* PasswordAuthentication.java -- Container class for username/password pairs
+   Copyright (C) 1998,2000 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.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+package java.net;
+
+/**
+  * This class serves a container for username/password pairs.
+  *
+  * @author Aaron M. Renn (arenn@urbanophile.com)
+  */
+public final class PasswordAuthentication
+{
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+  * The username 
+  */
+private String username;
+
+/**
+  * The password
+  */
+private char[] password;
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+  * Creates a new PasswordAuthentication object from the specified username
+  * and password.
+  *
+  * @param username The username for this object
+  * @param password The password for this object
+  */
+public
+PasswordAuthentication(String username, char[] password)
+{
+  this.username = username;
+  this.password = password;
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+  * Returns the username associated with this object
+  *
+  * @return The username
+  */
+public String
+getUserName()
+{
+  return(username);
+}
+ 
+/*************************************************************************/
+
+/**
+  * Returns the password associated with this object
+  *
+  * @return The password
+  */
+public char[]
+getPassword()
+{
+  return(password);
+}
+
+} // class PasswordAuthentication
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]