You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
7.4 KiB
202 lines
7.4 KiB
11 years ago
|
diff -ur j2ssh-0.2.9/src/com/sshtools/j2ssh/io/ByteArrayReader.java j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/io/ByteArrayReader.java
|
||
|
--- j2ssh-0.2.9/src/com/sshtools/j2ssh/io/ByteArrayReader.java 2007-04-28 21:02:54.000000000 +0200
|
||
|
+++ j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/io/ByteArrayReader.java 2008-01-18 19:27:38.000000000 +0100
|
||
|
@@ -118,7 +118,13 @@
|
||
|
byte[] chars = new byte[(int) len];
|
||
|
System.arraycopy(data, start + 4, chars, 0, len);
|
||
|
|
||
|
- return new String(chars);
|
||
|
+ try {
|
||
|
+ return new String(chars, "UTF-8");
|
||
|
+ }
|
||
|
+ catch(java.io.UnsupportedEncodingException e) {
|
||
|
+ // This should never happen, UTF-8 is necessarily supported.
|
||
|
+ return new String(chars);
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
@@ -163,6 +169,12 @@
|
||
|
byte[] raw = new byte[(int) len];
|
||
|
read(raw);
|
||
|
|
||
|
- return new String(raw);
|
||
|
+ try {
|
||
|
+ return new String(raw, "UTF-8");
|
||
|
+ }
|
||
|
+ catch(java.io.UnsupportedEncodingException e) {
|
||
|
+ // This should never happen, UTF-8 is necessarily supported.
|
||
|
+ return new String(raw);
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
diff -ur j2ssh-0.2.9/src/com/sshtools/j2ssh/io/ByteArrayWriter.java j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/io/ByteArrayWriter.java
|
||
|
--- j2ssh-0.2.9/src/com/sshtools/j2ssh/io/ByteArrayWriter.java 2007-04-29 10:54:48.000000000 +0200
|
||
|
+++ j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/io/ByteArrayWriter.java 2008-01-18 19:30:36.000000000 +0100
|
||
|
@@ -190,15 +190,15 @@
|
||
|
if (str == null) {
|
||
|
writeInt(0);
|
||
|
} else {
|
||
|
- /*
|
||
|
- writeInt(str.length());
|
||
|
- // don't use US-ASCII by default!
|
||
|
- write(str.getBytes());
|
||
|
- */
|
||
|
- // patch as of version 0.2.9
|
||
|
- // for UTF-8 length of string is not necessarily
|
||
|
- // equal to number of bytes
|
||
|
- byte[] strBytes = str.getBytes();
|
||
|
+ byte[] strBytes;
|
||
|
+ try {
|
||
|
+ strBytes = str.getBytes("UTF-8");
|
||
|
+ }
|
||
|
+ catch(java.io.UnsupportedEncodingException e) {
|
||
|
+ // This should never happen, UTF-8 is necessarily supported.
|
||
|
+ strBytes = str.getBytes();
|
||
|
+ }
|
||
|
+
|
||
|
writeInt(strBytes.length);
|
||
|
write(strBytes);
|
||
|
}
|
||
|
diff -ur j2ssh-0.2.9/src/com/sshtools/j2ssh/sftp/SftpFileInputStream.java j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/sftp/SftpFileInputStream.java
|
||
|
--- j2ssh-0.2.9/src/com/sshtools/j2ssh/sftp/SftpFileInputStream.java 2007-04-28 21:02:54.000000000 +0200
|
||
|
+++ j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/sftp/SftpFileInputStream.java 2008-01-18 19:26:58.000000000 +0100
|
||
|
@@ -38,7 +38,7 @@
|
||
|
*/
|
||
|
public class SftpFileInputStream extends InputStream {
|
||
|
SftpFile file;
|
||
|
- UnsignedInteger64 position = new UnsignedInteger64("0");
|
||
|
+ UnsignedInteger64 position;
|
||
|
|
||
|
/**
|
||
|
* Creates a new SftpFileInputStream object.
|
||
|
@@ -48,16 +48,47 @@
|
||
|
* @throws IOException
|
||
|
*/
|
||
|
public SftpFileInputStream(SftpFile file) throws IOException {
|
||
|
+ this(file, 0);
|
||
|
+ }
|
||
|
+
|
||
|
+ /**
|
||
|
+ * Creates a new SftpFileInputStream object and sets the file offset to the specified position.
|
||
|
+ *
|
||
|
+ * @param file
|
||
|
+ * @param position the initial file offset, must be >=0
|
||
|
+ *
|
||
|
+ * @throws IOException
|
||
|
+ */
|
||
|
+ public SftpFileInputStream(SftpFile file, long position) throws IOException {
|
||
|
if (file.getHandle() == null) {
|
||
|
throw new IOException("The file does not have a valid handle!");
|
||
|
}
|
||
|
-
|
||
|
+
|
||
|
if (file.getSFTPSubsystem() == null) {
|
||
|
- throw new IOException(
|
||
|
- "The file is not attached to an SFTP subsystem!");
|
||
|
+ throw new IOException("The file is not attached to an SFTP subsystem!");
|
||
|
}
|
||
|
-
|
||
|
+
|
||
|
this.file = file;
|
||
|
+ this.position = new UnsignedInteger64(""+position);
|
||
|
+ }
|
||
|
+
|
||
|
+ /**
|
||
|
+ * Returns the current offset within the file.
|
||
|
+ *
|
||
|
+ * @return the current offset within the file
|
||
|
+ */
|
||
|
+ public long getPosition() {
|
||
|
+ return position.longValue();
|
||
|
+ }
|
||
|
+
|
||
|
+ /**
|
||
|
+ * Sets the current file offset to the given position.
|
||
|
+ * Subsequent calls to read methods will start reading data at this position.
|
||
|
+ *
|
||
|
+ * @param position the new offset, must be >=0
|
||
|
+ */
|
||
|
+ public void setPosition(long position) {
|
||
|
+ this.position = new UnsignedInteger64(""+position);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
diff -ur j2ssh-0.2.9/src/com/sshtools/j2ssh/sftp/SftpFileOutputStream.java j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/sftp/SftpFileOutputStream.java
|
||
|
--- j2ssh-0.2.9/src/com/sshtools/j2ssh/sftp/SftpFileOutputStream.java 2007-04-28 21:02:54.000000000 +0200
|
||
|
+++ j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/sftp/SftpFileOutputStream.java 2008-01-18 19:08:55.000000000 +0100
|
||
|
@@ -38,7 +38,7 @@
|
||
|
*/
|
||
|
public class SftpFileOutputStream extends OutputStream {
|
||
|
SftpFile file;
|
||
|
- UnsignedInteger64 position = new UnsignedInteger64("0");
|
||
|
+ UnsignedInteger64 position;
|
||
|
|
||
|
/**
|
||
|
* Creates a new SftpFileOutputStream object.
|
||
|
@@ -48,6 +48,18 @@
|
||
|
* @throws IOException
|
||
|
*/
|
||
|
public SftpFileOutputStream(SftpFile file) throws IOException {
|
||
|
+ this(file, 0);
|
||
|
+ }
|
||
|
+
|
||
|
+ /**
|
||
|
+ * Creates a new SftpFileOutputStream object and sets the file offset to the specified position.
|
||
|
+ *
|
||
|
+ * @param file
|
||
|
+ * @param position the initial file offset, must be >=0
|
||
|
+ *
|
||
|
+ * @throws IOException
|
||
|
+ */
|
||
|
+ public SftpFileOutputStream(SftpFile file, long position) throws IOException {
|
||
|
if (file.getHandle() == null) {
|
||
|
throw new IOException("The file does not have a valid handle!");
|
||
|
}
|
||
|
@@ -58,6 +70,7 @@
|
||
|
}
|
||
|
|
||
|
this.file = file;
|
||
|
+ this.position = new UnsignedInteger64(""+position);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
diff -ur j2ssh-0.2.9/src/com/sshtools/j2ssh/sftp/SftpSubsystemClient.java j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/sftp/SftpSubsystemClient.java
|
||
|
--- j2ssh-0.2.9/src/com/sshtools/j2ssh/sftp/SftpSubsystemClient.java 2007-04-28 21:02:54.000000000 +0200
|
||
|
+++ j2ssh-0.2.9_patched/src/com/sshtools/j2ssh/sftp/SftpSubsystemClient.java 2008-01-21 17:48:06.000000000 +0100
|
||
|
@@ -231,16 +231,28 @@
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
+ * Creates the directory with the specified path. The default permissions for the directory are 0755 ("rwxr-xr-x").
|
||
|
*
|
||
|
+ * @param path the path to the directory to create
|
||
|
+ * @throws IOException if an error occurs
|
||
|
+ */
|
||
|
+ public synchronized void makeDirectory(String path) throws IOException {
|
||
|
+ makeDirectory(path, 0755); // default to 755 octal (493 decimal): "rwxr-xr-x"
|
||
|
+ }
|
||
|
+
|
||
|
+ /**
|
||
|
+ * Creates the directory with the specified path and file permissions.
|
||
|
*
|
||
|
- * @param path
|
||
|
- *
|
||
|
- * @throws IOException
|
||
|
+ * @param path the path to the directory to create
|
||
|
+ * @param permissions the file permissions of the new directory
|
||
|
+ * @throws IOException if an error occurs
|
||
|
*/
|
||
|
- public synchronized void makeDirectory(String path)
|
||
|
- throws IOException {
|
||
|
+ public synchronized void makeDirectory(String path, int permissions) throws IOException {
|
||
|
UnsignedInteger32 requestId = nextRequestId();
|
||
|
- SshFxpMkdir msg = new SshFxpMkdir(requestId, path, new FileAttributes());
|
||
|
+ FileAttributes attrs = new FileAttributes();
|
||
|
+ attrs.setPermissions(new UnsignedInteger32(permissions));
|
||
|
+
|
||
|
+ SshFxpMkdir msg = new SshFxpMkdir(requestId, path, attrs);
|
||
|
sendMessage(msg);
|
||
|
getOKRequestStatus(requestId);
|
||
|
}
|