uevent: use add_uevent_var() instead of open coding it

Make use of add_uevent_var() instead of (often incorrectly) open coding it.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Eric Rannaud <eric.rannaud@gmail.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Eric Rannaud 2007-03-30 22:23:12 -07:00 committed by Greg Kroah-Hartman
parent bdc4960a0b
commit bf62456eb9
6 changed files with 77 additions and 109 deletions

View File

@ -47,14 +47,13 @@ static int amba_match(struct device *dev, struct device_driver *drv)
static int amba_uevent(struct device *dev, char **envp, int nr_env, char *buf, int bufsz)
{
struct amba_device *pcdev = to_amba_device(dev);
int retval = 0, i = 0, len = 0;
if (nr_env < 2)
return -ENOMEM;
snprintf(buf, bufsz, "AMBA_ID=%08x", pcdev->periphid);
*envp++ = buf;
*envp++ = NULL;
return 0;
retval = add_uevent_var(envp, nr_env, &i,
buf, bufsz, &len,
"AMBA_ID=%08x", pcdev->periphid);
envp[i] = NULL;
return retval;
}
#else
#define amba_uevent NULL

View File

@ -1163,6 +1163,7 @@ static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
struct unit_directory *ud;
int i = 0;
int length = 0;
int retval = 0;
/* ieee1394:venNmoNspNverN */
char buf[8 + 1 + 3 + 8 + 2 + 8 + 2 + 8 + 3 + 8 + 1];
@ -1176,14 +1177,11 @@ static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
#define PUT_ENVP(fmt,val) \
do { \
int printed; \
envp[i++] = buffer; \
printed = snprintf(buffer, buffer_size - length, \
fmt, val); \
if ((buffer_size - (length+printed) <= 0) || (i >= num_envp)) \
return -ENOMEM; \
length += printed+1; \
buffer += printed+1; \
retval = add_uevent_var(envp, num_envp, &i, \
buffer, buffer_size, &length, \
fmt, val); \
if (retval) \
return retval; \
} while (0)
PUT_ENVP("VENDOR_ID=%06x", ud->vendor_id);

View File

@ -86,31 +86,26 @@ mmc_bus_uevent(struct device *dev, char **envp, int num_envp, char *buf,
{
struct mmc_card *card = dev_to_mmc_card(dev);
char ccc[13];
int i = 0;
int retval = 0, i = 0, length = 0;
#define add_env(fmt,val) \
({ \
int len, ret = -ENOMEM; \
if (i < num_envp) { \
envp[i++] = buf; \
len = snprintf(buf, buf_size, fmt, val) + 1; \
buf_size -= len; \
buf += len; \
if (buf_size >= 0) \
ret = 0; \
} \
ret; \
})
#define add_env(fmt,val) do { \
retval = add_uevent_var(envp, num_envp, &i, \
buf, buf_size, &length, \
fmt, val); \
if (retval) \
return retval; \
} while (0);
for (i = 0; i < 12; i++)
ccc[i] = card->csd.cmdclass & (1 << i) ? '1' : '0';
ccc[12] = '\0';
i = 0;
add_env("MMC_CCC=%s", ccc);
add_env("MMC_MANFID=%06x", card->cid.manfid);
add_env("MMC_NAME=%s", mmc_card_name(card));
add_env("MMC_OEMID=%04x", card->cid.oemid);
#undef add_env
envp[i] = NULL;
return 0;
}

View File

