load_rc: avoid NS_ERROR_FILE_TARGET_DOES_NOT_EXIST in symlink test
authorJohn Foerch <jjfoerch@earthlink.net>
Tue, 16 Apr 2013 02:22:42 +0000 (15 22:22 -0400)
committerJohn Foerch <jjfoerch@earthlink.net>
Tue, 16 Apr 2013 02:27:08 +0000 (15 22:27 -0400)
Previously, if there was no rc, the symlink test on the rc path would
throw NS_ERROR_FILE_TARGET_DOES_NOT_EXIST.  This patch introduces a catch
for that error.

file_symlink_p: new util.  takes an nsIFile and returns the value of
file.isSymlink(), but also catches the error and returns false if the file
does not exist.  Note that this cannot be tested with file.exists(),
because that method automatically resolves symlinks.

modules/rc.js
modules/utils.js

index 28f0519..0eae25d 100644 (file)
@@ -20,7 +20,7 @@ function load_rc () {
         return;
     path = make_file(rcfile);
     if (! path.exists()) {
-        if (path.isSymlink())
+        if (file_symlink_p(path))
             dumpln("w: broken symlink, \""+rcfile+"\"");
         else if (pref_has_user_value("conkeror.rcfile"))
             dumpln("w: preference conkeror.rcfile is set to "+
index ceea810..c6228dc 100644 (file)
@@ -54,6 +54,24 @@ function make_file_from_chrome (url) {
     return make_file(file.path);
 }
 
+
+/**
+ * file_symlink_p takes an nsIFile and returns the value of
+ * file.isSymlink(), but also catches the error and returns false if the
+ * file does not exist.  Note that this cannot be tested with
+ * file.exists(), because that method automatically resolves symlinks.
+ */
+function file_symlink_p (file) {
+    try {
+        return file.isSymlink();
+    } catch (e if (e instanceof Ci.nsIException) &&
+             e.result == Cr.NS_ERROR_FILE_TARGET_DOES_NOT_EXIST)
+    {
+        return false;
+    }
+}
+
+
 function get_document_content_disposition (document_o) {
     var content_disposition = null;
     try {