From 359a10b3382a5ea30840a1dc9754960e1de04f83 Mon Sep 17 00:00:00 2001 From: Lon Hohberger <lhh@redhat.com> Date: Wed, 9 Feb 2011 14:48:53 -0500 Subject: [PATCH] ccs: Allow ccs_tool to use alternate base ports Resolves: rhbz#656427 Signed-off-by: Lon Hohberger <lhh@redhat.com> --- ccs/ccs_tool/ccs_tool.c | 2 +- ccs/ccs_tool/update.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++- ccs/ccs_tool/update.h | 1 + 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/ccs/ccs_tool/ccs_tool.c b/ccs/ccs_tool/ccs_tool.c index dc54146..5fcd667 100644 --- a/ccs/ccs_tool/ccs_tool.c +++ b/ccs/ccs_tool/ccs_tool.c @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) "Try 'ccs_tool help' for help.\n"); exit(EXIT_FAILURE); } - if(update(argv[optind+1])){ + if(update2(argc-1, argv+1)){ fprintf(stderr, "\nFailed to update config file.\n"); exit(EXIT_FAILURE); } diff --git a/ccs/ccs_tool/update.c b/ccs/ccs_tool/update.c index 1defdaf..3af779b 100644 --- a/ccs/ccs_tool/update.c +++ b/ccs/ccs_tool/update.c @@ -113,11 +113,70 @@ fail: } -int update(char *location) +static int parse_args(int argc, char **argv, char **loc) +{ + int c, error, ret; + + while ((c = getopt(argc, argv, "P:")) != EOF) { + switch(c) { + case 'P': + if(optarg[1] != ':'){ + fprintf(stderr, "Bad argument to '-P' option.\n" + "Try '-h' for help.\n"); + error = -EINVAL; + goto fail; + } + switch(optarg[0]){ + case 'b': /* backend port number */ + /* Not used by ccs_tool */ + break; + case 'c': /* cluster base port number */ + ret = atoi(optarg+2); + if(ret < 1024){ + fprintf(stderr, "Bad cluster base port number.\n"); + error = -EINVAL; + goto fail; + } + cluster_base_port = ret; + printf("Set cluster base port to %d\n", cluster_base_port); + break; + case 'f': /* frontend port number */ + /* Not used by ccs_tool */ + break; + } + break; + default: + goto fail; + } + } + + *loc = argv[optind]; + + return 0; +fail: + return error; +} + +int update(const char *location) +{ + char *args[3]; + char **argv; + + args[0] = "update"; + args[1] = location; + args[2] = NULL; + + argv = args; + + return update2(2, argv); +} + +int update2(int argc, char **argv) { int error = 0; int i, fd; int cluster_fd = -1; + char *location = NULL; char true_location[256]; xmlDocPtr doc = NULL; xmlChar *mem_doc; @@ -132,6 +191,9 @@ int update(char *location) struct timeval tv; + if (parse_args(argc, argv, &location)) + return -1; + if (location[0] != '/') { memset(true_location, 0, 256); if (!getcwd(true_location, 256)) { diff --git a/ccs/ccs_tool/update.h b/ccs/ccs_tool/update.h index 19fd7cb..f706963 100644 --- a/ccs/ccs_tool/update.h +++ b/ccs/ccs_tool/update.h @@ -14,5 +14,6 @@ #define __UPDATE_DOT_H__ int update(char *location); +int update2(int argc, char **argv); #endif /* __UPDATE_DOT_H__ */ -- 1.7.2.3