uffs_DIR * uffs_opendir(const char *path) { int err = 0; uffs_DIR *ret = NULL; uffs_DIR *dirp = GetDirEntry(); if (dirp) { dirp->obj = uffs_GetObject(); if (dirp->obj) { if (uffs_OpenObject(dirp->obj, path, UO_RDONLY | UO_DIR) == U_SUCC) { if (uffs_FindObjectOpen(&dirp->f, dirp->obj) == U_SUCC) { ret = dirp; goto ext; } else { uffs_CloseObject(dirp->obj); } } else { err = uffs_GetObjectErr(dirp->obj); } uffs_PutObject(dirp->obj); dirp->obj = NULL; } else { err = UEMFILE; } PutDirEntry(dirp); } else { err = UEMFILE; } ext: uffs_set_error(-err); return ret; }
int uffs_closedir(uffs_DIR *dirp) { CHK_DIR(dirp, -1); uffs_FindObjectClose(&dirp->f); if (dirp->obj) { uffs_CloseObject(dirp->obj); uffs_PutObject(dirp->obj); } PutDirEntry(dirp); return 0; }
int uffs_closedir(uffs_DIR *dirp) { CHK_DIR_LOCK(dirp, -1); uffs_FindObjectClose(&dirp->f); if (dirp->obj) { uffs_CloseObject(dirp->obj); uffs_PutObject(dirp->obj); } PutDirEntry(dirp); uffs_GlobalFsLockUnlock(); return 0; }