diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2007-08-14 09:15:12 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-10-12 17:51:01 -0400 |
commit | 7eff2e7a8b65c25920207324e56611150eb1cd9a (patch) | |
tree | 02a0eeba9d25d996233e30c18f258dfae0ae2139 /include/linux/device.h | |
parent | 8380770c842faef3001e44662953d64ad9a93663 (diff) |
Driver core: change add_uevent_var to use a struct
This changes the uevent buffer functions to use a struct instead of a
long list of parameters. It does no longer require the caller to do the
proper buffer termination and size accounting, which is currently wrong
in some places. It fixes a known bug where parts of the uevent
environment are overwritten because of wrong index calculations.
Many thanks to Mathieu Desnoyers for finding bugs and improving the
error handling.
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux/device.h')
-rw-r--r-- | include/linux/device.h | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index 5d97ca6d8655..2e15822fe409 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -66,8 +66,7 @@ struct bus_type { | |||
66 | struct driver_attribute * drv_attrs; | 66 | struct driver_attribute * drv_attrs; |
67 | 67 | ||
68 | int (*match)(struct device * dev, struct device_driver * drv); | 68 | int (*match)(struct device * dev, struct device_driver * drv); |
69 | int (*uevent)(struct device *dev, char **envp, | 69 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
70 | int num_envp, char *buffer, int buffer_size); | ||
71 | int (*probe)(struct device * dev); | 70 | int (*probe)(struct device * dev); |
72 | int (*remove)(struct device * dev); | 71 | int (*remove)(struct device * dev); |
73 | void (*shutdown)(struct device * dev); | 72 | void (*shutdown)(struct device * dev); |
@@ -187,10 +186,8 @@ struct class { | |||
187 | struct class_device_attribute * class_dev_attrs; | 186 | struct class_device_attribute * class_dev_attrs; |
188 | struct device_attribute * dev_attrs; | 187 | struct device_attribute * dev_attrs; |
189 | 188 | ||
190 | int (*uevent)(struct class_device *dev, char **envp, | 189 | int (*uevent)(struct class_device *dev, struct kobj_uevent_env *env); |
191 | int num_envp, char *buffer, int buffer_size); | 190 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); |
192 | int (*dev_uevent)(struct device *dev, char **envp, int num_envp, | ||
193 | char *buffer, int buffer_size); | ||
194 | 191 | ||
195 | void (*release)(struct class_device *dev); | 192 | void (*release)(struct class_device *dev); |
196 | void (*class_release)(struct class *class); | 193 | void (*class_release)(struct class *class); |
@@ -266,8 +263,7 @@ struct class_device { | |||
266 | struct attribute_group ** groups; /* optional groups */ | 263 | struct attribute_group ** groups; /* optional groups */ |
267 | 264 | ||
268 | void (*release)(struct class_device *dev); | 265 | void (*release)(struct class_device *dev); |
269 | int (*uevent)(struct class_device *dev, char **envp, | 266 | int (*uevent)(struct class_device *dev, struct kobj_uevent_env *env); |
270 | int num_envp, char *buffer, int buffer_size); | ||
271 | char class_id[BUS_ID_SIZE]; /* unique to this class */ | 267 | char class_id[BUS_ID_SIZE]; /* unique to this class */ |
272 | }; | 268 | }; |
273 | 269 | ||
@@ -335,8 +331,7 @@ extern void class_device_destroy(struct class *cls, dev_t devt); | |||
335 | struct device_type { | 331 | struct device_type { |
336 | const char *name; | 332 | const char *name; |
337 | struct attribute_group **groups; | 333 | struct attribute_group **groups; |
338 | int (*uevent)(struct device *dev, char **envp, int num_envp, | 334 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
339 | char *buffer, int buffer_size); | ||
340 | void (*release)(struct device *dev); | 335 | void (*release)(struct device *dev); |
341 | int (*suspend)(struct device * dev, pm_message_t state); | 336 | int (*suspend)(struct device * dev, pm_message_t state); |
342 | int (*resume)(struct device * dev); | 337 | int (*resume)(struct device * dev); |