aboutsummaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
authorpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-03-31 15:13:12 +0000
committerpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-03-31 15:13:12 +0000
commitb277d5c19326b572c19c77ceb13ad73dbe213c23 (patch)
tree98e0f474d93010b7655ad4b7528df65b3874537f /nuttx
parent8f17baae37707f163ce7bbe7772d060efe11a858 (diff)
downloadpx4-firmware-b277d5c19326b572c19c77ceb13ad73dbe213c23.tar.gz
px4-firmware-b277d5c19326b572c19c77ceb13ad73dbe213c23.tar.bz2
px4-firmware-b277d5c19326b572c19c77ceb13ad73dbe213c23.zip
Fix read() return value for the case of permissions problem
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4545 7fd9a85b-ad96-42d3-883c-3090e2eb8679
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/fs/fs_read.c44
-rw-r--r--nuttx/sched/sched_setupidlefiles.c2
2 files changed, 25 insertions, 21 deletions
diff --git a/nuttx/fs/fs_read.c b/nuttx/fs/fs_read.c
index 8afa65637..045c81f59 100644
--- a/nuttx/fs/fs_read.c
+++ b/nuttx/fs/fs_read.c
@@ -1,8 +1,8 @@
/****************************************************************************
* fs_read.c
*
- * Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007-2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,35 +63,39 @@ static inline ssize_t file_read(int fd, FAR void *buf, size_t nbytes)
list = sched_getfiles();
if (!list)
{
- errno = EMFILE;
- return ERROR;
+ /* Failed to get the file list */
+
+ ret = -EMFILE;
}
/* Were we given a valid file descriptor? */
- if ((unsigned int)fd < CONFIG_NFILE_DESCRIPTORS)
+ else if ((unsigned int)fd < CONFIG_NFILE_DESCRIPTORS)
{
FAR struct file *this_file = &list->fl_files[fd];
+ FAR struct inode *inode = this_file->f_inode;
- /* Was this file opened for read access? */
+ /* Yes.. Was this file opened for read access? */
- if ((this_file->f_oflags & O_RDOK) != 0)
+ if ((this_file->f_oflags & O_RDOK) == 0)
{
- struct inode *inode = this_file->f_inode;
+ /* No.. File is not read-able */
- /* Is a driver or mountpoint registered? If so, does it support
- * the read method?
- */
+ ret = -EACCES;
+ }
- if (inode && inode->u.i_ops && inode->u.i_ops->read)
- {
- /* Yes, then let it perform the read. NOTE that for the case
- * of the mountpoint, we depend on the read methods bing
- * identical in signature and position in the operations vtable.
- */
+ /* Is a driver or mountpoint registered? If so, does it support
+ * the read method?
+ */
+
+ else if (inode && inode->u.i_ops && inode->u.i_ops->read)
+ {
+ /* Yes.. then let it perform the read. NOTE that for the case
+ * of the mountpoint, we depend on the read methods bing
+ * identical in signature and position in the operations vtable.
+ */
- ret = (int)inode->u.i_ops->read(this_file, (char*)buf, (size_t)nbytes);
- }
+ ret = (int)inode->u.i_ops->read(this_file, (char*)buf, (size_t)nbytes);
}
}
@@ -99,7 +103,7 @@ static inline ssize_t file_read(int fd, FAR void *buf, size_t nbytes)
if (ret < 0)
{
- errno = -ret;
+ set_errno(-ret);
return ERROR;
}
diff --git a/nuttx/sched/sched_setupidlefiles.c b/nuttx/sched/sched_setupidlefiles.c
index 7b2839685..f2bfb78d2 100644
--- a/nuttx/sched/sched_setupidlefiles.c
+++ b/nuttx/sched/sched_setupidlefiles.c
@@ -123,7 +123,7 @@ int sched_setupidlefiles(FAR _TCB *tcb)
* it and got some file descriptor other than 0.
*/
- if (fd >- 0)
+ if (fd > 0)
{
slldbg("Open /dev/console fd: %d\n", fd);
(void)close(fd);