mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
This commit is based on the s390-tools-1.39.0 version. Changes on top of s390-tools-1.39.0: - Add MIT license to all source files - Add LICENSE file - Transform REAMDE to README.md (markdown) - Add AUTHORS.md file - Add CONTRIBUTING.md file - Move changelog from README to CHANGELOG.md file Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
77 lines
1.7 KiB
C
77 lines
1.7 KiB
C
/*
|
|
* zdev - Modify and display the persistent configuration of devices
|
|
*
|
|
* Copyright IBM Corp. 2016, 2017
|
|
*
|
|
* s390-tools is free software; you can redistribute it and/or modify
|
|
* it under the terms of the MIT license. See LICENSE for details.
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "devnode.h"
|
|
#include "findmnt.h"
|
|
#include "misc.h"
|
|
|
|
#define FINDMNT_CMDLINE "findmnt -n -T %s -o SOURCE 2>/dev/null"
|
|
|
|
static struct devnode *devnode_from_line(const char *line)
|
|
{
|
|
char *copy, *end;
|
|
struct devnode *devnode;
|
|
|
|
copy = misc_strdup(line);
|
|
|
|
/* Could be /dev/sda[/subvolname] */
|
|
end = strchr(copy, '[');
|
|
if (end)
|
|
*end = 0;
|
|
|
|
devnode = devnode_from_node(copy, err_ignore);
|
|
|
|
free(copy);
|
|
|
|
return devnode;
|
|
}
|
|
|
|
/* Return a newly allocated ptrlist containing all devnodes that provide
|
|
* the file system on which @path is located. Return %NULL if no devnodes
|
|
* were found. We need this in addition to lsblk output because lsblk doesn't
|
|
* work with btrfs subvolumes. */
|
|
struct util_list *findmnt_get_devnodes_by_path(const char *path)
|
|
{
|
|
struct util_list *devnodes;
|
|
char *quoted_path, *cmd, *output, *next, *curr;
|
|
struct devnode *devnode;
|
|
|
|
devnodes = ptrlist_new();
|
|
quoted_path = quote_str(path, 1);
|
|
cmd = misc_asprintf(FINDMNT_CMDLINE, quoted_path);
|
|
|
|
output = misc_read_cmd_output(cmd, 0, err_ignore);
|
|
if (!output)
|
|
goto out;
|
|
|
|
/* Iterate over each line. */
|
|
next = output;
|
|
while ((curr = strsep(&next, "\n"))) {
|
|
devnode = devnode_from_line(curr);
|
|
if (devnode)
|
|
ptrlist_add(devnodes, devnode);
|
|
}
|
|
|
|
out:
|
|
free(output);
|
|
free(cmd);
|
|
free(quoted_path);
|
|
|
|
/* Make empty list detection easier for calling function. */
|
|
if (util_list_is_empty(devnodes)) {
|
|
ptrlist_free(devnodes, 1);
|
|
devnodes = NULL;
|
|
}
|
|
|
|
return devnodes;
|
|
}
|