uevent: use add_uevent_var() instead of open coding it
Eric Rannaud [Sat, 31 Mar 2007 05:23:12 +0000 (22:23 -0700)]
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>

drivers/amba/bus.c
drivers/ieee1394/nodemgr.c
drivers/mmc/mmc_sysfs.c
drivers/s390/crypto/ap_bus.c
net/core/net-sysfs.c
sound/aoa/soundbus/core.c

index fd54750..268e301 100644 (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
index c5ace19..1644e6f 100644 (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);
index d32698b..e0e82d8 100644 (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;
-
-#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;                                                    \
-       })
+       int retval = 0, i = 0, length = 0;
+
+#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;
 }
index bf37cdf..5aac0ec 100644 (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 = {
index e441ec7..b21307b 100644 (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
 
index 47b3e37..418a98a 100644 (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;
-
-       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_NAME=%s", of->node->name);
+       if (retval)
+               return retval;
+
+       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)