winlin

update the cwd

@@ -1339,11 +1339,6 @@ int SrsConfig::parse_options(int argc, char** argv) @@ -1339,11 +1339,6 @@ int SrsConfig::parse_options(int argc, char** argv)
1339 } 1339 }
1340 } 1340 }
1341 1341
1342 - // cwd  
1343 - char cwd[256];  
1344 - getcwd(cwd, sizeof(cwd));  
1345 - _cwd = cwd;  
1346 -  
1347 // config 1342 // config
1348 show_help = true; 1343 show_help = true;
1349 for (int i = 1; i < argc; i++) { 1344 for (int i = 1; i < argc; i++) {
@@ -1411,6 +1406,18 @@ int SrsConfig::parse_options(int argc, char** argv) @@ -1411,6 +1406,18 @@ int SrsConfig::parse_options(int argc, char** argv)
1411 return ret; 1406 return ret;
1412 } 1407 }
1413 1408
  1409 +int SrsConfig::initialize_cwd()
  1410 +{
  1411 + int ret = ERROR_SUCCESS;
  1412 +
  1413 + // cwd
  1414 + char cwd[256];
  1415 + getcwd(cwd, sizeof(cwd));
  1416 + _cwd = cwd;
  1417 +
  1418 + return ret;
  1419 +}
  1420 +
1414 string SrsConfig::config() 1421 string SrsConfig::config()
1415 { 1422 {
1416 return config_file; 1423 return config_file;
@@ -288,6 +288,11 @@ public: @@ -288,6 +288,11 @@ public:
288 */ 288 */
289 virtual int parse_options(int argc, char** argv); 289 virtual int parse_options(int argc, char** argv);
290 /** 290 /**
  291 + * initialize the cwd for server,
  292 + * because we may change the workdir.
  293 + */
  294 + virtual int initialize_cwd();
  295 + /**
291 * get the config file path. 296 * get the config file path.
292 */ 297 */
293 virtual std::string config(); 298 virtual std::string config();
@@ -34,6 +34,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -34,6 +34,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 #include <gperftools/profiler.h> 34 #include <gperftools/profiler.h>
35 #endif 35 #endif
36 36
  37 +using namespace std;
  38 +
37 #include <srs_kernel_error.hpp> 39 #include <srs_kernel_error.hpp>
38 #include <srs_app_server.hpp> 40 #include <srs_app_server.hpp>
39 #include <srs_app_config.hpp> 41 #include <srs_app_config.hpp>
@@ -283,11 +285,14 @@ int main(int argc, char** argv) @@ -283,11 +285,14 @@ int main(int argc, char** argv)
283 } 285 }
284 286
285 // change the work dir and set cwd. 287 // change the work dir and set cwd.
286 - std::string cwd = _srs_config->get_work_dir(); 288 + string cwd = _srs_config->get_work_dir();
287 if (!cwd.empty() && cwd != "./" && (ret = chdir(cwd.c_str())) != ERROR_SUCCESS) { 289 if (!cwd.empty() && cwd != "./" && (ret = chdir(cwd.c_str())) != ERROR_SUCCESS) {
288 srs_error("change cwd to %s failed. ret=%d", cwd.c_str(), ret); 290 srs_error("change cwd to %s failed. ret=%d", cwd.c_str(), ret);
289 return ret; 291 return ret;
290 } 292 }
  293 + if ((ret = _srs_config->initialize_cwd()) != ERROR_SUCCESS) {
  294 + return ret;
  295 + }
291 296
292 // config parsed, initialize log. 297 // config parsed, initialize log.
293 if ((ret = _srs_log->initialize()) != ERROR_SUCCESS) { 298 if ((ret = _srs_log->initialize()) != ERROR_SUCCESS) {