filesystem.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // First microsoft compilers
  2. #ifdef _MSC_VER
  3. #include <windows.h>
  4. #include <io.h>
  5. #include <ctype.h>
  6. #include <fcntl.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <sys/stat.h>
  11. #include <sys/types.h>
  12. #include <libtarint/filesystem.h>
  13. kwDirectory * kwOpenDir(const char* name)
  14. {
  15. // struct _KWDIR ssss;
  16. char* buf;
  17. size_t n = strlen(name);
  18. kwDirectory * dir = (kwDirectory *)malloc(sizeof (kwDirectory));
  19. if(dir==NULL)
  20. {
  21. return NULL;
  22. }
  23. dir->EOD=0; //not the end of directory
  24. if ( name[n - 1] == '/' )
  25. {
  26. buf = (char*) malloc(n + 1 + 1);
  27. // buf = new char[n + 1 + 1];
  28. sprintf(buf, "%s*", name);
  29. }
  30. else
  31. {
  32. buf = (char*)malloc(n + 2 + 1);
  33. // buf = new char[n + 2 + 1];
  34. sprintf(buf, "%s/*", name);
  35. }
  36. // Now put them into the file array
  37. dir->SrchHandle = _findfirst(buf, &dir->Entry);
  38. free(buf);
  39. if ( dir->SrchHandle == -1 )
  40. {
  41. free(dir);
  42. return NULL;
  43. }
  44. return dir;
  45. }
  46. kwDirEntry * kwReadDir(kwDirectory * dir)
  47. {
  48. kwDirEntry * entry;
  49. if(!dir || dir->EOD ==1)
  50. {
  51. return NULL;
  52. }
  53. entry = (kwDirEntry*)malloc(sizeof(kwDirEntry));
  54. strncpy(entry->d_name,dir->Entry.name,MAXPATHLEN-1);
  55. if(_findnext(dir->SrchHandle, &dir->Entry) == -1)
  56. {
  57. dir->EOD=1;
  58. }
  59. return entry;
  60. }
  61. int kwCloseDir(kwDirectory * dir)
  62. {
  63. int r=-1;
  64. if(dir)
  65. {
  66. r=_findclose(dir->SrchHandle);
  67. free(dir);
  68. }
  69. if(r==-1) return 0;
  70. return 1;
  71. }
  72. #endif