yaffs direct: Add EROFS error for hundling chmod on a read-only fs
authorCharles Manning <cdhmanning@gmail.com>
Mon, 15 Nov 2010 02:02:03 +0000 (15:02 +1300)
committerCharles Manning <cdhmanning@gmail.com>
Mon, 15 Nov 2010 02:02:03 +0000 (15:02 +1300)
Was EINVAL. EROFS is more meaningful.

Signed-off-by: Charles Manning <cdhmanning@gmail.com>
direct/python/yaffs_error_converter.c
direct/yaffsfs.c
direct/yportenv.h

index e9a80703c31b788fd3030e95bbda20766ac8724a..1fd7b213cb1be760e6ad6efb3fe45cb9bb8cc89e 100644 (file)
@@ -37,6 +37,7 @@ const error_entry error_list[] = {
        { ENOTDIR , "ENOTDIR"},
        { EISDIR , "EISDIR"},
        { ENFILE, "ENFILE"},
+       { EROFS, "EROFS"},
        { 0, NULL }
 };
 
index 203a034c739dfd4287459cb8402746a8b5efb6ee..7a05c2192b4b2fdae5e2f3cb27267d96f5711c7d 100644 (file)
@@ -1737,9 +1737,13 @@ int yaffs_access(const YCHAR *path, int amode)
 int yaffs_chmod(const YCHAR *path, mode_t mode)
 {
        struct yaffs_obj *obj;
-
        int retVal = -1;
 
+       if(mode & ~(0777)){
+               yaffsfs_SetError(-EINVAL);
+               return -1;
+       }
+
        yaffsfs_Lock();
 
        obj = yaffsfs_FindObject(NULL,path,0,1);
@@ -1747,7 +1751,7 @@ int yaffs_chmod(const YCHAR *path, mode_t mode)
        if(!obj)
                yaffsfs_SetError(-ENOENT);
        else if(obj->my_dev->read_only)
-               yaffsfs_SetError(-EINVAL);
+               yaffsfs_SetError(-EROFS);
        else
                retVal = yaffsfs_DoChMod(obj,mode);
 
@@ -1761,16 +1765,20 @@ int yaffs_chmod(const YCHAR *path, mode_t mode)
 int yaffs_fchmod(int fd, mode_t mode)
 {
        struct yaffs_obj *obj;
-
        int retVal = -1;
 
+       if(mode & ~(0777)){
+               yaffsfs_SetError(-EINVAL);
+               return -1;
+       }
+
        yaffsfs_Lock();
        obj = yaffsfs_GetHandleObject(fd);
 
        if(!obj)
-               yaffsfs_SetError(-ENOENT);
+               yaffsfs_SetError(-EBADF);
        else if(obj->my_dev->read_only)
-               yaffsfs_SetError(-EINVAL);
+               yaffsfs_SetError(-EROFS);
        else
                retVal = yaffsfs_DoChMod(obj,mode);
 
index 22afb069b14c2b0d80780f1a2d429cdf90f6be1a..3f368aa504a3620414d3dc8200b4d72dbeaa8bd2 100644 (file)
 #define ENOSPC 28
 #endif
 
+#ifndef EROFS
+#define EROFS  30
+#endif
+
 #ifndef ERANGE
 #define ERANGE 34
 #endif