crda: allow loading of regulatory.bin from /lib/crda in addition to /usr/lib/crda
authorHelmut Schaa <helmut.schaa@googlemail.com>
Tue, 24 Feb 2009 14:31:50 +0000 (15:31 +0100)
committerLuis R. Rodriguez <lrodriguez@atheros.com>
Tue, 24 Feb 2009 19:42:16 +0000 (11:42 -0800)
As crda is typically installed in /sbin it might be worth to install
regulatory.bin into /lib/crda instead of /usr/lib/crda. Hence, extend
crda to try both paths for loading the database.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
crda.c

diff --git a/crda.c b/crda.c
index f2c471f..8e7db65 100644 (file)
--- a/crda.c
+++ b/crda.c
@@ -143,7 +143,7 @@ nla_put_failure:
 
 int main(int argc, char **argv)
 {
-       int fd;
+       int fd = -1;
        struct stat stat;
        __u8 *db;
        struct regdb_file_header *header;
@@ -162,7 +162,12 @@ int main(int argc, char **argv)
        struct nlattr *nl_reg_rules;
        int num_rules;
 
-       const char regdb[] = "/usr/lib/crda/regulatory.bin";
+       const char *regdb_paths[] = {
+               "/usr/lib/crda/regulatory.bin",
+               "/lib/crda/regulatory.bin",
+               NULL
+       };
+       const char **regdb = regdb_paths;
 
        if (argc != 1) {
                fprintf(stderr, "Usage: %s\n", argv[0]);
@@ -183,7 +188,12 @@ int main(int argc, char **argv)
 
        memcpy(alpha2, env_country, 2);
 
-       fd = open(regdb, O_RDONLY);
+       while (*regdb != NULL) {
+               fd = open(*regdb, O_RDONLY);
+               if (fd >= 0)
+                       break;
+               regdb++;
+       }
        if (fd < 0) {
                perror("failed to open db file");
                return -ENOENT;