Lines Matching refs:dr

89   DirReader *dr;  /* The object to be returned */  in _new_DirReader()  local
93 dr = (DirReader *) malloc(sizeof(DirReader)); in _new_DirReader()
94 if(!dr) { in _new_DirReader()
103 dr->err = NULL; in _new_DirReader()
104 dr->dir = NULL; in _new_DirReader()
105 dr->file = NULL; in _new_DirReader()
107 dr->buffer = NULL; in _new_DirReader()
108 dr->buffer_dim = 0; in _new_DirReader()
113 dr->err = _new_ErrMsg(); in _new_DirReader()
114 if(!dr->err) in _new_DirReader()
115 return _del_DirReader(dr); in _new_DirReader()
116 return dr; in _new_DirReader()
127 DirReader *_del_DirReader(DirReader *dr) in _del_DirReader() argument
129 if(dr) { in _del_DirReader()
130 _dr_close_dir(dr); in _del_DirReader()
132 free(dr->buffer); in _del_DirReader()
134 dr->err = _del_ErrMsg(dr->err); in _del_DirReader()
135 free(dr); in _del_DirReader()
154 int _dr_open_dir(DirReader *dr, const char *path, char **errmsg) in _dr_open_dir() argument
160 (void) _dr_close_dir(dr); in _dr_open_dir()
166 _err_record_msg(dr->err, "Can't open directory: ", path, END_ERR_MSG); in _dr_open_dir()
167 *errmsg = _err_get_msg(dr->err); in _dr_open_dir()
177 _err_record_msg(dr->err, "Can't open directory: ", path, END_ERR_MSG); in _dr_open_dir()
178 *errmsg = _err_get_msg(dr->err); in _dr_open_dir()
195 _err_record_msg(dr->err, "Unable to deduce readdir() buffer size.", in _dr_open_dir()
197 *errmsg = _err_get_msg(dr->err); in _dr_open_dir()
209 if(size > dr->buffer_dim || !dr->buffer) { in _dr_open_dir()
210 struct dirent *buffer = (struct dirent *) (dr->buffer ? in _dr_open_dir()
211 realloc(dr->buffer, size) : in _dr_open_dir()
215 _err_record_msg(dr->err, "Insufficient memory for readdir() buffer.", in _dr_open_dir()
217 *errmsg = _err_get_msg(dr->err); in _dr_open_dir()
223 dr->buffer = buffer; in _dr_open_dir()
224 dr->buffer_dim = size; in _dr_open_dir()
231 dr->dir = dir; in _dr_open_dir()
242 void _dr_close_dir(DirReader *dr) in _dr_close_dir() argument
244 if(dr && dr->dir) { in _dr_close_dir()
245 closedir(dr->dir); in _dr_close_dir()
246 dr->dir = NULL; in _dr_close_dir()
247 dr->file = NULL; in _dr_close_dir()
248 _err_clear_msg(dr->err); in _dr_close_dir()
261 char *_dr_next_file(DirReader *dr) in _dr_next_file() argument
266 if(dr->dir) { in _dr_next_file()
271 if(readdir_r(dr->dir, dr->buffer, &dr->file) == 0 && dr->file) in _dr_next_file()
272 return dr->file->d_name; in _dr_next_file()
274 dr->file = readdir(dr->dir); in _dr_next_file()
275 if(dr->file) in _dr_next_file()
276 return dr->file->d_name; in _dr_next_file()
282 _dr_close_dir(dr); in _dr_next_file()