summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-12-29 06:28:28 +0000
committer[email protected] <[email protected]>2012-12-29 06:28:28 +0000
commit58fc3334b0b1364e5b36ddd52d00c82e612b91bf (patch)
treed7ea383d6b7e07621fd5c1d55f663c15bb00dfd2
parentc0fadff0616172db954a5ed0639a94630d6b7a61 (diff)
add dfs_fd check code in dfs and fix a warning.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2547 bbd45198-f89e-11dd-88c7-29a3b14d5316
-rw-r--r--components/dfs/include/dfs_def.h4
-rw-r--r--components/dfs/src/dfs.c10
2 files changed, 12 insertions, 2 deletions
diff --git a/components/dfs/include/dfs_def.h b/components/dfs/include/dfs_def.h
index c90a9709aa..52560eae84 100644
--- a/components/dfs/include/dfs_def.h
+++ b/components/dfs/include/dfs_def.h
@@ -282,10 +282,12 @@ struct dirent
#endif
/* file descriptor */
+#define DFS_FD_MAGIC 0xfdfd
struct dfs_fd
{
+ rt_uint16_t magic; /* file descriptor magic number */
+ rt_uint16_t type; /* Type (regular or socket) */
char *path; /* Name (below mount point) */
- int type; /* Type (regular or socket) */
int ref_count; /* Descriptor reference count */
struct dfs_filesystem *fs; /* Resident file system */
diff --git a/components/dfs/src/dfs.c b/components/dfs/src/dfs.c
index 86ef809fbf..bcef0973b3 100644
--- a/components/dfs/src/dfs.c
+++ b/components/dfs/src/dfs.c
@@ -47,7 +47,7 @@ struct dfs_fd fd_table[DFS_FD_MAX];
void dfs_init(void)
{
/* clear filesystem operations table */
- rt_memset(filesystem_operation_table, 0, sizeof(filesystem_operation_table));
+ rt_memset((void *)filesystem_operation_table, 0, sizeof(filesystem_operation_table));
/* clear filesystem table */
rt_memset(filesystem_table, 0, sizeof(filesystem_table));
/* clean fd table */
@@ -123,6 +123,7 @@ int fd_new(void)
d = &(fd_table[idx]);
d->ref_count = 1;
+ d->magic = DFS_FD_MAGIC;
__result:
dfs_unlock();
@@ -153,6 +154,13 @@ struct dfs_fd *fd_get(int fd)
dfs_lock();
d = &fd_table[fd];
+ /* check dfs_fd valid or not */
+ if (d->magic != DFS_FD_MAGIC)
+ {
+ dfs_unlock();
+ return RT_NULL;
+ }
+
/* increase the reference count */
d->ref_count ++;
dfs_unlock();