summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2011-01-25 10:53:42 -0500
committerEliot Horowitz <eliot@10gen.com>2011-01-25 10:53:42 -0500
commitd1e0c5a47a5564e05bb0a3d118214e19f9e44751 (patch)
tree9c720036726a3b56556b46be42998e5eafdb85ba
parent7c0c4d13e5c8e92d6450fc8ab540fbbe66303ea8 (diff)
downloadmongo-d1e0c5a47a5564e05bb0a3d118214e19f9e44751.tar.gz
fix --fork and relative --dbpath SERVER-2345
-rw-r--r--db/cmdline.cpp14
-rw-r--r--db/cmdline.h1
-rw-r--r--db/db.cpp13
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;