- if (pcd->fd >= 0)
- close(pcd->fd);
- free(pcd->user);
- free(pcd->config_file);
- free(pcd->key_file);
- free(pcd);
-}
-
-int client_parse_config(int argc, char *argv[],
- struct private_client_data **pcd_ptr)
-{
- char *home = para_homedir();
- struct stat statbuf;
- int ret;
- struct private_client_data *pcd =
- para_calloc(sizeof(struct private_client_data));
-
- pcd->fd = -1;
- client_cmdline_parser(argc, argv, &pcd->conf);
- ret = - E_CLIENT_SYNTAX;
- if (!pcd->conf.inputs_num)
- goto out;
- pcd->user = pcd->conf.user_given?
- para_strdup(pcd->conf.user_arg) : para_logname();
-
- pcd->key_file = pcd->conf.key_file_given?
- para_strdup(pcd->conf.key_file_arg) :
- make_message("%s/.paraslash/key.%s", home, pcd->user);
-
- pcd->config_file = pcd->conf.config_file_given?
- para_strdup(pcd->conf.config_file_arg) :
- make_message("%s/.paraslash/client.conf", home);
- ret = stat(pcd->config_file, &statbuf);
- if (ret && pcd->conf.config_file_given) {
- ret = -E_NO_CONFIG;
- goto out;
- }
- if (!ret)
- client_cmdline_parser_configfile(pcd->config_file,
- &pcd->conf, 0, 0, 0);
- ret = 1;
- *pcd_ptr = pcd;
- PARA_INFO_LOG("loglevel: %d\n", pcd->conf.loglevel_arg);
- PARA_INFO_LOG("config_file: %s\n", pcd->config_file);
- PARA_INFO_LOG("key_file: %s\n", pcd->key_file);
- PARA_NOTICE_LOG("connecting %s:%d\n", pcd->conf.hostname_arg,
- pcd->conf.server_port_arg);
-out:
- free(home);
- if (ret < 0)
- client_close(pcd);
- return ret;