summaryrefslogtreecommitdiff
path: root/namedev.c
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-03-31 23:12:57 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:35:13 -0700
commitbbbe503ec1a5623a5a8abd003f46fdd8c3581054 (patch)
tree96d4b8b9c48c22578234454feceb4ba1a44c9dc5 /namedev.c
parente5a2989efbae81f40b60885a8f92ea1f87df7ea9 (diff)
[PATCH] netdev - udevdb+dev.d changes
Here is a patch to change the netdev handling in the database and for the dev.d/ calls. I applies on top of the udevd.patch, cause klibc has no sysinfo(). o netdev's are also put into our database now. I want this for the udevruler gui to get a list of all handled devices. All devices in the db are stamped with the system uptime value at the creation time. 'udevinfo -d' prints it. o the DEVPATH value is the key for udevdb, but if we rename a netdev, the name is replaced in the kernel, so we add the changed name to the db to match with the remove event. NOTE: The dev.d/ scripts still get the original name from the hotplug call. Should we replace DEVPATH with the new name too? o We now only add a device to the db, if we have successfully created the main node or successfully renamed a netdev. This is the main part of the patch, cause I needed to clean the retval passing trough all the functions used for node creation. o DEVNODE sounds a bit ugly for netdev's so I exported DEVNAME too. Can we change the name? o I've added a UDEV_NO_DEVD to possibly skip the script execution and used it in udev-test.pl. udevstart is the same horror now, if you have scripts with logging statements in dev.d/ it takes minutes to finish, can we skip the scripts here too? o The get_device_type() function is changed to be more strict, cause 'udevinfo -a -p /block/' gets a class device for it and tries to print the major/minor values. o bugfix, the RESULT value has now a working newline removal and a test for this case.
Diffstat (limited to 'namedev.c')
-rw-r--r--namedev.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/namedev.c b/namedev.c
index 7b70f8bcdf..a3ae1d36b3 100644
--- a/namedev.c
+++ b/namedev.c
@@ -32,6 +32,9 @@
#include <time.h>
#include <sys/wait.h>
#include <sys/stat.h>
+#ifndef __KLIBC__
+#include <sys/sysinfo.h>
+#endif
#include "libsysfs/sysfs/libsysfs.h"
#include "list.h"
@@ -454,7 +457,7 @@ static int execute_program(char *path, char *value, int len)
retval = -1;
}
- if (i > 0 && value[i] == '\n')
+ if (i > 0 && value[i-1] == '\n')
i--;
value[i] = '\0';
dbg("result is '%s'", value);
@@ -776,6 +779,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud
struct sysfs_device *sysfs_device = NULL;
struct config_device *dev;
struct perm_device *perm;
+ struct sysinfo info;
char *pos;
udev->mode = 0;
@@ -837,22 +841,18 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud
}
}
}
-
- /* no rule was found for the net device */
- if (udev->type == 'n') {
- dbg("no name for net device '%s' configured", udev->kernel_name);
- return -1;
- }
-
/* no rule was found so we use the kernel name */
strfieldcpy(udev->name, udev->kernel_name);
- goto done;
+ if (udev->type == 'n')
+ goto done;
+ else
+ goto perms;
found:
apply_format(udev, udev->name, sizeof(udev->name), class_dev, sysfs_device);
if (udev->type == 'n')
- return 0;
+ goto done;
udev->partitions = dev->partitions;
strfieldcpy(udev->config_file, dev->config_file);
@@ -863,7 +863,7 @@ found:
dev->owner,
dev->group);
-done:
+perms:
/* get permissions given in config file or set defaults */
perm = find_perm(udev->name);
if (perm != NULL) {
@@ -879,8 +879,10 @@ done:
dbg("name, '%s' is going to have owner='%s', group='%s', mode = %#o",
udev->name, udev->owner, udev->group, udev->mode);
+done:
/* store time of action */
- udev->config_time = time(NULL);
+ sysinfo(&info);
+ udev->config_uptime = info.uptime;
return 0;
}