static yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
static int yaffsfs_handlesInitialised;
-unsigned int yaffs_trace_mask;
-int yaffs_set_trace(unsigned int tm)
+unsigned yaffs_set_trace(unsigned tm)
{
- return yaffs_trace_mask=tm;
+ yaffs_trace_mask = tm;
+ return yaffs_trace_mask;
}
-unsigned int yaffs_get_trace(void)
+unsigned yaffs_get_trace(void)
{
return yaffs_trace_mask;
}
/*
- * Stuff to search for a directory from a path
+ * Stuff to handle names.
*/
return 0;
}
+int yaffsfs_CheckNameLength(const char *name)
+{
+ int retVal = 0;
+ int nameLength = yaffs_strnlen(name,YAFFS_MAX_NAME_LENGTH+1);
+
+ if(nameLength == 0){
+ yaffsfs_SetError(-ENOENT);
+ retVal = -1;
+ } else if (nameLength > YAFFS_MAX_NAME_LENGTH){
+ yaffsfs_SetError(-ENAMETOOLONG);
+ retVal = -1;
+ }
+
+ return retVal;
+}
LIST_HEAD(yaffsfs_deviceList);
return retval;
}
-#if 0
-static struct yaffs_dev *yaffsfs_FindDevice(const YCHAR *path, YCHAR **restOfPath)
-{
- yaffsfs_DeviceConfiguration *cfg = yaffsfs_configurationList;
- const YCHAR *leftOver;
- const YCHAR *p;
- struct yaffs_dev *retval = NULL;
- int thisMatchLength;
- int longestMatch = -1;
-
- /*
- * Check all configs, choose the one that:
- * 1) Actually matches a prefix (ie /a amd /abc will not match
- * 2) Matches the longest.
- */
- while(cfg && cfg->prefix && cfg->dev){
- leftOver = path;
- p = cfg->prefix;
- thisMatchLength = 0;
-
- while(*p && /* unmatched part of prefix */
- !(yaffsfs_IsPathDivider(*p) && (p[1] == 0)) &&
- *leftOver && yaffsfs_Match(*p,*leftOver)){
- p++;
- leftOver++;
- thisMatchLength++;
- }
-
-
- if((!*p || (yaffsfs_IsPathDivider(*p) && (p[1] == 0))) && /* end of prefix */
- (!*leftOver || yaffsfs_IsPathDivider(*leftOver)) && /* no more in this path name part */
- (thisMatchLength > longestMatch)){
- /* Matched prefix */
- *restOfPath = (YCHAR *)leftOver;
- retval = cfg->dev;
- longestMatch = thisMatchLength;
- }
- cfg++;
- }
- return retval;
-}
-#endif
static struct yaffs_obj *yaffsfs_FindRoot(const YCHAR *path, YCHAR **restOfPath)
{
else if(obj->variant_type != YAFFS_OBJECT_TYPE_FILE)
yaffsfs_SetError(-EISDIR);
else if(obj->my_dev->read_only)
+ yaffsfs_SetError(-EACCES);
+ else if(new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
yaffsfs_SetError(-EINVAL);
else
result = yaffs_resize_file(obj,new_size);
yaffsfs_Unlock();
-
return (result) ? 0 : -1;
}
/* bad handle */
yaffsfs_SetError(-EBADF);
else if(obj->my_dev->read_only)
+ yaffsfs_SetError(-EACCES);
+ else if( new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
yaffsfs_SetError(-EINVAL);
else
/* resize the file */
result = yaffs_resize_file(obj,new_size);
yaffsfs_Unlock();
-
return (result) ? 0 : -1;
}
yaffsfs_SetError(-EINVAL);
rename_allowed = 0;
} else if(olddir->my_dev != newdir->my_dev) {
- /* oops must be on same device */
- /* todo error */
+ /* Rename must be on same device */
yaffsfs_SetError(-EXDEV);
rename_allowed = 0;
} else if(obj && obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) {
int retval = 0;
+ if(amode & ~(R_OK | W_OK | X_OK)){
+ yaffsfs_SetError(-EINVAL);
+ return -1;
+ }
+
yaffsfs_Lock();
obj = yaffsfs_FindObject(NULL,path,0,1);
struct yaffs_obj *obj = NULL;
int retVal;
-
yaffsfs_Lock();
obj = yaffsfs_FindObject(NULL,path,0,1);
struct yaffs_obj *obj = NULL;
struct yaffs_obj *target = NULL;
int retVal = 0;
- int new_nameLength = 0;
-
yaffsfs_Lock();
retVal = -1;
}
- new_nameLength = yaffs_strnlen(newname,YAFFS_MAX_NAME_LENGTH+1);
-
- if(new_nameLength == 0){
- yaffsfs_SetError(-ENOENT);
- retVal = -1;
- } else if (new_nameLength > YAFFS_MAX_NAME_LENGTH){
- yaffsfs_SetError(-ENAMETOOLONG);
- retVal = -1;
- }
+ retVal = yaffsfs_CheckNameLength(newname);
if(retVal == 0) {
link = yaffs_link_obj(newdir,newname,obj);