Also fix up the helper we use to have fewer sharp edges.
Signed-off-by: Sage Weil <sage@inktank.com>
}
// args for fuse
- vec_to_argv(args, argc, argv);
+ const char **newargv;
+ int newargc;
+ vec_to_argv(argv[0], args, &newargc, &newargv);
// FUSE will chdir("/"); be ready.
g_ceph_context->_conf->set_val("chdir", "/");
}
cerr << "ceph-fuse[" << getpid() << "]: starting fuse" << std::endl;
- r = ceph_fuse_ll_main(client, argc, argv, fd[1]);
+ r = ceph_fuse_ll_main(client, newargc, newargv, fd[1]);
cerr << "ceph-fuse[" << getpid() << "]: fuse finished with error " << r << std::endl;
client->unmount();
delete messenger;
g_ceph_context->put();
+ free(newargv);
//cout << "child done" << std::endl;
return r;
pick_addresses(g_ceph_context);
- vec_to_argv(args, argc, argv);
-
// get monmap
MonClient mc(g_ceph_context);
if (mc.build_initial_monmap() < 0)
if (ch)
fuse_unmount(mountpoint, ch);
fuse_opt_free_args(&args);
+ free(newargv);
//cout << "ceph_fuse_ll_main done, err=" << err << std::endl;
return ret;
}
args.push_back(argv[i]);
}
-void vec_to_argv(std::vector<const char*>& args,
- int& argc, const char **&argv)
+void vec_to_argv(const char *argv0, std::vector<const char*>& args,
+ int *argc, const char ***argv)
{
- const char *myname = "asdf";
- if (argc && argv)
- myname = argv[0];
- argv = (const char**)malloc(sizeof(char*) * argc);
+ *argv = (const char**)malloc(sizeof(char*) * (args.size() + 1));
if (!argv)
throw bad_alloc();
- argc = 1;
- argv[0] = myname;
+ *argc = 1;
+ (*argv)[0] = argv0;
for (unsigned i=0; i<args.size(); i++)
- argv[argc++] = args[i];
+ (*argv)[(*argc)++] = args[i];
}
bool parse_ip_port_vec(const char *s, vector<entity_addr_t>& vec)
extern void env_to_vec(std::vector<const char*>& args, const char *name=NULL);
extern void argv_to_vec(int argc, const char **argv,
std::vector<const char*>& args);
-extern void vec_to_argv(std::vector<const char*>& args,
- int& argc, const char **&argv);
+extern void vec_to_argv(const char *argv0, std::vector<const char*>& args,
+ int *argc, const char ***argv);
extern bool parse_ip_port_vec(const char *s, std::vector<entity_addr_t>& vec);
bool ceph_argparse_double_dash(std::vector<const char*> &args,
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
- vec_to_argv(args, argc, argv);
-
dout(0) << "i am mon " << args[0] << dendl;
// get monmap