filesystem.c 1.4 KB

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