version 0.3.6
[fms.git] / src / fmsapp.cpp
index 3182443..94443c4 100644 (file)
        #include <unistd.h>\r
 #endif\r
 \r
-FMSApp::FMSApp():m_displayhelp(false),m_showoptions(false),m_setoption(false),m_logtype("file")\r
+FMSApp::FMSApp():m_displayhelp(false),m_showoptions(false),m_setoption(false),m_logtype("file"),m_workingdirectory("")\r
 {\r
-\r
+       // get current working dir so we can go to it later\r
+       char wd[1024];\r
+       char *wdptr=NULL;\r
+       memset(wd,0,1024);\r
+       wdptr=getcwd(wd,1023);\r
+       if(wdptr)\r
+       {\r
+               m_workingdirectory=wdptr;\r
+       }\r
 }\r
 \r
 void FMSApp::defineOptions(Poco::Util::OptionSet &options)\r
@@ -90,8 +98,12 @@ void FMSApp::initialize(Poco::Util::Application &self)
 {\r
        ServerApplication::initialize(self);\r
 \r
-       // set working directory to program directory\r
-       int rval=chdir(config().getString("application.dir").c_str());\r
+       // set working directory - fall back on application.dir if working directory isn't set\r
+       if(m_workingdirectory=="")\r
+       {\r
+               m_workingdirectory=config().getString("application.dir");\r
+       }\r
+       int rval=chdir(m_workingdirectory.c_str());\r
 \r
        SetupDB();\r
        SetupDefaultOptions();\r
@@ -145,8 +157,7 @@ int FMSApp::main(const std::vector<std::string> &args)
 \r
        // running as a daemon would reset the working directory to / before calling main\r
        // so we need to set the working directory again\r
-       // set working directory to program directory\r
-       int rval=chdir(config().getString("application.dir").c_str());\r
+       int rval=chdir(m_workingdirectory.c_str());\r
 \r
        if(m_displayhelp)\r
        {\r