2013/5/22 Nico Golde <[email protected]>:
> Hi,
> I'm not sure if you would like to change this....
> In devices.c you scan for the device name in /proc/devices using the %as
> string.
> On bionic this doesn't seem to work and therefore no devices are found and
> because of this no ioctl group ever matches.
No objections to changing this.
> I changed the code the following way:
> @@ -21,7 +22,8 @@ static size_t bldevs, chrdevs, miscdevs;
> static void parse_proc_devices(void)
> {
> FILE *fp;
> - char *name, *line = NULL;
> + char *line = NULL;
> + char name[32];
It would be IMO preferable to not hardcode the max length.
> size_t n = 0;
> int block, major;
> void *new;
> @@ -33,30 +35,31 @@ static void parse_proc_devices(void)
> block = 0;
>
> while (getline(&line, &n, fp) >= 0) {
> + memset(name, 0, sizeof(name));
> if (strcmp("Block devices:\n", line) == 0)
> block = 1;
> - else if (sscanf(line, "%d %as", &major, &name) == 2) {
> + else if (strcmp("Character devices:\n", line) == 0)
> + block = 0;
> + else if (sscanf(line, "%d %s", &major, &name) == 2) {
> if (block) {
> new = realloc(block_devs,
> (bldevs+1)*sizeof(*block_devs));
> if (!new) {
> - free(name);
> continue;
> }
> block_devs = new;
> block_devs[bldevs].major = major;
> block_devs[bldevs].minor = 0;
> - block_devs[bldevs].name = name;
> + block_devs[bldevs].name = strdup(name);
> bldevs++;
> } else {
> new = realloc(char_devs,
> (chrdevs+1)*sizeof(*char_devs));
> if (!new) {
> - free(name);
> continue;
> }
> char_devs = new;
> char_devs[chrdevs].major = major;
> char_devs[chrdevs].minor = 0;
> - char_devs[chrdevs].name = name;
> + char_devs[chrdevs].name = strdup(name);
> chrdevs++;
> }
> }
>
>
> I also added the additional strcmp just to make sure that the code works also
> if the order of character devices/block devices in /proc/devices changes at
> some point.
>
> Cheers
> Nico
--
To unsubscribe from this list: send the line "unsubscribe trinity" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html