Home | History | Annotate | Download | only in unistd

Lines Matching refs:dir

37 struct DIR
46 int dirfd(DIR* dirp)
51 DIR* opendir( const char* dirpath )
53 DIR* dir = malloc(sizeof(DIR));
55 if (!dir)
58 dir->_DIR_fd = open(dirpath, O_RDONLY|O_DIRECTORY);
59 if (dir->_DIR_fd < 0)
61 free(dir);
62 dir = NULL;
66 dir->_DIR_avail = 0;
67 dir->_DIR_next = NULL;
68 pthread_mutex_init( &dir->_DIR_lock, NULL );
71 return dir;
75 DIR* fdopendir(int fd)
77 DIR* dir = malloc(sizeof(DIR));
79 if (!dir)
82 dir->_DIR_fd = fd;
83 dir->_DIR_avail = 0;
84 dir->_DIR_next = NULL;
85 pthread_mutex_init( &dir->_DIR_lock, NULL );
87 return dir;
92 _readdir_unlocked(DIR* dir)
96 if ( !dir->_DIR_avail )
101 rc = getdents( dir->_DIR_fd, dir->_DIR_buff, sizeof(dir->_DIR_buff));
108 dir->_DIR_avail = rc;
109 dir->_DIR_next = dir->_DIR_buff;
112 entry = dir->_DIR_next;
122 if ( (char*)entry + entry->d_reclen > (char*)dir->_DIR_buff + sizeof(dir->_DIR_buff) )
128 dir->_DIR_next = (struct dirent*)((char*)entry + entry->d_reclen);
129 dir->_DIR_avail -= entry->d_reclen;
140 readdir(DIR * dir)
144 pthread_mutex_lock( &dir->_DIR_lock );
145 entry = _readdir_unlocked(dir);
146 pthread_mutex_unlock( &dir->_DIR_lock );
152 int readdir_r(DIR* dir, struct dirent *entry, struct dirent **result)
161 pthread_mutex_lock( &dir->_DIR_lock );
163 ent = _readdir_unlocked(dir);
177 pthread_mutex_unlock( &dir->_DIR_lock );
184 int closedir(DIR *dir)
188 rc = close(dir->_DIR_fd);
189 dir->_DIR_fd = -1;
191 pthread_mutex_destroy( &dir->_DIR_lock );
193 free(dir);
198 void rewinddir(DIR *dir)
200 pthread_mutex_lock( &dir->_DIR_lock );
201 lseek( dir->_DIR_fd, 0, SEEK_SET );
202 dir->_DIR_avail = 0;
203 pthread_mutex_unlock( &dir->_DIR_lock );
217 int scandir(const char *dir, struct dirent ***namelist,
221 DIR *d;
227 d = opendir(dir);