The title's are all blank for the default bookmarks for me: the "description" is just part of the name.
On Thursday 22 November 2007 07:55, you wrote: > Author: nextgens > Date: 2007-11-22 07:55:28 +0000 (Thu, 22 Nov 2007) > New Revision: 15915 > > Modified: > trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java > trunk/freenet/src/freenet/config/FilePersistentConfig.java > trunk/freenet/src/freenet/l10n/L10n.java > trunk/freenet/src/freenet/node/Node.java > trunk/freenet/src/freenet/node/OpennetManager.java > trunk/freenet/src/freenet/node/PeerManager.java > trunk/freenet/src/freenet/node/Persister.java > trunk/freenet/src/freenet/node/fcp/ClientGet.java > trunk/freenet/src/freenet/node/fcp/FCPServer.java > trunk/freenet/src/freenet/node/updater/RevocationChecker.java > trunk/freenet/src/freenet/pluginmanager/PluginManager.java > trunk/freenet/src/freenet/support/FileLoggerHook.java > trunk/freenet/src/freenet/support/SimpleFieldSet.java > trunk/freenet/src/freenet/support/io/FileUtil.java > Log: > * Replace most calls to File.renameTo by FileUtil.renameTo > * Restore the l10n overrides from a backup file if it exists > * Restore bookmarks from a backup if it exists > > It appears to work... but I didn't test it enough to be sure. Make backups before updating ;) > > Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -19,6 +19,8 @@ > import freenet.support.StringArray; > import freenet.support.URLEncodedFormatException; > > +import freenet.support.io.Closer; > +import freenet.support.io.FileUtil; > import java.io.File; > import java.io.FileWriter; > import java.io.IOException; > @@ -32,6 +34,7 @@ > public static final BookmarkCategory PROTECTED_CATEGORY = new BookmarkCategory("/protected"); > private final HashMap bookmarks = new HashMap(); > private final File bookmarksFile = new File("bookmarks.dat").getAbsoluteFile(); > + private final File backupBookmarksFile = new File(bookmarksFile.getParentFile(), bookmarksFile.getName()+".bak"); > private boolean isSavingBookmarks = false; > > public BookmarkManager(NodeClientCore n, SimpleFieldSet oldConfig) { > @@ -89,14 +92,26 @@ > storeBookmarks(); > } > > - if (bookmarksFile.exists() && bookmarksFile.canRead() && bookmarksFile.length() > 0) { > - Logger.normal(this, "Attempting to read the bookmark file from " + bookmarksFile.toString()); > - SimpleFieldSet sfs = SimpleFieldSet.readFrom(bookmarksFile, false, true); > - readBookmarks(MAIN_CATEGORY, sfs); > - } > + // Read the backup file if necessary > + if(!bookmarksFile.exists() || bookmarksFile.length() == 0) > + throw new IOException(); > + Logger.normal(this, "Attempting to read the bookmark file from " + bookmarksFile.toString()); > + SimpleFieldSet sfs = SimpleFieldSet.readFrom(bookmarksFile, false, true); > + readBookmarks(MAIN_CATEGORY, sfs); > } catch (MalformedURLException mue) { > } catch (IOException ioe) { > Logger.error(this, "Error reading the bookmark file (" + bookmarksFile.toString() + "):" + ioe.getMessage(), ioe); > + > + try { > + if (backupBookmarksFile.exists() && backupBookmarksFile.canRead() && backupBookmarksFile.length() > 0) { > + Logger.normal(this, "Attempting to read the backup bookmark file from " + backupBookmarksFile.toString()); > + SimpleFieldSet sfs = SimpleFieldSet.readFrom(backupBookmarksFile, false, true); > + readBookmarks(MAIN_CATEGORY, sfs); > + } else > + Logger.error(this, "We couldn't find the backup either! - "+FileUtil.getCanonicalFile(backupBookmarksFile)); > + } catch (IOException e) { > + Logger.error(this, "Error reading the backup bookmark file !" + e.getMessage(), e); > + } > } > } > > @@ -351,21 +366,16 @@ > } > FileWriter fw = null; > try { > - File tmp = File.createTempFile("bookmark", ".bak", bookmarksFile.getParentFile()); > - fw = new FileWriter(tmp); > + fw = new FileWriter(backupBookmarksFile); > sfs.writeTo(fw); > - if (!tmp.renameTo(bookmarksFile)) { > - Logger.error(this, "Unable to rename " + tmp.toString() + " to " + bookmarksFile.toString()); > + > + if (!FileUtil.renameTo(backupBookmarksFile, bookmarksFile)) { > + Logger.error(this, "Unable to rename " + backupBookmarksFile.toString() + " to " + bookmarksFile.toString()); > } > } catch (IOException ioe) { > Logger.error(this, "An error has occured saving the bookmark file :" + ioe.getMessage(), ioe); > } finally { > - try { > - if (fw != null) { > - fw.close(); > - } > - } catch (IOException e) { > - } > + Closer.close(fw); > > synchronized (bookmarks) { > isSavingBookmarks = false; > > Modified: trunk/freenet/src/freenet/config/FilePersistentConfig.java > =================================================================== > --- trunk/freenet/src/freenet/config/FilePersistentConfig.java > 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/config/FilePersistentConfig.java > 2007-11-22 07:55:28 UTC (rev 15915) > @@ -15,6 +15,7 @@ > > import freenet.support.Logger; > import freenet.support.SimpleFieldSet; > +import freenet.support.io.FileUtil; > import freenet.support.io.LineReadingInputStream; > > /** > @@ -146,19 +147,7 @@ > fos.close(); > throw e; > } > - if(!tempFilename.renameTo(filename)) { > - if(!filename.delete()) { > - Logger.error(this, "Could not delete old config > file "+filename); > - System.err.println("Could not delete old config > file "+filename+" - we need to delete it in order to replace it with the new config file "+tempFilename); > - } > - if(!tempFilename.renameTo(filename)) { > - Logger.error(this, "Could not move new config > file "+tempFilename+" over old "+filename); > - System.err.println("Could not move new config > file "+tempFilename+" over old "+filename); > - } else { > - System.err.println("Written "+tempFilename+" > and moved to "+filename); > - } > - } else { > - System.err.println("Written "+filename); > - } > + > + FileUtil.renameTo(tempFilename, filename); > } > } > > Modified: trunk/freenet/src/freenet/l10n/L10n.java > =================================================================== > --- trunk/freenet/src/freenet/l10n/L10n.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/l10n/L10n.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -3,7 +3,6 @@ > * http://www.gnu.org/ for further details of the GPL. */ > package freenet.l10n; > > -import java.io.BufferedOutputStream; > import java.io.File; > import java.io.FileOutputStream; > import java.io.IOException; > @@ -15,6 +14,8 @@ > import freenet.support.HTMLNode; > import freenet.support.Logger; > import freenet.support.SimpleFieldSet; > +import freenet.support.io.Closer; > +import freenet.support.io.FileUtil; > > /** > * This class provides a trivial internationalization framework to a Freenet node. > @@ -50,11 +51,18 @@ > File tmpFile = new File(L10n.PREFIX + selected + > L10n.OVERRIDE_SUFFIX); > > try { > - if(tmpFile.exists() && tmpFile.canRead()) { > + if(tmpFile.exists() && tmpFile.canRead() && > tmpFile.length() > 0) { > Logger.normal(this, "Override file detected : > let's try to load it"); > translationOverride = > SimpleFieldSet.readFrom(tmpFile, false, false); > - } else > + } else { > + // try to restore a backup > + File backup = new File(tmpFile.getParentFile(), tmpFile.getName()+".bak"); > + if(backup.exists() && backup.length() > 0) { > + Logger.normal(this, "Override-backup file detected : let's try to load it"); > + translationOverride = SimpleFieldSet.readFrom(backup, false, false); > + } > translationOverride = null; > + } > > } catch (IOException e) { > translationOverride = null; > @@ -125,32 +133,22 @@ > > private static void _saveTranslationFile() { > FileOutputStream fos = null; > - BufferedOutputStream bos = null; > File finalFile = new File(L10n.PREFIX + > L10n.getSelectedLanguage() + L10n.OVERRIDE_SUFFIX); > > try { > // We don't set deleteOnExit on it : if the save > operation fails, we want a backup > - File tempFile = new File(finalFile.getPath() + "-" + System.currentTimeMillis() + ".tmp"); > + File tempFile = new File(finalFile.getParentFile(), finalFile.getName()+".bak"); > Logger.minor("L10n", "The temporary filename is : " + > tempFile); > > fos = new FileOutputStream(tempFile); > - bos = new BufferedOutputStream(fos); > + L10n.translationOverride.writeTo(fos); > > - > bos.write(L10n.translationOverride.toOrderedString().getBytes("UTF-8")); > - bos.flush(); > - > - > - tempFile.renameTo(finalFile); > - tempFile.delete(); > - > + FileUtil.renameTo(tempFile, finalFile); > Logger.normal("L10n", "Override file saved > successfully!"); > } catch (IOException e) { > Logger.error("L10n", "Error while saving the > translation override: "+ e.getMessage(), e); > } finally { > - try { > - if(bos != null) bos.close(); > - if(fos != null) fos.close(); > - } catch (IOException e) {} > + Closer.close(fos); > } > } > > > Modified: trunk/freenet/src/freenet/node/Node.java > =================================================================== > --- trunk/freenet/src/freenet/node/Node.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/Node.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -108,6 +108,8 @@ > import freenet.support.api.LongCallback; > import freenet.support.api.ShortCallback; > import freenet.support.api.StringCallback; > +import freenet.support.io.Closer; > +import freenet.support.io.FileUtil; > import freenet.support.transport.ip.HostnameSyntaxException; > > /** > @@ -479,20 +481,9 @@ > BufferedWriter bw = new BufferedWriter(osr); > fs.writeTo(bw); > bw.close(); > - if(!backup.renameTo(orig)) { > - orig.delete(); > - if(!backup.renameTo(orig)) { > - Logger.error(this, "Could not rename > new node file "+backup+" to "+orig); > - } > - } > + FileUtil.renameTo(backup, orig); > } catch (IOException e) { > - if(fos != null) { > - try { > - fos.close(); > - } catch (IOException e1) { > - Logger.error(this, "Cannot close > "+backup+": "+e1, e1); > - } > - } > + Closer.close(fos); > } > } > > > Modified: trunk/freenet/src/freenet/node/OpennetManager.java > =================================================================== > --- trunk/freenet/src/freenet/node/OpennetManager.java 2007-11-21 > 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-11-22 > 07:55:28 UTC (rev 15915) > @@ -32,6 +32,8 @@ > import freenet.support.SimpleFieldSet; > import freenet.support.SizeUtil; > import freenet.support.io.ByteArrayRandomAccessThing; > +import freenet.support.io.Closer; > +import freenet.support.io.FileUtil; > import freenet.support.transport.ip.HostnameSyntaxException; > > /** > @@ -152,21 +154,10 @@ > BufferedWriter bw = new BufferedWriter(osr); > fs.writeTo(bw); > bw.close(); > - if(!backup.renameTo(orig)) { > - orig.delete(); > - if(!backup.renameTo(orig)) { > - Logger.error(this, "Could not rename > new node file "+backup+" to "+orig); > - } > - } > + FileUtil.renameTo(backup, orig); > } catch (IOException e) { > - if(fos != null) { > - try { > - fos.close(); > - } catch (IOException e1) { > - Logger.error(this, "Cannot close > "+backup+": "+e1, e1); > - } > - } > - } > + Closer.close(fos); > + } > } > > private void readFile(File filename) throws IOException { > > Modified: trunk/freenet/src/freenet/node/PeerManager.java > =================================================================== > --- trunk/freenet/src/freenet/node/PeerManager.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/PeerManager.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -34,6 +34,7 @@ > import freenet.support.Logger; > import freenet.support.ShortBuffer; > import freenet.support.SimpleFieldSet; > +import freenet.support.io.FileUtil; > > /** > * @author amphibian > @@ -886,13 +887,7 @@ > return; // don't overwrite old file! > } > File fnam = new File(filename); > - if (!new File(f).renameTo(fnam)) { > - fnam.delete(); > - if (!new File(f).renameTo(fnam)) { > - Logger.error(this, "Could not rename " + f + " to " > - + filename + " writing peers"); > - } > - } > + FileUtil.renameTo(new File(f), fnam); > } > } > > > Modified: trunk/freenet/src/freenet/node/Persister.java > =================================================================== > --- trunk/freenet/src/freenet/node/Persister.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/Persister.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -12,6 +12,7 @@ > import freenet.support.Logger; > import freenet.support.OOMHandler; > import freenet.support.SimpleFieldSet; > +import freenet.support.io.FileUtil; > > class Persister implements Runnable { > > @@ -84,21 +85,8 @@ > Logger.error(this, "Caught while closing: "+e, > e); > return; > } > - // Try an atomic rename > - if(!persistTemp.renameTo(persistTarget)) { > - // Not supported on some systems (Windows) > - if(!persistTarget.delete()) { > - if(persistTarget.exists()) { > - Logger.error(this, "Could not > delete "+persistTarget+" - check permissions"); > - } > - } > - if(!persistTemp.renameTo(persistTarget)) { > - Logger.error(this, "Could not rename > "+persistTemp+" to "+persistTarget+ > - (persistTarget.exists() > ? " (target exists)" : "")+ > - (persistTemp.exists() ? > " (source exists)" : "")+ > - " - check permissions"); > - } > - } > + > + FileUtil.renameTo(persistTemp, persistTarget); > } catch (FileNotFoundException e) { > Logger.error(this, "Could not store throttle data to > disk: "+e, e); > return; > > Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java > =================================================================== > --- trunk/freenet/src/freenet/node/fcp/ClientGet.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/fcp/ClientGet.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -27,6 +27,7 @@ > import freenet.support.api.Bucket; > import freenet.support.io.CannotCreateFromFieldSetException; > import freenet.support.io.FileBucket; > +import freenet.support.io.FileUtil; > import freenet.support.io.NullBucket; > import freenet.support.io.SerializableToFieldSetBucketUtil; > > @@ -399,7 +400,7 @@ > // Write to temp file, then rename over filename > FileOutputStream fos = null; > boolean closed = false; > - if(!tempFile.renameTo(targetFile)) { > + if(!FileUtil.renameTo(tempFile, targetFile)) { > postFetchProtocolErrorMessage = new ProtocolErrorMessage(ProtocolErrorMessage.COULD_NOT_RENAME_FILE, false, null, identifier, global); > // Don't delete temp file, user might > want it. > } > > Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java > =================================================================== > --- trunk/freenet/src/freenet/node/fcp/FCPServer.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/fcp/FCPServer.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -45,6 +45,8 @@ > import freenet.support.api.IntCallback; > import freenet.support.api.LongCallback; > import freenet.support.api.StringCallback; > +import freenet.support.io.Closer; > +import freenet.support.io.FileUtil; > > /** > * FCP server process. > @@ -576,28 +578,32 @@ > try { > synchronized(persistenceSync) { > toFree = > core.persistentTempBucketFactory.grabBucketsToFree(); > + > + File compressedTemp = new File(persistentDownloadsTempFile+".gz"); > + File compressedFinal = new File(persistentDownloadsFile.toString()+".gz"); > + FileOutputStream fos = null; > + BufferedOutputStream bos = null; > + GZIPOutputStream gos = null; > + OutputStreamWriter osw = null; > + BufferedWriter w = null; > try { > - File compressedTemp = new > File(persistentDownloadsTempFile+".gz"); > - File compressedFinal = new File(persistentDownloadsFile.toString()+".gz"); > - FileOutputStream fos = new > FileOutputStream(compressedTemp); > - BufferedOutputStream bos = new > BufferedOutputStream(fos); > - GZIPOutputStream gos = new > GZIPOutputStream(bos); > - OutputStreamWriter osw = new > OutputStreamWriter(gos, "UTF-8"); > - BufferedWriter w = new > BufferedWriter(osw); > + fos = new > FileOutputStream(compressedTemp); > + bos = new BufferedOutputStream(fos); > + gos = new GZIPOutputStream(bos); > + osw = new OutputStreamWriter(gos, > "UTF-8"); > + w = new BufferedWriter(osw); > > w.write(Integer.toString(persistentRequests.length)+ '\n'); > for(int > i=0;i<persistentRequests.length;i++) > - persistentRequests[i].write(w); > - w.close(); > - > if(!compressedTemp.renameTo(compressedFinal)) { > - if(logMINOR) Logger.minor(this, > "Rename failed"); > - compressedFinal.delete(); > - > if(!compressedTemp.renameTo(compressedFinal)) { > - Logger.error(this, > "Could not rename persisted requests temp file "+persistentDownloadsTempFile+".gz to "+persistentDownloadsFile); > - } > - } > + persistentRequests[i].write(w); > > } catch (IOException e) { > Logger.error(this, "Cannot write > persistent requests to disk: "+e); > + Closer.close(w); > + Closer.close(osw); > + Closer.close(gos); > + Closer.close(bos); > + Closer.close(fos); > } > + FileUtil.renameTo(compressedTemp, compressedTemp); > } > if(logMINOR) Logger.minor(this, "Stored persistent > requests"); > } finally { > > Modified: trunk/freenet/src/freenet/node/updater/RevocationChecker.java > =================================================================== > --- trunk/freenet/src/freenet/node/updater/RevocationChecker.java > 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/node/updater/RevocationChecker.java > 2007-11-22 07:55:28 UTC (rev 15915) > @@ -15,6 +15,7 @@ > import freenet.node.RequestStarter; > import freenet.support.Logger; > import freenet.support.io.FileBucket; > +import freenet.support.io.FileUtil; > > /** > * Fetches the revocation key. Each time it starts, it will try to fetch it until it has 3 DNFs. If it ever finds it, it will > @@ -167,13 +168,7 @@ > Logger.error(this, "No temporary binary blob file > moving it: may not be able to propagate revocation, bug???"); > return; > } > - if(!tmpBlobFile.renameTo(blobFile)) { > - blobFile.delete(); > - if(!tmpBlobFile.renameTo(blobFile)) { > - Logger.error(this, "Not able to rename binary > blob for revocation fetcher: "+tmpBlobFile+" -> "+blobFile+" - may not be able to tell other peers about this revocation"); > - System.err.println("Not able to rename binary > blob for revocation fetcher: "+tmpBlobFile+" -> "+blobFile+" - may not be able to tell other peers about this revocation"); > - } > - } > + FileUtil.renameTo(tmpBlobFile, blobFile); > } > > public void onFailure(FetchException e, ClientGetter state) { > > Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java > =================================================================== > --- trunk/freenet/src/freenet/pluginmanager/PluginManager.java > 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java > 2007-11-22 07:55:28 UTC (rev 15915) > @@ -35,6 +35,7 @@ > import freenet.support.api.HTTPRequest; > import freenet.support.api.StringArrCallback; > import freenet.support.io.Closer; > +import freenet.support.io.FileUtil; > > public class PluginManager { > > @@ -525,7 +526,7 @@ > Closer.close(pluginInputStream); > } > > - if (!tempPluginFile.renameTo(pluginFile)) { > + if (!FileUtil.renameTo(tempPluginFile, pluginFile)) { > Logger.error(this, "could not rename temp file > to plugin file"); > throw new PluginNotFoundException("could not > rename temp file to plugin file"); > } > > Modified: trunk/freenet/src/freenet/support/FileLoggerHook.java > =================================================================== > --- trunk/freenet/src/freenet/support/FileLoggerHook.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/support/FileLoggerHook.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -1,7 +1,6 @@ > package freenet.support; > > import java.io.BufferedOutputStream; > -import java.io.ByteArrayOutputStream; > import java.io.DataInputStream; > import java.io.File; > import java.io.FileInputStream; > @@ -10,7 +9,6 @@ > import java.io.OutputStream; > import java.io.OutputStreamWriter; > import java.io.PrintStream; > -import java.io.PrintWriter; > import java.net.InetAddress; > import java.text.DateFormat; > import java.text.SimpleDateFormat; > @@ -27,6 +25,7 @@ > import java.util.zip.GZIPOutputStream; > > import freenet.node.Version; > +import freenet.support.io.FileUtil; > > /** > * Converted the old StandardLogger to Ian's loggerhook interface. > @@ -300,8 +299,7 @@ > > "Closing alt on change caught " + e); > } > if(previousFile > != null) { > - > previousFile.delete(); > - > latestFile.renameTo(previousFile); > + FileUtil.renameTo(latestFile, previousFile); > > latestFile.delete(); > } else { > > latestFile.delete(); > @@ -505,8 +503,7 @@ > java.util.Arrays.sort(files); > long lastStartTime = -1; > File oldFile = null; > - previousFile.delete(); > - latestFile.renameTo(previousFile); > + FileUtil.renameTo(latestFile, previousFile); > boolean logMINOR = Logger.shouldLog(Logger.MINOR, this); > for(int i=0;i<files.length;i++) { > File f = files[i]; > > Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java > =================================================================== > --- trunk/freenet/src/freenet/support/SimpleFieldSet.java 2007-11-21 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/support/SimpleFieldSet.java 2007-11-22 07:55:28 UTC (rev 15915) > @@ -18,7 +18,12 @@ > import java.util.Map; > > import freenet.node.FSParseException; > +import freenet.support.io.Closer; > import freenet.support.io.LineReader; > +import java.io.BufferedOutputStream; > +import java.io.BufferedWriter; > +import java.io.OutputStream; > +import java.io.OutputStreamWriter; > > /** > * @author amphibian > @@ -671,17 +676,40 @@ > SimpleFieldSet fs = new SimpleFieldSet(br, > allowMultiple, shortLived); > return fs; > } finally { > - try { > - if(br != null) br.close(); > - if(isr != null) isr.close(); > - if(bis != null) bis.close(); > - } catch (IOException e) {} > - } > + Closer.close(br); > + Closer.close(isr); > + Closer.close(bis); > + } > } > > public static SimpleFieldSet readFrom(File f, boolean allowMultiple, boolean shortLived) throws IOException { > return readFrom(new FileInputStream(f), allowMultiple, > shortLived); > } > + > + public void writeTo(OutputStream os) { > + BufferedOutputStream bos = null; > + OutputStreamWriter osw = null; > + BufferedWriter bw = null; > + > + try { > + bos = new BufferedOutputStream(os); > + try { > + osw = new OutputStreamWriter(bos, "UTF-8"); > + } catch (UnsupportedEncodingException e) { > + Logger.error(SimpleFieldSet.class, "Impossible: " + e, e); > + os.close(); > + return; > + } > + bw = new BufferedWriter(osw); > + writeTo(bw); > + } catch (IOException ioe) { > + Logger.error("SimpleFieldSet", "An exception has occured while saving the SFS :"+ioe.getMessage(), ioe); > + }finally { > + Closer.close(bw); > + Closer.close(osw); > + Closer.close(bos); > + } > + } > > public int getInt(String key, int def) { > String s = get(key); > > Modified: trunk/freenet/src/freenet/support/io/FileUtil.java > =================================================================== > --- trunk/freenet/src/freenet/support/io/FileUtil.java 2007-11-21 > 23:43:52 UTC (rev 15914) > +++ trunk/freenet/src/freenet/support/io/FileUtil.java 2007-11-22 > 07:55:28 UTC (rev 15915) > @@ -4,7 +4,6 @@ > package freenet.support.io; > > import java.io.BufferedInputStream; > -import java.io.BufferedOutputStream; > import java.io.DataInputStream; > import java.io.EOFException; > import java.io.File; > @@ -137,13 +136,35 @@ > if(fos != null) fos.close(); > } > > - if(file.renameTo(target)) > + if(FileUtil.renameTo(file, target)) > return true; > else { > file.delete(); > return false; > } > } > + > + public static boolean renameTo(File orig, File dest) { > + // Try an atomic rename > + // Shall we prevent symlink-race-conditions here ? > + > + if (!orig.renameTo(dest)) { > + // Not supported on some systems (Windows) > + if (!dest.delete()) { > + if (dest.exists()) { > + Logger.error("FileUtil", "Could not delete " + dest + " - check permissions"); > + } > + } > + if (!orig.renameTo(dest)) { > + Logger.error("FileUtil", "Could not rename " + orig + " to " + dest + > + (dest.exists() ? " (target exists)" : "") + > + (orig.exists() ? " (source exists)" : "") + > + " - check permissions"); > + return false; > + } > + } > + return true; > + } > > public static String sanitize(String s) { > StringBuffer sb = new StringBuffer(s.length()); > > _______________________________________________ > cvs mailing list > cvs at freenetproject.org > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs > > -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20071128/c96bd93b/attachment.pgp>