PatchSet 4739 Date: 2004/05/17 15:01:00 Author: dalibor Branch: HEAD Tag: (none) Log: Resynced with GNU Classpath: java.nio
2004-05-17 Dalibor Topic <[EMAIL PROTECTED]> * libraries/javalib/java/nio/ByteBuffer.java, libraries/javalib/java/nio/CharBuffer.java, libraries/javalib/java/nio/DirectByteBufferImpl.java, libraries/javalib/java/nio/DoubleBuffer.java, libraries/javalib/java/nio/FloatBuffer.java, libraries/javalib/java/nio/IntBuffer.java, libraries/javalib/java/nio/LongBuffer.java, libraries/javalib/java/nio/MappedByteBufferImpl.java, libraries/javalib/java/nio/ShortBuffer.java, libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java, libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java, libraries/javalib/java/nio/charset/IllegalCharsetNameException.java, libraries/javalib/java/nio/charset/MalformedInputException.java, libraries/javalib/java/nio/charset/spi/CharsetProvider.java: Resynced with GNU Classpath. 2004-04-23 Michael Koch <[EMAIL PROTECTED]> * java/nio/charset/IllegalCharsetNameException.java (charsetName): Made private. (IllegalCharsetNameException): Added @param tag to javadoc. (getCharsetName): Added @return tag to javadoc. * java/nio/charset/MalformedInputException.java (MalformedInputException): Added @param tag to javadoc. (getInputLength): Revised method description, added @return tag. (getMessage): Added @return tag. 2004-04-08 Michael Koch <[EMAIL PROTECTED]> * java/nio/charset/spi/CharsetProvider.java: Reworked coding style and javadocs. 2004-04-29 Michael Koch <[EMAIL PROTECTED]> * java/nio/ByteBuffer.java, java/nio/CharBuffer.java, java/nio/DoubleBuffer.java, java/nio/FloatBuffer.java, java/nio/IntBuffer.java, java/nio/LongBuffer.java, java/nio/ShortBuffer.java: (compareTo): Fixed bogus implementation in all buffer classes. 2004-04-22 Michael Koch <[EMAIL PROTECTED]> * java/nio/DirectByteBufferImpl.java (shiftDown): Overwrite shiftDown method from ByteBuffer. * java/nio/MappedByteBufferImpl.java (compact): Use optimized shiftDown() method. 2004-04-21 Michael Koch <[EMAIL PROTECTED]> * java/nio/channels/spi/AbstractSelectableChannel.java (register): Check ops for validity. 2004-04-23 Michael Koch <[EMAIL PROTECTED]> * java/nio/channels/spi/AbstractInterruptibleChannel.java (end): Throw AsynchronousCloseException if stream is close. Members: ChangeLog:1.2313->1.2314 libraries/javalib/java/nio/ByteBuffer.java:1.9->1.10 libraries/javalib/java/nio/CharBuffer.java:1.8->1.9 libraries/javalib/java/nio/DirectByteBufferImpl.java:1.6->1.7 libraries/javalib/java/nio/DoubleBuffer.java:1.7->1.8 libraries/javalib/java/nio/FloatBuffer.java:1.7->1.8 libraries/javalib/java/nio/IntBuffer.java:1.7->1.8 libraries/javalib/java/nio/LongBuffer.java:1.7->1.8 libraries/javalib/java/nio/MappedByteBufferImpl.java:1.5->1.6 libraries/javalib/java/nio/ShortBuffer.java:1.7->1.8 libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java:1.5->1.6 libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java:1.9->1.10 libraries/javalib/java/nio/charset/IllegalCharsetNameException.java:1.2->1.3 libraries/javalib/java/nio/charset/MalformedInputException.java:1.1->1.2 libraries/javalib/java/nio/charset/spi/CharsetProvider.java:1.1->1.2 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.2313 kaffe/ChangeLog:1.2314 --- kaffe/ChangeLog:1.2313 Mon May 17 14:36:15 2004 +++ kaffe/ChangeLog Mon May 17 15:01:00 2004 @@ -1,5 +1,67 @@ 2004-05-17 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/javalib/java/nio/ByteBuffer.java, + libraries/javalib/java/nio/CharBuffer.java, + libraries/javalib/java/nio/DirectByteBufferImpl.java, + libraries/javalib/java/nio/DoubleBuffer.java, + libraries/javalib/java/nio/FloatBuffer.java, + libraries/javalib/java/nio/IntBuffer.java, + libraries/javalib/java/nio/LongBuffer.java, + libraries/javalib/java/nio/MappedByteBufferImpl.java, + libraries/javalib/java/nio/ShortBuffer.java, + libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java, + libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java, + libraries/javalib/java/nio/charset/IllegalCharsetNameException.java, + libraries/javalib/java/nio/charset/MalformedInputException.java, + libraries/javalib/java/nio/charset/spi/CharsetProvider.java: + Resynced with GNU Classpath. + + 2004-04-23 Michael Koch <[EMAIL PROTECTED]> + + * java/nio/charset/IllegalCharsetNameException.java + (charsetName): Made private. + (IllegalCharsetNameException): Added @param tag to javadoc. + (getCharsetName): Added @return tag to javadoc. + * java/nio/charset/MalformedInputException.java + (MalformedInputException): Added @param tag to javadoc. + (getInputLength): Revised method description, added @return tag. + (getMessage): Added @return tag. + + 2004-04-08 Michael Koch <[EMAIL PROTECTED]> + + * java/nio/charset/spi/CharsetProvider.java: + Reworked coding style and javadocs. + + 2004-04-29 Michael Koch <[EMAIL PROTECTED]> + + * java/nio/ByteBuffer.java, + java/nio/CharBuffer.java, + java/nio/DoubleBuffer.java, + java/nio/FloatBuffer.java, + java/nio/IntBuffer.java, + java/nio/LongBuffer.java, + java/nio/ShortBuffer.java: + (compareTo): Fixed bogus implementation in all buffer classes. + + 2004-04-22 Michael Koch <[EMAIL PROTECTED]> + + * java/nio/DirectByteBufferImpl.java + (shiftDown): Overwrite shiftDown method from ByteBuffer. + * java/nio/MappedByteBufferImpl.java + (compact): Use optimized shiftDown() method. + + 2004-04-21 Michael Koch <[EMAIL PROTECTED]> + + * java/nio/channels/spi/AbstractSelectableChannel.java + (register): Check ops for validity. + + 2004-04-23 Michael Koch <[EMAIL PROTECTED]> + + * java/nio/channels/spi/AbstractInterruptibleChannel.java + (end): Throw AsynchronousCloseException if stream is close. + +2004-05-17 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/javalib/java/rmi/MarshalledObject.java, libraries/javalib/java/rmi/Naming.java, libraries/javalib/java/rmi/RemoteException.java, Index: kaffe/libraries/javalib/java/nio/ByteBuffer.java diff -u kaffe/libraries/javalib/java/nio/ByteBuffer.java:1.9 kaffe/libraries/javalib/java/nio/ByteBuffer.java:1.10 --- kaffe/libraries/javalib/java/nio/ByteBuffer.java:1.9 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/ByteBuffer.java Mon May 17 15:01:02 2004 @@ -293,32 +293,27 @@ */ public int compareTo (Object obj) { - ByteBuffer a = (ByteBuffer) obj; + ByteBuffer other = (ByteBuffer) obj; - if (a.remaining () != remaining ()) - return 1; - - if (! hasArray () || - ! a.hasArray ()) + int num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - return 1; + byte a = get(pos_this++); + byte b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + 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; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/CharBuffer.java diff -u kaffe/libraries/javalib/java/nio/CharBuffer.java:1.8 kaffe/libraries/javalib/java/nio/CharBuffer.java:1.9 --- kaffe/libraries/javalib/java/nio/CharBuffer.java:1.8 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/CharBuffer.java Mon May 17 15:01:02 2004 @@ -1,5 +1,5 @@ /* CharBuffer.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -310,32 +310,27 @@ */ public int compareTo (Object obj) { - CharBuffer a = (CharBuffer) obj; + CharBuffer other = (CharBuffer) 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 num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - int t = (int) (get (i1) - a.get (i2)); - - if (t != 0) - { - return (int) t; - } + char a = get(pos_this++); + char b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + return 1; } - - return 0; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/DirectByteBufferImpl.java diff -u kaffe/libraries/javalib/java/nio/DirectByteBufferImpl.java:1.6 kaffe/libraries/javalib/java/nio/DirectByteBufferImpl.java:1.7 --- kaffe/libraries/javalib/java/nio/DirectByteBufferImpl.java:1.6 Mon Apr 12 11:40:27 2004 +++ kaffe/libraries/javalib/java/nio/DirectByteBufferImpl.java Mon May 17 15:01:02 2004 @@ -136,15 +136,20 @@ return this; } - static native void shiftDown (RawData address, int dst_offset, int src_offset, int count); + static native void shiftDown(RawData address, int dst_offset, int src_offset, int count); + void shiftDown(int dst_offset, int src_offset, int count) + { + shiftDown(address, dst_offset, src_offset, count); + } + public ByteBuffer compact () { int pos = position(); if (pos > 0) { int count = remaining(); - shiftDown(0, pos, count); + shiftDown(address, 0, pos, count); position(count); limit(capacity()); } Index: kaffe/libraries/javalib/java/nio/DoubleBuffer.java diff -u kaffe/libraries/javalib/java/nio/DoubleBuffer.java:1.7 kaffe/libraries/javalib/java/nio/DoubleBuffer.java:1.8 --- kaffe/libraries/javalib/java/nio/DoubleBuffer.java:1.7 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/DoubleBuffer.java Mon May 17 15:01:02 2004 @@ -1,5 +1,5 @@ /* DoubleBuffer.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -265,32 +265,27 @@ */ public int compareTo (Object obj) { - DoubleBuffer a = (DoubleBuffer) obj; + DoubleBuffer other = (DoubleBuffer) 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 num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - int t = (int) (get (i1) - a.get (i2)); - - if (t != 0) - { - return (int) t; - } + double a = get(pos_this++); + double b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + return 1; } - - return 0; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/FloatBuffer.java diff -u kaffe/libraries/javalib/java/nio/FloatBuffer.java:1.7 kaffe/libraries/javalib/java/nio/FloatBuffer.java:1.8 --- kaffe/libraries/javalib/java/nio/FloatBuffer.java:1.7 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/FloatBuffer.java Mon May 17 15:01:02 2004 @@ -1,5 +1,5 @@ /* FloatBuffer.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -265,32 +265,27 @@ */ public int compareTo (Object obj) { - FloatBuffer a = (FloatBuffer) obj; + FloatBuffer other = (FloatBuffer) 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 num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - int t = (int) (get (i1) - a.get (i2)); - - if (t != 0) - { - return (int) t; - } + float a = get(pos_this++); + float b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + return 1; } - - return 0; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/IntBuffer.java diff -u kaffe/libraries/javalib/java/nio/IntBuffer.java:1.7 kaffe/libraries/javalib/java/nio/IntBuffer.java:1.8 --- kaffe/libraries/javalib/java/nio/IntBuffer.java:1.7 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/IntBuffer.java Mon May 17 15:01:02 2004 @@ -1,5 +1,5 @@ /* IntBuffer.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -265,32 +265,27 @@ */ public int compareTo (Object obj) { - IntBuffer a = (IntBuffer) obj; + IntBuffer other = (IntBuffer) 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 num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - int t = (int) (get (i1) - a.get (i2)); - - if (t != 0) - { - return (int) t; - } + int a = get(pos_this++); + int b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + return 1; } - - return 0; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/LongBuffer.java diff -u kaffe/libraries/javalib/java/nio/LongBuffer.java:1.7 kaffe/libraries/javalib/java/nio/LongBuffer.java:1.8 --- kaffe/libraries/javalib/java/nio/LongBuffer.java:1.7 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/LongBuffer.java Mon May 17 15:01:02 2004 @@ -1,5 +1,5 @@ /* LongBuffer.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -265,32 +265,27 @@ */ public int compareTo (Object obj) { - LongBuffer a = (LongBuffer) obj; + LongBuffer other = (LongBuffer) 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 num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - int t = (int) (get (i1) - a.get (i2)); - - if (t != 0) - { - return (int) t; - } + long a = get(pos_this++); + long b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + return 1; } - - return 0; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/MappedByteBufferImpl.java diff -u kaffe/libraries/javalib/java/nio/MappedByteBufferImpl.java:1.5 kaffe/libraries/javalib/java/nio/MappedByteBufferImpl.java:1.6 --- kaffe/libraries/javalib/java/nio/MappedByteBufferImpl.java:1.5 Mon Apr 12 11:40:28 2004 +++ kaffe/libraries/javalib/java/nio/MappedByteBufferImpl.java Mon May 17 15:01:02 2004 @@ -121,7 +121,8 @@ if (pos > 0) { int count = remaining(); - shiftDown(0, pos, count); + // Call shiftDown method optimized for direct buffers. + DirectByteBufferImpl.shiftDown(address, 0, pos, count); position(count); limit(capacity()); } Index: kaffe/libraries/javalib/java/nio/ShortBuffer.java diff -u kaffe/libraries/javalib/java/nio/ShortBuffer.java:1.7 kaffe/libraries/javalib/java/nio/ShortBuffer.java:1.8 --- kaffe/libraries/javalib/java/nio/ShortBuffer.java:1.7 Mon Feb 23 22:56:37 2004 +++ kaffe/libraries/javalib/java/nio/ShortBuffer.java Mon May 17 15:01:02 2004 @@ -1,5 +1,5 @@ /* ShortBuffer.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -265,32 +265,27 @@ */ public int compareTo (Object obj) { - ShortBuffer a = (ShortBuffer) obj; + ShortBuffer other = (ShortBuffer) 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 num = Math.min(remaining(), other.remaining()); + int pos_this = position(); + int pos_other = other.position(); + + for (int count = 0; count < num; count++) { - int t = (int) (get (i1) - a.get (i2)); - - if (t != 0) - { - return (int) t; - } + short a = get(pos_this++); + short b = other.get(pos_other++); + + if (a == b) + continue; + + if (a < b) + return -1; + + return 1; } - - return 0; + + return remaining() - other.remaining(); } /** Index: kaffe/libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java diff -u kaffe/libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java:1.5 kaffe/libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java:1.6 --- kaffe/libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java:1.5 Mon Apr 12 11:40:31 2004 +++ kaffe/libraries/javalib/java/nio/channels/spi/AbstractInterruptibleChannel.java Mon May 17 15:01:03 2004 @@ -1,5 +1,5 @@ -/* AbstractInterruptibleChannel.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* AbstractInterruptibleChannel.java -- + Copyright (C) 2002, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -95,6 +95,9 @@ protected final void end(boolean completed) throws AsynchronousCloseException { + // FIXME: check more here. + + if (closed) throw new AsynchronousCloseException(); } /** Index: kaffe/libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java diff -u kaffe/libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java:1.9 kaffe/libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java:1.10 --- kaffe/libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java:1.9 Mon Apr 12 11:40:32 2004 +++ kaffe/libraries/javalib/java/nio/channels/spi/AbstractSelectableChannel.java Mon May 17 15:01:03 2004 @@ -216,6 +216,9 @@ if (! isOpen()) throw new ClosedChannelException(); + if ((ops & ~validOps()) != 0) + throw new IllegalArgumentException(); + SelectionKey key = null; AbstractSelector selector = (AbstractSelector) selin; Index: kaffe/libraries/javalib/java/nio/charset/IllegalCharsetNameException.java diff -u kaffe/libraries/javalib/java/nio/charset/IllegalCharsetNameException.java:1.2 kaffe/libraries/javalib/java/nio/charset/IllegalCharsetNameException.java:1.3 --- kaffe/libraries/javalib/java/nio/charset/IllegalCharsetNameException.java:1.2 Wed May 14 23:20:09 2003 +++ kaffe/libraries/javalib/java/nio/charset/IllegalCharsetNameException.java Mon May 17 15:01:03 2004 @@ -48,10 +48,12 @@ */ private static final long serialVersionUID = 1457525358470002989L; - String charsetName; + private String charsetName; /** * Creates the exception + * + * @param charsetName name of the illegal charset */ public IllegalCharsetNameException (String charsetName) { @@ -61,6 +63,8 @@ /** * Retrieves the illegal charset name + * + * @return the illegal charset name */ public String getCharsetName () { Index: kaffe/libraries/javalib/java/nio/charset/MalformedInputException.java diff -u kaffe/libraries/javalib/java/nio/charset/MalformedInputException.java:1.1 kaffe/libraries/javalib/java/nio/charset/MalformedInputException.java:1.2 --- kaffe/libraries/javalib/java/nio/charset/MalformedInputException.java:1.1 Thu Nov 28 13:39:26 2002 +++ kaffe/libraries/javalib/java/nio/charset/MalformedInputException.java Mon May 17 15:01:03 2004 @@ -46,6 +46,8 @@ /** * Creates the exception + * + * @param inputLength the position of malformed input in the input stream */ public MalformedInputException (int inputLength) { @@ -54,7 +56,9 @@ } /** - * Retrieves the illegal charset name + * Retrieves the position of the malformed input in the input stream. + * + * @return the position */ public int getInputLength () { @@ -63,6 +67,8 @@ /** * Returns the detail message string of this throwable + * + * @return the message */ public String getMessage () { Index: kaffe/libraries/javalib/java/nio/charset/spi/CharsetProvider.java diff -u kaffe/libraries/javalib/java/nio/charset/spi/CharsetProvider.java:1.1 kaffe/libraries/javalib/java/nio/charset/spi/CharsetProvider.java:1.2 --- kaffe/libraries/javalib/java/nio/charset/spi/CharsetProvider.java:1.1 Thu Nov 28 13:39:26 2002 +++ kaffe/libraries/javalib/java/nio/charset/spi/CharsetProvider.java Mon May 17 15:01:03 2004 @@ -40,6 +40,7 @@ import java.nio.charset.Charset; import java.util.Iterator; + /** * This class allows an implementor to provide additional character sets. The * subclass must have a nullary constructor, and be attached to charset @@ -81,6 +82,8 @@ /** * Returns the named charset, by canonical name or alias. + * + * @param name the name of the character * * @return the charset, or null if not supported */ _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe