mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
Fix and deprecate get_e2label and get_e2uuid (RHBZ#597112).
Fix these calls (see description in RHBZ#597112), but also deprecate them since the new calls vfs_label and vfs_uuid can work on any filesystem type. This also adds a regression test for the original bug reported in RHBZ#597112.
This commit is contained in:
@@ -170,29 +170,7 @@ do_set_e2label (const char *device, const char *label)
|
||||
char *
|
||||
do_get_e2label (const char *device)
|
||||
{
|
||||
int r, len;
|
||||
char *out, *err;
|
||||
|
||||
char prog[] = "e2label";
|
||||
if (e2prog (prog) == -1)
|
||||
return NULL;
|
||||
|
||||
r = command (&out, &err, prog, device, NULL);
|
||||
if (r == -1) {
|
||||
reply_with_error ("%s", err);
|
||||
free (out);
|
||||
free (err);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free (err);
|
||||
|
||||
/* Remove any trailing \n from the label. */
|
||||
len = strlen (out);
|
||||
if (len > 0 && out[len-1] == '\n')
|
||||
out[len-1] = '\0';
|
||||
|
||||
return out; /* caller frees */
|
||||
return do_vfs_label (device);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -219,65 +197,7 @@ do_set_e2uuid (const char *device, const char *uuid)
|
||||
char *
|
||||
do_get_e2uuid (const char *device)
|
||||
{
|
||||
int r;
|
||||
char *out, *err, *p, *q;
|
||||
|
||||
/* It's not so straightforward to get the volume UUID. We have
|
||||
* to use tune2fs -l and then look for a particular string in
|
||||
* the output.
|
||||
*/
|
||||
char prog[] = "tune2fs";
|
||||
if (e2prog (prog) == -1)
|
||||
return NULL;
|
||||
|
||||
r = command (&out, &err, prog, "-l", device, NULL);
|
||||
if (r == -1) {
|
||||
reply_with_error ("%s", err);
|
||||
free (out);
|
||||
free (err);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free (err);
|
||||
|
||||
/* Look for /\nFilesystem UUID:\s+/ in the output. */
|
||||
p = strstr (out, "\nFilesystem UUID:");
|
||||
if (p == NULL) {
|
||||
reply_with_error ("no Filesystem UUID in the output of tune2fs -l");
|
||||
free (out);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
p += 17;
|
||||
while (*p && c_isspace (*p))
|
||||
p++;
|
||||
if (!*p) {
|
||||
reply_with_error ("malformed Filesystem UUID in the output of tune2fs -l");
|
||||
free (out);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Now 'p' hopefully points to the start of the UUID. */
|
||||
q = p;
|
||||
while (*q && (c_isxdigit (*q) || *q == '-'))
|
||||
q++;
|
||||
if (!*q) {
|
||||
reply_with_error ("malformed Filesystem UUID in the output of tune2fs -l");
|
||||
free (out);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*q = '\0';
|
||||
|
||||
p = strdup (p);
|
||||
if (!p) {
|
||||
reply_with_perror ("strdup");
|
||||
free (out);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free (out);
|
||||
return p; /* caller frees */
|
||||
return do_vfs_uuid (device);
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -2222,7 +2222,7 @@ C<device> to C<label>. Filesystem labels are limited to
|
||||
You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2label>
|
||||
to return the existing label on a filesystem.");
|
||||
|
||||
("get_e2label", (RString "label", [Device "device"]), 81, [],
|
||||
("get_e2label", (RString "label", [Device "device"]), 81, [DeprecatedBy "vfs_label"],
|
||||
[],
|
||||
"get the ext2/3/4 filesystem label",
|
||||
"\
|
||||
@@ -2252,8 +2252,13 @@ L<tune2fs(8)> manpage.
|
||||
You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2uuid>
|
||||
to return the existing UUID of a filesystem.");
|
||||
|
||||
("get_e2uuid", (RString "uuid", [Device "device"]), 83, [],
|
||||
[],
|
||||
("get_e2uuid", (RString "uuid", [Device "device"]), 83, [DeprecatedBy "vfs_uuid"],
|
||||
(* Regression test for RHBZ#597112. *)
|
||||
(let uuid = uuidgen () in
|
||||
[InitBasicFS, Always, TestOutput (
|
||||
[["mke2journal"; "1024"; "/dev/sdb"];
|
||||
["set_e2uuid"; "/dev/sdb"; uuid];
|
||||
["get_e2uuid"; "/dev/sdb"]], uuid)]),
|
||||
"get the ext2/3/4 filesystem UUID",
|
||||
"\
|
||||
This returns the ext2/3/4 filesystem UUID of the filesystem on
|
||||
|
||||
Reference in New Issue
Block a user