diff options
Diffstat (limited to 'indra/llvfs')
-rw-r--r-- | indra/llvfs/lldir.cpp | 7 | ||||
-rw-r--r-- | indra/llvfs/lldir.h | 5 | ||||
-rw-r--r-- | indra/llvfs/lldir_solaris.cpp | 53 | ||||
-rw-r--r-- | indra/llvfs/lldir_solaris.h | 2 |
4 files changed, 52 insertions, 15 deletions
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index 07e7a93f9f..d6a6eca341 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -433,7 +433,7 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd expanded_filename.assign(""); } - //llinfos << "*** EXPANDED FILENAME: <" << mExpandedFilename << ">" << llendl; + //llinfos << "*** EXPANDED FILENAME: <" << expanded_filename << ">" << llendl; return expanded_filename; } @@ -661,6 +661,11 @@ void LLDir::dumpCurrentDirectories() LL_DEBUGS2("AppInit","Directories") << " TempDir: " << getTempDir() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " CAFile: " << getCAFile() << LL_ENDL; LL_DEBUGS2("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL; + +#if LL_LIBXUL_ENABLED + LL_DEBUGS2("AppInit","Directories") << " HTML Path: " << getExpandedFilename( LL_PATH_HTML, "" ) << llendl; + LL_DEBUGS2("AppInit","Directories") << " Mozilla Profile Path: " << getExpandedFilename( LL_PATH_MOZILLA_PROFILE, "" ) << llendl; +#endif } diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h index 2bdc0ced00..760b6512a5 100644 --- a/indra/llvfs/lldir.h +++ b/indra/llvfs/lldir.h @@ -33,6 +33,11 @@ #ifndef LL_LLDIR_H #define LL_LLDIR_H +#if LL_SOLARIS +#include <sys/param.h> +#define MAX_PATH MAXPATHLEN +#endif + // these numbers *may* get serialized, so we need to be explicit typedef enum ELLPath { diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp index 49e2d3e6c5..9553d923aa 100644 --- a/indra/llvfs/lldir_solaris.cpp +++ b/indra/llvfs/lldir_solaris.cpp @@ -37,14 +37,13 @@ #include "llrand.h" #include <sys/types.h> #include <sys/stat.h> -#include <fcntl.h> -#include <sys/param.h> #include <unistd.h> #include <glob.h> #include <pwd.h> #include <sys/utsname.h> #define _STRUCTURED_PROC 1 #include <sys/procfs.h> +#include <fcntl.h> static std::string getCurrentUserHome(char* fallback) { @@ -83,7 +82,16 @@ LLDir_Solaris::LLDir_Solaris() mDirp = NULL; char tmp_str[LL_MAX_PATH]; /* Flawfinder: ignore */ - getcwd(tmp_str, LL_MAX_PATH); + if (getcwd(tmp_str, LL_MAX_PATH) == NULL) + { + strcpy(tmp_str, "/tmp"); + llwarns << "Could not get current directory; changing to " + << tmp_str << llendl; + if (chdir(tmp_str) == -1) + { + llerrs << "Could not change directory to " << tmp_str << llendl; + } + } mExecutableFilename = ""; mExecutablePathAndName = ""; @@ -122,20 +130,35 @@ LLDir_Solaris::LLDir_Solaris() return; } + char *p = execpath; // nuke trash in link, if any exists + int i = 0; + while(*p != NULL && ++i < LL_MAX_PATH && isprint((int)(*p++))); + *p = NULL; + mExecutablePathAndName = strdup(execpath); llinfos << "mExecutablePathAndName = [" << mExecutablePathAndName << "]" << llendl; + //NOTE: Why force people to cd into the package directory? + // Look for SECONDLIFE env variable and use it, if set. + + char *dcf = getenv("SECONDLIFE"); + if(dcf != NULL){ + (void)strcpy(path, dcf); + (void)strcat(path, "/bin"); //NOTE: make sure we point at the bin + mExecutableDir = strdup(path); + }else{ // plunk a null at last '/' to get exec dir - char *s = execpath + strlen(execpath) -1; - while(*s != '/' && s != execpath){ - --s; - } + char *s = execpath + strlen(execpath) -1; + while(*s != '/' && s != execpath){ + --s; + } - if(s != execpath){ - *s = (char)NULL; + if(s != execpath){ + *s = (char)NULL; - mExecutableDir = strdup(execpath); - llinfos << "mExecutableDir = [" << mExecutableDir << "]" << llendl; + mExecutableDir = strdup(execpath); + llinfos << "mExecutableDir = [" << mExecutableDir << "]" << llendl; + } } // *TODO: don't use /tmp, use $HOME/.secondlife/tmp or something. @@ -355,12 +378,16 @@ void LLDir_Solaris::getRandomFileInDir(const std::string &dirname, const std::st std::string LLDir_Solaris::getCurPath() { char tmp_str[LL_MAX_PATH]; /* Flawfinder: ignore */ - getcwd(tmp_str, LL_MAX_PATH); + if (getcwd(tmp_str, LL_MAX_PATH) == NULL) + { + llwarns << "Could not get current directory" << llendl; + tmp_str[0] = '\0'; + } return tmp_str; } -BOOL LLDir_Solaris::fileExists(const std::string &filename) +BOOL LLDir_Solaris::fileExists(const std::string &filename) const { struct stat stat_data; // Check the age of the file diff --git a/indra/llvfs/lldir_solaris.h b/indra/llvfs/lldir_solaris.h index f6e7c3cba5..139754ba28 100644 --- a/indra/llvfs/lldir_solaris.h +++ b/indra/llvfs/lldir_solaris.h @@ -50,7 +50,7 @@ public: virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask); virtual BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname, BOOL wrap); virtual void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname); - /*virtual*/ BOOL fileExists(const std::string &filename); + /*virtual*/ BOOL fileExists(const std::string &filename) const; private: DIR *mDirp; |