diff options
Diffstat (limited to 'thirdparty/bullet/src/Bullet3Common/b3FileUtils.h')
-rw-r--r-- | thirdparty/bullet/src/Bullet3Common/b3FileUtils.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/thirdparty/bullet/src/Bullet3Common/b3FileUtils.h b/thirdparty/bullet/src/Bullet3Common/b3FileUtils.h new file mode 100644 index 0000000000..1a331029ea --- /dev/null +++ b/thirdparty/bullet/src/Bullet3Common/b3FileUtils.h @@ -0,0 +1,138 @@ +#ifndef B3_FILE_UTILS_H +#define B3_FILE_UTILS_H + +#include <stdio.h> +#include "b3Scalar.h" +#include <stddef.h>//ptrdiff_h +#include <string.h> + +struct b3FileUtils +{ + b3FileUtils() + { + } + virtual ~b3FileUtils() + { + } + + static bool findFile(const char* orgFileName, char* relativeFileName, int maxRelativeFileNameMaxLen) + { + FILE* f=0; + f = fopen(orgFileName,"rb"); + if (f) + { + //printf("original file found: [%s]\n", orgFileName); + sprintf(relativeFileName,"%s", orgFileName); + fclose(f); + return true; + } + + //printf("Trying various directories, relative to current working directory\n"); + const char* prefix[]={"./","./data/","../data/","../../data/","../../../data/","../../../../data/"}; + int numPrefixes = sizeof(prefix)/sizeof(const char*); + + f=0; + bool fileFound = false; + + for (int i=0;!f && i<numPrefixes;i++) + { +#ifdef _WIN32 + sprintf_s(relativeFileName,maxRelativeFileNameMaxLen,"%s%s",prefix[i],orgFileName); +#else + sprintf(relativeFileName,"%s%s",prefix[i],orgFileName); +#endif + f = fopen(relativeFileName,"rb"); + if (f) + { + fileFound = true; + break; + } + } + if (f) + { + fclose(f); + } + + return fileFound; + } + + static const char* strip2(const char* name, const char* pattern) + { + size_t const patlen = strlen(pattern); + size_t patcnt = 0; + const char * oriptr; + const char * patloc; + // find how many times the pattern occurs in the original string + for (oriptr = name; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen) + { + patcnt++; + } + return oriptr; + } + + + + static int extractPath(const char* fileName, char* path, int maxPathLength) + { + const char* stripped = strip2(fileName, "/"); + stripped = strip2(stripped, "\\"); + + ptrdiff_t len = stripped-fileName; + b3Assert((len+1)<maxPathLength); + + if (len && ((len+1)<maxPathLength)) + { + + for (int i=0;i<len;i++) + { + path[i] = fileName[i]; + } + path[len]=0; + } else + { + len = 0; + b3Assert(maxPathLength>0); + if (maxPathLength>0) + { + path[len] = 0; + } + } + return len; + } + + static char toLowerChar(const char t) + { + if (t>=(char)'A' && t<=(char)'Z') + return t + ((char)'a' - (char)'A'); + else + return t; + } + + + static void toLower(char* str) + { + int len=strlen(str); + for (int i=0;i<len;i++) + { + str[i] = toLowerChar(str[i]); + } + } + + + /*static const char* strip2(const char* name, const char* pattern) + { + size_t const patlen = strlen(pattern); + size_t patcnt = 0; + const char * oriptr; + const char * patloc; + // find how many times the pattern occurs in the original string + for (oriptr = name; patloc = strstr(oriptr, pattern); oriptr = patloc + patlen) + { + patcnt++; + } + return oriptr; + } + */ + +}; +#endif //B3_FILE_UTILS_H |