On 02/02/2016 02:23 PM, Programmingkid wrote:
>> And why isn't bsd_path usable for that purpose?
>
> After trying it out, I found out why bsd_path isn't usable for that purpose.
> It is because the user might try to use a flash drive as the the cdrom. Say a
> flash drive is set to /dev/disk2s9. If the user issues the monitor command
> "change ide1-cd0 /dev/disk2s9", this will make "if (strcmp(filename,
> "/dev/cdrom") == 0)" false and bsd_path would never be set. bsd_path contents
> would be garbage.
>
> This would lead to this code not printing the unmounting directions:
>
> if (strncmp(filename, "/dev/", 5) == 0) {
> print_unmounting_directions(filename);
> return -1;
> }
>
> It looks keeping filename as an character array is best.
No, keep filename as a const char * pointer. It's easy to avoid use of
uninitialized memory. Try this:
const char *filename;
char bsd_path[MAXPATHLEN] = "";
...
if (strncmp("/dev/cdrom"...) {
bsd_path = ...
}
...
if (strncmp("/dev/"...) {
print_unmounting_directions(*bsd_path ? bsd_path : filename);
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