@ -423,27 +423,25 @@ static int ap_uevent (struct device *dev, char **envp, int num_envp,
char *buffer, int buffer_size)
{
struct ap_device *ap_dev = to_ap_dev(dev);
int length;
int retval = 0, length = 0, i = 0;
if (!ap_dev)
return -ENODEV;
/* Set up DEV_TYPE environment variable. */
envp[0] = buffer;
length = scnprintf(buffer, buffer_size, "DEV_TYPE=%04X",
ap_dev->device_type);
if (buffer_size - length <= 0)
return -ENOMEM;
buffer += length;
buffer_size -= length;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"DEV_TYPE=%04X", ap_dev->device_type);
if (retval)
return retval;
/* Add MODALIAS= */
envp[1] = buffer;
length = scnprintf(buffer, buffer_size, "MODALIAS=ap:t%02X",
ap_dev->device_type);
if (buffer_size - length <= 0)
return -ENOMEM;
envp[2] = NULL;
return 0;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"MODALIAS=ap:t%02X", ap_dev->device_type);
envp[i] = NULL;
return retval;
}
static struct bus_type ap_bus_type = {

View File

@ -412,31 +412,25 @@ static int netdev_uevent(struct device *d, char **envp,
int num_envp, char *buf, int size)
{
struct net_device *dev = to_net_dev(d);
int i = 0;
int n;
int retval, len = 0, i = 0;
/* pass interface to uevent. */
envp[i++] = buf;
n = snprintf(buf, size, "INTERFACE=%s", dev->name) + 1;
buf += n;
size -= n;
if ((size <= 0) || (i >= num_envp))
return -ENOMEM;
retval = add_uevent_var(envp, num_envp, &i,
buf, size, &len,
"INTERFACE=%s", dev->name);
if (retval)
goto exit;
/* pass ifindex to uevent.
* ifindex is useful as it won't change (interface name may change)
* and is what RtNetlink uses natively. */
envp[i++] = buf;
n = snprintf(buf, size, "IFINDEX=%d", dev->ifindex) + 1;
buf += n;
size -= n;
if ((size <= 0) || (i >= num_envp))
return -ENOMEM;
retval = add_uevent_var(envp, num_envp, &i,
buf, size, &len,
"IFINDEX=%d", dev->ifindex);
exit:
envp[i] = NULL;
return 0;
return retval;
}
#endif

View File

@ -61,9 +61,9 @@ static int soundbus_uevent(struct device *dev, char **envp, int num_envp,
{
struct soundbus_dev * soundbus_dev;
struct of_device * of;
char *scratch, *compat, *compat2;
int i = 0;
int length, cplen, cplen2, seen = 0;
char *compat;
int retval = 0, i = 0, length = 0;
int cplen, seen = 0;
if (!dev)
return -ENODEV;
@ -75,63 +75,47 @@ static int soundbus_uevent(struct device *dev, char **envp, int num_envp,
of = &soundbus_dev->ofdev;
/* stuff we want to pass to /sbin/hotplug */
envp[i++] = scratch = buffer;
length = scnprintf (scratch, buffer_size, "OF_NAME=%s", of->node->name);
++length;
buffer_size -= length;
if ((buffer_size <= 0) || (i >= num_envp))
return -ENOMEM;
scratch += length;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"OF_NAME=%s", of->node->name);
if (retval)
return retval;
envp[i++] = scratch;
length = scnprintf (scratch, buffer_size, "OF_TYPE=%s", of->node->type);
++length;
buffer_size -= length;
if ((buffer_size <= 0) || (i >= num_envp))
return -ENOMEM;
scratch += length;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"OF_TYPE=%s", of->node->type);
if (retval)
return retval;
/* Since the compatible field can contain pretty much anything
* it's not really legal to split it out with commas. We split it
* up using a number of environment variables instead. */
compat = (char *) get_property(of->node, "compatible", &cplen);
compat2 = compat;
cplen2= cplen;
while (compat && cplen > 0) {
envp[i++] = scratch;
length = scnprintf (scratch, buffer_size,
"OF_COMPATIBLE_%d=%s", seen, compat);
++length;
buffer_size -= length;
if ((buffer_size <= 0) || (i >= num_envp))
return -ENOMEM;
scratch += length;
length = strlen (compat) + 1;
compat += length;
cplen -= length;
seen++;
int tmp = length;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"OF_COMPATIBLE_%d=%s", seen, compat);
if (retval)
return retval;
compat += length - tmp;
cplen -= length - tmp;
seen += 1;
}
envp[i++] = scratch;
length = scnprintf (scratch, buffer_size, "OF_COMPATIBLE_N=%d", seen);
++length;
buffer_size -= length;
if ((buffer_size <= 0) || (i >= num_envp))
return -ENOMEM;
scratch += length;
envp[i++] = scratch;
length = scnprintf (scratch, buffer_size, "MODALIAS=%s",
soundbus_dev->modalias);
buffer_size -= length;
if ((buffer_size <= 0) || (i >= num_envp))
return -ENOMEM;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"OF_COMPATIBLE_N=%d", seen);
if (retval)
return retval;
retval = add_uevent_var(envp, num_envp, &i,
buffer, buffer_size, &length,
"MODALIAS=%s", soundbus_dev->modalias);
envp[i] = NULL;
return 0;
return retval;
}
static int soundbus_device_remove(struct device *dev)