Lines Matching refs:dir

35 do_seek_dir(DIR* dir)
37 if (dir->seek_position == dir->current_position)
42 if (dir->seek_position < dir->current_position) {
43 status_t status = _kern_rewind_dir(dir->fd);
49 dir->current_position = 0;
50 dir->entries_left = 0;
54 while (dir->seek_position > dir->current_position) {
56 long toSkip = dir->seek_position - dir->current_position;
57 if (toSkip == dir->entries_left) {
59 dir->current_position = dir->seek_position;
60 dir->entries_left = 0;
64 if (toSkip < dir->entries_left) {
68 ((uint8*)&dir->first_entry + dir->next_entry);
69 dir->entries_left--;
70 dir->next_entry += entry->d_reclen;
73 dir->current_position = dir->seek_position;
78 dir->current_position += dir->entries_left;
79 dir->entries_left = 0;
81 count = _kern_read_dir(dir->fd, &dir->first_entry,
82 (char*)dir + DIR_BUFFER_SIZE - (char*)&dir->first_entry, USHRT_MAX);
91 dir->next_entry = 0;
92 dir->entries_left = count;
107 DIR* dir = (DIR*)malloc(DIR_BUFFER_SIZE);
108 if (dir == NULL) {
113 dir->fd = fd;
114 dir->entries_left = 0;
115 dir->seek_position = 0;
116 dir->current_position = 0;
118 return dir;
128 DIR* dir;
151 dir = __create_dir_struct(dirFD);
152 if (dir == NULL) {
157 return dir;
164 DIR* dir;
173 if ((dir = __create_dir_struct(fd)) == NULL) {
178 return dir;
183 closedir(DIR* dir)
187 if (dir == NULL) {
192 status = _kern_close(dir->fd);
194 free(dir);
201 readdir(DIR* dir)
205 if (dir->seek_position != dir->current_position) {
206 if (do_seek_dir(dir) != 0)
210 if (dir->entries_left > 0) {
212 = (struct dirent *)((uint8 *)&dir->first_entry + dir->next_entry);
214 dir->entries_left--;
215 dir->next_entry += dirent->d_reclen;
216 dir->seek_position++;
217 dir->current_position++;
224 count = _kern_read_dir(dir->fd, &dir->first_entry,
225 (char*)dir + DIR_BUFFER_SIZE - (char*)&dir->first_entry, USHRT_MAX);
234 dir->entries_left = count - 1;
235 dir->next_entry = dir->first_entry.d_reclen;
236 dir->seek_position++;
237 dir->current_position++;
239 return &dir->first_entry;
244 readdir_r(DIR* dir, struct dirent* entry, struct dirent** _result)
246 ssize_t count = _kern_read_dir(dir->fd, entry, sizeof(struct dirent)
262 rewinddir(DIR* dir)
264 dir->seek_position = 0;
269 seekdir(DIR* dir, long int position)
271 dir->seek_position = position;
276 telldir(DIR* dir)
278 return dir->seek_position;
283 dirfd(DIR* dir)
285 return dir->fd;
306 DIR* dir = opendir(path);
307 if (dir == NULL)
313 struct dirent* entry = readdir(dir);
350 closedir(dir);
361 closedir(dir);