X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_rules.h;h=da5ac3ea18c9a528d7517f8c663bf74f00053c88;hp=94a5d9d5fd11c3e9143229d8c30714799f678d71;hb=661a0bea80d129d5df708e36dbaed745c9d8392e;hpb=79f651f4bd2fb395a705792eb8ce551a6021bcd6 diff --git a/udev_rules.h b/udev_rules.h index 94a5d9d5f..da5ac3ea1 100644 --- a/udev_rules.h +++ b/udev_rules.h @@ -1,9 +1,6 @@ /* - * udev_rules.h - * - * Userspace devfs - * - * Copyright (C) 2003,2004 Greg Kroah-Hartman + * Copyright (C) 2003-2004 Greg Kroah-Hartman + * Copyright (C) 2004-2006 Kay Sievers * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,95 +13,119 @@ * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef UDEV_RULES_H #define UDEV_RULES_H -#include "libsysfs/sysfs/libsysfs.h" #include "udev.h" #include "list.h" - -#define KEY_KERNEL "KERNEL" -#define KEY_SUBSYSTEM "SUBSYSTEM" -#define KEY_BUS "BUS" -#define KEY_SYSFS "SYSFS" -#define KEY_ID "ID" -#define KEY_PROGRAM "PROGRAM" -#define KEY_RESULT "RESULT" -#define KEY_DRIVER "DRIVER" -#define KEY_NAME "NAME" -#define KEY_SYMLINK "SYMLINK" -#define KEY_OWNER "OWNER" -#define KEY_GROUP "GROUP" -#define KEY_MODE "MODE" -#define KEY_OPTIONS "OPTIONS" - -#define OPTION_LAST_RULE "last_rule" -#define OPTION_IGNORE_DEVICE "ignore_device" -#define OPTION_IGNORE_REMOVE "ignore_remove" -#define OPTION_PARTITIONS "all_partitions" - -#define KEY_SYSFS_PAIRS_MAX 5 - -#define RULEFILE_SUFFIX ".rules" +#define PAIRS_MAX 5 +#define RULESFILE_SUFFIX ".rules" enum key_operation { - KEY_OP_UNKNOWN, + KEY_OP_UNSET, KEY_OP_MATCH, KEY_OP_NOMATCH, KEY_OP_ADD, KEY_OP_ASSIGN, + KEY_OP_ASSIGN_FINAL, }; -struct key_pair { - char name[NAME_SIZE]; - char value[VALUE_SIZE]; +struct key { enum key_operation operation; + size_t val_off; +}; + +struct key_pair { + struct key key; + size_t key_name_off; +}; + +struct key_pairs { + int count; + struct key_pair keys[PAIRS_MAX]; +}; + +enum import_type { + IMPORT_UNSET, + IMPORT_PROGRAM, + IMPORT_FILE, + IMPORT_PARENT, +}; + +enum escape_type { + ESCAPE_UNSET, + ESCAPE_NONE, + ESCAPE_REPLACE, }; struct udev_rule { - struct list_head node; - - char kernel[NAME_SIZE]; - enum key_operation kernel_operation; - char subsystem[NAME_SIZE]; - enum key_operation subsystem_operation; - char bus[NAME_SIZE]; - enum key_operation bus_operation; - char id[NAME_SIZE]; - enum key_operation id_operation; - char driver[NAME_SIZE]; - enum key_operation driver_operation; - char program[PATH_SIZE]; - enum key_operation program_operation; - char result[PATH_SIZE]; - enum key_operation result_operation; - struct key_pair sysfs_pair[KEY_SYSFS_PAIRS_MAX]; - int sysfs_pair_count; - - char name[PATH_SIZE]; - char symlink[PATH_SIZE]; - char owner[USER_SIZE]; - char group[USER_SIZE]; - mode_t mode; - - int last_rule; - int ignore_device; - int ignore_remove; - int partitions; - - char config_file[PATH_SIZE]; - int config_line; + struct key action; + struct key devpath; + struct key kernel; + struct key subsystem; + struct key driver; + struct key_pairs attr; + + struct key kernels; + struct key subsystems; + struct key drivers; + struct key_pairs attrs; + + struct key_pairs env; + struct key program; + struct key result; + struct key import; + enum import_type import_type; + struct key test; + mode_t test_mode_mask; + struct key run; + struct key wait_for_sysfs; + struct key label; + struct key goto_label; + + struct key name; + struct key symlink; + struct key symlink_match; + struct key owner; + struct key group; + struct key mode; + enum escape_type string_escape; + + unsigned int link_priority; + int event_timeout; + unsigned int partitions; + unsigned int last_rule:1, + run_ignore_error:1, + ignore_device:1, + ignore_remove:1; + + size_t bufsize; + char buf[]; +}; + +struct udev_rules { + char *buf; + size_t bufsize; + size_t current; + int resolve_names; }; -extern struct list_head udev_rule_list; +extern int udev_rules_init(struct udev_rules *rules, int resolve_names); +extern void udev_rules_cleanup(struct udev_rules *rules); + +extern void udev_rules_iter_init(struct udev_rules *rules); +extern struct udev_rule *udev_rules_iter_next(struct udev_rules *rules); +extern struct udev_rule *udev_rules_iter_label(struct udev_rules *rules, const char *label); + +extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev); +extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev); +extern int udev_rules_run(struct udevice *udev); -extern int udev_rules_init(void); -extern int udev_rules_get_name(struct udevice *udev, struct sysfs_class_device *class_dev); -extern void udev_rules_close(void); +extern void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize); #endif