diff options
author | Kay Sievers <kay.sievers@suse.de> | 2006-01-18 04:24:48 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@suse.de> | 2006-01-18 04:24:48 +0100 |
commit | 6ecd4d1e364ea8104c83e36b82d1c23835fb104b (patch) | |
tree | 7a049a24be855fad92d9dfbbde89fc7fadaf0a93 /extras/scsi_id | |
parent | 7155bfb7fa7d72bc4e7341ad1481ffd4c6e39f97 (diff) |
scsi_id, usb_id: request device parent by subsystem
Request specific parents identified by subsystem and don't rely on
a predefined sequence.
Also let the devpath be longer than 72 chars, tsss ...
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
Diffstat (limited to 'extras/scsi_id')
-rw-r--r-- | extras/scsi_id/scsi_id.c | 28 | ||||
-rw-r--r-- | extras/scsi_id/scsi_id.h | 2 |
2 files changed, 13 insertions, 17 deletions
diff --git a/extras/scsi_id/scsi_id.c b/extras/scsi_id/scsi_id.c index 3a4a374d3e..6458f2b7ac 100644 --- a/extras/scsi_id/scsi_id.c +++ b/extras/scsi_id/scsi_id.c @@ -48,7 +48,7 @@ static int all_good; static int always_info; static int dev_specified; static int sys_specified; -static char config_file[MAX_NAME_LEN] = SCSI_ID_CONFIG_FILE; +static char config_file[MAX_PATH_LEN] = SCSI_ID_CONFIG_FILE; static int display_bus_id; static enum page_code default_page_code; static int use_stderr; @@ -174,7 +174,7 @@ static int create_tmp_dev(const char *devpath, char *tmpdev, int dev_type) return -1; } - snprintf(tmpdev, MAX_NAME_LEN, "%s/%s-maj%d-min%d-%u", + snprintf(tmpdev, MAX_PATH_LEN, "%s/%s-maj%d-min%d-%u", TMP_DIR, TMP_PREFIX, maj, min, getpid()); dbg("tmpdev '%s'", tmpdev); @@ -433,7 +433,8 @@ static int set_options(int argc, char **argv, const char *short_opts, case 'd': dev_specified = 1; - strncpy(maj_min_dev, optarg, MAX_NAME_LEN); + strncpy(maj_min_dev, optarg, MAX_PATH_LEN); + maj_min_dev[MAX_PATH_LEN-1] = '\0'; break; case 'e': @@ -441,7 +442,8 @@ static int set_options(int argc, char **argv, const char *short_opts, break; case 'f': - strncpy(config_file, optarg, MAX_NAME_LEN); + strncpy(config_file, optarg, MAX_PATH_LEN); + config_file[MAX_PATH_LEN-1] = '\0'; break; case 'g': @@ -467,8 +469,8 @@ static int set_options(int argc, char **argv, const char *short_opts, case 's': sys_specified = 1; - strncpy(target, optarg, MAX_NAME_LEN); - target[MAX_NAME_LEN-1] = '\0'; + strncpy(target, optarg, MAX_PATH_LEN); + target[MAX_PATH_LEN-1] = '\0'; break; case 'u': @@ -640,18 +642,12 @@ static int scsi_id(const char *devpath, char *maj_min_dev) dev_type = S_IFCHR; /* get scsi parent device */ - dev_scsi = sysfs_device_get_parent(dev); + dev_scsi = sysfs_device_get_parent_with_subsystem(dev, "scsi"); if (dev_scsi == NULL) { err("unable to access parent device of '%s'", devpath); return 1; } - /* allow only scsi devices */ - if (strcmp(dev_scsi->subsystem, "scsi") != 0) { - info("%s is not a scsi device", devpath); - return 1; - } - /* mknod a temp dev to communicate with the device */ if (!dev_specified && create_tmp_dev(dev->devpath, maj_min_dev, dev_type)) { dbg("create_tmp_dev failed\n"); @@ -707,8 +703,8 @@ static int scsi_id(const char *devpath, char *maj_min_dev) int main(int argc, char **argv) { int retval = 0; - char devpath[MAX_NAME_LEN]; - char maj_min_dev[MAX_NAME_LEN]; + char devpath[MAX_PATH_LEN]; + char maj_min_dev[MAX_PATH_LEN]; int newargc; const char *env; char **newargv; @@ -729,7 +725,7 @@ int main(int argc, char **argv) if (env) { hotplug_mode = 1; sys_specified = 1; - strncpy(devpath, env, MAX_NAME_LEN); + strncpy(devpath, env, MAX_PATH_LEN); devpath[sizeof(devpath)-1] = '\0'; } diff --git a/extras/scsi_id/scsi_id.h b/extras/scsi_id/scsi_id.h index b5312b8988..758706ba25 100644 --- a/extras/scsi_id/scsi_id.h +++ b/extras/scsi_id/scsi_id.h @@ -21,7 +21,7 @@ * USA */ -#define MAX_NAME_LEN 72 +#define MAX_PATH_LEN 512 /* * MAX_ATTR_LEN: maximum length of the result of reading a sysfs |