Re: [PATCH 4/7] cmap: add a load option for cts "-p"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Steven Dake <sdake@xxxxxxxxxx>

On 01/22/2012 05:37 PM, Angus Salkeld wrote:
> Signed-off-by: Angus Salkeld <asalkeld@xxxxxxxxxx>
> ---
>  tools/corosync-cmapctl.c |   86 +++++++++++++++++++++++++++++++++++++++++++--
>  1 files changed, 82 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/corosync-cmapctl.c b/tools/corosync-cmapctl.c
> index b371919..4e0fdf9 100644
> --- a/tools/corosync-cmapctl.c
> +++ b/tools/corosync-cmapctl.c
> @@ -34,6 +34,7 @@
>  
>  #include <config.h>
>  
> +#include <ctype.h>
>  #include <stdio.h>
>  #include <poll.h>
>  
> @@ -53,7 +54,8 @@ enum user_action {
>  	ACTION_DELETE,
>  	ACTION_PRINT_ALL,
>  	ACTION_PRINT_PREFIX,
> -	ACTION_TRACK
> +	ACTION_TRACK,
> +	ACTION_LOAD,
>  };
>  
>  struct name_to_type_item {
> @@ -93,13 +95,19 @@ static int convert_name_to_type(const char *name)
>  static int print_help(void)
>  {
>  	printf("\n");
> -	printf("usage:  corosync-cmapctl [-b] [-adghsTt] [params...]\n");
> +	printf("usage:  corosync-cmapctl [-b] [-adghsTtp] [params...]\n");
>  	printf("Set key:\n");
>  	printf("    corosync-cmapctl -s key_name type value\n");
>  	printf("\n");
>  	printf("    where type is one of ([i|u][8|16|32|64] | flt | dbl | str | bin)\n");
>  	printf("    for bin, value is file name (or - for stdin)\n");
>  	printf("\n");
> +	printf("Load settings from a file:\n");
> +	printf("    corosync-cmapctl -p filename\n");
> +	printf("\n");
> +	printf("    the format of the file is:\n");
> +	printf("    <key_name> <type> <value>\n");
> +	printf("\n");
>  	printf("Delete key:\n");
>  	printf("    corosync-cmapctl -d key_name...\n");
>  	printf("\n");
> @@ -621,6 +629,66 @@ static void set_key(cmap_handle_t handle, const char *key_name, const char *key_
>  	}
>  }
>  
> +
> +static void read_in_config_file(cmap_handle_t handle, char * filename)
> +{
> +	int ignore;
> +	int c;
> +	FILE* fh;
> +	char buf[1024];
> +	char * line;
> +	char *key_name;
> +	char *key_type_s;
> +	char *key_value_s;
> +
> +	if (access (filename, R_OK) != 0) {
> +		perror ("Couldn't access file.");
> +		return;
> +	}
> +
> +	fh = fopen(filename, "r");
> +	if (fh == NULL) {
> +		perror ("Couldn't open file.");
> +		return;
> +	}
> +
> +	while (fgets (buf, 1024, fh) != NULL) {
> +		/* find the first real character, if it is
> +		 * a '#' then ignore this line.
> +		 * else process.
> +		 * if no real characters then also ignore.
> +		 */
> +		ignore = 1;
> +		for (c = 0; c < 1024; c++) {
> +			if (isblank (buf[c])) {
> +				continue;
> +			}
> +
> +			if (buf[c] == '#' || buf[c] == '\n') {
> +				ignore = 1;
> +				break;
> +			}
> +			ignore = 0;
> +			line = &buf[c];
> +			break;
> +		}
> +		if (ignore == 1) {
> +			continue;
> +		}
> +
> +		/*
> +		 * should be:
> +		 * <key> <type> <value>
> +		 */
> +		key_name = strtok(line, " \n");
> +		key_type_s = strtok(NULL, " \n");
> +		key_value_s = strtok(NULL, " \n");
> +		set_key(handle, key_name, key_type_s, key_value_s);
> +	}
> +
> +	fclose (fh);
> +}
> +
>  int main(int argc, char *argv[])
>  {
>  	enum user_action action;
> @@ -632,11 +700,12 @@ int main(int argc, char *argv[])
>  	cmap_value_types_t type;
>  	int track_prefix;
>  	int no_retries;
> +	char * settings_file = NULL;
>  
>  	action = ACTION_PRINT_PREFIX;
>  	track_prefix = 1;
>  
> -	while ((c = getopt(argc, argv, "hgsdtTb")) != -1) {
> +	while ((c = getopt(argc, argv, "hgsdtTbp:")) != -1) {
>  		switch (c) {
>  		case 'h':
>  			return print_help();
> @@ -653,6 +722,10 @@ int main(int argc, char *argv[])
>  		case 'd':
>  			action = ACTION_DELETE;
>  			break;
> +		case 'p':
> +			settings_file = optarg;
> +			action = ACTION_LOAD;
> +			break;
>  		case 't':
>  			action = ACTION_TRACK;
>  			break;
> @@ -676,7 +749,9 @@ int main(int argc, char *argv[])
>  	argc -= optind;
>  	argv += optind;
>  
> -	if (argc == 0 && action != ACTION_PRINT_ALL) {
> +	if (argc == 0 &&
> +	    action != ACTION_LOAD &&
> +	    action != ACTION_PRINT_ALL) {
>  		fprintf(stderr, "Expected key after options\n");
>  		return (EXIT_FAILURE);
>  	}
> @@ -718,6 +793,9 @@ int main(int argc, char *argv[])
>  			}
>  		}
>  		break;
> +	case ACTION_LOAD:
> +		read_in_config_file(handle, settings_file);
> +		break;
>  	case ACTION_TRACK:
>  		for (i = 0; i < argc; i++) {
>  			add_track(handle, argv[i], track_prefix);

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux