MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / IsReadOnly

Method IsReadOnly

Sources/Shared/IO/FileSystem.cpp:1952–1973  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1950 }
1951
1952 bool FileSystem::IsReadOnly(StringView path)
1953 {
1954 if (path.empty()) return false;
1955
1956#if defined(DEATH_TARGET_WINDOWS_RT)
1957 SmallVector<wchar_t, MAX_PATH + 1> pathW(DefaultInit, path.size() + 1);
1958 Utf8::ToUtf16(pathW.data(), std::int32_t(pathW.size()), path.data(), std::int32_t(path.size()));
1959 WIN32_FILE_ATTRIBUTE_DATA lpFileInfo;
1960 return (::GetFileAttributesExFromAppW(pathW.data(), GetFileExInfoStandard, &lpFileInfo) && (lpFileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY);
1961#elif defined(DEATH_TARGET_WINDOWS)
1962 SmallVector<wchar_t, MAX_PATH + 1> pathW(DefaultInit, path.size() + 1);
1963 Utf8::ToUtf16(pathW.data(), std::int32_t(pathW.size()), path.data(), std::int32_t(path.size()));
1964 const DWORD attrs = ::GetFileAttributesW(pathW.data());
1965 return (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY);
1966#elif defined(DEATH_TARGET_APPLE) || defined(__FreeBSD__)
1967 auto nullTerminatedPath = String::nullTerminatedView(path);
1968 struct stat sb;
1969 return (::stat(nullTerminatedPath.data(), &sb) == 0 && (sb.st_flags & UF_IMMUTABLE) == UF_IMMUTABLE);
1970#else
1971 return false;
1972#endif
1973 }
1974
1975 bool FileSystem::SetReadOnly(StringView path, bool readonly)
1976 {

Callers 1

PrecacheMethod · 0.80

Calls 5

statClass · 0.70
ToUtf16Function · 0.50
emptyMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected