void cmd_mkdir (flux_t h, int argc, char **argv) { int i; if (argc == 0) msg_exit ("mkdir: specify one or more directories"); for (i = 0; i < argc; i++) { if (kvs_mkdir (h, argv[i]) < 0) err_exit ("%s", argv[i]); } if (kvs_commit (h) < 0) err_exit ("kvs_commit"); }
kz_t *kz_open (flux_t *h, const char *name, int flags) { kz_t *kz = xzmalloc (sizeof (*kz)); kz->flags = flags; kz->name = xstrdup (name); if ((kz->stream = strchr (kz->name, '.'))) kz->stream++; else kz->stream = kz->name; kz->h = h; if ((flags & KZ_FLAGS_WRITE)) { if (key_exists (h, name)) { if (!(flags & KZ_FLAGS_TRUNC)) { errno = EEXIST; goto error; } else if (kvs_unlink (h, name) < 0) goto error; } if (kvs_mkdir (h, name) < 0) /* N.B. does not catch EEXIST */ goto error; if (!(flags & KZ_FLAGS_NOCOMMIT_OPEN)) { if (kvs_commit (h) < 0) goto error; } } else if ((flags & KZ_FLAGS_READ)) { if (!(flags & KZ_FLAGS_NOEXIST)) { if (kvs_get_dir (h, &kz->dir, "%s", name) < 0) goto error; } } return kz; error: kz_destroy (kz); return NULL; }