/* * pocli_do_process -- process input commands and return value */ static int pocli_do_process(struct pocli *pcli) { enum pocli_ret ret = (enum pocli_ret)pocli_process(pcli); if (ret == POCLI_RET_QUIT || ret == POCLI_RET_OK) return 0; else return 1; }
int main(int argc, char *argv[]) { const char *fname = NULL; FILE *input = stdin; if (argc < 2 || argc > 4) { printf("usage: %s [-s <script>] <file>\n", argv[0]); return 1; } int is_script = strcmp(argv[1], "-s") == 0; if (is_script) { if (argc != 4) { if (argc == 2) { printf("usage: %s -s <script> <file>\n", argv[0]); return 1; } else if (argc == 3) { printf("usage: %s -s <script> <file> " "or %s <file>\n", argv[0], argv[2]); return 1; } } fname = argv[3]; input = fopen(argv[2], "r"); if (!input) { perror(argv[2]); return 1; } } else { if (argc != 2) { printf("usage: %s <file>\n", argv[0]); return 1; } fname = argv[1]; } struct pocli *pcli = pocli_alloc(input, fname, pocli_commands, POCLI_NCOMMANDS, POCLI_INBUF_LEN); if (!pcli) { perror("pocli_alloc"); return 1; } int ret = pocli_process(pcli); pocli_free(pcli); fclose(input); return ret; }
/* * pocli_pmemobj_tx_begin -- pmemobj_tx_begin() command */ static enum pocli_ret pocli_pmemobj_tx_begin(struct pocli_ctx *ctx, struct pocli_args *args) { enum pocli_ret ret = POCLI_RET_OK; int r; switch (args->argc) { case 1: { r = pmemobj_tx_begin(ctx->pop, NULL, TX_PARAM_NONE); if (r != POCLI_RET_OK) return pocli_err(ctx, POCLI_ERR_ARGS, "pmemobj_tx_begin() failed"); pocli_printf(ctx, "%s: %d\n", args->argv[0], r); } break; case 2: { if (strcmp(args->argv[1], "jmp") != 0) return POCLI_ERR_ARGS; jmp_buf jmp; if (setjmp(jmp)) { const char *command = ctx->tx_aborted ? "pmemobj_tx_abort" : "pmemobj_tx_end"; pocli_printf(ctx, "%s: %d\n", command, pmemobj_tx_errno()); return POCLI_RET_OK; } else { r = pmemobj_tx_begin(ctx->pop, jmp, TX_PARAM_NONE); if (r != POCLI_RET_OK) return pocli_err(ctx, POCLI_ERR_ARGS, "pmemobj_tx_begin() failed"); } pocli_printf(ctx, "%s(jmp): %d\n", args->argv[0], r); ret = (enum pocli_ret)pocli_process(ctx->pocli); if (ret) return ret; } break; default: return POCLI_ERR_ARGS; } return ret; }