chiark / gitweb /
fix segfault caused by wrong pointer used in dbg()
[elogind.git] / udev / udev_rules.h
1 /*
2  * Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
3  * Copyright (C) 2004-2008 Kay Sievers <kay.sievers@vrfy.org>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef UDEV_RULES_H
20 #define UDEV_RULES_H
21
22 #include "udev.h"
23
24 #define PAIRS_MAX               5
25
26 enum key_operation {
27         KEY_OP_UNSET,
28         KEY_OP_MATCH,
29         KEY_OP_NOMATCH,
30         KEY_OP_ADD,
31         KEY_OP_ASSIGN,
32         KEY_OP_ASSIGN_FINAL,
33 };
34
35 struct key {
36         enum key_operation operation;
37         size_t val_off;
38 };
39
40 struct key_pair {
41         struct key key;
42         size_t key_name_off;
43 };
44
45 struct key_pairs {
46         int count;
47         struct key_pair keys[PAIRS_MAX];
48 };
49
50 enum import_type {
51         IMPORT_UNSET,
52         IMPORT_PROGRAM,
53         IMPORT_FILE,
54         IMPORT_PARENT,
55 };
56
57 enum escape_type {
58         ESCAPE_UNSET,
59         ESCAPE_NONE,
60         ESCAPE_REPLACE,
61 };
62
63 struct udev_rule {
64         struct key action;
65         struct key devpath;
66         struct key kernel;
67         struct key subsystem;
68         struct key driver;
69         struct key_pairs attr;
70
71         struct key kernels;
72         struct key subsystems;
73         struct key drivers;
74         struct key_pairs attrs;
75
76         struct key_pairs env;
77         struct key program;
78         struct key result;
79         struct key import;
80         enum import_type import_type;
81         struct key test;
82         mode_t test_mode_mask;
83         struct key run;
84         struct key wait_for;
85         struct key label;
86         struct key goto_label;
87         size_t goto_rule_off;
88
89         struct key name;
90         struct key symlink;
91         struct key symlink_match;
92         struct key owner;
93         struct key group;
94         struct key mode;
95         enum escape_type string_escape;
96
97         unsigned int link_priority;
98         int event_timeout;
99         unsigned int partitions;
100         unsigned int last_rule:1,
101                      run_ignore_error:1,
102                      ignore_device:1,
103                      ignore_remove:1;
104
105         size_t bufsize;
106         char buf[];
107 };
108
109 struct udev_rules {
110         struct udev *udev;
111         char *buf;
112         size_t bufsize;
113         int resolve_names;
114 };
115
116 struct udev_rules_iter {
117         struct udev_rules *rules;
118         size_t current;
119 };
120
121 extern int udev_rules_init(struct udev *udev, struct udev_rules *rules, int resolve_names);
122 extern void udev_rules_cleanup(struct udev_rules *rules);
123
124 extern void udev_rules_iter_init(struct udev_rules_iter *iter, struct udev_rules *rules);
125 extern struct udev_rule *udev_rules_iter_next(struct udev_rules_iter *iter);
126 extern struct udev_rule *udev_rules_iter_goto(struct udev_rules_iter *iter, size_t rule_off);
127
128 extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev);
129 extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev);
130 extern int udev_rules_run(struct udevice *udev);
131
132 extern void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize);
133
134 #endif