2010-01-20 Felix Zielcke <fzielcke@z-51.de>
* util/misc.c (make_system_path_relative_to_its_root): Change the work around for handling "/" to the correct fix. Fix a memory leak. Use xstrdup instead of strdup.
This commit is contained in:
parent
a9ed4ff36f
commit
67eb14272d
2 changed files with 24 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-01-20 Felix Zielcke <fzielcke@z-51.de>
|
||||
|
||||
* util/misc.c (make_system_path_relative_to_its_root): Change the work
|
||||
around for handling "/" to the correct fix. Fix a memory leak. Use
|
||||
xstrdup instead of strdup.
|
||||
|
||||
2010-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||
|
||||
* conf/mips.rmk (kernel_img_HEADERS): Add env_private.h
|
||||
|
|
31
util/misc.c
31
util/misc.c
|
@ -513,13 +513,13 @@ make_system_path_relative_to_its_root (const char *path)
|
|||
grub_util_error ("failed to get canonical path of %s", path);
|
||||
|
||||
len = strlen (p) + 1;
|
||||
buf = strdup (p);
|
||||
buf = xstrdup (p);
|
||||
free (p);
|
||||
|
||||
if (stat (buf, &st) < 0)
|
||||
grub_util_error ("cannot stat %s: %s", buf, strerror (errno));
|
||||
|
||||
buf2 = strdup (buf);
|
||||
buf2 = xstrdup (buf);
|
||||
num = st.st_dev;
|
||||
|
||||
/* This loop sets offset to the number of chars of the root
|
||||
|
@ -541,12 +541,16 @@ make_system_path_relative_to_its_root (const char *path)
|
|||
/* buf is another filesystem; we found it. */
|
||||
if (st.st_dev != num)
|
||||
{
|
||||
/* offset == 0 means path given is the mount point. */
|
||||
/* offset == 0 means path given is the mount point.
|
||||
This works around special-casing of "/" in Un*x. This function never
|
||||
prints trailing slashes (so that its output can be appended a slash
|
||||
unconditionally). Each slash in is considered a preceding slash, and
|
||||
therefore the root directory is an empty string. */
|
||||
if (offset == 0)
|
||||
{
|
||||
free (buf);
|
||||
free (buf2);
|
||||
return strdup ("/");
|
||||
return xstrdup ("");
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
@ -563,11 +567,19 @@ make_system_path_relative_to_its_root (const char *path)
|
|||
buf2[len - 1] = '\0';
|
||||
len--;
|
||||
}
|
||||
return buf2;
|
||||
if (len > 1)
|
||||
return buf2;
|
||||
else
|
||||
{
|
||||
/* This means path given is just a backslash. As above
|
||||
we have to return an empty string. */
|
||||
free (buf2);
|
||||
return xtrdup ("");
|
||||
}
|
||||
}
|
||||
}
|
||||
free (buf);
|
||||
buf3 = strdup (buf2 + offset);
|
||||
buf3 = xstrdup (buf2 + offset);
|
||||
free (buf2);
|
||||
|
||||
len = strlen (buf3);
|
||||
|
@ -577,13 +589,6 @@ make_system_path_relative_to_its_root (const char *path)
|
|||
len--;
|
||||
}
|
||||
|
||||
/* This works around special-casing of "/" in Un*x. This function never
|
||||
prints trailing slashes (so that its output can be appended a slash
|
||||
unconditionally). Each slash in is considered a preceding slash, and
|
||||
therefore the root directory is an empty string. */
|
||||
if (!strcmp (buf3, "/"))
|
||||
buf3[0] = '\0';
|
||||
|
||||
return buf3;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue