Lines Matching defs:dr

91   DirReader *dr;  /* The object to be returned */
95 dr = (DirReader *) malloc(sizeof(DirReader));
96 if(!dr) {
105 dr->err = NULL;
106 dr->dir = NULL;
107 dr->file = NULL;
109 dr->buffer = NULL;
110 dr->buffer_dim = 0;
115 dr->err = _new_ErrMsg();
116 if(!dr->err)
117 return _del_DirReader(dr);
118 return dr;
125 * dr DirReader * The object to be deleted.
129 DirReader *_del_DirReader(DirReader *dr)
131 if(dr) {
132 _dr_close_dir(dr);
134 free(dr->buffer);
136 dr->err = _del_ErrMsg(dr->err);
137 free(dr);
146 * dr DirReader * The directory reader resource object.
156 int _dr_open_dir(DirReader *dr, const char *path, char **errmsg)
162 (void) _dr_close_dir(dr);
168 _err_record_msg(dr->err, "Can't open directory: ", path, END_ERR_MSG);
169 *errmsg = _err_get_msg(dr->err);
179 _err_record_msg(dr->err, "Can't open directory: ", path, END_ERR_MSG);
180 *errmsg = _err_get_msg(dr->err);
197 _err_record_msg(dr->err, "Unable to deduce readdir() buffer size.",
199 *errmsg = _err_get_msg(dr->err);
211 if(size > dr->buffer_dim || !dr->buffer) {
212 struct dirent *buffer = (struct dirent *) (dr->buffer ?
213 realloc(dr->buffer, size) :
217 _err_record_msg(dr->err, "Insufficient memory for readdir() buffer.",
219 *errmsg = _err_get_msg(dr->err);
225 dr->buffer = buffer;
226 dr->buffer_dim = size;
233 dr->dir = dir;
242 * dr DirReader * The directory reader resource object.
244 void _dr_close_dir(DirReader *dr)
246 if(dr && dr->dir) {
247 closedir(dr->dir);
248 dr->dir = NULL;
249 dr->file = NULL;
250 _err_clear_msg(dr->err);
258 * dr DirReader * The directory reader resource object.
263 char *_dr_next_file(DirReader *dr)
268 if(dr->dir) {
273 if(readdir_r(dr->dir, dr->buffer, &dr->file) == 0 && dr->file)
274 return dr->file->d_name;
276 dr->file = readdir(dr->dir);
277 if(dr->file)
278 return dr->file->d_name;
284 _dr_close_dir(dr);