From 3659eec9d1dbbd24fdd46f095ad91804a025322c Mon Sep 17 00:00:00 2001
From: winlin <winlin@vip.126.com>
Date: Fri, 23 Sep 2016 15:37:51 +0800
Subject: [PATCH] update the cwd

---
 trunk/src/app/srs_app_config.cpp   | 17 ++++++++++++-----
 trunk/src/app/srs_app_config.hpp   |  5 +++++
 trunk/src/main/srs_main_server.cpp |  7 ++++++-
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp
index 0c190540a..1894b5781 100644
--- a/trunk/src/app/srs_app_config.cpp
+++ b/trunk/src/app/srs_app_config.cpp
@@ -1339,11 +1339,6 @@ int SrsConfig::parse_options(int argc, char** argv)
         }
     }
     
-    // cwd
-    char cwd[256];
-    getcwd(cwd, sizeof(cwd));
-    _cwd = cwd;
-    
     // config
     show_help = true;
     for (int i = 1; i < argc; i++) {
@@ -1411,6 +1406,18 @@ int SrsConfig::parse_options(int argc, char** argv)
     return ret;
 }
 
+int SrsConfig::initialize_cwd()
+{
+    int ret = ERROR_SUCCESS;
+    
+    // cwd
+    char cwd[256];
+    getcwd(cwd, sizeof(cwd));
+    _cwd = cwd;
+    
+    return ret;
+}
+
 string SrsConfig::config()
 {
     return config_file;
diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp
index 0f8ac1217..7fae47fea 100644
--- a/trunk/src/app/srs_app_config.hpp
+++ b/trunk/src/app/srs_app_config.hpp
@@ -287,6 +287,11 @@ public:
     * parse the cli, the main(argc,argv) function.
     */
     virtual int parse_options(int argc, char** argv);
+    /**
+     * initialize the cwd for server,
+     * because we may change the workdir.
+     */
+    virtual int initialize_cwd();
     /**
     * get the config file path.
     */
diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp
index 21a10077e..551d76298 100644
--- a/trunk/src/main/srs_main_server.cpp
+++ b/trunk/src/main/srs_main_server.cpp
@@ -34,6 +34,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     #include <gperftools/profiler.h>
 #endif
 
+using namespace std;
+
 #include <srs_kernel_error.hpp>
 #include <srs_app_server.hpp>
 #include <srs_app_config.hpp>
@@ -283,11 +285,14 @@ int main(int argc, char** argv)
     }
     
     // change the work dir and set cwd.
-    std::string cwd = _srs_config->get_work_dir();
+    string cwd = _srs_config->get_work_dir();
     if (!cwd.empty() && cwd != "./" && (ret = chdir(cwd.c_str())) != ERROR_SUCCESS) {
         srs_error("change cwd to %s failed. ret=%d", cwd.c_str(), ret);
         return ret;
     }
+    if ((ret = _srs_config->initialize_cwd()) != ERROR_SUCCESS) {
+        return ret;
+    }
     
     // config parsed, initialize log.
     if ((ret = _srs_log->initialize()) != ERROR_SUCCESS) {