diff options
author | Ryan Lortie <desrt@desrt.ca> | 2011-05-05 15:45:25 +0200 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2011-05-05 15:45:25 +0200 |
commit | 62e6a751886e1030fa0d4d062fde009c67a6a544 (patch) | |
tree | 820cdb65bcedf40e1fd15cab7a7a535e94380e69 /bin | |
parent | da7229b0b2c3a4aec392a042fd231bea7aaecfc0 (diff) | |
download | dconf-62e6a751886e1030fa0d4d062fde009c67a6a544.tar.gz |
dconf update: support lockdown
Diffstat (limited to 'bin')
-rw-r--r-- | bin/dconf-update.vala | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/bin/dconf-update.vala b/bin/dconf-update.vala index a30ce4b..0eaf728 100644 --- a/bin/dconf-update.vala +++ b/bin/dconf-update.vala @@ -41,6 +41,38 @@ unowned Gvdb.Item get_parent (Gvdb.HashTable table, string name) { return parent; } +Gvdb.HashTable? read_locks_directory (string dirname) throws GLib.Error { + var dir = Dir.open (dirname); + + if (dir == null) { + return null; + } + + var table = new Gvdb.HashTable (); + unowned string? name; + + while ((name = dir.read_name ()) != null) { + var filename = Path.build_filename (dirname, name); + Posix.Stat buf; + + // only 'normal' files + if (Posix.stat (filename, out buf) < 0 || !Posix.S_ISREG (buf.st_mode)) { + continue; + } + + string contents; + FileUtils.get_contents (filename, out contents, null); + + foreach (var line in contents.split ("\n")) { + if (line.has_prefix ("/")) { + table.insert (line); + } + } + } + + return table; +} + Gvdb.HashTable read_directory (string dirname) throws GLib.Error { var table = new Gvdb.HashTable (); unowned string? name; @@ -101,6 +133,13 @@ Gvdb.HashTable read_directory (string dirname) throws GLib.Error { } } + var locks = read_locks_directory (dirname + "/locks"); + + if (locks != null) { + unowned Gvdb.Item item = table.insert (".locks"); + item.set_hash_table (locks); + } + return table; } |