Files
u-boot/include/fs.h
Simon Glass 878f27e552 fs: Use an empty string for the root directory
It is easier to use an empty string when the root directory is intended.
Adjust the code to drop use of "/" and NULL and just use and empty
string.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-12 14:29:06 +02:00

117 lines
2.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* U-Boot Filesystem layer
*
* Models a filesystem which can be mounted and unmounted. It also allows a
* directory to be looked up.
*
* Copyright 2025 Simon Glass <sjg@chromium.org>
*/
#ifndef __FS_H
#define __FS_H
#include <fs_common.h>
struct udevice;
enum {
/* Maximum length of the filesystem name */
FS_MAX_NAME_LEN = 128,
};
/**
* struct fs_plat - Filesystem information
*
* @name: Name of the filesystem, or empty if not available
*/
struct fs_plat {
char name[FS_MAX_NAME_LEN];
};
/**
* struct fs_priv - Private information for the FS devices
*
* @mounted: true if mounted
*/
struct fs_priv {
bool mounted;
};
struct fs_ops {
/**
* mount() - Mount the filesystem
*
* @dev: Filesystem device
* Return 0 if OK, -EISCONN if already mounted, other -ve on error
*/
int (*mount)(struct udevice *dev);
/**
* unmount() - Unmount the filesystem
*
* @dev: Filesystem device
* Return 0 if OK, -ENOTCONN if not mounted, other -ve on error
*/
int (*unmount)(struct udevice *dev);
/**
* lookup_dir() - Look up a directory on a filesystem
*
* This should not set up the uclass-private data; this is done by
* fs_lookup_dir()
*
* @dev: Filesystem device
* @path: Path to look up, "" for the root
* @dirp: Returns associated directory device, creating if necessary
* Return 0 if OK, -ENOENT, other -ve on error
*/
int (*lookup_dir)(struct udevice *dev, const char *path,
struct udevice **dirp);
};
/* Get access to a filesystem's operations */
#define fs_get_ops(dev) ((struct fs_ops *)(dev)->driver->ops)
/**
* fs_mount() - Mount the filesystem
*
* @dev: Filesystem device
* Return 0 if OK, -EISCONN if already mounted, other -ve on error
*/
int fs_mount(struct udevice *dev);
/**
* fs_unmount() - Unmount the filesystem
*
* @dev: Filesystem device
* Return 0 if OK, -ENOTCONN if not mounted, other -ve on error
*/
int fs_unmount(struct udevice *dev);
/**
* fs_lookup_dir() - Look up a directory on a filesystem
*
* If a new directory-device is created, its uclass data is set up also
*
* @dev: Filesystem device
* @path: Path to look up, "" or "/" for the root
* @dirp: Returns associated directory device, creating if necessary
* Return 0 if OK, -ENOENT, other -ve on error
*/
int fs_lookup_dir(struct udevice *dev, const char *path, struct udevice **dirp);
/**
* fs_split_path() - Get a list of subdirs in a filename
*
* For example, '/path/to/fred' returns an alist containing allocated strings
* 'path' and 'to', with \*leafp pointing to the 'f'
*
* @fname: Filename to parse
* @subdirp: Returns an allocating string containing the subdirs, or "/" if none
* @leafp: Returns a pointer to the leaf filename, within @fname
*/
int fs_split_path(const char *fname, char **subdirp, const char **leafp);
#endif