On Tue, Feb 12, 2008 at 10:49:37AM +0100, Fabian Greffrath wrote:
> >You put that function in a separate file, which indicates it is meant to be
> >a general-purpose function, but its spec is constrained by the code in
> >grub-probe (i.e. you strdup() not because it is needed for the purpose of
> >this function, but because grub-probe already calls free()).
> 
> That's right. Consequently there are two alternatives left:
> 
> - grub_util_check_block_device() returns the pointer instead of strdup() 
> and the
> call to free() in grub-probe is conditional upon if argument_is_device is 
> true
> or false; which I consider an ugly hack.
> 
> - I keep getroot.{c,h} untouched and include these four lines in grub-probe;
> which is a pity because I consider the function quite usefull, though still 
> not
> perfect (see above).

That's why I proposed to pass both path and device, and let either of them be
NULL.  When you do this:

  - You can determine whether `device' is provided (hence you can skip
    converting from `path') simply with "if (device)".

  - You can make the free() part independant of any other indications by
    issuing:

      if (device)
        free (device);
      if (path)
        free (path);

-- 
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to