X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fbase%2Ffirmware_class.c;h=26c9464af80af79583b42c37925194098e4e9dc3;hb=352771d8dfacc828fdee58d5def490d5fb480c83;hp=a9d94a31fb122858ddbeff14cb8741cfd68d3572;hpb=8acd6bd4f7d04a05c364bea1883ca3876efde353;p=linux-2.6.git diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index a9d94a31f..26c9464af 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c @@ -94,19 +94,17 @@ firmware_class_hotplug(struct class_device *class_dev, char **envp, int num_envp, char *buffer, int buffer_size) { struct firmware_priv *fw_priv = class_get_devdata(class_dev); - int i = 0; - char *scratch = buffer; + int i = 0, len = 0; if (!test_bit(FW_STATUS_READY, &fw_priv->status)) return -ENODEV; - if (buffer_size < (FIRMWARE_NAME_MAX + 10)) - return -ENOMEM; - if (num_envp < 1) + if (add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, &len, + "FIRMWARE=%s", fw_priv->fw_id)) return -ENOMEM; - envp[i++] = scratch; - scratch += sprintf(scratch, "FIRMWARE=%s", fw_priv->fw_id) + 1; + envp[i] = NULL; + return 0; } @@ -422,7 +420,7 @@ request_firmware(const struct firmware **firmware_p, const char *name, add_timer(&fw_priv->timeout); } - kobject_hotplug("add", &class_dev->kobj); + kobject_hotplug(&class_dev->kobj, KOBJ_ADD); wait_for_completion(&fw_priv->completion); set_bit(FW_STATUS_DONE, &fw_priv->status); @@ -441,6 +439,7 @@ request_firmware(const struct firmware **firmware_p, const char *name, error_kfree_fw: kfree(firmware); + *firmware_p = NULL; out: return retval; }