void dirgetas (flux_t *h, const char *dir, const char *key, const char *type) { kvsdir_t *d; if (kvs_get_dir (h, &d, "%s", dir) < 0) log_err_exit ("kvs_get_dir %s", dir); if (type == NULL) { char *value; if (kvsdir_get (d, key, &value) < 0) log_err_exit ("kvsdir_get %s", key); printf ("%s\n", value); free (value); } else if (!strcmp (type, "int")) { int value; if (kvsdir_get_int (d, key, &value) < 0) log_err_exit ("kvsdir_get_int %s", key); printf ("%d\n", value); } else if (!strcmp (type, "int64")) { int64_t value; if (kvsdir_get_int64 (d, key, &value) < 0) log_err_exit ("kvsdir_get_int64 %s", key); printf ("%" PRIi64 "\n", value); } else if (!strcmp (type, "boolean")) { bool value; if (kvsdir_get_boolean (d, key, &value) < 0) log_err_exit ("kvsdir_get_int64 %s", key); printf ("%s\n", value ? "true" : "false"); } else if (!strcmp (type, "double")) { double value; if (kvsdir_get_double (d, key, &value) < 0) log_err_exit ("kvsdir_get_int64 %s", key); printf ("%f\n", value); } else if (!strcmp (type, "string")) { char *s; if (kvsdir_get_string (d, key, &s) < 0) log_err_exit ("kvsdir_get_string %s", key); printf ("%s\n", s); free (s); } else { log_msg_exit ("unknown type (use int/int64/boolean/double/string)"); } kvsdir_destroy (d); }
static int load_one (flux_conf_t cf, kvsdir_t *dir, const char *name) { char *key = kvsdir_key_at (dir, name); char *skey = key + strlen (kvs_conf_root) + 1; char *val = NULL; int rc = -1; assert (strlen (kvs_conf_root) < strlen (key)); if (kvsdir_get_string (dir, name, &val) == 0) { /* ignore if !string */ if (flux_conf_put (cf, skey, val) < 0) goto done; } rc = 0; done: if (val) free (val); free (key); return rc; }