sysstat.cpp 1008 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "sysstat.h"
  2. #ifdef _win_
  3. #include "winint.h"
  4. #include <errno.h>
  5. int Chmod(const char* fname, int mode) {
  6. if (!fname) {
  7. errno = EINVAL;
  8. return -1;
  9. }
  10. ui32 fAttr = ::GetFileAttributesA(fname);
  11. if (fAttr == 0xffffffff) {
  12. return -1;
  13. }
  14. if (mode & _S_IWRITE) {
  15. fAttr &= ~FILE_ATTRIBUTE_READONLY;
  16. } else {
  17. fAttr |= FILE_ATTRIBUTE_READONLY;
  18. }
  19. if (!::SetFileAttributesA(fname, fAttr)) {
  20. return -1;
  21. }
  22. return 0;
  23. }
  24. int Mkdir(const char* path, int /*mode*/) {
  25. errno = 0;
  26. if (!path) {
  27. errno = EINVAL;
  28. return -1;
  29. }
  30. if (!CreateDirectoryA(path, (LPSECURITY_ATTRIBUTES) nullptr)) {
  31. ui32 errCode = GetLastError();
  32. if (errCode == ERROR_ALREADY_EXISTS) {
  33. errno = EEXIST;
  34. } else if (errCode == ERROR_PATH_NOT_FOUND) {
  35. errno = ENOENT;
  36. } else {
  37. errno = EINVAL;
  38. }
  39. return -1;
  40. }
  41. return 0;
  42. }
  43. #endif