static int nstr;
static int pending;
static int echo;
+static int last_status;
cynagora_key_t key;
cynagora_value_t value;
rc = get_csup(ac, av, &uc, "#");
if (rc == 0) {
memset(&lr, 0, sizeof lr);
- rc = cynagora_get(cynagora, &key, listcb, &lr);
+ last_status = rc = cynagora_get(cynagora, &key, listcb, &lr);
if (rc < 0)
fprintf(stderr, "error %s\n", strerror(-rc));
else {
rc = get_csupve(ac, av, &uc, "*");
if (rc == 0)
- rc = cynagora_enter(cynagora);
+ last_status = rc = cynagora_enter(cynagora);
if (rc == 0) {
- rc = cynagora_set(cynagora, &key, &value);
+ last_status = rc = cynagora_set(cynagora, &key, &value);
cynagora_leave(cynagora, !rc);
}
if (rc < 0)
rc = get_csup(ac, av, &uc, "#");
if (rc == 0)
- rc = cynagora_enter(cynagora);
+ last_status = rc = cynagora_enter(cynagora);
if (rc == 0) {
- rc = cynagora_drop(cynagora, &key);
+ last_status = rc = cynagora_drop(cynagora, &key);
cynagora_leave(cynagora, !rc);
}
if (rc < 0)
rc = get_csup(ac, av, &uc, NULL);
if (rc == 0) {
- rc = f(cynagora, &key, 0);
+ last_status = rc = f(cynagora, &key, 0);
if (rc > 0)
fprintf(stdout, "allowed\n");
else if (rc == 0)
rc = get_csup(ac, av, &uc, NULL);
if (rc == 0) {
- rc = cynagora_cache_check(cynagora, &key);
+ last_status = rc = cynagora_cache_check(cynagora, &key);
if (rc > 0)
fprintf(stdout, "allowed\n");
else if (rc == 0)
rc = get_csup(ac, av, &uc, NULL);
if (rc == 0) {
pending++;
- rc = cynagora_async_check(cynagora, &key, 0, simple, check_cb, NULL);
+ last_status = rc = cynagora_async_check(cynagora, &key, 0, simple, check_cb, NULL);
if (rc < 0) {
fprintf(stderr, "error %s\n", strerror(-rc));
pending--;
return uc;
}
}
- rc = cynagora_log(cynagora, on, off);
+ last_status = rc = cynagora_log(cynagora, on, off);
if (rc < 0)
fprintf(stderr, "error %s\n", strerror(-rc));
else
return 0;
}
-void do_all(int ac, char **av)
+void do_all(int ac, char **av, int quit)
{
int rc;
fprintf(stdout, "\n");
}
while(ac) {
+ last_status = 0;
rc = do_any(ac, av);
- if (rc <= 0)
+ if (quit && (rc <= 0 || last_status < 0))
exit(1);
ac -= rc;
av += rc;
}
+
}
int async_ctl(void *closure, int op, int fd, uint32_t events)
}
if (optind < ac) {
- do_all(ac - optind, av + optind);
+ do_all(ac - optind, av + optind, 1);
return 0;
}
str[nstr = 0] = strtok(buffer, " \t");
while(str[nstr])
str[++nstr] = strtok(NULL, " \t");
- do_all(nstr, str);
+ do_all(nstr, str, 0);
bufill -= (size_t)(p - buffer);
if (!bufill)
break;