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>