* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <string.h>
+#include <blkid.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <sys/stat.h>
-#include <blkid/blkid.h>
#include "sd-id128.h"
-#include "gpt.h"
+
+#include "alloc-util.h"
+#include "blkid-util.h"
#include "efivars.h"
+#include "fd-util.h"
+#include "gpt.h"
+#include "string-util.h"
#include "udev.h"
static void print_property(struct udev_device *dev, bool test, const char *name, const char *value) {
static int find_gpt_root(struct udev_device *dev, blkid_probe pr, bool test) {
-#if defined(GPT_ROOT_NATIVE) && defined(ENABLE_EFI)
+#if defined(GPT_ROOT_NATIVE) && ENABLE_EFI
_cleanup_free_ char *root_id = NULL;
bool found_esp = false;
errno = 0;
pl = blkid_probe_get_partitions(pr);
if (!pl)
- return errno ? -errno : -ENOMEM;
+ return -errno ?: -ENOMEM;
nvals = blkid_partlist_numof_partitions(pl);
for (i = 0; i < nvals; i++) {
found_esp = true;
} else if (sd_id128_equal(type, GPT_ROOT_NATIVE)) {
+ unsigned long long flags;
+
+ flags = blkid_partition_get_flags(pp);
+ if (flags & GPT_FLAG_NO_AUTO)
+ continue;
/* We found a suitable root partition, let's
* remember the first one. */
int rc;
if (fstat(blkid_probe_get_fd(pr), &st))
- return -1;
+ return -errno;
blkid_probe_enable_partitions(pr, 1);
int64_t offset = 0;
bool noraid = false;
_cleanup_close_ int fd = -1;
- blkid_probe pr;
+ _cleanup_blkid_free_probe_ blkid_probe pr = NULL;
const char *data;
const char *name;
int nvals;
fd = open(udev_device_get_devnode(dev), O_RDONLY|O_CLOEXEC);
if (fd < 0) {
- fprintf(stderr, "error: %s: %m\n", udev_device_get_devnode(dev));
+ err = log_debug_errno(errno, "Failure opening block device %s: %m", udev_device_get_devnode(dev));
goto out;
}
if (err < 0)
goto out;
- log_debug("probe %s %sraid offset=%"PRIu64,
+ log_debug("probe %s %sraid offset=%"PRIi64,
udev_device_get_devnode(dev),
noraid ? "no" : "", offset);
if (is_gpt)
find_gpt_root(dev, pr, test);
- blkid_free_probe(pr);
out:
if (err < 0)
return EXIT_FAILURE;
const struct udev_builtin udev_builtin_blkid = {
.name = "blkid",
.cmd = builtin_blkid,
- .help = "filesystem and partition probing",
+ .help = "Filesystem and partition probing",
.run_once = true,
};