runDialog: Ignore expected IO errors while enumerating $PATH

$PATH might contain non-existent or non-directory entries. Ignore
those error cases.

https://bugzilla.gnome.org/show_bug.cgi?id=696064
This commit is contained in:
Rui Matos 2013-03-18 15:53:11 +01:00
parent 5001bd8810
commit 1cc726593e

View File

@ -161,16 +161,22 @@ const RunDialog = new Lang.Class({
let paths = GLib.getenv('PATH').split(':'); let paths = GLib.getenv('PATH').split(':');
paths.push(GLib.get_home_dir()); paths.push(GLib.get_home_dir());
let someResults = paths.map(function(path) { let someResults = paths.map(function(path) {
let results = [];
try {
let file = Gio.File.new_for_path(path); let file = Gio.File.new_for_path(path);
let fileEnum = file.enumerate_children('standard::name', Gio.FileQueryInfoFlags.NONE, null); let fileEnum = file.enumerate_children('standard::name', Gio.FileQueryInfoFlags.NONE, null);
let info; let info;
let results = [];
while ((info = fileEnum.next_file(null))) { while ((info = fileEnum.next_file(null))) {
let name = info.get_name(); let name = info.get_name();
if (name.slice(0, text.length) == text) if (name.slice(0, text.length) == text)
results.push(name); results.push(name);
} }
} catch (e if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND) &&
!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_DIRECTORY))) {
log(e);
} finally {
return results; return results;
}
}); });
let results = someResults.reduce(function(a, b) { let results = someResults.reduce(function(a, b) {
return a.concat(b); return a.concat(b);