diff options
author | Eliot Horowitz <eliot@10gen.com> | 2011-01-25 10:53:42 -0500 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2011-01-25 10:53:42 -0500 |
commit | d1e0c5a47a5564e05bb0a3d118214e19f9e44751 (patch) | |
tree | 9c720036726a3b56556b46be42998e5eafdb85ba | |
parent | 7c0c4d13e5c8e92d6450fc8ab540fbbe66303ea8 (diff) | |
download | mongo-d1e0c5a47a5564e05bb0a3d118214e19f9e44751.tar.gz |
fix --fork and relative --dbpath SERVER-2345
-rw-r--r-- | db/cmdline.cpp | 14 | ||||
-rw-r--r-- | db/cmdline.h | 1 | ||||
-rw-r--r-- | db/db.cpp | 13 |
3 files changed, 23 insertions, 5 deletions
diff --git a/db/cmdline.cpp b/db/cmdline.cpp index 13a877a4403..a6e2749b5f7 100644 --- a/db/cmdline.cpp +++ b/db/cmdline.cpp @@ -90,7 +90,17 @@ namespace mongo { size_t i = cmdLine.binaryName.rfind( '/' ); if ( i != string::npos ) cmdLine.binaryName = cmdLine.binaryName.substr( i + 1 ); + + // setup cwd + char buffer[1024]; +#ifdef _WIN32 + _getcwd( buffer , 1000 ); +#else + getcwd( buffer , 1000 ); +#endif + cmdLine.cwd = buffer; } + /* don't allow guessing - creates ambiguities when some options are * prefixes of others. allow long disguises and don't allow guessing @@ -171,9 +181,7 @@ namespace mongo { logpath = params["logpath"].as<string>(); assert( logpath.size() ); if ( logpath[0] != '/' ) { - char temp[256]; - assert( getcwd( temp , 256 ) ); - logpath = (string)temp + "/" + logpath; + logpath = cmdLine.cwd + "/" + logpath; } FILE * test = fopen( logpath.c_str() , "a" ); if ( ! test ) { diff --git a/db/cmdline.h b/db/cmdline.h index a7f2c0bfde3..4c8c7c4512b 100644 --- a/db/cmdline.h +++ b/db/cmdline.h @@ -39,6 +39,7 @@ namespace mongo { } string binaryName; // mongod or mongos + string cwd; // cwd of when process started int port; // --port enum { diff --git a/db/db.cpp b/db/db.cpp index 7d2d7045a91..dadca211213 100644 --- a/db/db.cpp +++ b/db/db.cpp @@ -761,10 +761,19 @@ int main(int argc, char* argv[]) { printGitVersion(); return 0; } - if ( params.count( "dbpath" ) ) + if ( params.count( "dbpath" ) ) { dbpath = params["dbpath"].as<string>(); - else + if ( params.count( "fork" ) && dbpath[0] != '/' ) { + // we need to change dbpath if we fork since we change + // cwd to "/" + // fork only exists on *nix + // so '/' is safe + dbpath = cmdLine.cwd + "/" + dbpath; + } + } + else { dbpath = "/data/db/"; + } if ( params.count("directoryperdb")) { directoryperdb = true; |