diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-02-28 01:59:02 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:34:28 -0700 |
commit | c58e36c092ad5acc84d35e455ecc74096b25ae66 (patch) | |
tree | 6030871e62499303759ecf4660fc26d9b3683004 | |
parent | 7eb136adb8fe265050b2a3e44b216e747163743f (diff) |
[PATCH] udev - safer sprintf() use
Here is for now my last patch to the string handling for a rather
theorethical case, where the node is very very very long. :)
We have accordant to strfieldcat(to, from) now a strintcat(to, i) macro,
which appends the ascii representation of a integer to a string in a
safe way.
-rw-r--r-- | namedev.c | 6 | ||||
-rw-r--r-- | udev-add.c | 3 | ||||
-rw-r--r-- | udev-remove.c | 3 | ||||
-rw-r--r-- | udev.h | 12 |
4 files changed, 19 insertions, 5 deletions
@@ -263,11 +263,11 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, dbg("substitute kernel number '%s'", udev->kernel_number); break; case 'm': - sprintf(pos, "%u", udev->minor); + strnintcat(string, udev->minor, maxsize); dbg("substitute minor number '%u'", udev->minor); break; - case 'M': - sprintf(pos, "%u", udev->major); + case 'M': + strnintcat(string, udev->major, maxsize); dbg("substitute major number '%u'", udev->major); break; case 'c': diff --git a/udev-add.c b/udev-add.c index 8fdd66fad5..3a72c544b8 100644 --- a/udev-add.c +++ b/udev-add.c @@ -211,7 +211,8 @@ static int create_node(struct udevice *dev, int fake) info("creating device partition nodes '%s[1-%i]'", filename, dev->partitions); if (!fake) { for (i = 1; i <= dev->partitions; i++) { - sprintf(partitionname, "%s%i", filename, i); + strfieldcpy(partitionname, filename); + strintcat(partitionname, i); make_node(partitionname, dev->major, dev->minor + i, dev->mode, uid, gid); } diff --git a/udev-remove.c b/udev-remove.c index 8794429635..e62d1fb122 100644 --- a/udev-remove.c +++ b/udev-remove.c @@ -87,7 +87,8 @@ static int delete_node(struct udevice *dev) if (dev->partitions > 0) { info("removing partitions '%s[1-%i]'", filename, dev->partitions); for (i = 1; i <= dev->partitions; i++) { - sprintf(partitionname, "%s%i", filename, i); + strfieldcpy(partitionname, filename); + strintcat(partitionname, i); unlink(partitionname); } } @@ -85,6 +85,18 @@ do { \ strncat(to, from, maxsize - strlen(to)-1); \ } while (0) +#define strintcat(to, i) \ +do { \ + to[sizeof(to)-1] = '\0'; \ + snprintf((to) + strlen(to), sizeof(to) - strlen(to)-1, "%u", i); \ +} while (0) + +#define strnintcat(to, i, maxsize) \ +do { \ + to[maxsize-1] = '\0'; \ + snprintf((to) + strlen(to), maxsize - strlen(to)-1, "%u", i); \ +} while (0) + static inline char *get_action(void) { char *action; |