package org.codehaus.mojo.deb.jdpkg.ar; import java.io.Closeable; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; /** * @author <a href="mailto:trygve.laugstol@arktekk.no">Trygve Laugstøl</a> * @version $Id$ */ public class ArUtil { public static final String LF = "\n"; public static final String AR_ARCHIVE_MAGIC = "!<arch>" + LF; public static final String AR_FILE_MAGIC = "`\n"; public static final String US_ASCII = "US-ASCII"; public static void close(Closeable closeable) { closeSilent(closeable); } public static void closeSilent(Closeable closeable) { try { if (closeable != null) { closeable.close(); } } catch (IOException e) { // ignore } } public static String convertString(byte[] bytes, int start, int count) throws UnsupportedEncodingException { String s = new String(bytes, start, count, ArUtil.US_ASCII); int index = s.indexOf(' '); if (index == -1) { return s; } s = s.substring(0, index); return s; } public static byte[] readBytes(InputStream is, long count) throws IOException { byte[] bytes = new byte[(int) count]; int start = 0; do { int read = is.read(bytes, start, (int) count); // If we're at EOF, but trying to read the first set of bytes, return null if (read == -1) { if (start > 0) { throw new EOFException(); } return null; } start += read; count -= read; } while (count > 0); return bytes; } public static void skipBytes(InputStream is, long count) throws IOException { long left = count; do { long read = is.skip(left); left -= read; } while (left > 0); } public static void copy(InputStream input, OutputStream output, int bufferSize) throws IOException { final byte[] buffer = new byte[bufferSize]; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); } } }