diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-08-01 02:17:32 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-08-01 02:17:32 +0000 |
commit | 658313bd4f7676ac9a1386f311390af716984bb6 (patch) | |
tree | 72e2add575b3089b18f3f4325fd1e07d2a18791f /nuttx/fs/fs_files.c | |
parent | d70a972659915d79d44b95b8e01f7d641a583958 (diff) | |
download | px4-nuttx-658313bd4f7676ac9a1386f311390af716984bb6.tar.gz px4-nuttx-658313bd4f7676ac9a1386f311390af716984bb6.tar.bz2 px4-nuttx-658313bd4f7676ac9a1386f311390af716984bb6.zip |
Simplication
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@794 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/fs/fs_files.c')
-rw-r--r-- | nuttx/fs/fs_files.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/nuttx/fs/fs_files.c b/nuttx/fs/fs_files.c index fd8351fa5..245ff99a0 100644 --- a/nuttx/fs/fs_files.c +++ b/nuttx/fs/fs_files.c @@ -399,18 +399,29 @@ int files_allocate(FAR struct inode *inode, int oflags, off_t pos) int files_close(int filedes) { FAR struct filelist *list; - int ret = -EBADF; + int ret; + + /* Get the thread-specific file list */ list = sched_getfiles(); - if (list) + if (!list) { - if (filedes >=0 && filedes < CONFIG_NFILE_DESCRIPTORS) - { - _files_semtake(list); - ret = _files_close(&list->fl_files[filedes]); - _files_semgive(list); - } + return -EMFILE; } + + /* If the file was properly opened, there should be an inode assigned */ + + if (filedes < 0 || filedes >= CONFIG_NFILE_DESCRIPTORS || !list->fl_files[filedes].f_inode) + { + return -EBADF; + } + + /* Perform the protected close operation */ + + _files_semtake(list); + ret = _files_close(&list->fl_files[filedes]); + _files_semgive(list); + return ret; } /**************************************************************************** |