dir.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "dir.h"
  2. #include "log.h"
  3. #include <stddef.h>
  4. #include <stdio.h>
  5. #ifdef _WIN32
  6. #include <Windows.h>
  7. directory open_dir(const char *dirname) {
  8. char pattern[1024];
  9. strcpy(pattern, dirname);
  10. strcat(pattern, "\\*");
  11. WIN32_FIND_DATAA data;
  12. directory dir;
  13. dir.handle = FindFirstFileA(pattern, &data);
  14. if (dir.handle == INVALID_HANDLE_VALUE) {
  15. ////
  16. // kong_log(LOG_LEVEL_ERROR, "FindFirstFile failed (%d)\n", GetLastError());
  17. // exit(1);
  18. return dir;
  19. ////
  20. }
  21. FindNextFileA(dir.handle, &data);
  22. return dir;
  23. }
  24. file read_next_file(directory *dir) {
  25. WIN32_FIND_DATAA data;
  26. file file;
  27. file.valid = FindNextFileA(dir->handle, &data) != 0;
  28. if (file.valid) {
  29. strcpy(file.name, data.cFileName);
  30. }
  31. else {
  32. file.name[0] = 0;
  33. }
  34. return file;
  35. }
  36. void close_dir(directory *dir) {
  37. FindClose(dir->handle);
  38. }
  39. #else
  40. #include <string.h>
  41. #include <dirent.h>
  42. #include <sys/stat.h>
  43. #include <sys/types.h>
  44. directory open_dir(const char *dirname) {
  45. directory dir;
  46. dir.handle = opendir(dirname);
  47. return dir;
  48. }
  49. file read_next_file(directory *dir) {
  50. struct dirent *entry = readdir(dir->handle);
  51. while (entry != NULL && (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)) {
  52. entry = readdir(dir->handle);
  53. }
  54. file f;
  55. f.valid = entry != NULL;
  56. if (f.valid) {
  57. strcpy(f.name, entry->d_name);
  58. }
  59. return f;
  60. }
  61. void close_dir(directory *dir) {}
  62. #endif