Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 280453 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/rse/services/files/DefaultFileServiceCodePageConverter.java (-36 / +23 lines)
Lines 75-101 Link Here
75
					bufInputStream.read(buffer, 0, fileLength);
75
					bufInputStream.read(buffer, 0, fileLength);
76
					bufInputStream.close();
76
					bufInputStream.close();
77
					inputStream.close();
77
					inputStream.close();
78
					
79
					ByteBuffer rmtBuf = ByteBuffer.wrap(buffer, 0, fileLength);
80
						
81
					// convert from the remote encoding
82
					CharBuffer decodedBuf = null;
83
					decodedBuf = rmtDecoder.decode(rmtBuf);
84
					// for conversion to the local encoding
85
					Charset charset = Charset.forName(localEncoding);
86
					CharsetEncoder encoder = charset.newEncoder();
87
					byte[] localBuffer = null;
88
					// convert to the specified local encoding
89
					ByteBuffer lclBuf = encoder.encode(decodedBuf);
90
					localBuffer = lclBuf.array();
91
92
					// use the limit rather than the array length to avoid unwanted nulls
93
					outStream = new FileOutputStream(file);
78
					outStream = new FileOutputStream(file);
94
					outStream.write(localBuffer, 0, lclBuf.limit());
79
					convertBuffer(buffer, rmtDecoder, fileLength, localEncoding, outStream);
95
				}
80
				}
96
				else { // read and write sections of file at a time
81
				else { // read and write sections of file at a time
97
					int inOffset = 0;
82
					int inOffset = 0;
98
					int outOffset = 0;
99
					
83
					
100
					File altFile = new File(file.getAbsolutePath() + "~"); //$NON-NLS-1$
84
					File altFile = new File(file.getAbsolutePath() + "~"); //$NON-NLS-1$
101
					outStream = new FileOutputStream(altFile); // using alternate file because we're writing while reading
85
					outStream = new FileOutputStream(altFile); // using alternate file because we're writing while reading
Lines 104-131 Link Here
104
						if (inOffset +  MAX_READ > fileLength){
88
						if (inOffset +  MAX_READ > fileLength){
105
							readSize = fileLength - inOffset;
89
							readSize = fileLength - inOffset;
106
						}
90
						}
107
						
108
						byte[] buffer = new byte[readSize];
91
						byte[] buffer = new byte[readSize];
109
						inputStream.read(buffer, 0, readSize);
92
						inputStream.read(buffer, 0, readSize);
110
						inOffset += readSize;
93
						inOffset += readSize;
111
						ByteBuffer rmtBuf = ByteBuffer.wrap(buffer, 0, readSize);		
94
						convertBuffer(buffer, rmtDecoder, readSize, localEncoding, outStream);
112
						
113
						// convert from the remote encoding
114
						CharBuffer decodedBuf = null;
115
						decodedBuf = rmtDecoder.decode(rmtBuf);
116
117
						// for conversion to the local encoding
118
						Charset charset = Charset.forName(localEncoding);
119
						CharsetEncoder encoder = charset.newEncoder();
120
						byte[] localBuffer = null;
121
						// convert to the specified local encoding
122
						ByteBuffer lclBuf = encoder.encode(decodedBuf);
123
						localBuffer = lclBuf.array();
124
											
125
						// use the limit rather than the array length to avoid unwanted nulls
126
						int writeSize = lclBuf.limit();
127
						outStream.write(localBuffer, 0, writeSize);
128
						outOffset += writeSize;
129
					}
95
					}
130
					inputStream.close();	
96
					inputStream.close();	
131
					outStream.close();
97
					outStream.close();
Lines 151-156 Link Here
151
			}
117
			}
152
		}
118
		}
153
	}
119
	}
120
	
121
	private void convertBuffer(byte[] buffer, CharsetDecoder rmtDecoder, int readSize, String localEncoding, FileOutputStream outStream) throws Exception{
122
		ByteBuffer rmtBuf = ByteBuffer.wrap(buffer, 0, readSize);		
123
		
124
		// convert from the remote encoding
125
		CharBuffer decodedBuf = null;
126
		decodedBuf = rmtDecoder.decode(rmtBuf);
127
128
		// for conversion to the local encoding
129
		Charset charset = Charset.forName(localEncoding);
130
		CharsetEncoder encoder = charset.newEncoder();
131
		byte[] localBuffer = null;
132
		
133
		// convert to the specified local encoding
134
		ByteBuffer lclBuf = encoder.encode(decodedBuf);
135
		localBuffer = lclBuf.array();
136
							
137
		// use the limit rather than the array length to avoid unwanted nulls
138
		int writeSize = lclBuf.limit();
139
		outStream.write(localBuffer, 0, writeSize);
140
	}
154
141
155
	public boolean isServerEncodingSupported(String remoteEncoding,
142
	public boolean isServerEncodingSupported(String remoteEncoding,
156
			IFileService fs) {
143
			IFileService fs) {

Return to bug 280453