int main(int argc, char *argv[]) { enum user_action action; int c; cs_error_t err; cmap_handle_t handle; int i; size_t value_len; 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, "hgsdDtTbp:")) != -1) { switch (c) { case 'h': return print_help(); break; case 'b': show_binary++; break; case 'g': action = ACTION_GET; break; case 's': action = ACTION_SET; break; case 'd': action = ACTION_DELETE; break; case 'D': action = ACTION_DELETE_PREFIX; break; case 'p': settings_file = optarg; action = ACTION_LOAD; break; case 't': action = ACTION_TRACK; track_prefix = 0; break; case 'T': action = ACTION_TRACK; break; case '?': return (EXIT_FAILURE); break; default: action = ACTION_PRINT_PREFIX; break; } } if (argc == 1 || (argc == 2 && show_binary)) { action = ACTION_PRINT_ALL; } argc -= optind; argv += optind; if (argc == 0 && action != ACTION_LOAD && action != ACTION_PRINT_ALL) { fprintf(stderr, "Expected key after options\n"); return (EXIT_FAILURE); } no_retries = 0; while ((err = cmap_initialize(&handle)) == CS_ERR_TRY_AGAIN && no_retries++ < MAX_TRY_AGAIN) { sleep(1); } if (err != CS_OK) { fprintf (stderr, "Failed to initialize the cmap API. Error %s\n", cs_strerror(err)); exit (EXIT_FAILURE); } switch (action) { case ACTION_PRINT_ALL: print_iter(handle, NULL); break; case ACTION_PRINT_PREFIX: for (i = 0; i < argc; i++) { print_iter(handle, argv[i]); } break; case ACTION_GET: for (i = 0; i < argc; i++) { err = cmap_get(handle, argv[i], NULL, &value_len, &type); if (err == CS_OK) { print_key(handle, argv[i], value_len, NULL, type); } else { fprintf(stderr, "Can't get key %s. Error %s\n", argv[i], cs_strerror(err)); } } break; case ACTION_DELETE: for (i = 0; i < argc; i++) { err = cmap_delete(handle, argv[i]); if (err != CS_OK) { fprintf(stderr, "Can't delete key %s. Error %s\n", argv[i], cs_strerror(err)); } } break; case ACTION_DELETE_PREFIX: for (i = 0; i < argc; i++) { delete_with_prefix(handle, argv[i]); } 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); } track_changes(handle); break; case ACTION_SET: if (argc < 3) { fprintf(stderr, "At least 3 parameters are expected for set\n"); return (EXIT_FAILURE); } set_key(handle, argv[0], argv[1], argv[2]); break; } err = cmap_finalize(handle); if (err != CS_OK) { fprintf (stderr, "Failed to finalize the cmap API. Error %s\n", cs_strerror(err)); exit (EXIT_FAILURE); } return (0); }
int main (int argc, char *argv[]) { confdb_handle_t handle; cs_error_t result; int c; action = ACTION_READ; for (;;){ c = getopt (argc,argv,"habwncvdtp:"); if (c==-1) { break; } switch (c) { case 'v': debug++; break; case 'h': return print_help(); break; case 'a': action = ACTION_PRINT_ALL; break; case 'b': show_binary++; break; case 'p': return read_in_config_file (optarg); break; case 'c': action = ACTION_CREATE; break; case 'd': action = ACTION_DELETE; break; case 'w': action = ACTION_WRITE; break; case 'n': action = ACTION_CREATE_KEY; break; case 't': action = ACTION_TRACK; break; default : action = ACTION_READ; break; } } if (argc == 1) { action = ACTION_PRINT_DEFAULT; return print_all(); } else if (action == ACTION_PRINT_ALL) { return print_all(); } else if (optind >= argc) { fprintf(stderr, "Expected an object path after options\n"); exit(EXIT_FAILURE); } result = confdb_initialize (&handle, &callbacks); if (result != CS_OK) { fprintf (stderr, "Failed to initialize the objdb API. Error %d\n", result); exit (EXIT_FAILURE); } while (optind < argc) { switch (action) { case ACTION_READ: read_object(handle, argv[optind++]); break; case ACTION_WRITE: write_key(handle, argv[optind++]); break; case ACTION_CREATE: create_object(handle, argv[optind++]); break; case ACTION_CREATE_KEY: create_object_key(handle, argv[optind++]); break; case ACTION_DELETE: delete_object(handle, argv[optind++]); break; case ACTION_TRACK: track_object(handle, argv[optind++]); break; } } if (action == ACTION_TRACK) { listen_for_object_changes(handle); stop_tracking(handle); } result = confdb_finalize (handle); if (result != CS_OK) { fprintf (stderr, "Error finalizing objdb API. Error %d\n", result); exit(EXIT_FAILURE); } return 0; }