Lines Matching refs:dir
219 int tinydir_open(tinydir_dir *dir, const _tinydir_char_t *path);
221 int tinydir_open_sorted(tinydir_dir *dir, const _tinydir_char_t *path);
223 void tinydir_close(tinydir_dir *dir);
226 int tinydir_next(tinydir_dir *dir);
228 int tinydir_readfile(const tinydir_dir *dir, tinydir_file *file);
230 int tinydir_readfile_n(const tinydir_dir *dir, tinydir_file *file, size_t i);
232 int tinydir_open_subdir_n(tinydir_dir *dir, size_t i);
251 int tinydir_open(tinydir_dir *dir, const _tinydir_char_t *path)
263 if (dir == NULL || path == NULL || _tinydir_strlen(path) == 0)
274 /* initialise dir */
275 dir->_files = NULL;
277 dir->_h = INVALID_HANDLE_VALUE;
279 dir->_d = NULL;
281 dir->_ep = NULL;
284 tinydir_close(dir);
286 _tinydir_strcpy(dir->path, path);
288 pathp = &dir->path[_tinydir_strlen(dir->path) - 1];
289 while (pathp != dir->path && (*pathp == TINYDIR_STRING('\\') || *pathp == TINYDIR_STRING('/')))
295 _tinydir_strcpy(path_buf, dir->path);
298 dir->_h = FindFirstFileEx(path_buf, FindExInfoStandard, &dir->_f, FindExSearchNameMatch, NULL, 0);
300 dir->_h = FindFirstFile(path_buf, &dir->_f);
302 if (dir->_h == INVALID_HANDLE_VALUE)
306 dir->_d = _tinydir_opendir(path);
307 if (dir->_d == NULL)
314 dir->has_next = 1;
317 dir->_e = _tinydir_readdir(dir->_d);
320 size = _tinydir_dirent_buf_size(dir->_d); /* conversion to int */
322 dir->_ep = (struct _tinydir_dirent*)_TINYDIR_MALLOC(size);
323 if (dir->_ep == NULL) return -1;
325 error = readdir_r(dir->_d, dir->_ep, &dir->_e);
328 if (dir->_e == NULL)
330 dir->has_next = 0;
337 tinydir_close(dir);
342 int tinydir_open_sorted(tinydir_dir *dir, const _tinydir_char_t *path)
346 if (tinydir_open(dir, path) == -1)
350 while (dir->has_next)
353 if (tinydir_next(dir) == -1)
358 tinydir_close(dir);
360 if (tinydir_open(dir, path) == -1)
365 dir->n_files = 0;
366 dir->_files = (tinydir_file *)_TINYDIR_MALLOC(sizeof *dir->_files * n_files);
367 if (dir->_files == NULL)
371 while (dir->has_next)
374 dir->n_files++;
376 p_file = &dir->_files[dir->n_files - 1];
377 if (tinydir_readfile(dir, p_file) == -1)
382 if (tinydir_next(dir) == -1)
389 if (dir->n_files == n_files)
395 qsort(dir->_files, dir->n_files, sizeof(tinydir_file), _tinydir_file_cmp);
400 tinydir_close(dir);
405 void tinydir_close(tinydir_dir *dir)
407 if (dir == NULL)
412 memset(dir->path, 0, sizeof(dir->path));
413 dir->has_next = 0;
414 dir->n_files = 0;
415 _TINYDIR_FREE(dir->_files);
416 dir->_files = NULL;
418 if (dir->_h != INVALID_HANDLE_VALUE)
420 FindClose(dir->_h);
422 dir->_h = INVALID_HANDLE_VALUE;
424 if (dir->_d)
426 _tinydir_closedir(dir->_d);
428 dir->_d = NULL;
429 dir->_e = NULL;
431 _TINYDIR_FREE(dir->_ep);
432 dir->_ep = NULL;
438 int tinydir_next(tinydir_dir *dir)
440 if (dir == NULL)
445 if (!dir->has_next)
452 if (FindNextFile(dir->_h, &dir->_f) == 0)
455 dir->_e = _tinydir_readdir(dir->_d);
457 if (dir->_ep == NULL)
461 if (readdir_r(dir->_d, dir->_ep, &dir->_e) != 0)
466 if (dir->_e == NULL)
469 dir->has_next = 0;
474 tinydir_close(dir);
485 int tinydir_readfile(const tinydir_dir *dir, tinydir_file *file)
487 if (dir == NULL || file == NULL)
493 if (dir->_h == INVALID_HANDLE_VALUE)
495 if (dir->_e == NULL)
501 if (_tinydir_strlen(dir->path) +
504 dir->_f.cFileName
506 dir->_e->d_name
517 dir->_f.cFileName
519 dir->_e->d_name
527 _tinydir_strcpy(file->path, dir->path);
531 dir->_f.cFileName
533 dir->_e->d_name
552 !!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
558 !!(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_NORMAL) ||
560 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_DEVICE) &&
561 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
562 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED) &&
564 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_INTEGRITY_STREAM) &&
567 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_NO_SCRUB_DATA) &&
569 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE) &&
570 !(dir->_f.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY));
579 int tinydir_readfile_n(const tinydir_dir *dir, tinydir_file *file, size_t i)
581 if (dir == NULL || file == NULL)
586 if (i >= dir->n_files)
592 memcpy(file, &dir->_files[i], sizeof(tinydir_file));
599 int tinydir_open_subdir_n(tinydir_dir *dir, size_t i)
602 if (dir == NULL)
607 if (i >= dir->n_files || !dir->_files[i].is_dir)
613 _tinydir_strcpy(path, dir->_files[i].path);
614 tinydir_close(dir);
615 if (tinydir_open_sorted(dir, path) == -1)
627 tinydir_dir dir;
681 /* Emulate the behavior of dirname by returning "." for dir name if it's
687 /* Concatenate the drive letter and dir name to form full dir name */
701 if (tinydir_open(&dir, dir_name) == -1)
707 while (dir.has_next)
709 if (tinydir_readfile(&dir, file) == -1)
720 tinydir_next(&dir);
729 tinydir_close(&dir);