7 #ifndef PXR_BASE_ARCH_FILE_SYSTEM_H
8 #define PXR_BASE_ARCH_FILE_SYSTEM_H
25 #include <sys/types.h>
28 #if defined(ARCH_OS_LINUX)
30 #include <sys/statfs.h>
32 #elif defined(ARCH_OS_DARWIN)
34 #include <sys/mount.h>
36 #elif defined(ARCH_OS_WINDOWS)
39 #include <stringapiset.h>
46 #if !defined(ARCH_OS_WINDOWS)
50 #include <sys/param.h>
54 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
58 #define F_OK 0 // Test for existence.
59 #define X_OK 1 // Test for execute permission.
60 #define W_OK 2 // Test for write permission.
61 #define R_OK 4 // Test for read permission.
64 #if defined(ARCH_OS_WINDOWS)
65 #define ARCH_GLOB_NOCHECK 1
66 #define ARCH_GLOB_MARK 2
67 #define ARCH_GLOB_NOSORT 4
69 #define ARCH_GLOB_NOCHECK GLOB_NOCHECK
70 #define ARCH_GLOB_MARK GLOB_MARK
71 #define ARCH_GLOB_NOSORT GLOB_NOSORT
73 #define ARCH_GLOB_DEFAULT (ARCH_GLOB_NOCHECK | ARCH_GLOB_MARK)
77 #define ARCH_PATH_MAX PATH_MAX
80 #define ARCH_PATH_MAX MAXPATHLEN
83 #define ARCH_PATH_MAX _MAX_PATH
85 #define ARCH_PATH_MAX 1024
91 #if defined(ARCH_OS_WINDOWS)
92 #define ARCH_PATH_SEP "\\"
93 #define ARCH_PATH_LIST_SEP ";"
94 #define ARCH_REL_PATH_IDENT ".\\"
96 #define ARCH_PATH_SEP "/"
97 #define ARCH_PATH_LIST_SEP ":"
98 #define ARCH_REL_PATH_IDENT "./"
101 #if defined(ARCH_OS_WINDOWS)
120 #if defined(ARCH_OS_WINDOWS)
121 # define ArchChmod(path, mode) _chmod(path, mode)
123 # define ArchChmod(path, mode) chmod(path, mode)
126 #if defined(ARCH_OS_WINDOWS)
127 # define ArchCloseFile(fd) _close(fd)
129 # define ArchCloseFile(fd) close(fd)
132 #if defined(ARCH_OS_WINDOWS)
133 # define ArchUnlinkFile(path) _unlink(path)
135 # define ArchUnlinkFile(path) unlink(path)
138 #if defined(ARCH_OS_WINDOWS)
139 ARCH_API int ArchWindowsFileAccess(
const char*
path, uint32_t dwAccessMask);
142 # define ArchFileAccess(path, mode) access(path, mode)
145 #if defined(ARCH_OS_WINDOWS)
146 # define ArchFdOpen(fd, mode) _fdopen(fd, mode)
148 # define ArchFdOpen(fd, mode) fdopen(fd, mode)
151 #if defined(ARCH_OS_WINDOWS)
152 # define ArchFileNo(stream) _fileno(stream)
154 # define ArchFileNo(stream) fileno(stream)
157 #if defined(ARCH_OS_WINDOWS)
158 # define ArchFileIsaTTY(stream) _isatty(stream)
160 # define ArchFileIsaTTY(stream) isatty(stream)
163 #if defined(ARCH_OS_WINDOWS)
166 # define ArchRmDir(path) rmdir(path)
212 bool stripDriveSpecifier =
false);
253 const std::string& suffix = std::string());
265 int ArchMakeTmpFile(
const std::string& prefix, std::string* pathname = 0);
277 const std::string& prefix, std::string* pathname = 0);
289 const std::string& prefix);
312 return m.get_deleter().GetLength();
318 return m.get_deleter().GetLength();
378 void const *addr,
size_t len,
unsigned char *pageMap);
414 #if defined(ARCH_OS_WINDOWS)
417 inline std::string ArchWindowsUtf16ToUtf8(
const std::wstring &wstr)
419 if (wstr.empty())
return std::string();
421 int size = WideCharToMultiByte(
422 CP_UTF8, 0, wstr.data(), (
int)wstr.size(), NULL, 0, NULL, NULL);
423 if (size == 0)
return std::string();
424 std::string str(size, 0);
425 if (WideCharToMultiByte(CP_UTF8, 0, wstr.data(), (
int)wstr.size(),
426 &str[0],
size, NULL, NULL) == 0) {
427 return std::string();
433 inline std::wstring ArchWindowsUtf8ToUtf16(
const std::string &str)
435 if (str.empty())
return std::wstring();
437 int size = MultiByteToWideChar(
438 CP_UTF8, 0, str.data(), (
int)str.size(), NULL, 0);
439 if (size == 0)
return std::wstring();
440 std::wstring wstr(size, 0);
441 if(MultiByteToWideChar(
442 CP_UTF8, 0, str.data(), (
int)str.size(), &wstr[0],
size) == 0) {
443 return std::wstring();
454 #endif // PXR_BASE_ARCH_FILE_SYSTEM_H
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
ARCH_API FILE * ArchOpenFile(char const *fileName, char const *mode)
ARCH_API void ArchMemAdvise(void const *addr, size_t len, ArchMemAdvice adv)
GT_API const UT_StringHolder time
GLsizei const GLchar *const * path
ARCH_API std::string ArchAbsPath(const std::string &path)
ARCH_API void ArchFileAdvise(FILE *file, int64_t offset, size_t count, ArchFileAdvice adv)
ARCH_API std::string ArchNormPath(const std::string &path, bool stripDriveSpecifier=false)
GLuint GLsizei GLsizei * length
ARCH_API ArchConstFileMapping ArchMapFileReadOnly(FILE *file, std::string *errMsg=nullptr)
std::unique_ptr< char const, Arch_Unmapper > ArchConstFileMapping
Arch_Unmapper(size_t length)
ARCH_API ArchMutableFileMapping ArchMapFileReadWrite(FILE *file, std::string *errMsg=nullptr)
ARCH_API const char * ArchGetTmpDir()
ARCH_API int ArchMakeTmpFile(const std::string &prefix, std::string *pathname=0)
std::unique_ptr< char, Arch_Unmapper > ArchMutableFileMapping
ARCH_API std::string ArchReadLink(const char *path)
ARCH_API int64_t ArchGetFileLength(const char *fileName)
size_t ArchGetFileMappingLength(ArchConstFileMapping const &m)
Return the length of an ArchConstFileMapping.
ARCH_API bool ArchGetStatMode(const char *pathname, int *mode)
ARCH_API bool ArchStatIsWritable(const ArchStatType *st)
ARCH_API bool ArchQueryMappedMemoryResidency(void const *addr, size_t len, unsigned char *pageMap)
GT_API const UT_StringHolder st
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
ARCH_API std::string ArchGetFileName(FILE *file)
#define ArchFileAccess(path, mode)
ARCH_API int64_t ArchPRead(FILE *file, void *buffer, size_t count, int64_t offset)
ARCH_API void operator()(char *mapStart) const
ARCH_API std::string ArchMakeTmpSubdir(const std::string &tmpdir, const std::string &prefix)
ARCH_API int64_t ArchPWrite(FILE *file, void const *bytes, size_t count, int64_t offset)
ARCH_API bool ArchGetModificationTime(const char *pathname, double *time)
ARCH_API std::string ArchMakeTmpFileName(const std::string &prefix, const std::string &suffix=std::string())