sysstat.cpp 1000 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. if (mode & _S_IWRITE) {
  14. fAttr &= ~FILE_ATTRIBUTE_READONLY;
  15. } else {
  16. fAttr |= FILE_ATTRIBUTE_READONLY;
  17. }
  18. if (!::SetFileAttributesA(fname, fAttr)) {
  19. return -1;
  20. }
  21. return 0;
  22. }
  23. int Mkdir(const char* path, int /*mode*/) {
  24. errno = 0;
  25. if (!path) {
  26. errno = EINVAL;
  27. return -1;
  28. }
  29. if (!CreateDirectoryA(path, (LPSECURITY_ATTRIBUTES) nullptr)) {
  30. ui32 errCode = GetLastError();
  31. if (errCode == ERROR_ALREADY_EXISTS) {
  32. errno = EEXIST;
  33. } else if (errCode == ERROR_PATH_NOT_FOUND) {
  34. errno = ENOENT;
  35. } else {
  36. errno = EINVAL;
  37. }
  38. return -1;
  39. }
  40. return 0;
  41. }
  42. #endif