summaryrefslogtreecommitdiff
path: root/udev-remove.c
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-02-16 21:44:28 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:32:28 -0700
commit50e5de03d16be3e35e65cdf65f552807ad24e996 (patch)
tree46c83042e99cf64eb308ac6bd47fab4f75525733 /udev-remove.c
parentbb7386472466e55f75df024d18e8da37a222bb41 (diff)
[PATCH] udev - create all partitions of blockdevice
Here is the first try to create all partitons of a blockdevice, since removable media devices may need to acces the expected partition to revalidate the media. It uses the attribute syntax introduced with the last %s{file} patch. I'm using this with my multi-slot-flash-card-reader: SYSFS{model}="USB Storage-SMC ", NAME{all_partitions}="smartmedia" SYSFS{model}="USB Storage-CFC ", NAME{all_partitions}="compactflash" SYSFS{model}="USB Storage-MSC ", NAME{all_partitions}="memorystick" SYSFS{model}="USB Storage-MMC ", NAME{all_partitions}="multimedia" and I get: tree /udev/ /udev/ |-- memorystick |-- memorystick1 |-- memorystick10 |-- memorystick11 |-- memorystick12 |-- memorystick13 |-- memorystick14 |-- memorystick15 |-- memorystick2 |-- memorystick3 |-- memorystick4 |-- memorystick5 |-- memorystick6 |-- memorystick7 |-- memorystick8 |-- memorystick9 |-- multimedia |-- multimedia1 |-- multimedia10 |-- multimedia11 |-- multimedia12 |-- multimedia13 |-- multimedia14 |-- multimedia15 |-- multimedia2 |-- multimedia3 |-- multimedia4 |-- multimedia5 |-- multimedia6 |-- multimedia7 |-- multimedia8 |-- multimedia9 ... If needed, we can make the number of partions to create adjustable with the attribute?
Diffstat (limited to 'udev-remove.c')
-rw-r--r--udev-remove.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/udev-remove.c b/udev-remove.c
index c21938fae7..c20c651dc5 100644
--- a/udev-remove.c
+++ b/udev-remove.c
@@ -66,9 +66,11 @@ static int delete_path(char *path)
static int delete_node(struct udevice *dev)
{
char filename[255];
+ char partitionname[255];
char *symlinks;
char *linkname;
int retval;
+ int i;
strncpy(filename, udev_root, sizeof(filename));
strncat(filename, dev->name, sizeof(filename));
@@ -81,11 +83,20 @@ static int delete_node(struct udevice *dev)
return retval;
}
+ /* remove partition nodes */
+ 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);
+ unlink(partitionname);
+ }
+ }
+
/* remove subdirectories */
if (strchr(dev->name, '/'))
delete_path(filename);
- if (*dev->symlink) {
+ if (dev->symlink[0] != '\0') {
symlinks = dev->symlink;
while (1) {
linkname = strsep(&symlinks, " ");