mirror of
https://github.com/apache/nuttx.git
synced 2026-09-03 07:33:00 +00:00
Add NXFFS ioctls
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3566 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
4aa6da9344
commit
77d4700a62
2 changed files with 48 additions and 4 deletions
|
|
@ -47,6 +47,7 @@
|
|||
#include <debug.h>
|
||||
|
||||
#include <nuttx/fs.h>
|
||||
#include <nuttx/ioctl.h>
|
||||
#include <nuttx/mtd.h>
|
||||
|
||||
#include "nxffs.h"
|
||||
|
|
@ -82,6 +83,7 @@
|
|||
int nxffs_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
||||
{
|
||||
FAR struct nxffs_volume_s *volume;
|
||||
int ret;
|
||||
|
||||
fvdbg("cmd: %d arg: %08lx\n", cmd, arg);
|
||||
|
||||
|
|
@ -94,7 +96,45 @@ int nxffs_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||
volume = filep->f_inode->i_private;
|
||||
DEBUGASSERT(volume != NULL);
|
||||
|
||||
/* No ioctl commands yet supported */
|
||||
/* Get exclusive access to the volume. Note that the volume exclsem
|
||||
* protects the open file list.
|
||||
*/
|
||||
|
||||
return -ENOTTY;
|
||||
ret = sem_wait(&volume->exclsem);
|
||||
if (ret != OK)
|
||||
{
|
||||
ret = -errno;
|
||||
fdbg("sem_wait failed: %d\n", ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Only a reformat command is supported */
|
||||
|
||||
if (cmd == FIOC_REFORMAT)
|
||||
{
|
||||
fvdbg("Reformat command\n");
|
||||
|
||||
/* We cannot reformat the volume if there are any open inodes */
|
||||
|
||||
if (volume->ofiles)
|
||||
{
|
||||
fdbg("Open files\n");
|
||||
ret = -EBUSY;
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
/* Re-format the volume -- all is lost */
|
||||
|
||||
ret = nxffs_reformat(volume);
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
/* No other commands supported */
|
||||
|
||||
ret = -ENOTTY;
|
||||
|
||||
errout_with_semaphore:
|
||||
sem_post(&volume->exclsem);
|
||||
errout:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue