Annotation of libaitcfg/src/cfgprog.c, revision 1.2
1.2 ! misho 1: #include "global.h"
! 2: #include "aitcfg.h"
! 3:
! 4:
! 5: cfg_root_t cfg;
! 6: char cfgname[MAXPATHLEN], outname[MAXPATHLEN], section[STRSIZ];
! 7: FILE *out;
! 8:
! 9:
! 10: static void
! 11: Usage(const char *prog)
! 12: {
! 13: printf( " -= CFGPROG =- ELWIX config tool ver.%s\n"
! 14: "(C)`25 by Michael Pounov <misho@elwix.org>\n"
! 15: "==========================================\n"
! 16: " Syntax: %s [-options] <config> [attribute] [value]\n\n"
! 17: "\t-s <section>\tScope of attribute\n"
! 18: "\t-o <file>\tWrite updated config to file\n"
! 19: "\t-w\t\tSet and write attribute\n"
! 20: "\t-v\t\tVerbose, more -v more verbosity\n"
! 21: "\t-h\t\tHelp, this help screen!\n",
! 22: PACKAGE_VERSION, prog);
! 23: }
! 24:
! 25: int
! 26: Get(const char *prog, int argc, char **argv)
! 27: {
! 28: const char *str;
! 29: int i, ret = 0;
! 30: array_t *sec;
! 31: struct tagCfg *av;
! 32:
! 33: EVERBS(1) printf("Get value for %s in scope %s from config %s\n",
! 34: *argv ? *argv : "*", section, prog);
! 35:
! 36: if (*argv) {
! 37: str = cfg_getAttribute(&cfg, section, *argv);
! 38: if (str)
! 39: printf("%s=%s\n", *argv, str);
! 40: else
! 41: ret = 3;
! 42: } else {
! 43: sec = cfg_getSection(&cfg, section);
! 44: if (sec) {
! 45: for (i = 0; i < array_Size(sec) &&
! 46: (av = array(sec, i, struct tagCfg*)); i++) {
! 47: if (AIT_GET_STR(&av->cfg_attr))
! 48: printf("%s=%s\n",
! 49: AIT_GET_STR(&av->cfg_attr),
! 50: AIT_GET_STR(&av->cfg_val));
! 51: }
! 52: array_Destroy(&sec);
! 53: } else
! 54: ret = 3;
! 55: }
! 56:
! 57: return ret;
! 58: }
! 59:
! 60: int
! 61: Set(const char *prog, int argc, char **argv)
! 62: {
! 63: if (argc < 2) {
! 64: printf("Error:: missing attribute and value arguments!\n");
! 65: return 1;
! 66: }
! 67:
! 68: EVERBS(1) printf("Set value %s for %s in scope %s from config %s\n",
! 69: argv[1], argv[0], section, prog);
! 70:
! 71: if (!*argv[1]) {
! 72: if (cfg_unsetAttribute(&cfg, section, argv[0]) < 1)
! 73: return 3;
! 74: } else if (cfg_setAttribute(&cfg, section, argv[0], argv[1]) < 1)
! 75: return 3;
! 76:
! 77: if (*outname) {
! 78: out = fopen(outname, "w");
! 79: if (!out) {
! 80: printf("Error:: can't create file %s #%d - %s\n",
! 81: outname, errno, strerror(errno));
! 82: return 2;
! 83: }
! 84: }
! 85:
! 86: if (cfgWriteConfigRaw(out, &cfg, 42)) {
! 87: printf("Error:: can't write config #%d - %s\n",
! 88: cfg_GetErrno(), cfg_GetError());
! 89: if (*outname)
! 90: fclose(out);
! 91: return 2;
! 92: }
! 93:
! 94: if (*outname)
! 95: fclose(out);
! 96: return 0;
! 97: }
! 98:
! 99:
! 100: int
! 101: main(int argc, char **argv)
! 102: {
! 103: int ch, ret = 0;
! 104: int (*run)(const char*, int, char**) = Get;
! 105: const char *prog;
! 106: char *str;
! 107:
! 108: out = stdout;
! 109:
! 110: if (!argv || !*argv)
! 111: prog = "cfgprog";
! 112: else if (!(prog = strrchr(*argv, '/')))
! 113: prog = *argv;
! 114: else
! 115: prog++;
! 116:
! 117: while ((ch = getopt(argc, argv, "hvws:o:")) != -1)
! 118: switch (ch) {
! 119: case 'o':
! 120: strlcpy(outname, optarg, sizeof outname);
! 121: break;
! 122: case 'w':
! 123: run = Set;
! 124: break;
! 125: case 's':
! 126: strlcpy(section, optarg, sizeof section);
! 127: break;
! 128: case 'v':
! 129: e_incVerbose;
! 130: break;
! 131: default:
! 132: Usage(prog);
! 133: return 1;
! 134: }
! 135: argc -= optind;
! 136: argv += optind;
! 137:
! 138: if (!strcmp(prog, "cfg_set"))
! 139: run = Set;
! 140: else if (!strcmp(prog, "cfg_get"))
! 141: run = Get;
! 142:
! 143: if (!argc) {
! 144: printf("Error:: missing config name!\n");
! 145: Usage(prog);
! 146: return 1;
! 147: } else {
! 148: strlcpy(cfgname, *argv, sizeof cfgname);
! 149: argc--;
! 150: argv++;
! 151: }
! 152:
! 153: if (argc && *argv && (str = strchr(*argv, '/'))) {
! 154: *str++ = 0;
! 155: strlcpy(section, *argv, sizeof section);
! 156: *argv = str;
! 157: }
! 158:
! 159: if (cfgLoadConfig(cfgname, &cfg)) {
! 160: printf("Error:: load config %s #%d - %s\n",
! 161: cfgname, cfg_GetErrno(), cfg_GetError());
! 162: return 2;
! 163: }
! 164:
! 165: ret = run(prog, argc, argv);
! 166:
! 167: cfgUnloadConfig(&cfg);
! 168: return ret;
! 169: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>