Re: [tcljava-dev] PATCH: Fix for file copy command
Brought to you by:
mdejong
From: Shawn B. <sh...@qc...> - 2002-04-12 19:51:44
|
That's fine. The code that was there had no chance of working! One of our testers came across the copy problem while trying to write a Tcl script to copy a file. Mo DeJong wrote: >On 27 Mar 2002 07:12:25 -0500 >Shawn Boyce <sh...@qc...> wrote: > >>The file copy command does not work. e.g. >>% file copy a b >>error copying: null >> >>Attached is the patch for FileCmd.java >> > >Now that you mention it, I don't even see why the file data is being treated as >encoded text here. How about this patch instead? It copies the data as binary >while also including your fix for the array bounds. > >cheers >Mo > >2002-04-12 Shawn Boyce <sh...@qc...> > > * src/jacl/tcl/lang/FileCmd.java (copyRenameOneFile): > Treat data copied via 'file copy' as binary. Fix > array bound bug that was causing the copy command > to fail. > >Index: src/jacl/tcl/lang/FileCmd.java >=================================================================== >RCS file: /cvsroot/tcljava/tcljava/src/jacl/tcl/lang/FileCmd.java,v >retrieving revision 1.6 >diff -u -r1.6 FileCmd.java >--- src/jacl/tcl/lang/FileCmd.java 12 Apr 2002 18:13:37 -0000 1.6 >+++ src/jacl/tcl/lang/FileCmd.java 12 Apr 2002 19:18:05 -0000 >@@ -1161,24 +1164,21 @@ > // Perform the copy procedure. > > try { >- // Read source to "cbuf" char array one line at a time. >- // For each line, Write cbuf to target. >- >- BufferedReader reader = >- new BufferedReader(new FileReader(sourceFileObj)); >- BufferedWriter writer = >- new BufferedWriter(new FileWriter(targetFileObj)); >- char cbuf[] = new char[256]; >- int currentIndex = 0; >- int numChars = reader.read(cbuf, 0, 256); >- while (numChars != -1) { >- writer.write(cbuf, currentIndex, numChars); >- currentIndex += 256; >- numChars = reader.read(cbuf, currentIndex, 256); >- } >- reader.close(); >- writer.close(); >- } catch (Exception e) { >+ BufferedInputStream bin = new BufferedInputStream( >+ new FileInputStream(sourceFileObj)); >+ BufferedOutputStream bout = new BufferedOutputStream( >+ new FileOutputStream(targetFileObj)); >+ >+ final int bsize = 1024; >+ byte[] buff = new byte[bsize]; >+ int numChars = bin.read(buff, 0, bsize); >+ while (numChars != -1) { >+ bout.write(buff, 0, numChars); >+ numChars = bin.read(buff, 0, bsize); >+ } >+ bin.close(); >+ bout.close(); >+ } catch (IOException e) { > throw new TclException(interp, "error copying: " + e.getMessage()); > } > } > >_______________________________________________ >tcljava-dev mailing list >tcl...@li... >https://lists.sourceforge.net/lists/listinfo/tcljava-dev > > -- Shawn Boyce QCOM, Inc. Quality Software is Our Business http://www.qcominc.com |