/** * Count objects * * \param[in] f uffs_FindInfo structure, openned by uffs_FindObjectOpen(). * * \return object counts * \note after call this function, you need to call uffs_FindObjectRewind() to start finding process. */ int uffs_FindObjectCount(uffs_FindInfo *f) { if (uffs_FindObjectFirst(NULL, f) == U_SUCC) { while (uffs_FindObjectNext(NULL, f) == U_SUCC) { }; } return f->pos; }
struct uffs_dirent * uffs_readdir(uffs_DIR *dirp) { struct uffs_dirent *ent; CHK_DIR(dirp, NULL); if (uffs_FindObjectNext(&dirp->info, &dirp->f) == U_SUCC) { ent = &dirp->dirent; ent->d_ino = dirp->info.serial; ent->d_namelen = dirp->info.info.name_len; memcpy(ent->d_name, dirp->info.info.name, ent->d_namelen); ent->d_name[ent->d_namelen] = 0; ent->d_off = dirp->f.pos; ent->d_reclen = sizeof(struct uffs_dirent); ent->d_type = dirp->info.info.attr; return ent; } else return NULL; }
struct uffs_dirent * uffs_readdir(uffs_DIR *dirp) { struct uffs_dirent *ent = NULL; CHK_DIR_LOCK(dirp, NULL); if (uffs_FindObjectNext(&dirp->info, &dirp->f) == U_SUCC) { ent = &dirp->dirent; ent->d_ino = dirp->info.serial; ent->d_namelen = dirp->info.info.name_len < (sizeof(ent->d_name) - 1) ? dirp->info.info.name_len : (sizeof(ent->d_name) - 1); memcpy(ent->d_name, dirp->info.info.name, ent->d_namelen); ent->d_name[ent->d_namelen] = '\0'; ent->d_off = dirp->f.pos; ent->d_reclen = sizeof(struct uffs_dirent); ent->d_type = dirp->info.info.attr; } uffs_GlobalFsLockUnlock(); return ent; }