diff --git a/sqlcsv b/sqlcsv index 7744200..a1e832c 100755 --- a/sqlcsv +++ b/sqlcsv @@ -77,6 +77,25 @@ public class sqlcsv { static final String USER_CONFIG = USER_CONFDIR + "/" + DEFAULT_CONFIG, SYSTEM_CONFIG = SYSTEM_CONFDIR + "/" + DEFAULT_CONFIG; + // ------------------------------------------------------------------------ + public static final File getCanonical(File file) { + try { + return file.getCanonicalFile(); + } catch (IOException e) { + return file.getAbsoluteFile(); + } + } + + private static final File[] ROOTS = File.listRoots(); + + public static final boolean isRoot(File file) { + if (file == null) return false; + for (File root : ROOTS) { + if (root.equals(file)) return true; + } + return false; + } + // ------------------------------------------------------------------------ public static class ResultSetHelper { public static final int CLOBBUFFERSIZE = 2048; @@ -1151,20 +1170,31 @@ public class sqlcsv { log.setLevel(Level.parse(loglevel.toUpperCase())); } - // Charger les propriétés + // Charger les propriétés... + // essayer depuis le répertoire courant et les répertoires parents jusqu'à $HOME + if (config == null) { + String userHome = System.getProperty("user.home"); + if (userHome != null && userHome.length() == 0) userHome = null; + File dir = getCanonical(new File(".")); + File homedir = null; + if (userHome != null) homedir = getCanonical(new File(userHome)); + while (true) { + File file = new File(dir, DEFAULT_CONFIG); + if (file.exists()) { + config = file.getPath(); + break; + } + if ((homedir != null && dir.equals(homedir)) || isRoot(dir)) break; + dir = dir.getParentFile(); + if (dir == null) break; + } + } + // puis dans le répertoire de configuration utilisateur + if (config == null && new File(USER_CONFIG).exists()) config = USER_CONFIG; + // puis dans le répertoire de configuration système + if (config == null && new File(SYSTEM_CONFIG).exists()) config = SYSTEM_CONFIG; + Properties props = null; - if (config == null && new File(DEFAULT_CONFIG).exists()) { - // essayer depuis le répertoire courant - config = DEFAULT_CONFIG; - } - if (config == null && new File(USER_CONFIG).exists()) { - // puis dans le répertoire de configuration utilisateur - config = USER_CONFIG; - } - if (config == null && new File(SYSTEM_CONFIG).exists()) { - // puis dans le répertoire de configuration système - config = SYSTEM_CONFIG; - } if (config != null) { log.config("Chargement des propriétés de " + config); props = new Properties(); @@ -1187,7 +1217,11 @@ public class sqlcsv { } String jdbcUrl = null; - if (connid == null && props != null) { + if (connid != null && connid.startsWith("jdbc:")) { + jdbcUrl = connid; + connid = null; + } + if (jdbcUrl == null && connid == null && props != null) { // Essayer de deviner connid en parcourant les propriétés de props @SuppressWarnings("unchecked") Enumeration en = (Enumeration)props.propertyNames(); @@ -1206,7 +1240,7 @@ public class sqlcsv { connid = null; } } - if (connid != null) { + if (jdbcUrl == null && connid != null) { if (props != null) { String jdbcUrlKey = connid + ".url"; if (props.containsKey(jdbcUrlKey)) jdbcUrl = props.getProperty(jdbcUrlKey);