aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/amba/bus.c13
-rw-r--r--drivers/ieee1394/nodemgr.c14
-rw-r--r--drivers/mmc/mmc_sysfs.c27
-rw-r--r--drivers/s390/crypto/ap_bus.c28
-rw-r--r--net/core/net-sysfs.c28
-rw-r--r--sound/aoa/soundbus/core.c80
6 files changed, 79 insertions, 111 deletions
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index fd5475071acc..268e301775fc 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -47,14 +47,13 @@ static int amba_match(struct device *dev, struct device_driver *drv)
47static int amba_uevent(struct device *dev, char **envp, int nr_env, char *buf, int bufsz) 47static int amba_uevent(struct device *dev, char **envp, int nr_env, char *buf, int bufsz)
48{ 48{
49 struct amba_device *pcdev = to_amba_device(dev); 49 struct amba_device *pcdev = to_amba_device(dev);
50 int retval = 0, i = 0, len = 0;
50 51
51 if (nr_env < 2) 52 retval = add_uevent_var(envp, nr_env, &i,
52 return -ENOMEM; 53 buf, bufsz, &len,
53 54 "AMBA_ID=%08x", pcdev->periphid);
54 snprintf(buf, bufsz, "AMBA_ID=%08x", pcdev->periphid); 55 envp[i] = NULL;
55 *envp++ = buf; 56 return retval;
56 *envp++ = NULL;
57 return 0;
58} 57}
59#else 58#else
60#define amba_uevent NULL 59#define amba_uevent NULL
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c
index c5ace190bfe6..1644e6fd2c89 100644
--- a/drivers/ieee1394/nodemgr.c
+++ b/drivers/ieee1394/nodemgr.c
@@ -1163,6 +1163,7 @@ static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
1163 struct unit_directory *ud; 1163 struct unit_directory *ud;
1164 int i = 0; 1164 int i = 0;
1165 int length = 0; 1165 int length = 0;
1166 int retval = 0;
1166 /* ieee1394:venNmoNspNverN */ 1167 /* ieee1394:venNmoNspNverN */
1167 char buf[8 + 1 + 3 + 8 + 2 + 8 + 2 + 8 + 3 + 8 + 1]; 1168 char buf[8 + 1 + 3 + 8 + 2 + 8 + 2 + 8 + 3 + 8 + 1];
1168 1169
@@ -1176,14 +1177,11 @@ static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
1176 1177
1177#define PUT_ENVP(fmt,val) \ 1178#define PUT_ENVP(fmt,val) \
1178do { \ 1179do { \
1179 int printed; \ 1180 retval = add_uevent_var(envp, num_envp, &i, \
1180 envp[i++] = buffer; \ 1181 buffer, buffer_size, &length, \
1181 printed = snprintf(buffer, buffer_size - length, \ 1182 fmt, val); \
1182 fmt, val); \ 1183 if (retval) \
1183 if ((buffer_size - (length+printed) <= 0) || (i >= num_envp)) \ 1184 return retval; \
1184 return -ENOMEM; \
1185 length += printed+1; \
1186 buffer += printed+1; \
1187} while (0) 1185} while (0)
1188 1186
1189 PUT_ENVP("VENDOR_ID=%06x", ud->vendor_id); 1187 PUT_ENVP("VENDOR_ID=%06x", ud->vendor_id);
diff --git a/drivers/mmc/mmc_sysfs.c b/drivers/mmc/mmc_sysfs.c
index d32698b02d7f..e0e82d849d5f 100644
--- a/drivers/mmc/mmc_sysfs.c
+++ b/drivers/mmc/mmc_sysfs.c
@@ -86,31 +86,26 @@ mmc_bus_uevent(struct device *dev, char **envp, int num_envp, char *buf,
86{ 86{
87 struct mmc_card *card = dev_to_mmc_card(dev); 87 struct mmc_card *card = dev_to_mmc_card(dev);
88 char ccc[13]; 88 char ccc[13];
89 int i = 0; 89 int retval = 0, i = 0, length = 0;
90 90
91#define add_env(fmt,val) \ 91#define add_env(fmt,val) do { \
92 ({ \ 92 retval = add_uevent_var(envp, num_envp, &i, \
93 int len, ret = -ENOMEM; \ 93 buf, buf_size, &length, \
94 if (i < num_envp) { \ 94 fmt, val); \
95 envp[i++] = buf; \ 95 if (retval) \
96 len = snprintf(buf, buf_size, fmt, val) + 1; \ 96 return retval; \
97 buf_size -= len; \ 97} while (0);
98 buf += len; \
99 if (buf_size >= 0) \
100 ret = 0; \
101 } \
102 ret; \
103 })
104 98
105 for (i = 0; i < 12; i++) 99 for (i = 0; i < 12; i++)
106 ccc[i] = card->csd.cmdclass & (1 << i) ? '1' : '0'; 100 ccc[i] = card->csd.cmdclass & (1 << i) ? '1' : '0';
107 ccc[12] = '\0'; 101 ccc[12] = '\0';
108 102
109 i = 0;
110 add_env("MMC_CCC=%s", ccc); 103 add_env("MMC_CCC=%s", ccc);
111 add_env("MMC_MANFID=%06x", card->cid.manfid); 104 add_env("MMC_MANFID=%06x", card->cid.manfid);
112 add_env("MMC_NAME=%s", mmc_card_name(card)); 105 add_env("MMC_NAME=%s", mmc_card_name(card));
113 add_env("MMC_OEMID=%04x", card->cid.oemid); 106 add_env("MMC_OEMID=%04x", card->cid.oemid);
107#undef add_env
108 envp[i] = NULL;
114 109
115 return 0; 110 return 0;
116} 111}
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index bf37cdf43fae..5aac0ec36368 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -423,27 +423,25 @@ static int ap_uevent (struct device *dev, char **envp, int num_envp,
423 char *buffer, int buffer_size) 423 char *buffer, int buffer_size)
424{ 424{
425 struct ap_device *ap_dev = to_ap_dev(dev); 425 struct ap_device *ap_dev = to_ap_dev(dev);
426 int length; 426 int retval = 0, length = 0, i = 0;
427 427
428 if (!ap_dev) 428 if (!ap_dev)
429 return -ENODEV; 429 return -ENODEV;
430 430
431 /* Set up DEV_TYPE environment variable. */ 431 /* Set up DEV_TYPE environment variable. */
432 envp[0] = buffer; 432 retval = add_uevent_var(envp, num_envp, &i,
433 length = scnprintf(buffer, buffer_size, "DEV_TYPE=%04X", 433 buffer, buffer_size, &length,
434 ap_dev->device_type); 434 "DEV_TYPE=%04X", ap_dev->device_type);
435 if (buffer_size - length <= 0) 435 if (retval)
436 return -ENOMEM; 436 return retval;
437 buffer += length; 437
438 buffer_size -= length;
439 /* Add MODALIAS= */ 438 /* Add MODALIAS= */
440 envp[1] = buffer; 439 retval = add_uevent_var(envp, num_envp, &i,
441 length = scnprintf(buffer, buffer_size, "MODALIAS=ap:t%02X", 440 buffer, buffer_size, &length,
442 ap_dev->device_type); 441 "MODALIAS=ap:t%02X", ap_dev->device_type);
443 if (buffer_size - length <= 0) 442
444 return -ENOMEM; 443 envp[i] = NULL;
445 envp[2] = NULL; 444 return retval;
446 return 0;
447} 445}
448 446
449static struct bus_type ap_bus_type = { 447static struct bus_type ap_bus_type = {
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index e441ec7988c1..b21307b15b82 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -412,31 +412,25 @@ static int netdev_uevent(struct device *d, char **envp,
412 int num_envp, char *buf, int size) 412 int num_envp, char *buf, int size)
413{ 413{
414 struct net_device *dev = to_net_dev(d); 414 struct net_device *dev = to_net_dev(d);
415 int i = 0; 415 int retval, len = 0, i = 0;
416 int n;
417 416
418 /* pass interface to uevent. */ 417 /* pass interface to uevent. */
419 envp[i++] = buf; 418 retval = add_uevent_var(envp, num_envp, &i,
420 n = snprintf(buf, size, "INTERFACE=%s", dev->name) + 1; 419 buf, size, &len,
421 buf += n; 420 "INTERFACE=%s", dev->name);
422 size -= n; 421 if (retval)
423 422 goto exit;
424 if ((size <= 0) || (i >= num_envp))
425 return -ENOMEM;
426 423
427 /* pass ifindex to uevent. 424 /* pass ifindex to uevent.
428 * ifindex is useful as it won't change (interface name may change) 425 * ifindex is useful as it won't change (interface name may change)
429 * and is what RtNetlink uses natively. */ 426 * and is what RtNetlink uses natively. */
430 envp[i++] = buf; 427 retval = add_uevent_var(envp, num_envp, &i,
431 n = snprintf(buf, size, "IFINDEX=%d", dev->ifindex) + 1; 428 buf, size, &len,
432 buf += n; 429 "IFINDEX=%d", dev->ifindex);
433 size -= n;
434
435 if ((size <= 0) || (i >= num_envp))
436 return -ENOMEM;
437 430
431exit:
438 envp[i] = NULL; 432 envp[i] = NULL;
439 return 0; 433 return retval;
440} 434}
441#endif 435#endif
442 436
diff --git a/sound/aoa/soundbus/core.c b/sound/aoa/soundbus/core.c
index 47b3e3768df0..418a98a10c73 100644
--- a/sound/aoa/soundbus/core.c
+++ b/sound/aoa/soundbus/core.c
@@ -61,9 +61,9 @@ static int soundbus_uevent(struct device *dev, char **envp, int num_envp,
61{ 61{
62 struct soundbus_dev * soundbus_dev; 62 struct soundbus_dev * soundbus_dev;
63 struct of_device * of; 63 struct of_device * of;
64 char *scratch, *compat, *compat2; 64 char *compat;
65 int i = 0; 65 int retval = 0, i = 0, length = 0;
66 int length, cplen, cplen2, seen = 0; 66 int cplen, seen = 0;
67 67
68 if (!dev) 68 if (!dev)
69 return -ENODEV; 69 return -ENODEV;
@@ -75,63 +75,47 @@ static int soundbus_uevent(struct device *dev, char **envp, int num_envp,
75 of = &soundbus_dev->ofdev; 75 of = &soundbus_dev->ofdev;
76 76
77 /* stuff we want to pass to /sbin/hotplug */ 77 /* stuff we want to pass to /sbin/hotplug */
78 envp[i++] = scratch = buffer; 78 retval = add_uevent_var(envp, num_envp, &i,
79 length = scnprintf (scratch, buffer_size, "OF_NAME=%s", of->node->name); 79 buffer, buffer_size, &length,
80 ++length; 80 "OF_NAME=%s", of->node->name);
81 buffer_size -= length; 81 if (retval)
82 if ((buffer_size <= 0) || (i >= num_envp)) 82 return retval;
83 return -ENOMEM; 83
84 scratch += length; 84 retval = add_uevent_var(envp, num_envp, &i,
85 85 buffer, buffer_size, &length,
86 envp[i++] = scratch; 86 "OF_TYPE=%s", of->node->type);
87 length = scnprintf (scratch, buffer_size, "OF_TYPE=%s", of->node->type); 87 if (retval)
88 ++length; 88 return retval;
89 buffer_size -= length;
90 if ((buffer_size <= 0) || (i >= num_envp))
91 return -ENOMEM;
92 scratch += length;
93 89
94 /* Since the compatible field can contain pretty much anything 90 /* Since the compatible field can contain pretty much anything
95 * it's not really legal to split it out with commas. We split it 91 * it's not really legal to split it out with commas. We split it
96 * up using a number of environment variables instead. */ 92 * up using a number of environment variables instead. */
97 93
98 compat = (char *) get_property(of->node, "compatible", &cplen); 94 compat = (char *) get_property(of->node, "compatible", &cplen);
99 compat2 = compat;
100 cplen2= cplen;
101 while (compat && cplen > 0) { 95 while (compat && cplen > 0) {
102 envp[i++] = scratch; 96 int tmp = length;
103 length = scnprintf (scratch, buffer_size, 97 retval = add_uevent_var(envp, num_envp, &i,
104 "OF_COMPATIBLE_%d=%s", seen, compat); 98 buffer, buffer_size, &length,
105 ++length; 99 "OF_COMPATIBLE_%d=%s", seen, compat);
106 buffer_size -= length; 100 if (retval)
107 if ((buffer_size <= 0) || (i >= num_envp)) 101 return retval;
108 return -ENOMEM; 102 compat += length - tmp;
109 scratch += length; 103 cplen -= length - tmp;
110 length = strlen (compat) + 1; 104 seen += 1;
111 compat += length;
112 cplen -= length;
113 seen++;
114 } 105 }
115 106
116 envp[i++] = scratch; 107 retval = add_uevent_var(envp, num_envp, &i,
117 length = scnprintf (scratch, buffer_size, "OF_COMPATIBLE_N=%d", seen); 108 buffer, buffer_size, &length,
118 ++length; 109 "OF_COMPATIBLE_N=%d", seen);
119 buffer_size -= length; 110 if (retval)
120 if ((buffer_size <= 0) || (i >= num_envp)) 111 return retval;
121 return -ENOMEM; 112 retval = add_uevent_var(envp, num_envp, &i,
122 scratch += length; 113 buffer, buffer_size, &length,
123 114 "MODALIAS=%s", soundbus_dev->modalias);
124 envp[i++] = scratch;
125 length = scnprintf (scratch, buffer_size, "MODALIAS=%s",
126 soundbus_dev->modalias);
127
128 buffer_size -= length;
129 if ((buffer_size <= 0) || (i >= num_envp))
130 return -ENOMEM;
131 115
132 envp[i] = NULL; 116 envp[i] = NULL;
133 117
134 return 0; 118 return retval;
135} 119}
136 120
137static int soundbus_device_remove(struct device *dev) 121static int soundbus_device_remove(struct device *dev)