X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Fyaffsfs.c;h=041287c1e77405a01ee575bb13a4906928fcf0a2;hp=a494e34ca67612b093ea97899d4d05215324b477;hb=299791ad6d378fae30d50560097a7633cde3aab2;hpb=4a96d43bb566f00596a31a41c535cabbf52d4f20 diff --git a/direct/yaffsfs.c b/direct/yaffsfs.c index a494e34..041287c 100644 --- a/direct/yaffsfs.c +++ b/direct/yaffsfs.c @@ -826,10 +826,10 @@ int yaffsfs_do_write(int fd, const void *vbuf, unsigned int nbyte, int isPwrite, yaffsfs_SetError(-EINVAL); totalWritten=-1; } else if( h && obj){ - if(isPwrite) - startPos = offset; if(h->append) startPos = yaffs_GetObjectFileLength(obj); + else if(isPwrite) + startPos = offset; else startPos = h->position; @@ -1184,7 +1184,7 @@ int yaffs_fstat(int fd, struct yaffs_stat *buf) /* xattrib functions */ -int yaffs_setxattr(const YCHAR *path, const char *name, const void *data, int size, int flags) +static int yaffs_do_setxattr(const YCHAR *path, const char *name, const void *data, int size, int flags, int follow) { yaffs_Object *obj; @@ -1193,11 +1193,16 @@ int yaffs_setxattr(const YCHAR *path, const char *name, const void *data, int si yaffsfs_Lock(); obj = yaffsfs_FindObject(NULL,path,0); - obj = yaffsfs_FollowLink(obj,0); + if(follow) + obj = yaffsfs_FollowLink(obj,0); - if(obj) + if(obj) { retVal = yaffs_SetXAttribute(obj,name,data,size,flags); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* todo error not found */ yaffsfs_SetError(-ENOENT); @@ -1207,6 +1212,18 @@ int yaffs_setxattr(const YCHAR *path, const char *name, const void *data, int si } +int yaffs_setxattr(const YCHAR *path, const char *name, const void *data, int size, int flags) +{ + return yaffs_do_setxattr(path, name, data, size, flags, 1); +} + +int yaffs_lsetxattr(const YCHAR *path, const char *name, const void *data, int size, int flags) +{ + return yaffs_do_setxattr(path, name, data, size, flags, 0); +} + + + int yaffs_fsetxattr(int fd, const char *name, const void *data, int size, int flags) { yaffs_Object *obj; @@ -1216,9 +1233,13 @@ int yaffs_fsetxattr(int fd, const char *name, const void *data, int size, int fl yaffsfs_Lock(); obj = yaffsfs_GetHandleObject(fd); - if(obj) + if(obj) { retVal = yaffs_SetXAttribute(obj,name,data,size,flags); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* bad handle */ yaffsfs_SetError(-EBADF); @@ -1227,7 +1248,7 @@ int yaffs_fsetxattr(int fd, const char *name, const void *data, int size, int fl return retVal; } -int yaffs_getxattr(const YCHAR *path, const char *name, void *data, int size) +static int yaffs_do_getxattr(const YCHAR *path, const char *name, void *data, int size, int follow) { yaffs_Object *obj; @@ -1236,11 +1257,16 @@ int yaffs_getxattr(const YCHAR *path, const char *name, void *data, int size) yaffsfs_Lock(); obj = yaffsfs_FindObject(NULL,path,0); - obj = yaffsfs_FollowLink(obj,0); + if(follow) + obj = yaffsfs_FollowLink(obj,0); - if(obj) + if(obj) { retVal = yaffs_GetXAttribute(obj,name,data,size); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* todo error not found */ yaffsfs_SetError(-ENOENT); @@ -1250,6 +1276,17 @@ int yaffs_getxattr(const YCHAR *path, const char *name, void *data, int size) } +int yaffs_getxattr(const YCHAR *path, const char *name, void *data, int size) +{ + return yaffs_do_getxattr( path, name, data, size, 1); +} +int yaffs_lgetxattr(const YCHAR *path, const char *name, void *data, int size) +{ + return yaffs_do_getxattr( path, name, data, size, 0); +} + + + int yaffs_fgetxattr(int fd, const char *name, void *data, int size) { yaffs_Object *obj; @@ -1259,9 +1296,13 @@ int yaffs_fgetxattr(int fd, const char *name, void *data, int size) yaffsfs_Lock(); obj = yaffsfs_GetHandleObject(fd); - if(obj) + if(obj) { retVal = yaffs_GetXAttribute(obj,name,data,size); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* bad handle */ yaffsfs_SetError(-EBADF); @@ -1270,7 +1311,7 @@ int yaffs_fgetxattr(int fd, const char *name, void *data, int size) return retVal; } -int yaffs_listxattr(const YCHAR *path, char *data, int size) +static int yaffs_do_listxattr(const YCHAR *path, char *data, int size, int follow) { yaffs_Object *obj; @@ -1279,11 +1320,16 @@ int yaffs_listxattr(const YCHAR *path, char *data, int size) yaffsfs_Lock(); obj = yaffsfs_FindObject(NULL,path,0); - obj = yaffsfs_FollowLink(obj,0); + if(follow) + obj = yaffsfs_FollowLink(obj,0); - if(obj) + if(obj) { retVal = yaffs_ListXAttributes(obj, data,size); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* todo error not found */ yaffsfs_SetError(-ENOENT); @@ -1293,6 +1339,16 @@ int yaffs_listxattr(const YCHAR *path, char *data, int size) } +int yaffs_listxattr(const YCHAR *path, char *data, int size) +{ + return yaffs_do_listxattr(path, data, size, 1); +} + +int yaffs_llistxattr(const YCHAR *path, char *data, int size) +{ + return yaffs_do_listxattr(path, data, size, 0); +} + int yaffs_flistxattr(int fd, char *data, int size) { yaffs_Object *obj; @@ -1302,9 +1358,13 @@ int yaffs_flistxattr(int fd, char *data, int size) yaffsfs_Lock(); obj = yaffsfs_GetHandleObject(fd); - if(obj) + if(obj) { retVal = yaffs_ListXAttributes(obj,data,size); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* bad handle */ yaffsfs_SetError(-EBADF); @@ -1313,7 +1373,7 @@ int yaffs_flistxattr(int fd, char *data, int size) return retVal; } -int yaffs_removexattr(const YCHAR *path, const char *name) +static int yaffs_do_removexattr(const YCHAR *path, const char *name, int follow) { yaffs_Object *obj; @@ -1322,11 +1382,16 @@ int yaffs_removexattr(const YCHAR *path, const char *name) yaffsfs_Lock(); obj = yaffsfs_FindObject(NULL,path,0); - obj = yaffsfs_FollowLink(obj,0); + if(follow) + obj = yaffsfs_FollowLink(obj,0); - if(obj) + if(obj) { retVal = yaffs_RemoveXAttribute(obj,name); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + } else /* todo error not found */ yaffsfs_SetError(-ENOENT); @@ -1336,6 +1401,16 @@ int yaffs_removexattr(const YCHAR *path, const char *name) } +int yaffs_removexattr(const YCHAR *path, const char *name) +{ + return yaffs_do_removexattr(path, name, 1); +} + +int yaffs_lremovexattr(const YCHAR *path, const char *name) +{ + return yaffs_do_removexattr(path, name, 0); +} + int yaffs_fremovexattr(int fd, const char *name) { yaffs_Object *obj; @@ -1345,9 +1420,13 @@ int yaffs_fremovexattr(int fd, const char *name) yaffsfs_Lock(); obj = yaffsfs_GetHandleObject(fd); - if(obj) + if(obj){ retVal = yaffs_RemoveXAttribute(obj,name); - else + if(retVal< 0){ + yaffsfs_SetError(retVal); + retVal = -1; + } + }else /* bad handle */ yaffsfs_SetError(-EBADF); @@ -1767,7 +1846,7 @@ int yaffs_inodecount(const YCHAR *path) yaffsfs_Lock(); dev = yaffsfs_FindDevice(path,&dummy); if(dev && dev->isMounted) { - int nObjects = dev->nObjectsCreated - dev->nFreeObjects; + int nObjects = dev->nObjects; if(nObjects > dev->nHardLinks) retVal = nObjects - dev->nHardLinks; }