package net.i2p.installer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintStream; /** * <p>This class is used by the installer in Windows to process the <code>wrapper.config</code> file. It * <ul> * <li>rewrites the applicable wrapper config options to point to <code>%APPDATA%\I2P</code></li> * <li>corrects the paths, rewriting <code>/</code> to <code>\</code></li> * </ul> * <p> * Usage: <code>FixWinPaths [WrapperConfigFile]</code> * @since 0.9.5 */ public class FixWinPaths{ public static void main(String args[]) { if(args.length != 1) { System.err.println("Usage: FixWinPaths [wrapper.conf]\r\n"); System.exit(1); } // This is only intended for Windows systems if(!System.getProperty("os.name").startsWith("Win")) { return; } replace(args[0]); } private static void replace(String file) { // Shouldn't be true if (!file.contains("wrapper.conf")) return; String wConf = file; String wConfTemp = wConf + ".tmp"; BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(wConf), "UTF-8")); bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wConfTemp), "UTF-8")); String line; while ((line = br.readLine()) != null) { if (line.startsWith("wrapper.logfile=")) line = "wrapper.logfile=%appdata%\\i2p\\wrapper.log"; else if (line.startsWith("#wrapper.java.pidfile=")) line = "#wrapper.java.pidfile=%appdata%\\i2p\\routerjvm.pid"; else if (line.startsWith("#wrapper.pidfile=")) line = "#wrapper.pidfile=%appdata%\\i2p\\i2p.pid"; if (line.contains("\\i2p/")) line = line.replace("\\i2p/", "\\i2p\\"); if (line.contains("lib/")) line = line.replace("lib/", "lib\\"); if (line.contains("\\/")) line = line.replace("\\/", "\\"); if (line.contains("logs/log-router")) line = line.replace("logs/log-router", "logs\\log-router"); bw.write(line); bw.newLine(); } } catch (IOException e) { return; } finally { try { if(br != null) br.close(); } catch (IOException e) { // } try { if(bw != null) bw.close(); } catch (IOException e) { // } } boolean successful = false; File oldFile = new File(wConf); File newFile = new File(wConfTemp); // Once changes have been made, delete the original wrapper.conf successful = oldFile.delete(); if (successful) { // ...and rename temp file's name to wrapper.conf successful = newFile.renameTo(oldFile); if (!successful) { System.err.println("ERROR: Problem processing " + wConf); System.exit(1); } } } }