to[j] = '\0';
}
-static void set_type(char *to, const char *from, int count)
+static void set_type(char *to, const char *from, size_t len)
{
int type_num;
char *eptr;
+ char *type = "generic";
type_num = strtoul(from, &eptr, 0);
if (eptr != from) {
switch (type_num) {
case 0:
- sprintf(to, "disk");
+ type = "disk";
break;
case 1:
- sprintf(to, "tape");
+ type = "tape";
break;
case 4:
- sprintf(to, "optical");
+ type = "optical";
break;
case 5:
- sprintf(to, "cd");
+ type = "cd";
break;
case 7:
- sprintf(to, "optical");
+ type = "optical";
break;
case 0xe:
- sprintf(to, "disk");
+ type = "disk";
break;
case 0xf:
- sprintf(to, "optical");
+ type = "optical";
break;
default:
- sprintf(to, "generic");
break;
}
- } else {
- sprintf(to, "generic");
}
+ strncpy(to, type, len);
+ to[len-1] = '\0';
}
static int get_major_minor(struct sysfs_class_device *class_dev, int *maj,
*/
optind = 1;
while (1) {
- option = getopt(argc, argv, short_options);
+ option = getopt(argc, argv, short_opts);
if (option == -1)
break;
scsi_dev->name);
return -1;
}
- set_type(type_str, type->value, sizeof(type_str)-1);
+ set_type(type_str, type->value, sizeof(type_str));
type = sysfs_get_device_attr(scsi_dev, "rev");
if (!type) {
*
* Set the type based on the USB interface class
*/
-static void set_usb_iftype(char *to, const char *from, int count)
+static void set_usb_iftype(char *to, const char *from, size_t len)
{
int type_num;
char *eptr;
+ char *type = "generic";
type_num = strtoul(from, &eptr, 0);
if (eptr != from) {
switch (type_num) {
case 1:
- sprintf(to, "audio");
+ type = "audio";
break;
case 3:
- sprintf(to, "hid");
+ type = "hid";
break;
case 7:
- sprintf(to, "printer");
+ type = "printer";
break;
case 8:
- sprintf(to, "disk");
+ type = "disk";
break;
case 2: /* CDC-Control */
case 5: /* Physical */
case 0xf2: /* Application-specific */
case 0xff: /* Vendor-specific */
default:
- sprintf(to, "generic");
break;
}
- } else {
- sprintf(to, "generic");
}
+ strncpy(to, type, len);
+ to[len-1] = '\0';
}
/*
* Set the type base on the interfaceSubClass.
* Valid for Mass-Storage devices (type 8) only.
*/
-static int set_usb_ifsubtype(char *to, const char *from, int count)
+static int set_usb_ifsubtype(char *to, const char *from, size_t len)
{
int type_num = 0;
char *eptr;
+ char *type = "generic";
type_num = strtoul(from, &eptr, 0);
if (eptr != from) {
switch (type_num) {
case 2:
- sprintf(to, "cd");
+ type = "cd";
break;
case 3:
- sprintf(to, "tape");
+ type = "tape";
break;
case 4: /* UFI */
case 5: /* SFF-8070i */
- sprintf(to, "floppy");
+ type = "floppy";
break;
case 1: /* RBC devices */
case 6: /* Transparent SPC-2 devices */
- sprintf(to, "disk");
+ type = "disk";
+ break;
+ default:
break;
}
- } else {
- sprintf(to, "generic");
}
+ strncpy(to, type, len);
+ to[len-1] = '\0';
return type_num;
}
id->label_raw_len = count;
}
-static size_t my_strnlen(const char *s, size_t max) {
- const char *p = s;
- for (; *p && max--; ++p);
- return(p - s);
-}
-
void volume_id_set_label_string(struct volume_id *id, const uint8_t *buf, size_t count)
{
unsigned int i;
memcpy(id->label, buf, count);
/* remove trailing whitespace */
- i = my_strnlen(id->label, count);
+ i = strnlen(id->label, count);
while (i--) {
if (!isspace(id->label[i]))
break;
snprintf(tmp_node, VOLUME_ID_PATH_MAX,
"/dev/.volume_id-%u-%u-%u", getpid(), major(devt), minor(devt));
- tmp_node[VOLUME_ID_PATH_MAX] = '\0';
+ tmp_node[VOLUME_ID_PATH_MAX-1] = '\0';
/* create tempory node to open the block device */
unlink(tmp_node);
nodename[count-2] = '\0';
dbg("compare '%s' '%s'", nodename, name);
if (strcmp(nodename, name) == 0) {
- memcpy(devpath, &bufline[2], count-2);
+ strlcpy(devpath, nodename, len);
devpath[count-2] = '\0';
file_unmap(buf, bufsize);
closedir(dir);
/* finds the lowest positive N such that <name>N isn't present in the udevdb
* if <name> doesn't exist, 0 is returned, N otherwise
*/
-static int find_free_number(struct udevice *udev, const char *name)
+static int find_free_number(const char *name)
{
char devpath[PATH_SIZE];
char filename[PATH_SIZE];
{ .name = "root", .fmt = 'r', .type = SUBST_ROOT },
{ .name = "modalias", .fmt = 'A', .type = SUBST_MODALIAS },
{ .name = "env", .fmt = 'E', .type = SUBST_ENV },
- {}
+ { NULL, '\0', 0 }
};
enum subst_type type;
const struct subst_map *subst;
dbg("substitute sysfs value '%s'", temp2);
break;
case SUBST_ENUM:
- next_free_number = find_free_number(udev, string);
+ next_free_number = find_free_number(string);
if (next_free_number > 0) {
sprintf(temp2, "%d", next_free_number);
strlcat(string, temp2, maxsize);
default:
/* read from child if requested */
if (outpipe[0] > 0 || errpipe[0] > 0) {
- size_t count;
+ ssize_t count;
size_t respos = 0;
/* parent closes child ends of pipes */