From 8fd716f2ca100d7fa15c51d112a9e02139572d84 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Mon, 16 Aug 2010 11:08:24 +0100
Subject: [PATCH] Extend IORules system to permit aircraft dirs.

---
 Nasal/IOrules |  1 +
 Nasal/io.nas  | 25 ++++++++++++++++++++-----
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/Nasal/IOrules b/Nasal/IOrules
index 61e902507..1c0face2a 100644
--- a/Nasal/IOrules
+++ b/Nasal/IOrules
@@ -27,6 +27,7 @@
 
 READ ALLOW $FG_ROOT/*
 READ ALLOW $FG_HOME/*
+READ ALLOW $FG_AIRCRAFT/*
 
 WRITE ALLOW /tmp/*.xml
 WRITE ALLOW $FG_HOME/*.sav
diff --git a/Nasal/io.nas b/Nasal/io.nas
index cea2f75f9..41d5d7fc9 100644
--- a/Nasal/io.nas
+++ b/Nasal/io.nas
@@ -235,11 +235,26 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
             var pattern = f[2];
             foreach (var p; subvec(f, 3))
                 pattern ~= " " ~ p;
-            if (substr(pattern, 0, 9) == "$FG_ROOT/")
-                pattern = root ~ "/" ~ substr(pattern, 9);
-            elsif (substr(pattern, 0, 9) == "$FG_HOME/")
-                pattern = home ~ "/" ~ substr(pattern, 9);
-            append(f[0] == "READ" ? read_rules : write_rules, [pattern, f[1] == "ALLOW"]);
+            var rules = f[0] == "READ" ? read_rules : write_rules;
+            var allow = (f[1] == "ALLOW");
+            
+            if (substr(pattern, 0, 13) == "$FG_AIRCRAFT/") {
+                var p = substr(pattern, 13);
+                var sim = props.globals.getNode("/sim");
+                foreach (var c; sim.getChildren("fg-aircraft")) {
+                    pattern = c.getValue() ~ "/" ~ p;
+                    append(rules, [pattern, allow]);
+                    printlog("info", "IORules: appending ", pattern);
+                }        
+            } else {
+                if (substr(pattern, 0, 9) == "$FG_ROOT/")
+                    pattern = root ~ "/" ~ substr(pattern, 9);
+                elsif (substr(pattern, 0, 9) == "$FG_HOME/")
+                    pattern = home ~ "/" ~ substr(pattern, 9);
+                
+                append(rules, [pattern, allow]);
+                printlog("info", "IORules: appending ", pattern);
+            }
         }
         close(file);
         return path;