| Index: rootdev.h
|
| diff --git a/rootdev.h b/rootdev.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..03b8bd807c04f1f38b1362f1397aec62b7479249
|
| --- /dev/null
|
| +++ b/rootdev.h
|
| @@ -0,0 +1,104 @@
|
| +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + *
|
| + * Interface for root device discovery via sysfs with optional
|
| + * bells and whistles.
|
| + */
|
| +#ifndef ROOTDEV_ROOTDEV_H_
|
| +#define ROOTDEV_ROOTDEV_H_
|
| +
|
| +#include <stdbool.h>
|
| +#include <sys/types.h>
|
| +
|
| +#ifdef __cplusplus
|
| +extern "C" {
|
| +#endif
|
| +
|
| +/**
|
| + * rootdev: returns the path to the root device in @path
|
| + * @path: pre-allocated char array the result will be written to
|
| + * @size: size of @path
|
| + * @full: whether to try to do full resolution. E.g., device-mapper
|
| + * @strip: whether to remove the partition # or not.
|
| + *
|
| + * Returns 0 on success, non-zero on error.
|
| + */
|
| +int rootdev(char *path, size_t size, bool full, bool strip);
|
| +
|
| +/* All interface below this point will most definitely be C specific. If
|
| + * we rewrite this as a C++ class, only the above generic interface should
|
| + * still be provided.
|
| + */
|
| +
|
| +/**
|
| + * rootdev_wrapper: rootdev equivalent with paths can be substituted.
|
| + */
|
| +int rootdev_wrapper(char *path, size_t size,
|
| + bool full, bool strip,
|
| + dev_t *dev,
|
| + const char *search, const char *dev_path);
|
| +/**
|
| + * rootdev_get_device: finds the /dev path for @dev
|
| + * @dst: destination char array
|
| + * @size: size of @dst
|
| + * @dev: dev_t specifying the known root device
|
| + * @search: path to search under. NULL for default.
|
| + *
|
| + * Returns 0 on success, non-zero on error.
|
| + *
|
| + * The name of the devices is placed in @dst. It will not
|
| + * be qualified with /dev/ by default.
|
| + */
|
| +int rootdev_get_device(char *dst, size_t size, dev_t dev,
|
| + const char *search);
|
| +
|
| +/**
|
| + * rootdev_get_device_slave: returns the first device under @device/slaves
|
| + * @slave: destination char array for storing the result
|
| + * @size: size of @slave
|
| + * @dev: pointer to a dev_t to populate
|
| + * @device: name of the device to probe, like "sdb"
|
| + * @search: path to search under. NULL for default.
|
| + *
|
| + * Returns 0 on success, non-zero on failure.
|
| + * It is safe for @device == @slave.
|
| + */
|
| +int rootdev_get_device_slave(char *slave, size_t size, dev_t *dev,
|
| + const char *device, const char *search);
|
| +
|
| +/**
|
| + * rootdev_get_path: converts a device name to a path in the device tree
|
| + * @path: char array to store the path
|
| + * @size: size of @devpath
|
| + * @device: name of the device
|
| + * @dev: optional expected dev_t of the node.
|
| + * @dev_path: path to dev tree. NULL for default (/dev)
|
| + *
|
| + * A @dev of 0 is ignored.
|
| + *
|
| + * @path is populated for all return codes.
|
| + * Returns 0 on success and non-zero on error:
|
| + * -1 on unexpected errors (@path may be invalid)
|
| + * 1 on no existing @path
|
| + * 2 @path exists but the dev_t value is mismatched.
|
| + *
|
| + * Nb, this function does NOT search /dev for a match. It performs a normal
|
| + * string concatenation and probes for the existence. If udev has moved,
|
| + * or otherwise renamed, the device, a positive value is returned.
|
| + * The caller may then use the dev_t and @path to create the node with
|
| + * mknod(2).
|
| + */
|
| +int rootdev_get_path(char *path, size_t size, const char *device, dev_t dev,
|
| + const char *dev_path);
|
| +
|
| +const char *rootdev_get_partition(const char *dst, size_t len);
|
| +void rootdev_strip_partition(char *dst, size_t len);
|
| +int rootdev_symlink_active(const char *path);
|
| +int rootdev_create_devices(const char *name, dev_t dev, bool symlink);
|
| +
|
| +#ifdef __cplusplus
|
| +} /* extern "C" */
|
| +#endif
|
| +
|
| +#endif /* ROOTDEV_ROOTDEV_H_ */
|
|
|