apps/fsutils/mksmartfs: Add a check to see if the SmartFS is already formatted. apps/nshlib: Add a force flag (-f) to mksmartfs. SmartFS will be formatted only if (1) the FLASH does not already hold a SmartFS, or (2) the force flag is set
This commit is contained in:
parent
feb1229dc3
commit
8116d10da3
@ -74,6 +74,61 @@
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: issmartfs
|
||||
*
|
||||
* Description:
|
||||
* Check a SMART (Sector Mapped Allocation for Really Tiny) Flash file
|
||||
* system image on the specified block device (must be a SMART device).
|
||||
*
|
||||
* Inputs:
|
||||
* pathname - the full path to a registered block driver
|
||||
*
|
||||
* Return:
|
||||
* Zero (OK) on success; -1 (ERROR) on failure with errno set appropriately:
|
||||
*
|
||||
* EINVAL - NULL block driver string
|
||||
* ENOENT - 'pathname' does not refer to anything in the filesystem.
|
||||
* ENOTBLK - 'pathname' does not refer to a block driver
|
||||
* EFTYPE - the block driver hasn't been formated yet
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int issmartfs(FAR const char *pathname)
|
||||
{
|
||||
struct smart_format_s fmt;
|
||||
int ret, fd;
|
||||
|
||||
/* Find the inode of the block driver identified by 'source' */
|
||||
|
||||
fd = open(pathname, O_RDONLY);
|
||||
if (fd < 0)
|
||||
{
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
/* Get the format information so we know the block have been formatted */
|
||||
|
||||
ret = ioctl(fd, BIOC_GETFORMAT, (unsigned long)&fmt);
|
||||
if (ret < 0)
|
||||
{
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!(fmt.flags & SMART_FMT_ISFORMATTED))
|
||||
{
|
||||
set_errno(EFTYPE);
|
||||
ret = ERROR;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
/* Close the driver */
|
||||
|
||||
close(fd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mksmartfs
|
||||
*
|
||||
|
@ -56,6 +56,28 @@ extern "C"
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: issmartfs
|
||||
*
|
||||
* Description:
|
||||
* Check a SMART (Sector Mapped Allocation for Really Tiny) Flash file
|
||||
* system image on the specified block device (must be a SMART device).
|
||||
*
|
||||
* Inputs:
|
||||
* pathname - the full path to a registered block driver
|
||||
*
|
||||
* Return:
|
||||
* Zero (OK) on success; -1 (ERROR) on failure with errno set appropriately:
|
||||
*
|
||||
* EINVAL - NULL block driver string
|
||||
* ENOENT - 'pathname' does not refer to anything in the filesystem.
|
||||
* ENOTBLK - 'pathname' does not refer to a block driver
|
||||
* EFTYPE - the block driver hasn't been formated yet
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int issmartfs(FAR const char *pathname);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mksmartfs
|
||||
*
|
||||
|
@ -1449,8 +1449,9 @@ errout_with_fmt:
|
||||
int cmd_mksmartfs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
{
|
||||
char *fullpath = NULL;
|
||||
int ret = ERROR;
|
||||
int ret = OK;
|
||||
uint16_t sectorsize = 0;
|
||||
int force = 0;
|
||||
int opt;
|
||||
#ifdef CONFIG_SMARTFS_MULTI_ROOT_DIRS
|
||||
int nrootdirs = 1;
|
||||
@ -1459,10 +1460,14 @@ int cmd_mksmartfs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
/* Process any options */
|
||||
|
||||
optind = 0;
|
||||
while ((opt = getopt(argc, argv, "s:")) != -1)
|
||||
while ((opt = getopt(argc, argv, "fs:")) != -1)
|
||||
{
|
||||
switch (opt)
|
||||
{
|
||||
case 'f':
|
||||
force = 1;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
sectorsize = atoi(optarg);
|
||||
if (sectorsize < 256 || sectorsize > 16384)
|
||||
@ -1504,6 +1509,7 @@ int cmd_mksmartfs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (force || issmartfs(fullpath) != OK)
|
||||
{
|
||||
#ifdef CONFIG_SMARTFS_MULTI_ROOT_DIRS
|
||||
ret = mksmartfs(fullpath, sectorsize, nrootdirs);
|
||||
|
Loading…
x
Reference in New Issue
Block a user