aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java148
1 files changed, 148 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java
new file mode 100644
index 00000000..77e1bee1
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+/**
+ * UUEncoding of an input stream placed into an outputstream.
+ * This class is meant to be a drop in replacement for
+ * sun.misc.UUEncoder, which was previously used by Ant.
+ * The uuencode algorithm code has been copied from the
+ * geronimo project.
+ **/
+
+public class UUEncoder {
+ protected static final int DEFAULT_MODE = 644;
+ private static final int MAX_CHARS_PER_LINE = 45;
+ private static final int INPUT_BUFFER_SIZE = MAX_CHARS_PER_LINE * 100;
+ private OutputStream out;
+ private String name;
+
+ /**
+ * Constructor specifying a name for the encoded buffer, begin
+ * line will be:
+ * <pre>
+ * begin 644 [NAME]
+ * </pre>
+ * @param name the name of the encoded buffer.
+ */
+ public UUEncoder(String name) {
+ this.name = name;
+ }
+
+ /**
+ * UUEncode bytes from the input stream, and write them as text characters
+ * to the output stream. This method will run until it exhausts the
+ * input stream.
+ * @param is the input stream.
+ * @param out the output stream.
+ * @throws IOException if there is an error.
+ */
+ public void encode(InputStream is, OutputStream out)
+ throws IOException {
+ this.out = out;
+ encodeBegin();
+ byte[] buffer = new byte[INPUT_BUFFER_SIZE];
+ int count;
+ while ((count = is.read(buffer, 0, buffer.length)) != -1) {
+ int pos = 0;
+ while (count > 0) {
+ int num = count > MAX_CHARS_PER_LINE
+ ? MAX_CHARS_PER_LINE
+ : count;
+ encodeLine(buffer, pos, num, out);
+ pos += num;
+ count -= num;
+ }
+ }
+ out.flush();
+ encodeEnd();
+ }
+
+ /**
+ * Encode a string to the output.
+ */
+ private void encodeString(String n) throws IOException {
+ PrintStream writer = new PrintStream(out);
+ writer.print(n);
+ writer.flush();
+ }
+
+ private void encodeBegin() throws IOException {
+ encodeString("begin " + DEFAULT_MODE + " " + name + "\n");
+ }
+
+ private void encodeEnd() throws IOException {
+ encodeString(" \nend\n");
+ }
+
+ /**
+ * Encode a single line of data (less than or equal to 45 characters).
+ *
+ * @param data The array of byte data.
+ * @param off The starting offset within the data.
+ * @param length Length of the data to encode.
+ * @param out The output stream the encoded data is written to.
+ *
+ * @exception IOException
+ */
+ private void encodeLine(
+ byte[] data, int offset, int length, OutputStream out)
+ throws IOException {
+ // write out the number of characters encoded in this line.
+ // CheckStyle:MagicNumber OFF
+ out.write((byte) ((length & 0x3F) + ' '));
+ // CheckStyle:MagicNumber ON
+ byte a;
+ byte b;
+ byte c;
+
+ for (int i = 0; i < length;) {
+ // set the padding defaults
+ b = 1;
+ c = 1;
+ // get the next 3 bytes (if we have them)
+ a = data[offset + i++];
+ if (i < length) {
+ b = data[offset + i++];
+ if (i < length) {
+ c = data[offset + i++];
+ }
+ }
+
+ // CheckStyle:MagicNumber OFF
+ byte d1 = (byte) (((a >>> 2) & 0x3F) + ' ');
+ byte d2 = (byte) ((((a << 4) & 0x30) | ((b >>> 4) & 0x0F)) + ' ');
+ byte d3 = (byte) ((((b << 2) & 0x3C) | ((c >>> 6) & 0x3)) + ' ');
+ byte d4 = (byte) ((c & 0x3F) + ' ');
+ // CheckStyle:MagicNumber ON
+
+ out.write(d1);
+ out.write(d2);
+ out.write(d3);
+ out.write(d4);
+ }
+
+ // terminate with a linefeed alone
+ out.write('\n');
+ }
+}